From ccc99af273041f2e865700e01275e129ae6fc553 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20L=C3=A1szl=C3=B3?= <rlacko99@gmail.com> Date: Thu, 24 Dec 2020 13:04:33 +0100 Subject: [PATCH] getFieldValue middleware --- src/middlewares/example.ts | 1 + src/middlewares/utils/getFieldValue.ts | 25 +++++++++++++++++++++++++ src/routes/files.ts | 14 +++++++++++++- src/utils/declarations/response.d.ts | 4 +++- 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 src/middlewares/utils/getFieldValue.ts diff --git a/src/middlewares/example.ts b/src/middlewares/example.ts index 0b4aabb1..4b639411 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 00000000..d3ffad58 --- /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 5b769a2e..fe7fd3a9 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 2dbecbab..878f90fe 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; -- GitLab