mirror of
https://github.com/Akif9748/akf-forum.git
synced 2024-11-22 20:10:40 +03:00
Better index.js
This commit is contained in:
parent
ba0d4cbb8d
commit
a816aab7eb
5 changed files with 22 additions and 21 deletions
|
@ -42,7 +42,7 @@ Akf-forum has got an API for AJAX (fetch), other clients etc. And, you can learn
|
||||||
- upload other photos, model for it
|
- upload other photos, model for it
|
||||||
- category system bloat.
|
- category system bloat.
|
||||||
- replace not found errors with no perm
|
- replace not found errors with no perm
|
||||||
- prewiev for send messages in markdown format.
|
- prewiev for send messages in markdown format. Markdown in user about
|
||||||
## Major Version History
|
## Major Version History
|
||||||
- V4: Caching
|
- V4: Caching
|
||||||
- V3: New Theme
|
- V3: New Theme
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"def_theme": "default",
|
"def_theme": "default",
|
||||||
"forum_name": "akf",
|
"forum_name": "akf",
|
||||||
"desp": "Akf-forum!"
|
"description": "Akf-forum!"
|
||||||
}
|
}
|
27
index.js
27
index.js
|
@ -1,10 +1,12 @@
|
||||||
const { def_theme, forum_name, desp } = require("./config.json"),
|
const { urlencoded: BP } = require('body-parser'),
|
||||||
|
{ mw: IP } = require('request-ip'),
|
||||||
|
RL = require('express-rate-limit'),
|
||||||
|
BAN = require('express-ip-block'),
|
||||||
|
SES = require('express-session');
|
||||||
|
|
||||||
|
const
|
||||||
|
{ def_theme, forum_name, description } = require("./config.json"),
|
||||||
{ UserModel, BanModel } = require("./models"),
|
{ UserModel, BanModel } = require("./models"),
|
||||||
rateLimit = require('express-rate-limit'),
|
|
||||||
ipBlock = require('express-ip-block'),
|
|
||||||
session = require('express-session'),
|
|
||||||
bodyParser = require('body-parser'),
|
|
||||||
requestIp = require('request-ip'),
|
|
||||||
port = process.env.PORT || 3000,
|
port = process.env.PORT || 3000,
|
||||||
mongoose = require("mongoose"),
|
mongoose = require("mongoose"),
|
||||||
express = require('express'),
|
express = require('express'),
|
||||||
|
@ -19,16 +21,15 @@ mongoose.connect(process.env.MONGO_DB_URL,
|
||||||
|
|
||||||
app.set("view engine", "ejs");
|
app.set("view engine", "ejs");
|
||||||
|
|
||||||
app.use(
|
app.use(express.static("public"), express.json(), IP(), BAN(app.ips),
|
||||||
session({ secret: 'secret', resave: true, saveUninitialized: true }),
|
SES({ secret: 'secret', resave: true, saveUninitialized: true }),
|
||||||
express.static("public"), express.json(), ipBlock(app.ips), requestIp.mw(),
|
|
||||||
async (req, res, next) => {
|
async (req, res, next) => {
|
||||||
req.user = req.session.userID ? await UserModel.findOneAndUpdate({ id: req.session.userID }, {
|
req.user = req.session.userID ? await UserModel.findOneAndUpdate({ id: req.session.userID }, {
|
||||||
lastSeen: Date.now(), $addToSet: { ips: req.clientIp }
|
lastSeen: Date.now(), $addToSet: { ips: req.clientIp }
|
||||||
}) : null;
|
}) : null;
|
||||||
|
|
||||||
res.reply = (page, options = {}, status = 200) => res.status(status)
|
res.reply = (page, options = {}, status = 200) => res.status(status)
|
||||||
.render(page, { user: req.user, theme: req.user?.theme || def_theme, forum_name, desp, ...options });
|
.render(page, { user: req.user, theme: req.user?.theme || def_theme, forum_name, description, ...options });
|
||||||
|
|
||||||
res.error = (type, error) => res.reply("error", { type, error }, type);
|
res.error = (type, error) => res.reply("error", { type, error }, type);
|
||||||
|
|
||||||
|
@ -37,10 +38,10 @@ app.use(
|
||||||
return res.error(403, "Your account has been deleted.");
|
return res.error(403, "Your account has been deleted.");
|
||||||
}
|
}
|
||||||
next();
|
next();
|
||||||
}, rateLimit({
|
}, RL({
|
||||||
windowMs: 60_000, max: 20,
|
windowMs: 60_000, max: 20,
|
||||||
handler: (req, res, next, opts) => !req.user?.admin ? res.error(opts.statusCode, "You are begin ratelimited") : next()
|
handler: (req, res, next, opts) => !req.user?.admin ? res.error(opts.statusCode, "You are begin ratelimited") : next()
|
||||||
}), bodyParser.urlencoded({ extended: true })
|
}), BP({ extended: true })
|
||||||
);
|
);
|
||||||
|
|
||||||
for (const file of fs.readdirSync("./routes"))
|
for (const file of fs.readdirSync("./routes"))
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
const { Router, request, response } = require("express")
|
const { Router, request, response } = require("express");
|
||||||
const app = Router();
|
const app = Router();
|
||||||
const fs =require("fs")
|
const fs = require("fs");
|
||||||
const bcrypt = require("bcrypt");
|
const bcrypt = require("bcrypt");
|
||||||
const { SecretModel, UserModel } = require("../../models")
|
const { SecretModel, UserModel } = require("../../models");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Auth checker
|
* Auth checker
|
||||||
|
@ -35,9 +35,9 @@ app.use(async (req, res, next) => {
|
||||||
|
|
||||||
app.get("/me", (req, res) => res.complate(req.user))
|
app.get("/me", (req, res) => res.complate(req.user))
|
||||||
|
|
||||||
for (const file of fs.readdirSync("./routes/api/routes"))
|
for (const file of fs.readdirSync("./routes/api/routes"))
|
||||||
app.use("/" + file.replace(".js", ""), require(`./routes/${file}`));
|
app.use("/" + file.replace(".js", ""), require(`./routes/${file}`));
|
||||||
|
|
||||||
app.all("*", (req, res) => res.error(400, "Bad request"));
|
app.all("*", (req, res) => res.error(400, "Bad request"));
|
||||||
|
|
||||||
module.exports = app;
|
module.exports = app;
|
|
@ -2,7 +2,7 @@
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title><%= title || forum_name +"-forum" %></title>
|
<title><%= title || forum_name +"-forum" %></title>
|
||||||
<meta name="description" content="<%= desp %>">
|
<meta name="description" content="<%= description %>">
|
||||||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||||
<link rel="stylesheet" href="/css/themes/<%= theme %>.css" />
|
<link rel="stylesheet" href="/css/themes/<%= theme %>.css" />
|
||||||
<link rel="stylesheet" href="/css/common.css" />
|
<link rel="stylesheet" href="/css/common.css" />
|
||||||
|
|
Loading…
Reference in a new issue