diff --git a/src/middlewares/example.ts b/src/middlewares/example.ts index 0b4aabb1f1017c2ddc6297240733f01045b0080a..4b6394117ecdfaba4106aa7fc984ee6d3b676638 100644 --- a/src/middlewares/example.ts +++ b/src/middlewares/example.ts @@ -1,6 +1,7 @@ import { NextFunction, Request, Response, response } from "express"; const example = () => (req: Request, res: Response) => { + console.log(res.data.value); res.status(200).json({ message: "Example" }); }; diff --git a/src/middlewares/utils/getFieldValue.ts b/src/middlewares/utils/getFieldValue.ts new file mode 100644 index 0000000000000000000000000000000000000000..d3ffad5854c539d49367f44f753bb1bb009a8c38 --- /dev/null +++ b/src/middlewares/utils/getFieldValue.ts @@ -0,0 +1,25 @@ +import { NextFunction, Request, Response } from "express"; + +import Profile from "../../models/ProfileSchema"; +import Term from "../../models/TermSchema"; + +/** + * set res.data.value to res.data[objectName][fieldName] + */ +const getFieldValue = ( + objectName: "profile" | "term", + fieldName: "picture" | "acceptedPicture" | "backgroundFile" +) => async (req: Request, res: Response, next: NextFunction) => { + try { + const object: Record<string, any> = res.data[objectName]!; + if (object) { + res.data.value = object[fieldName]; + } + + next(); + } catch (err) { + next(err); + } +}; + +export default getFieldValue; diff --git a/src/routes/files.ts b/src/routes/files.ts index 5b769a2e31b72c5aff00829d29d02f3a94496f20..fe7fd3a9801197d49764529b679eda1c95c6efd9 100644 --- a/src/routes/files.ts +++ b/src/routes/files.ts @@ -2,6 +2,11 @@ import { Application } from "express"; import cardImageStorage from "../middlewares/files/card/cardImageStorage"; import example from "../middlewares/example"; import { fileFilter } from "../middlewares/files/fileFilter"; +import getFieldValue from "../middlewares/utils/getFieldValue"; +import getUser from "../middlewares/user/getUser"; +import isLoggedIn from "../middlewares/auth/isLoggedIn"; +import isRegistered from "../middlewares/auth/isRegistered"; +import isStaffOrAdmin from "../middlewares/auth/isStaffOrAdmin"; import multer from "multer"; import profilePictureStorage from "../middlewares/files/profile/profilePictureStorage"; @@ -17,7 +22,14 @@ const CardImageUpload = multer({ const filesRoute = (prefix: string, app: Application): void => { // Get a users profile picture - app.get(`${prefix}/user/:userId/picture`, example()); + app.get( + `${prefix}/user/:userId/picture`, + isRegistered(), + isStaffOrAdmin(), + getUser(), + getFieldValue("profile", "picture"), + example() + ); // Get a users accepted picture app.get(`${prefix}/user/:userId/picture/accepted`, example()); // Get own picture diff --git a/src/utils/declarations/response.d.ts b/src/utils/declarations/response.d.ts index 2dbecbab94126cbb24522971d56776c616089c82..878f90fe2a223b2fd6c3d7c9fdfb525877c4f513 100644 --- a/src/utils/declarations/response.d.ts +++ b/src/utils/declarations/response.d.ts @@ -2,6 +2,7 @@ import { INews } from "../../models/NewsSchema"; import { IProfile } from "../../models/ProfileSchema"; import { IFile } from "../../models/FileSchema"; import { IWarning } from "../../models/WarningSchema"; +import { ITerm } from "../../models/TermSchema"; declare global { namespace Express { @@ -10,7 +11,8 @@ declare global { profile?: Partial<IProfile> | null; warnings?: Partial<IWarning>[] | null; newObjectId?: string | null; - + value?: string | null; + term?: Partial<ITerm> | null; news?: Partial<INews>[] | null; newsObject?: Partial<INews> | null; profiles?: Partial<IProfile>[] | null;