From 259ba11f0fe52c5d30431b880e778ba08051336a Mon Sep 17 00:00:00 2001 From: Akif9748 Date: Sun, 13 Mar 2022 17:12:09 +0300 Subject: [PATCH] Added user delete --- README.md | 2 ++ classes/thread.js | 4 +-- classes/user.js | 33 ++++++++++++++----- routes/get/users.js | 6 ++-- routes/post/login.js | 3 +- routes/post/userDelete.js | 18 +++++++++++ views/admin.ejs | 1 + views/user.ejs | 67 +++++++++++++++++++++++---------------- 8 files changed, 92 insertions(+), 42 deletions(-) create mode 100644 routes/post/userDelete.js diff --git a/README.md b/README.md index e7a57fd..8fb5526 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,8 @@ A forum script written in Node.js. - [x] Logout - [x] Admin - [x] Message count + - [x] Delete User + - [ ] Singature & About me - [ ] Messages - [x] Send message - [x] Delete message diff --git a/classes/thread.js b/classes/thread.js index e2d907a..6acff78 100644 --- a/classes/thread.js +++ b/classes/thread.js @@ -17,7 +17,7 @@ module.exports = class Thread { } getId(id = this.id) { - const thread = db.get("threads."+id); + const thread = db.get("threads").find(t => t.id == id); if (!thread) return null; this.id = id; const { title, author, messages = [], time = new Date().getTime(), deleted = false } = thread; @@ -27,7 +27,7 @@ module.exports = class Thread { this.time = time; this.deleted = deleted; - return this + return this; } takeId(){ diff --git a/classes/user.js b/classes/user.js index 763f1b0..46e90f6 100644 --- a/classes/user.js +++ b/classes/user.js @@ -3,26 +3,45 @@ const db = require("quick.db") module.exports = class User { - constructor(name = "guest", avatar = "/images/guest.png", time = new Date().getTime(), admin= false) { + constructor(name = "guest", avatar = "/images/guest.png", time = new Date().getTime(), admin = false, deleted = false) { this.name = name; this.avatar = avatar; this.time = time; this.admin = admin; + this.deleted = deleted; + } getId(id = this.id) { - const user = db.get("users." + id); + const user = db.get("users").find(u => u.id == id); if (!user) return null; this.id = Number(id); - const { name = "guest", avatar = "/images/guest.png", time = new Date().getTime(), admin = false } = user; + const { name = "guest", avatar = "/images/guest.png", time = new Date().getTime(), admin = false, deleted = false } = user; this.name = name; this.avatar = avatar; - this.time = time; + this.time = time; this.admin = admin; - return this + this.deleted = deleted; + return this ; + } - takeId() { + + getName(name1 = this.name) { + + const user = db.get("users").find(u => u.name == name1); + if (!user) return null; + this.id = Number(user.id); + const { name = "guest", avatar = "/images/guest.png", time = new Date().getTime(), admin = false, deleted = false } = user; + this.name = name; + this.avatar = avatar; + this.time = time; + this.admin = admin; + this.deleted = deleted; + return this ; + + } + takeId() { let id = db.get("users"); this.id = id ? id.length : 0; return this @@ -34,8 +53,6 @@ module.exports = class User { } getLink(id = this.id) { return "/users/" + id; - - } } \ No newline at end of file diff --git a/routes/get/users.js b/routes/get/users.js index 565820f..e966456 100644 --- a/routes/get/users.js +++ b/routes/get/users.js @@ -10,9 +10,9 @@ module.exports = (req, res) => { if (!id) { - const users = db.get("users").slice(0, 10); + const users = db.get("users").slice(0); - const links = users.map(user => "/users/" + user.id) + const links = users.filter(user=> !user.deleted).map(user => "/users/" + user.id) return res.render("users", { users, links, user }) } @@ -20,7 +20,7 @@ module.exports = (req, res) => { const member = new User().getId(id); - if (member) { + 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 diff --git a/routes/post/login.js b/routes/post/login.js index e5e947e..08ad768 100644 --- a/routes/post/login.js +++ b/routes/post/login.js @@ -1,5 +1,6 @@ const db = require("quick.db"); const error = require("../../errors/error.js") +const { User, Message } = require("../../classes/index"); module.exports = (req, res) => { req.session.loggedin = false; @@ -12,7 +13,7 @@ module.exports = (req, res) => { if (user) { // Authenticate the user if (user.key !== password) return error(res, 404, 'Incorrect Password!') - + if (new User().getName(username).deleted) return error(res, 404, 'Incorrect Username and/or Password!') req.session.loggedin = true; req.session.username = username; req.session.userid = user.id; diff --git a/routes/post/userDelete.js b/routes/post/userDelete.js new file mode 100644 index 0000000..7d0e0cf --- /dev/null +++ b/routes/post/userDelete.js @@ -0,0 +1,18 @@ +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/views/admin.ejs b/views/admin.ejs index efb57a6..799c953 100644 --- a/views/admin.ejs +++ b/views/admin.ejs @@ -36,6 +36,7 @@
+