From 03d84a256404b1eb6a76dace9fa39c3c6b1ac7ac Mon Sep 17 00:00:00 2001 From: Akif9748 Date: Mon, 8 May 2023 17:16:12 +0300 Subject: [PATCH] rollback to v4.x, and mini fixes --- .eslintrc.json | 30 ++++++++++--------- README.md | 10 +++++-- config.json.example | 1 - index.js | 22 +++++++------- lib.js | 1 + models/User.js | 1 - public/css/themes/{white.css => default.css} | 0 routes/api/routes/users.js | 2 +- routes/register.js | 6 ++-- themes/default/index.js | 22 -------------- themes/index.js | 6 ---- {themes/default => views}/admin.ejs | 0 {themes/default => views}/avatar_upload.ejs | 0 {themes/default => views}/categories.ejs | 0 {themes/default => views}/config.ejs | 0 {themes/default => views}/create_category.ejs | 0 {themes/default => views}/create_thread.ejs | 0 {themes/default => views}/error.ejs | 0 {themes/default => views}/extra/footer.ejs | 0 {themes/default => views}/extra/meta.ejs | 5 +--- {themes/default => views}/extra/navbar.ejs | 0 {themes/default => views}/index.ejs | 0 {themes/default => views}/login.ejs | 0 {themes/default => views}/messages.ejs | 0 {themes/default => views}/register.ejs | 0 {themes/default => views}/search.ejs | 0 {themes/default => views}/setup.ejs | 0 {themes/default => views}/thread.ejs | 0 {themes/default => views}/threads.ejs | 0 {themes/default => views}/user.ejs | 0 {themes/default => views}/users.ejs | 0 31 files changed, 41 insertions(+), 65 deletions(-) rename public/css/themes/{white.css => default.css} (100%) delete mode 100644 themes/default/index.js delete mode 100644 themes/index.js rename {themes/default => views}/admin.ejs (100%) rename {themes/default => views}/avatar_upload.ejs (100%) rename {themes/default => views}/categories.ejs (100%) rename {themes/default => views}/config.ejs (100%) rename {themes/default => views}/create_category.ejs (100%) rename {themes/default => views}/create_thread.ejs (100%) rename {themes/default => views}/error.ejs (100%) rename {themes/default => views}/extra/footer.ejs (100%) rename {themes/default => views}/extra/meta.ejs (67%) rename {themes/default => views}/extra/navbar.ejs (100%) rename {themes/default => views}/index.ejs (100%) rename {themes/default => views}/login.ejs (100%) rename {themes/default => views}/messages.ejs (100%) rename {themes/default => views}/register.ejs (100%) rename {themes/default => views}/search.ejs (100%) rename {themes/default => views}/setup.ejs (100%) rename {themes/default => views}/thread.ejs (100%) rename {themes/default => views}/threads.ejs (100%) rename {themes/default => views}/user.ejs (100%) rename {themes/default => views}/users.ejs (100%) diff --git a/.eslintrc.json b/.eslintrc.json index 4cbf175..323bd1d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,25 +1,27 @@ { - // exclude public folder from linting - "ignorePatterns": ["public/"], - + "ignorePatterns": [ + "test.js" + ], "env": { "node": true, "commonjs": true, "es2021": true }, "extends": "eslint:recommended", - "overrides": [ - - ], "parserOptions": { "ecmaVersion": "latest" }, "rules": { - - "linebreak-style": [ - "error", - "windows" - ] - - } -} + "no-use-before-define": "error" + }, + "overrides": [ + { + "env": { + "browser": true + }, + "files": [ + "public/js/*" + ] + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md index 713654b..1c900d9 100644 --- a/README.md +++ b/README.md @@ -54,8 +54,15 @@ Akf-forum has got an API for AJAX (fetch), other clients etc. And, you can learn - Add a feature list to README.md - delete admin??? - change category name -- enchanted theme: not take all of the public! `"/css`, patch user support! - _id +- ADD gavatar support + +- routes/api/routes/users.js check, +themes/default/extra/footer.ejs check, +themes/default/extra/meta.ejs check +- "defaultThreadState" ??? better case + + ### front-end - better usermenu for user profile - old contents / titles add to forum interface @@ -65,7 +72,6 @@ Akf-forum has got an API for AJAX (fetch), other clients etc. And, you can learn - give admin button, not is admin ## Major Version History -- V5: Enchanted theme support - V4: Caching - V3: New Theme - V2: Backend fix, mongoose is fixed. Really big fix. diff --git a/config.json.example b/config.json.example index b419ed6..5bd2c3c 100644 --- a/config.json.example +++ b/config.json.example @@ -1,7 +1,6 @@ { "def_theme": { "name": "white", - "color": "black", "language": "en" }, "forum_name": "akf", diff --git a/index.js b/index.js index 5bb8d3f..bc80f87 100644 --- a/index.js +++ b/index.js @@ -22,8 +22,8 @@ app.ips = []; app.set("view engine", "ejs"); app.set("limits", limits); -app.use(express.static("public", { maxAge: 86400 * 1000 }), express.json(), express.urlencoded({ extended: true }), IP(), - SES({ secret: process.env.SECRET, store: MS.create({ clientPromise: DB, stringify: false }), resave: true, saveUninitialized: true }), +app.use(express.static("public"), express.json(), express.urlencoded({ extended: true }), IP(), + SES({ secret: process.env.SECRET, store: MS.create({ clientPromise: DB, stringify: false }), resave: false, saveUninitialized: false }), async (req, res, next) => { if (app.ips.includes(req.clientIp)) return res.status(403).send("You are banned from this forum."); @@ -31,14 +31,14 @@ app.use(express.static("public", { maxAge: 86400 * 1000 }), express.json(), expr lastSeen: Date.now(), $addToSet: { ips: req.clientIp } }) : null; - const theme = require(`./themes/${req.user?.theme?.name || def_theme.name}`); - res.reply = (page, data = {}, status = 200) => - theme.render(page, { user: req.user, ...data }, { - color: req.user?.theme?.color || def_theme.color, - lang: req.user?.theme?.language || def_theme.language, - forum_name, - description - }, res.status(status)); + + res.reply = (page, options = {}, status = 200) => res.status(status).render(page, { + user: req.user, + theme: req.user?.theme || def_theme, + lang: req.user?.theme?.language || def_theme.language, + forum_name, description, ...options + }); + res.error = (type, error) => res.reply("error", { type, error }, type); @@ -61,6 +61,6 @@ if (RLS.enabled) app.use(RL(RLS.windowMs, RLS.max)); for (const file of fs.readdirSync("./routes")) app.use("/" + file.replace(".js", ""), require(`./routes/${file}`)); -app.all("*", (req, res) => res.error(404, "We have not got this page.")); +app.all("*", (req, res) => res.error(404, "This page does not exist on this forum.")); app.listen(port, () => console.log(`${forum_name}-forum on port:`, port)); \ No newline at end of file diff --git a/lib.js b/lib.js index b57e8fa..6d4f7ad 100644 --- a/lib.js +++ b/lib.js @@ -11,6 +11,7 @@ module.exports = { handler: (req, res, next, opts) => !req.user?.admin ? res.error(opts.statusCode, "You are begin ratelimited") : next() }) }, + // eslint-disable-next-line no-useless-escape emailRegEx: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, diff --git a/models/User.js b/models/User.js index 38e3efb..84bb0d2 100644 --- a/models/User.js +++ b/models/User.js @@ -13,7 +13,6 @@ const schema = new mongoose.Schema({ admin: { type: Boolean, default: false }, theme: { name: { type: String, default: def_theme.name }, - color: { type: String, default: def_theme.color }, language: { type: String, default: def_theme.language } }, lastSeen: { type: Date, default: Date.now, select: false }, diff --git a/public/css/themes/white.css b/public/css/themes/default.css similarity index 100% rename from public/css/themes/white.css rename to public/css/themes/default.css diff --git a/routes/api/routes/users.js b/routes/api/routes/users.js index a68a7c3..820b5e8 100644 --- a/routes/api/routes/users.js +++ b/routes/api/routes/users.js @@ -37,7 +37,7 @@ app.patch("/:id", async (req, res) => { if (req.user.id !== member.id && !user.admin) return res.error(403, "You have not got permission for this."); if (!Object.keys(req.body).some(Boolean)) return res.error(400, "Missing member informations in request body."); - const { name, about, theme, admin, deleted, hideLastSeen } = req.body; + const { name, about, admin, deleted, hideLastSeen } = req.body; if ((admin?.length || "deleted" in req.body) && !req.user.admin) return res.error(403, "You have not got permission for edit 'admin' and 'deleted' information, or bad request."); const { names, desp } = req.app.get("limits"); diff --git a/routes/register.js b/routes/register.js index e098e71..7bfec70 100644 --- a/routes/register.js +++ b/routes/register.js @@ -14,8 +14,8 @@ app.post("/", RL(24 * 60 * 60_000, 5), async (req, res) => { if (!name || !password) return res.error(400, "You forgot entering some values"); const { names } = req.app.get("limits"); - if (name.length < 3 || names > 25) return res.error(400, "Name must be between 3 - 25 characters"); - if (password.length < 3 || names > 25) return res.error(400, "Password must be between 3 - 25 characters"); + if (name.length < 3 || name.length > names) return res.error(400, "Name must be between 3 - 25 characters"); + if (password.length < 3 || password.length > names) return res.error(400, "Password must be between 3 - 25 characters"); if (await UserModel.exists({ name })) return res.error(400, `We have got an user named ${name}!`) const user = new UserModel({ name }); @@ -43,7 +43,7 @@ app.post("/", RL(24 * 60 * 60_000, 5), async (req, res) => {

Verify your email in ${forum_name}-forum

Click here to verify your email ` - }, (err, info) => { + }, (err) => { if (err) return res.error(500, "Failed to send email"); }); diff --git a/themes/default/index.js b/themes/default/index.js deleted file mode 100644 index 127e2ac..0000000 --- a/themes/default/index.js +++ /dev/null @@ -1,22 +0,0 @@ -const path = require('path'); -module.exports = { - name: "default", - colors: ["black", "white"], - languages: ["en"], - getFilePath(page) { - return path.resolve(__dirname, page) ;// path of the file for ejs rendering - }, - /** - * Renderer function for theme - * @param {String} file a page of forum - * @param {{ user: Object }} data informations about page - * @param {{ color: String, forum_name:String, description:String }} options Extra options - * @param {Object} render request object - */ - render(file, data, options, req) { - // const { color, language, forum_name, description } = options; // General informations, meta, forum name, user language and color - // const { user } = data; // specific informations about page, user (req.user || null), and more - - return req.render(this.getFilePath(file), { ...options, ...data }); - } -} \ No newline at end of file diff --git a/themes/index.js b/themes/index.js deleted file mode 100644 index ffb00bb..0000000 --- a/themes/index.js +++ /dev/null @@ -1,6 +0,0 @@ -const fs = require("fs"); - -for (const theme of fs.readdirSync("./themes")) { - if (theme === "index.js") continue; - module.exports[theme] = require(`./${theme}`); -} \ No newline at end of file diff --git a/themes/default/admin.ejs b/views/admin.ejs similarity index 100% rename from themes/default/admin.ejs rename to views/admin.ejs diff --git a/themes/default/avatar_upload.ejs b/views/avatar_upload.ejs similarity index 100% rename from themes/default/avatar_upload.ejs rename to views/avatar_upload.ejs diff --git a/themes/default/categories.ejs b/views/categories.ejs similarity index 100% rename from themes/default/categories.ejs rename to views/categories.ejs diff --git a/themes/default/config.ejs b/views/config.ejs similarity index 100% rename from themes/default/config.ejs rename to views/config.ejs diff --git a/themes/default/create_category.ejs b/views/create_category.ejs similarity index 100% rename from themes/default/create_category.ejs rename to views/create_category.ejs diff --git a/themes/default/create_thread.ejs b/views/create_thread.ejs similarity index 100% rename from themes/default/create_thread.ejs rename to views/create_thread.ejs diff --git a/themes/default/error.ejs b/views/error.ejs similarity index 100% rename from themes/default/error.ejs rename to views/error.ejs diff --git a/themes/default/extra/footer.ejs b/views/extra/footer.ejs similarity index 100% rename from themes/default/extra/footer.ejs rename to views/extra/footer.ejs diff --git a/themes/default/extra/meta.ejs b/views/extra/meta.ejs similarity index 67% rename from themes/default/extra/meta.ejs rename to views/extra/meta.ejs index 1fd8893..eae50be 100644 --- a/themes/default/extra/meta.ejs +++ b/views/extra/meta.ejs @@ -4,9 +4,6 @@ <%= title || forum_name +"-forum" %> - + - <% if (color === "black") { %> - - <% } %> \ No newline at end of file diff --git a/themes/default/extra/navbar.ejs b/views/extra/navbar.ejs similarity index 100% rename from themes/default/extra/navbar.ejs rename to views/extra/navbar.ejs diff --git a/themes/default/index.ejs b/views/index.ejs similarity index 100% rename from themes/default/index.ejs rename to views/index.ejs diff --git a/themes/default/login.ejs b/views/login.ejs similarity index 100% rename from themes/default/login.ejs rename to views/login.ejs diff --git a/themes/default/messages.ejs b/views/messages.ejs similarity index 100% rename from themes/default/messages.ejs rename to views/messages.ejs diff --git a/themes/default/register.ejs b/views/register.ejs similarity index 100% rename from themes/default/register.ejs rename to views/register.ejs diff --git a/themes/default/search.ejs b/views/search.ejs similarity index 100% rename from themes/default/search.ejs rename to views/search.ejs diff --git a/themes/default/setup.ejs b/views/setup.ejs similarity index 100% rename from themes/default/setup.ejs rename to views/setup.ejs diff --git a/themes/default/thread.ejs b/views/thread.ejs similarity index 100% rename from themes/default/thread.ejs rename to views/thread.ejs diff --git a/themes/default/threads.ejs b/views/threads.ejs similarity index 100% rename from themes/default/threads.ejs rename to views/threads.ejs diff --git a/themes/default/user.ejs b/views/user.ejs similarity index 100% rename from themes/default/user.ejs rename to views/user.ejs diff --git a/themes/default/users.ejs b/views/users.ejs similarity index 100% rename from themes/default/users.ejs rename to views/users.ejs