akf-forum/index.js

61 lines
2.2 KiB
JavaScript
Raw Normal View History

2022-08-31 14:44:28 +03:00
const { UserModel, BanModel } = require("./models"),
rateLimit = require('express-rate-limit'),
2022-08-31 14:44:28 +03:00
{ def_theme } = require("./config.json"),
2022-08-29 19:31:59 +03:00
ipBlock = require('express-ip-block'),
session = require('express-session'),
bodyParser = require('body-parser'),
port = process.env.PORT || 3000,
mongoose = require("mongoose"),
express = require('express'),
// multer = require("multer"),
2022-08-29 19:31:59 +03:00
fs = require("fs"),
app = express();
2022-08-31 14:44:28 +03:00
2022-08-29 19:31:59 +03:00
app.ips = [];
//Upload file
/*
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "public/data");
},
filename: function (req, file, cb) {
const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9);
cb(null, file.fieldname + "-" + uniqueSuffix + ".png");
},
});
const upload = multer({ storage: storage });
app.post("/stats", upload.single("uploaded_file"),*/
require("dotenv").config();
2022-08-29 19:31:59 +03:00
mongoose.connect(process.env.MONGO_DB_URL,
2022-08-31 14:44:28 +03:00
async () => console.log("Database is connected with", (app.ips = await BanModel.find({})).length, "banned IPs"));
2022-04-06 21:14:46 +03:00
2022-03-13 16:16:46 +03:00
app.set("view engine", "ejs");
2022-08-29 19:31:59 +03:00
app.use(
session({ secret: 'secret', resave: true, saveUninitialized: true }),
2022-08-29 19:31:59 +03:00
express.static("public"), express.json(), ipBlock(app.ips),
async (req, res, next) => {
req.headers["x-forwarded-for"];
2022-08-31 14:44:28 +03:00
req.user = await UserModel.get(req.session.userID);
2022-08-27 10:31:16 +03:00
res.reply = (page, options = {}, status = 200) => res.status(status)
2022-08-29 19:31:59 +03:00
.render(page, { user: req.user, theme: req.user?.theme || def_theme, ...options });
2022-08-27 10:31:16 +03:00
res.error = (type, error) => res.reply("error", { type, error }, type);
2022-08-24 22:10:23 +03:00
if (req.user?.deleted) {
2022-08-29 19:31:59 +03:00
req.session.destroy();
return res.error(403, "Your account has been deleted.");
}
2022-08-11 03:12:40 +03:00
next();
}, rateLimit({
windowMs: 60_000, max: 10,
2022-09-05 23:44:38 +03:00
handler: (req, res, next, opts) => !req.user?.admin ? res.error(opts.statusCode, "You are begin ratelimited") : next()
}), bodyParser.urlencoded({ extended: true })
2022-08-29 19:31:59 +03:00
);
2022-03-22 00:10:29 +03:00
for (const file of fs.readdirSync("./routes"))
2022-08-29 19:31:59 +03:00
app.use("/" + file.replace(".js", ""), require(`./routes/${file}`));
2022-03-21 23:53:22 +03:00
2022-08-11 03:12:40 +03:00
app.all("*", (req, res) => res.error(404, "We have not got this page."));
2022-03-21 23:53:22 +03:00
2022-08-11 00:38:44 +03:00
app.listen(port, () => console.log("akf-forum on port:", port));