From 4f4bd93baf87ec45d0039c5856d029dba4fb87c4 Mon Sep 17 00:00:00 2001 From: Akif9748 Date: Mon, 21 Mar 2022 23:53:22 +0300 Subject: [PATCH] Routes are fixed --- README.md | 2 - api/index.js | 81 ------------------------------- apitest.py | 4 +- index.js | 18 +++---- middlewares/login.js | 10 ++++ reset.js | 1 + routes/admin.js | 39 +++++++++++++++ routes/api/index.js | 91 +++++++++++++++++++++++++++++++++++ routes/get/admin.js | 11 ----- routes/get/createThread.js | 10 ---- routes/get/login.js | 1 - routes/get/message.js | 13 ----- routes/get/register.js | 1 - routes/get/threads.js | 25 ---------- routes/get/userEdit.js | 9 ---- routes/get/users.js | 33 ------------- routes/{get => }/index.js | 20 ++++++-- routes/{post => }/login.js | 25 +++++++--- routes/message.js | 71 +++++++++++++++++++++++++++ routes/post/admin.js | 22 --------- routes/post/createThread.js | 14 ------ routes/post/messageDelete.js | 19 -------- routes/post/react.js | 23 --------- routes/post/threads.js | 20 -------- routes/post/userDelete.js | 18 ------- routes/{post => }/register.js | 32 +++++++----- routes/threads.js | 65 +++++++++++++++++++++++++ routes/users.js | 55 +++++++++++++++++++++ views/admin.ejs | 2 +- views/index.ejs | 2 +- views/openThread.ejs | 2 +- views/thread.ejs | 17 ++++--- views/threads.ejs | 2 +- views/user.ejs | 4 +- views/userEdit.ejs | 2 +- views/users.ejs | 2 +- 36 files changed, 414 insertions(+), 352 deletions(-) delete mode 100644 api/index.js create mode 100644 middlewares/login.js create mode 100644 routes/admin.js create mode 100644 routes/api/index.js delete mode 100644 routes/get/admin.js delete mode 100644 routes/get/createThread.js delete mode 100644 routes/get/login.js delete mode 100644 routes/get/message.js delete mode 100644 routes/get/register.js delete mode 100644 routes/get/threads.js delete mode 100644 routes/get/userEdit.js delete mode 100644 routes/get/users.js rename routes/{get => }/index.js (71%) rename routes/{post => }/login.js (63%) create mode 100644 routes/message.js delete mode 100644 routes/post/admin.js delete mode 100644 routes/post/createThread.js delete mode 100644 routes/post/messageDelete.js delete mode 100644 routes/post/react.js delete mode 100644 routes/post/threads.js delete mode 100644 routes/post/userDelete.js rename routes/{post => }/register.js (51%) create mode 100644 routes/threads.js create mode 100644 routes/users.js diff --git a/README.md b/README.md index 3dadd9d..015cabe 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,7 @@ And, you can learn informations about API in `APIDOCS.md`. * [Camroku](https://github.com/Camroku) - Made stylesheets ## To Do (Backend, bug fixes) : -- Better method for params in URL. Router, or etc. - Middleware. For logged in etc. -- Page template. (Not onlt module.exports) config, file, etc. - Better error codes, example 400 for bad request - Ratelimit - Database change. (To MongoDB) diff --git a/api/index.js b/api/index.js deleted file mode 100644 index 7ede19d..0000000 --- a/api/index.js +++ /dev/null @@ -1,81 +0,0 @@ -const { User, Message, Thread } = require("../classes"); -const db = require("quick.db"); - - -class ApiResponse { - constructor(status, result) { - this.status = status; - this.result = result; - } -} - -const { request, response } = require("express"); - -/** - * For intellisense - * @param {request} req - * @param {response} res - */ - -module.exports = (req, res) => { - - const error = (status, error) => - res.status(status).json(new ApiResponse(403, { error })) - - - /** - * AUTH TYPE: - - headers: - { - username: "Username for client", - password: "Password of selected username for client" - } - - */ - - const { username = null, password = null } = req.headers; - - if (!username || !password) - return error(403, "Headers are missing") - - const user = db.get("secret." + username); - - if (!user) - return error(403, "We have not got any user has got this name") - - if (user.key !== password) - return error(403, 'Incorrect Password!') - - - - /** - * REQUEST TYPE: - * GET /api/action/id - * - * @example message action: - * GET /api/message/0 - * - */ - const { action } = req.params; - - switch (action) { - case "message": - const { id = null } = req.params; - if (!id) return error(403, "Missing id in query") - const message = new Message().getId(id); - - if (!message || message.deleted) return error(403, "We have not got any message declared as this id."); - - res.status(200).json(new ApiResponse(200, message)); - - break; - - default: - return error(403, "Missing/undefined param: action"); - } - - - -} - diff --git a/apitest.py b/apitest.py index f42c984..b94cb90 100644 --- a/apitest.py +++ b/apitest.py @@ -39,12 +39,12 @@ example_response = { "messages": [0], # ids of messages "time": 1647178870047, "deleted": False, - "id": "0" + "id": 0 }, # Other informations about message "deleted": False, "edited": False, "react": {}, - "id": "1" + "id": 1 } } diff --git a/index.js b/index.js index e96ced2..62a3e6d 100644 --- a/index.js +++ b/index.js @@ -8,7 +8,7 @@ const error = require("./errors/error.js") const app = express(); app.use(session({ secret: 'secret', resave: true, saveUninitialized: true })); -app.use(express.static(path.join(__dirname, "public"))); +app.use(express.static("public")); app.use(bodyParser.urlencoded({ extended: true })); app.use(express.json()); @@ -18,18 +18,16 @@ app.set("view engine", "ejs"); //Temp: app.get("/", (req, res) => res.redirect("/index")); -/** - * API: - */ -app.get("/api/:action/:id", require("./api")); -for (const type of fs.readdirSync("./routes")) - for (const file of fs.readdirSync("./routes/" + type)) - app[type](`/${file.replace(".js", "")}*`, require(`./routes/${type}/${file}`)) -app.get('*', (req, res) => error(res, 404, "We have not got this page.")); -app.post('*', (req, res) => error(res, 404, "We have not got this page.")); + + +for (const file of fs.readdirSync("./routes/")) + app.use(`/${file.replace(".js", "")}`, require(`./routes/${file}`)) + + +app.all("*", (req, res) => error(res, 404, "We have not got this page.")) const port = process.env.PORT || 3000; app.listen(port, () => console.log("SERVER ON PORT:", port)); diff --git a/middlewares/login.js b/middlewares/login.js new file mode 100644 index 0000000..f5f2168 --- /dev/null +++ b/middlewares/login.js @@ -0,0 +1,10 @@ +const { Router } = require("express"); + +const app = Router(); + +app.get("/", (req, res, next) => { + if (!req.session.loggedin) return res.redirect('/login'); + next(); +}); + +module.exports = app; \ No newline at end of file diff --git a/reset.js b/reset.js index 21406ba..7e42978 100644 --- a/reset.js +++ b/reset.js @@ -3,4 +3,5 @@ set("users", new Array()); set("threads", new Array()); set("secret", new Object()); set("messages", new Array()); +set("timeouts", new Array()); diff --git a/routes/admin.js b/routes/admin.js new file mode 100644 index 0000000..b2d5e61 --- /dev/null +++ b/routes/admin.js @@ -0,0 +1,39 @@ +const { User } = require("../classes"); + +const { Router } = require("express") +const error = require("../errors/error") + +const app = Router(); + +app.get("/", (req, res) => { + if (!req.session.loggedin) return res.redirect('/login'); + const user = new User().getId(req.session.userid) + + if (!user.admin) return error(res, 404, "You have not got permissions for view to this page."); + + res.render("admin", { user, user2: false }) +} +); + +app.post("/", (req, res) => { + if (!req.session.loggedin) return res.redirect('/login'); + + const user = new User().getId(req.session.userid) + + if (!user.admin) return error(res, 404, "You have not got permissions for view to this page."); + const user2 = new User().getId(req.body.userid) + + if (!user2) + return error(res, 404, "We have not got this user in all of the forum. Vesselam."); + + else { + user2.admin = true; + user2.write() + } + + res.render("admin", { user, user2 }) + + +}); + +module.exports = app; \ No newline at end of file diff --git a/routes/api/index.js b/routes/api/index.js new file mode 100644 index 0000000..586ecc1 --- /dev/null +++ b/routes/api/index.js @@ -0,0 +1,91 @@ +const { User, Message, Thread } = require("../../classes"); +const db = require("quick.db"); + + +const { Router } = require("express") + +const app = Router(); + + +class ApiResponse { + constructor(status, result) { + this.status = status; + this.result = result; + } +} + +const { request, response } = require("express"); + +/** + * For intellisense + * @param {request} req + * @param {response} res + */ + + +app.get("/:action/:id", (req, res) => { + + const error = (status, error) => + res.status(status).json(new ApiResponse(status, { error })) + + + /** + * AUTH TYPE: + + headers: + { + username: "Username for client", + password: "Password of selected username for client" + } + + */ + + const { username = null, password = null } = req.headers; + + if (!username || !password) + return error(401, "Headers are missing") + + const user = db.get("secret." + username); + + if (!user) + return error(401, "We have not got any user has got this name") + + if (user.key !== password) + return error(401, 'Incorrect Password!') + + + + /** + * REQUEST TYPE: + * GET /api/action/id + * + * @example message action: + * GET /api/message/0 + * + */ + const { action } = req.params; + + if (action === "message") { + + const { id = null } = req.params; + if (!id) return error(400, "Missing id in query") + const message = new Message().getId(id); + + if (!message || message.deleted) return error(404, "We have not got any message declared as this id."); + + res.status(200).json(new ApiResponse(200, message)); + } else if (action === "user") { + const { id = null } = req.params; + if (!id) return error(400, "Missing id in query") + const member = new User().getId(id); + if (!member || member.deleted) return error(404, "We have not got any user declared as this id."); + + res.status(200).json(new ApiResponse(200, member)); + } + else + return error(400, "Missing/undefined param in action section: " + action); +}); + + + +module.exports = app; \ No newline at end of file diff --git a/routes/get/admin.js b/routes/get/admin.js deleted file mode 100644 index af93712..0000000 --- a/routes/get/admin.js +++ /dev/null @@ -1,11 +0,0 @@ -const { User } = require("../../classes/index"); -const error = require("../../errors/error.js"); - -module.exports = (req, res) => { - if (!req.session.loggedin) return res.redirect('/login'); - const user = new User().getId(req.session.userid) - - if (!user.admin) return error(res, 404, "You have not got permissions for view to this page."); - - res.render("admin", { user, user2: false }) -} diff --git a/routes/get/createThread.js b/routes/get/createThread.js deleted file mode 100644 index c2ebc85..0000000 --- a/routes/get/createThread.js +++ /dev/null @@ -1,10 +0,0 @@ -const { User } = require("../../classes/index"); - - -module.exports = (req, res) => { - - if (!req.session.loggedin) return res.redirect('/login'); - const user = new User().getId(req.session.userid) - res.render("openThread", { user }) - -} \ No newline at end of file diff --git a/routes/get/login.js b/routes/get/login.js deleted file mode 100644 index 0a1ddec..0000000 --- a/routes/get/login.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = (req,res)=> res.render("login"); \ No newline at end of file diff --git a/routes/get/message.js b/routes/get/message.js deleted file mode 100644 index 36c2ca2..0000000 --- a/routes/get/message.js +++ /dev/null @@ -1,13 +0,0 @@ -const { Message } = require("../../classes/index"); -const error = require("../../errors/error.js"); - -module.exports = (req, res) => { - if (!req.session.loggedin) return res.redirect('/login'); - const id = req.url.slice(9); - const message = new Message().getId(id) - - if (!message || message.deleted) return error(res, 404, "We have not got any message declared as this id."); - - res.redirect("/threads/" + message.thread.id); - -} \ No newline at end of file diff --git a/routes/get/register.js b/routes/get/register.js deleted file mode 100644 index 4d1b2ba..0000000 --- a/routes/get/register.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = (req,res)=> res.render("register"); \ No newline at end of file diff --git a/routes/get/threads.js b/routes/get/threads.js deleted file mode 100644 index 9750451..0000000 --- a/routes/get/threads.js +++ /dev/null @@ -1,25 +0,0 @@ -const { Thread, Message, User } = require("../../classes/index"); -const db = require("quick.db"); - -const error = require("../../errors/error.js"); - -module.exports = (req, res) => { - if (!req.session.loggedin) return res.redirect('/login'); - - const id = req.url.slice(9); - const user = new User().getId(req.session.userid); - - if (!id) { - const threads = db.get("threads").slice(0, 10) - const links = threads.map(thread => "/threads/" + threads.indexOf(thread)) - - return res.render("threads", { threads, links, user}) - } - const thread = new Thread().getId(id); - - if (thread) { - const messages = thread.messages.filter(id => !new Message().getId(id).deleted).map(id => new Message().getId(id)); - res.render("thread", { thread, messages, user }) - } else - error(res, 404, "We have not got this thread."); -} \ No newline at end of file diff --git a/routes/get/userEdit.js b/routes/get/userEdit.js deleted file mode 100644 index 300238a..0000000 --- a/routes/get/userEdit.js +++ /dev/null @@ -1,9 +0,0 @@ -const { User } = require("../../classes/index"); -module.exports = (req, res) => { - - if (!req.session.loggedin) return res.redirect('/login'); - - const user = new User().getId(req.session.userid); - res.render("userEdit", { user }) - -} \ No newline at end of file diff --git a/routes/get/users.js b/routes/get/users.js deleted file mode 100644 index e966456..0000000 --- a/routes/get/users.js +++ /dev/null @@ -1,33 +0,0 @@ -const { User } = require("../../classes/index"); -const db = require("quick.db"); -const error = require("../../errors/error.js") - -module.exports = (req, res) => { - if (!req.session.loggedin) return res.redirect('/login'); - const user = new User().getId(req.session.userid) - - const id = req.url.slice(7); - - if (!id) { - - const users = db.get("users").slice(0); - - const links = users.filter(user=> !user.deleted).map(user => "/users/" + user.id) - return res.render("users", { users, links, user }) - - } - - const member = new User().getId(id); - - - if (member && (user.admin || !member.deleted)) { - const message = db.get("messages").filter(message => message.author.id === Number(id)).length - const thread = db.get("threads").filter(thread => thread.author.id === Number(id)).length - - const counts = { message, thread } - res.render("user", { user, member, counts }) - } - else - error(res, 404, "We have not got this user."); - -} \ No newline at end of file diff --git a/routes/get/index.js b/routes/index.js similarity index 71% rename from routes/get/index.js rename to routes/index.js index 882b3ca..eac51b3 100644 --- a/routes/get/index.js +++ b/routes/index.js @@ -1,12 +1,26 @@ -const { User } = require("../../classes/index"); +const { User } = require("../classes"); const { get } = require("quick.db") -module.exports = (req, res) => { + +const { Router } = require("express"); +const app = Router(); + +app.get("/", (req, res) => { + if (!req.session.loggedin) return res.redirect('/login'); const mem = process.memoryUsage().heapUsed / Math.pow(2, 20); + const users = get("users").length; + const threads = get("threads").length; + const messages = get("messages").length; + const user = new User().getId(req.session.userid) + res.render("index", { mem, user, users, threads, messages }) -} \ No newline at end of file + +}) + + +module.exports = app; \ No newline at end of file diff --git a/routes/post/login.js b/routes/login.js similarity index 63% rename from routes/post/login.js rename to routes/login.js index 5a1fa04..dc4cce9 100644 --- a/routes/post/login.js +++ b/routes/login.js @@ -1,13 +1,19 @@ -const db = require("quick.db"); -const error = require("../../errors/error.js") -const { User } = require("../../classes/index"); +const { User } = require("../classes"); +const db = require("quick.db") -module.exports = (req, res) => { +const { Router } = require("express") +const error = require("../errors/error") + +const app = Router(); + +app.get("/", (req, res) => res.render("login")); + +app.post("/", (req, res) => { req.session.loggedin = false; req.session.username = null; req.session.userid = null; - let username = req.body.username; - let password = req.body.password; + const { username = null, password = null } = req.body; + if (username && password) { const user = db.get("secret." + username) if (user) { @@ -24,8 +30,11 @@ module.exports = (req, res) => { } else - error(res, 403, "You forgot entering some values") + error(res, 400, "You forgot entering some values") -} \ No newline at end of file +}) + + +module.exports = app; \ No newline at end of file diff --git a/routes/message.js b/routes/message.js new file mode 100644 index 0000000..1e47cb4 --- /dev/null +++ b/routes/message.js @@ -0,0 +1,71 @@ +const { Thread, Message, User } = require("../classes"); +const error = require("../errors/error") + +const { Router } = require("express"); + +const app = Router(); + +app.get("/:id", (req, res) => { + if (!req.session.loggedin) return res.redirect('/login'); + const message = new Message().getId(req.params.id); + + if (!message || message.deleted) return error(res, 404, "We have not got any message declared as this id."); + + res.redirect("/threads/" + message.thread.id); + +}); + +app.post("/", (req, res) => { + if (!req.session.loggedin) return res.redirect('/login'); + + + const thread = new Thread().getId(req.body.threadID); + + if (thread) { + const message = new Message(req.body.content, new User().getId(req.session.userid), thread).takeId().write(); + thread.push(message.id) + thread.write(); + res.redirect('/threads/' + req.body.threadID); + + } + else + error(res, 404, "We have not got this thread."); + +}); + + +app.post("/delete/:id", (req, res) => { + if (!req.session.loggedin) return res.redirect('/login'); + + const message = new Message().getId(req.params.id) + if (!message || message.deleted) return error(res, 404, "We have not got any message declared as this id."); + const user = new User().getId(req.session.userid); + if (user.id != message.author.id && !user.admin) + return error(res, 403, "You have not got permission for this."); + message.deleted = true; + message.write(); + + + res.status(200).redirect("/threads/" + message.thread.id); + +}) +app.post("/react/:id", (req, res) => { + if (!req.session.loggedin) return res.redirect('/login'); + + const { id = null } = req.params; + const info = req.body; + const message = new Message().getId(id); + if (message) { + if (!(req.session.userid in message.react)) + message.react[req.session.userid] = "like" in info; + else + delete message.react[req.session.userid]; + + message.write(); + res.redirect("/threads/" + message.thread.id); + } else error(res, 404, "We have not got this Message for reacting."); + + +}); + +module.exports = app; \ No newline at end of file diff --git a/routes/post/admin.js b/routes/post/admin.js deleted file mode 100644 index cdd394a..0000000 --- a/routes/post/admin.js +++ /dev/null @@ -1,22 +0,0 @@ -const { User } = require("../../classes/index"); -const error = require("../../errors/error.js"); - -module.exports = (req, res) => { - if (!req.session.loggedin) return res.redirect('/login'); - - const user = new User().getId(req.session.userid) - - if (!user.admin) return error(res, 404, "You have not got permissions for view to this page."); - const user2 = new User().getId(req.body.userid) - - if (!user2) return error(res, 404, "We have not got this user in all of forum. Vesselam."); - - else { - user2.admin = true; - user2.write() - } - - res.render("admin", { user, user2 }) - - -} diff --git a/routes/post/createThread.js b/routes/post/createThread.js deleted file mode 100644 index 4485cfa..0000000 --- a/routes/post/createThread.js +++ /dev/null @@ -1,14 +0,0 @@ -const { User, Thread, Message } = require("../../classes/index"); - - -module.exports = (req, res) => { - if (!req.session.loggedin) return res.redirect('/login'); - const user = new User().getId(req.session.userid); - const info = req.body; - const thread = new Thread(info.title, user).takeId().write(); - thread.push(new Message(info.content, user, thread).takeId().write().id) - thread.write(); - - res.redirect('/threads/' + thread.id); - -} \ No newline at end of file diff --git a/routes/post/messageDelete.js b/routes/post/messageDelete.js deleted file mode 100644 index 41ee5fc..0000000 --- a/routes/post/messageDelete.js +++ /dev/null @@ -1,19 +0,0 @@ -const { User, Message } = require("../../classes/index"); -const error = require("../../errors/error.js"); - -module.exports = (req, res) => { - if (!req.session.loggedin) return res.redirect('/login'); - const id = req.url.slice(9 + 6) - const message = new Message().getId(id) - - if (!message || message.deleted) return error(res, 404, "We have not got any message declared as this id."); - const user = new User().getId(req.session.userid); - if (user.id != message.author.id && !user.admin) - return error(res, 403, "You have not got permission for this."); - message.deleted = true; - message.write(); - - - res.redirect("/threads/" + message.thread.id); - -} \ No newline at end of file diff --git a/routes/post/react.js b/routes/post/react.js deleted file mode 100644 index 9a852ff..0000000 --- a/routes/post/react.js +++ /dev/null @@ -1,23 +0,0 @@ -const error = require("../../errors/error.js") -const { Message, User } = require("../../classes/index"); - -module.exports = (req, res) => { - if (!req.session.loggedin) return res.redirect('/login'); - const id = req.url.slice(7); - if (!id) error(res, 404, "Id of request is missing"); - - const info = req.body; - const user = new User().getId(req.session.userid); - const message = new Message().getId(id); - if (message) { - if (!(user.id in message.react)) - message.react[user.id] = "like" in info; - else - delete message.react[user.id]; - - message.write(); - res.redirect("/threads/" + message.thread.id); - } else error(res, 404, "We have not got this Message for reacting."); - - -} \ No newline at end of file diff --git a/routes/post/threads.js b/routes/post/threads.js deleted file mode 100644 index 8e4d09d..0000000 --- a/routes/post/threads.js +++ /dev/null @@ -1,20 +0,0 @@ -const { Thread, Message, User } = require("../../classes/index"); -const error = require("../../errors/error.js") - -module.exports = (req, res) => { - if (!req.session.loggedin) return res.redirect('/login'); - - const id = req.url.slice(9); - const thread = new Thread().getId(id); - - if (thread) { - const message = new Message(req.body.content, new User().getId(req.session.userid), thread).takeId().write(); - thread.push(message.id) - thread.write(); - res.redirect('/threads/' + id); - - } - else - error(res, 404, "We have not got this thread."); - -} \ No newline at end of file diff --git a/routes/post/userDelete.js b/routes/post/userDelete.js deleted file mode 100644 index 7d0e0cf..0000000 --- a/routes/post/userDelete.js +++ /dev/null @@ -1,18 +0,0 @@ -const { User, Message } = require("../../classes/index"); -const error = require("../../errors/error.js"); - -module.exports = (req, res) => { - if (!req.session.loggedin) return res.redirect('/login'); - const user = new User().getId(req.session.userid); - if (!user.admin) - return error(res, 403, "You have not got permission for this."); - - const id = req.url.slice(9 + 3) - const member = new User().getId(id); - if (!member || member.deleted) return error(res, 404, "We have not got any user declared as this id."); - - member.deleted = true; - member.write(); - - res.redirect("/admin"); -} \ No newline at end of file diff --git a/routes/post/register.js b/routes/register.js similarity index 51% rename from routes/post/register.js rename to routes/register.js index c5d0ac2..2a23017 100644 --- a/routes/post/register.js +++ b/routes/register.js @@ -1,23 +1,28 @@ -const db = require("quick.db"); -const error = require("../../errors/error.js") -const { User } = require("../../classes/index"); +const { User } = require("../classes"); +const db = require("quick.db") -module.exports = (req, res) => { +const { Router } = require("express") +const error = require("../errors/error") + +const app = Router(); + +app.get("/", (req, res) => res.render("register")); + +app.post("/", (req, res) => { req.session.loggedin = false; req.session.username = null; req.session.userid = null; - let username = req.body.username; - let password = req.body.password; + const { username = null, password = null } = req.body; + if (username && password) { const user = db.get("secret." + username) - if (user) { + if (user) error(res, 404, `We have got an user named ${username}!`) - } else { - let avatar = req.body.avatar || "/images/guest.png" - const user2 = new User(req.body.username, avatar).takeId() + else { + const user2 = new User(req.body.username, req.body.avatar).takeId() db.set("secret." + username, { id: user2.id, key: password }) req.session.loggedin = true; req.session.username = username; @@ -27,7 +32,10 @@ module.exports = (req, res) => { } } else - error(res, 404, "You forgot entering some values") + error(res, 400, "You forgot entering some values") -} \ No newline at end of file +}) + + +module.exports = app; \ No newline at end of file diff --git a/routes/threads.js b/routes/threads.js new file mode 100644 index 0000000..a91047a --- /dev/null +++ b/routes/threads.js @@ -0,0 +1,65 @@ +const { Thread, Message, User } = require("../classes"); +const error = require("../errors/error") +const db = require("quick.db") + +const { Router } = require("express"); + +const app = Router(); + +app.get("/open*", (req, res) => { + + if (!req.session.loggedin) return res.redirect('/login'); + const user = new User().getId(req.session.userid) + res.render("openThread", { user }) + +}); + +app.get("/", (req, res) => { + if (!req.session.loggedin) return res.redirect('/login'); + + const user = new User().getId(req.session.userid); + + const threads = db.get("threads").slice(0, 10) + const links = threads.map(thread => "/threads/" + threads.indexOf(thread)) + + return res.render("threads", { threads, links, user }) + +}); + + +app.get("/:id", (req, res) => { + if (!req.session.loggedin) return res.redirect('/login'); + + const { id } = req.params; + + const thread = new Thread().getId(id); + + if (thread) { + const user = new User().getId(req.session.userid); + const messages = thread.messages.filter(id => !new Message().getId(id).deleted).map(id => new Message().getId(id)); + res.render("thread", { thread, messages, user }) + } else + error(res, 404, "We have not got this thread."); +}); + +app.post("/", (req, res) => { + if (!req.session.loggedin) return res.redirect('/login'); + + const user = new User().getId(req.session.userid); + + const { title = null, content = null } = req.body; + + if (!title || !content) return error(res, 400, "Title and content is missing"); + + const thread = new Thread(title, user).takeId().write(); + + thread + .push(new Message(content, user, thread).takeId().write().id) + .write(); + + res.redirect('/threads/' + thread.id); + +}) + + +module.exports = app; \ No newline at end of file diff --git a/routes/users.js b/routes/users.js new file mode 100644 index 0000000..43f86a6 --- /dev/null +++ b/routes/users.js @@ -0,0 +1,55 @@ +const { User } = require("../classes"); +const db = require("quick.db") + +const { Router } = require("express") +const error = require("../errors/error") + +const app = Router(); + +app.get("/", (req, res) => { + if (!req.session.loggedin) return res.redirect('/login'); + const user = new User().getId(req.session.userid) + + + const users = db.get("users").slice(0); + + const links = users.filter(user => !user.deleted).map(user => "/users/" + user.id); + return res.render("users", { users, links, user }) + + + +}); +app.get("/:id", (req, res) => { + if (!req.session.loggedin) return res.redirect('/login'); + const user = new User().getId(req.session.userid) + const { id = null } = req.params; + const member = new User().getId(req.params.id); + + + if (member && (user.admin || !member.deleted)) { + const message = db.get("messages").filter(message => message.author.id === Number(id)).length + const thread = db.get("threads").filter(thread => thread.author.id === Number(id)).length + + const counts = { message, thread } + res.render("user", { user, member, counts }) + } + else error(res, 404, "We have not got this user."); + +}); +app.post("/delete/:id", (req, res) => { + if (!req.session.loggedin) return res.redirect('/login'); + const user = new User().getId(req.session.userid); + if (!user.admin) + return error(res, 403, "You have not got permission for this."); + + const id = req.url.slice(9 + 3) + const member = new User().getId(id); + if (!member || member.deleted) return error(res, 404, "We have not got any user declared as this id."); + + member.deleted = true; + member.write(); + + res.redirect("/admin"); +}); + +module.exports = app; \ No newline at end of file diff --git a/views/admin.ejs b/views/admin.ejs index 673578e..955a9cd 100644 --- a/views/admin.ejs +++ b/views/admin.ejs @@ -19,7 +19,7 @@
- +

> <%= user.name %> alt=<%= user.name %>>

diff --git a/views/index.ejs b/views/index.ejs index f533c25..83b3cf2 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -25,7 +25,7 @@ - +

> <%= user.name %> alt=<%= user.name %>>

diff --git a/views/openThread.ejs b/views/openThread.ejs index 7718257..fcd26f9 100644 --- a/views/openThread.ejs +++ b/views/openThread.ejs @@ -29,7 +29,7 @@ -
+

Title:

diff --git a/views/thread.ejs b/views/thread.ejs index 4abca08..1591892 100644 --- a/views/thread.ejs +++ b/views/thread.ejs @@ -22,7 +22,7 @@ - +

> <%= user.name %> alt=<%= user.name %>>

@@ -50,12 +50,14 @@

<%= message.content %>

- - +
-
+ + +
+

<%= Object.values(message.react).filter(Boolean).length - Object.values(message.react).filter(x=>!x).length %> @@ -73,19 +75,20 @@
<% }); %> -
- + + +
- + \ No newline at end of file diff --git a/views/threads.ejs b/views/threads.ejs index 1e30234..4c48e99 100644 --- a/views/threads.ejs +++ b/views/threads.ejs @@ -20,7 +20,7 @@ - +

> <%= user.name %> alt=<%= user.name %>>

diff --git a/views/user.ejs b/views/user.ejs index 5890781..c432cdf 100644 --- a/views/user.ejs +++ b/views/user.ejs @@ -22,7 +22,7 @@ - +

> <%= user.name %> alt=<%= user.name %>>

@@ -70,7 +70,7 @@ -
+
<% }; %> diff --git a/views/userEdit.ejs b/views/userEdit.ejs index 7a6f395..5d87357 100644 --- a/views/userEdit.ejs +++ b/views/userEdit.ejs @@ -19,7 +19,7 @@ - +

> <%= user.name %> alt=<%= user.name %>>

diff --git a/views/users.ejs b/views/users.ejs index b3d7813..20c6448 100644 --- a/views/users.ejs +++ b/views/users.ejs @@ -19,7 +19,7 @@
- +

> <%= user.name %> alt=<%= user.name %>>