added auth check for admin
parent
b5a97350c2
commit
bad5c1ef24
|
@ -1,14 +1,18 @@
|
||||||
import { Request } from "express";
|
import { Request } from "express";
|
||||||
import { Session } from "../models/session";
|
import { Session } from "../models/session";
|
||||||
|
import { User } from "../models/user";
|
||||||
|
import { HEADER_X_AUTHORIZATION } from "../utils/constants";
|
||||||
|
|
||||||
export async function sessionProtection(req: Request, res: any, next: any) {
|
export async function sessionProtection(req: Request, res: any, next: any) {
|
||||||
const xAuthorization = req.get("x-authorization");
|
const xAuthorization = req.get(HEADER_X_AUTHORIZATION);
|
||||||
|
|
||||||
if (!xAuthorization) {
|
if (!xAuthorization) {
|
||||||
return res.status(401).json({ status: "err" });
|
return res.status(401).json({ status: "err" });
|
||||||
}
|
}
|
||||||
|
|
||||||
const session = await Session.findOne({ sessionId: xAuthorization }).lean();
|
const session = await Session.findOne({ sessionId: xAuthorization })
|
||||||
|
.select("sessionId -_id")
|
||||||
|
.lean();
|
||||||
|
|
||||||
if (!session) {
|
if (!session) {
|
||||||
return res.status(401).json({ status: "err" });
|
return res.status(401).json({ status: "err" });
|
||||||
|
@ -16,3 +20,29 @@ export async function sessionProtection(req: Request, res: any, next: any) {
|
||||||
|
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function adminProtection(req: Request, res: any, next: any) {
|
||||||
|
const xAuthorization = req.get(HEADER_X_AUTHORIZATION);
|
||||||
|
|
||||||
|
if (!xAuthorization) {
|
||||||
|
return res.status(401).json({ status: "err" });
|
||||||
|
}
|
||||||
|
|
||||||
|
const session = await Session.findOne({ sessionId: xAuthorization })
|
||||||
|
.select("sessionId accountName -_id")
|
||||||
|
.lean();
|
||||||
|
|
||||||
|
if (!session) {
|
||||||
|
return res.status(401).json({ status: "err" });
|
||||||
|
}
|
||||||
|
|
||||||
|
const user = await User.findOne({ accountName: session.accountName })
|
||||||
|
.select("isAdmin -_id")
|
||||||
|
.lean();
|
||||||
|
|
||||||
|
if (!user || !user.isAdmin) {
|
||||||
|
return res.status(401).json({ status: "err" });
|
||||||
|
}
|
||||||
|
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
|
|
@ -16,6 +16,10 @@ export const userSchema = new Schema({
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0,
|
default: 0,
|
||||||
},
|
},
|
||||||
|
isAdmin: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export type User = InferSchemaType<typeof userSchema>;
|
export type User = InferSchemaType<typeof userSchema>;
|
||||||
|
|
|
@ -2,8 +2,8 @@ import express from "express";
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
import * as adminController from "../controllers/adminController";
|
import * as adminController from "../controllers/adminController";
|
||||||
import { sessionProtection } from "../middleware/authMiddleware";
|
import { adminProtection } from "../middleware/authMiddleware";
|
||||||
|
|
||||||
router.get("/users", sessionProtection, adminController.GetAllUsers);
|
router.get("/users", adminProtection, adminController.GetAllUsers);
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
|
|
@ -4,4 +4,8 @@ export const DEFAULT_SESSION_EXPIRATION: number = 7 * 24 * 60 * 60 * 1000;
|
||||||
// Maximum number of users to display per page in the admin interface
|
// Maximum number of users to display per page in the admin interface
|
||||||
export const ADMIN_MAX_USERS_PER_PAGE: number = 10;
|
export const ADMIN_MAX_USERS_PER_PAGE: number = 10;
|
||||||
|
|
||||||
|
// Fields to ignore when querying MongoDB
|
||||||
export const MONGODB_IGNORED_FIELDS: string = "-password -_id -__v";
|
export const MONGODB_IGNORED_FIELDS: string = "-password -_id -__v";
|
||||||
|
|
||||||
|
// Header name for the session ID
|
||||||
|
export const HEADER_X_AUTHORIZATION: string = "x-authorization";
|
||||||
|
|
Reference in New Issue