feat: Added redirect after login for users.
This commit is contained in:
17
src/index.ts
17
src/index.ts
@@ -7,7 +7,7 @@ import session from "express-session";
|
|||||||
import bcrypt from 'bcryptjs';
|
import bcrypt from 'bcryptjs';
|
||||||
import MongoStore from "connect-mongo";
|
import MongoStore from "connect-mongo";
|
||||||
import mongoose from "mongoose"
|
import mongoose from "mongoose"
|
||||||
import User from "./schemas/User";
|
import User, { IUser } from "./schemas/User";
|
||||||
import routes from "./routes/index";
|
import routes from "./routes/index";
|
||||||
import process from "node:process"
|
import process from "node:process"
|
||||||
import security from "./helpers/security";
|
import security from "./helpers/security";
|
||||||
@@ -20,13 +20,13 @@ if (!process.env.DOMAIN) {
|
|||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
namespace Express {
|
namespace Express {
|
||||||
export interface User {
|
export interface User extends IUser {
|
||||||
_id: mongoose.Types.ObjectId;
|
_id: mongoose.Types.ObjectId;
|
||||||
pass: string;
|
// pass: string;
|
||||||
uname: string;
|
// uname: string;
|
||||||
admin?: number;
|
// admin?: number;
|
||||||
locked?: boolean;
|
// locked?: boolean;
|
||||||
room?: string
|
// 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);
|
await mongoose.connect(connectionString);
|
||||||
if (process.send) process.send("ready")
|
if (process.send) process.send("ready")
|
||||||
})
|
})
|
||||||
@@ -95,5 +95,6 @@ app.listen(8080, async () => {
|
|||||||
app.use('/', routes)
|
app.use('/', routes)
|
||||||
|
|
||||||
process.on('SIGINT', () => {
|
process.on('SIGINT', () => {
|
||||||
|
server.close()
|
||||||
mongoose.disconnect().then(() => process.exit(0), () => process.exit(1))
|
mongoose.disconnect().then(() => process.exit(0), () => process.exit(1))
|
||||||
})
|
})
|
||||||
@@ -48,7 +48,7 @@ accsRouter.put('/:id', async (req, res)=> {
|
|||||||
res.status(404).send("User not found")
|
res.status(404).send("User not found")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (req.body.flags != undefined) {
|
if (req.body.flags) {
|
||||||
if (adminCond(req.user.admin, Perms.Superadmin)) {
|
if (adminCond(req.user.admin, Perms.Superadmin)) {
|
||||||
if (adminCond(user.admin, Perms.Superadmin)) {
|
if (adminCond(user.admin, Perms.Superadmin)) {
|
||||||
res.status(400).send("Cannot edit other superadmins")
|
res.status(400).send("Cannot edit other superadmins")
|
||||||
|
|||||||
@@ -17,11 +17,7 @@ authRouter.post("/login", (req, res) => {
|
|||||||
if (error) {
|
if (error) {
|
||||||
res.status(500).send(error)
|
res.status(500).send(error)
|
||||||
} else {
|
} else {
|
||||||
if (req.user.admin != null) {
|
res.send({status: 200, admin: req.user.admin || undefined, redirect: req.user.defaultPage})
|
||||||
res.send({status: 200, admin: req.user.admin})
|
|
||||||
} else {
|
|
||||||
res.send({status: 200})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
@@ -83,10 +79,20 @@ authRouter.get("/check", islogged, (req, res, next) => {
|
|||||||
if (req.user.locked) {
|
if (req.user.locked) {
|
||||||
req.logout((err) => {
|
req.logout((err) => {
|
||||||
if (err) next(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})
|
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 };
|
export { authRouter };
|
||||||
|
|||||||
@@ -12,18 +12,20 @@ export interface IUser {
|
|||||||
surname?: string;
|
surname?: string;
|
||||||
groups: Types.ObjectId[];
|
groups: Types.ObjectId[];
|
||||||
regDate: Date;
|
regDate: Date;
|
||||||
|
defaultPage: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const userSchema = new Schema<IUser>({
|
const userSchema = new Schema<IUser>({
|
||||||
uname: {type: String, required: true},
|
uname: {type: String, required: true},
|
||||||
pass: {type: String, required: true, default: "$2y$10$wxDhf.XiXkmdKrFqYUEa0.F4Bf.pDykZaMmgjvyLyeRP3E/Xy0hbC"},
|
pass: {type: String, required: true, default: "$2y$10$wxDhf.XiXkmdKrFqYUEa0.F4Bf.pDykZaMmgjvyLyeRP3E/Xy0hbC"},
|
||||||
room: String,
|
room: {type: String, default: ""},
|
||||||
admin: Number,
|
admin: Number,
|
||||||
locked: {type: Boolean, default: false},
|
locked: {type: Boolean, default: false},
|
||||||
fname: String,
|
fname: {type: String, default: ""},
|
||||||
surname: String,
|
surname: {type: String, default: ""},
|
||||||
groups: [{type: mongoose.Types.ObjectId, ref: "Group"}],
|
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)
|
export default mongoose.model("logins", userSchema)
|
||||||
@@ -8,7 +8,7 @@ var islogged = (req: Request, res: Response, next: NextFunction) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var isadmin = (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()
|
return next()
|
||||||
}
|
}
|
||||||
res.sendStatus(401)
|
res.sendStatus(401)
|
||||||
|
|||||||
Reference in New Issue
Block a user