diff --git a/src/index.ts b/src/index.ts index 2600d57..46bc8db 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,7 +7,7 @@ import session from "express-session"; import bcrypt from 'bcryptjs'; import MongoStore from "connect-mongo"; import mongoose from "mongoose" -import User from "./schemas/User"; +import User, { IUser } from "./schemas/User"; import routes from "./routes/index"; import process from "node:process" import security from "./helpers/security"; @@ -20,13 +20,13 @@ if (!process.env.DOMAIN) { declare global { namespace Express { - export interface User { + export interface User extends IUser { _id: mongoose.Types.ObjectId; - pass: string; - uname: string; - admin?: number; - locked?: boolean; - room?: string + // pass: string; + // uname: string; + // admin?: number; + // locked?: boolean; + // room?: string } } } @@ -87,7 +87,7 @@ passport.deserializeUser(async function(id, done) { } }); -app.listen(8080, async () => { +var server = app.listen(8080, async () => { await mongoose.connect(connectionString); if (process.send) process.send("ready") }) @@ -95,5 +95,6 @@ app.listen(8080, async () => { app.use('/', routes) process.on('SIGINT', () => { + server.close() mongoose.disconnect().then(() => process.exit(0), () => process.exit(1)) }) \ No newline at end of file diff --git a/src/routes/api/admin/accs.ts b/src/routes/api/admin/accs.ts index 03f0934..f47d83f 100644 --- a/src/routes/api/admin/accs.ts +++ b/src/routes/api/admin/accs.ts @@ -48,7 +48,7 @@ accsRouter.put('/:id', async (req, res)=> { res.status(404).send("User not found") return } - if (req.body.flags != undefined) { + if (req.body.flags) { if (adminCond(req.user.admin, Perms.Superadmin)) { if (adminCond(user.admin, Perms.Superadmin)) { res.status(400).send("Cannot edit other superadmins") diff --git a/src/routes/auth/index.ts b/src/routes/auth/index.ts index cd7e06b..2528f8a 100644 --- a/src/routes/auth/index.ts +++ b/src/routes/auth/index.ts @@ -17,11 +17,7 @@ authRouter.post("/login", (req, res) => { if (error) { res.status(500).send(error) } else { - if (req.user.admin != null) { - res.send({status: 200, admin: req.user.admin}) - } else { - res.send({status: 200}) - } + res.send({status: 200, admin: req.user.admin || undefined, redirect: req.user.defaultPage}) } }) } else { @@ -83,10 +79,20 @@ authRouter.get("/check", islogged, (req, res, next) => { if (req.user.locked) { req.logout((err) => { if (err) next(err) - res.status(401).send("Your account has been locked.") + res.status(401).send({status: 401, message: "Your account has been locked."}) }) } res.send({"admin": req.user.admin, "features": cap.flags, "room": req.user.room, "menu": {"defaultItems": usettings.settings.menu.defaultItems}, "vapid": vapidKeys.keys.publicKey}) }) +authRouter.put("/redirect", islogged, async (req, res) => { + if (["", "/", "/login", "/login/", "login"].find(v => v == req.body.redirect)) return res.status(400).send({status: 400, message: "Path in blacklist"}) + const update = await User.findByIdAndUpdate(req.user._id, {defaultPage: req.body.redirect}) + if (update) { + res.send({status: 200}).end() + } else { + res.status(500).send({status: 500}).end() + } +}) + export { authRouter }; diff --git a/src/schemas/User.ts b/src/schemas/User.ts index 9edb23e..5bb7820 100644 --- a/src/schemas/User.ts +++ b/src/schemas/User.ts @@ -12,18 +12,20 @@ export interface IUser { surname?: string; groups: Types.ObjectId[]; regDate: Date; + defaultPage: string; } const userSchema = new Schema({ uname: {type: String, required: true}, pass: {type: String, required: true, default: "$2y$10$wxDhf.XiXkmdKrFqYUEa0.F4Bf.pDykZaMmgjvyLyeRP3E/Xy0hbC"}, - room: String, + room: {type: String, default: ""}, admin: Number, locked: {type: Boolean, default: false}, - fname: String, - surname: String, + fname: {type: String, default: ""}, + surname: {type: String, default: ""}, groups: [{type: mongoose.Types.ObjectId, ref: "Group"}], - regDate: {type: Date, default: Date.now} + regDate: {type: Date, default: Date.now}, + defaultPage: {type: String, default: ""}, }) export default mongoose.model("logins", userSchema) \ No newline at end of file diff --git a/src/utility.ts b/src/utility.ts index 504bd8d..7705c89 100644 --- a/src/utility.ts +++ b/src/utility.ts @@ -8,7 +8,7 @@ var islogged = (req: Request, res: Response, next: NextFunction) => { } var isadmin = (req: Request, res: Response, next: NextFunction) => { - if (req.user.admin != null) { + if (req.user.admin) { return next() } res.sendStatus(401)