feat: Added redirect after login for users.

This commit is contained in:
2025-05-24 11:27:12 +02:00
parent 432b4dc4e5
commit 4de7af4bc0
5 changed files with 29 additions and 20 deletions

View File

@@ -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))
})

View File

@@ -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")

View File

@@ -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 };

View File

@@ -12,18 +12,20 @@ export interface IUser {
surname?: string;
groups: Types.ObjectId[];
regDate: Date;
defaultPage: string;
}
const userSchema = new Schema<IUser>({
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)

View File

@@ -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)