From 67e053dc23ebfa20a724aaa1ac4a73cb40a16ba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me> Date: Thu, 6 Jul 2023 09:50:17 +0200 Subject: [PATCH] Singletons => Change method to make singleton class --- ExpressAPI/src/config/Config.ts | 14 ++------- ExpressAPI/src/helpers/DojoValidators.ts | 14 +-------- ExpressAPI/src/managers/GitlabManager.ts | 14 +-------- ExpressAPI/src/managers/HttpManager.ts | 16 +--------- ExpressAPI/src/managers/UserManager.ts | 14 +-------- .../src/middlewares/ParamsCallbackManager.ts | 27 ++++------------- .../middlewares/ParamsValidatorMiddleware.ts | 14 +-------- .../src/middlewares/SecurityMiddleware.ts | 14 +-------- .../src/middlewares/SessionMiddleware.ts | 14 +-------- ExpressAPI/src/routes/ApiRoutesManager.ts | 14 +-------- ExpressAPI/src/routes/BaseRoutes.ts | 14 +-------- ExpressAPI/src/routes/EnonceRoutes.ts | 29 ++++++++++--------- ExpressAPI/src/routes/ExerciceRoutes.ts | 14 +-------- ExpressAPI/src/routes/GitlabRoutes.ts | 14 +-------- ExpressAPI/src/routes/SessionRoutes.ts | 14 +-------- ExpressAPI/src/shared | 2 +- 16 files changed, 35 insertions(+), 207 deletions(-) diff --git a/ExpressAPI/src/config/Config.ts b/ExpressAPI/src/config/Config.ts index 1473320..ec34e5c 100644 --- a/ExpressAPI/src/config/Config.ts +++ b/ExpressAPI/src/config/Config.ts @@ -1,6 +1,4 @@ class Config { - private static _instance: Config; - public readonly api: { port: number }; @@ -28,7 +26,7 @@ class Config { public readonly userPasswordLength: number; public readonly userPasswordSaltRounds: number; - private constructor() { + constructor() { this.api = { port: Number(process.env.API_PORT) }; @@ -82,15 +80,7 @@ class Config { } - - public static get instance(): Config { - if ( !Config._instance ) { - Config._instance = new Config(); - } - - return Config._instance; - } } -export default Config.instance; +export default new Config(); diff --git a/ExpressAPI/src/helpers/DojoValidators.ts b/ExpressAPI/src/helpers/DojoValidators.ts index ca7124c..d86a8f7 100644 --- a/ExpressAPI/src/helpers/DojoValidators.ts +++ b/ExpressAPI/src/helpers/DojoValidators.ts @@ -14,18 +14,6 @@ declare type DojoCustomValidator = (input: any, meta: DojoMeta) => any; class DojoValidators { - private static _instance: DojoValidators; - - private constructor() { } - - public static get instance(): DojoValidators { - if ( !DojoValidators._instance ) { - DojoValidators._instance = new DojoValidators(); - } - - return DojoValidators._instance; - } - private toValidatorSchemaOptions(arg: { errorMessage?: FieldMessageFactory | ErrorMessage, negated?: boolean, bail?: boolean | BailOptions, if?: DojoCustomValidator | ValidationChain, options?: DojoCustomValidator }) { // This is a hack to make the types work with req arg as ApiRequest instead of Request return arg as unknown as { errorMessage?: FieldMessageFactory | ErrorMessage, negated?: boolean, bail?: boolean | BailOptions, if?: CustomValidator | ValidationChain, options?: CustomValidator }; @@ -94,4 +82,4 @@ class DojoValidators { } -export default DojoValidators.instance; \ No newline at end of file +export default new DojoValidators(); \ No newline at end of file diff --git a/ExpressAPI/src/managers/GitlabManager.ts b/ExpressAPI/src/managers/GitlabManager.ts index 8474c7d..f4b6354 100644 --- a/ExpressAPI/src/managers/GitlabManager.ts +++ b/ExpressAPI/src/managers/GitlabManager.ts @@ -11,18 +11,6 @@ import GitlabRoutes from '../shared/types/Gitlab/GitlabRoutes'; class GitlabManager { - private static _instance: GitlabManager; - - private constructor() { } - - public static get instance(): GitlabManager { - if ( !GitlabManager._instance ) { - GitlabManager._instance = new GitlabManager(); - } - - return GitlabManager._instance; - } - private getApiUrl(route: GitlabRoutes): string { return `${ Config.gitlab.apiURL }${ route }`; } @@ -126,4 +114,4 @@ class GitlabManager { } -export default GitlabManager.instance; +export default new GitlabManager(); diff --git a/ExpressAPI/src/managers/HttpManager.ts b/ExpressAPI/src/managers/HttpManager.ts index 87e636e..958f8b9 100644 --- a/ExpressAPI/src/managers/HttpManager.ts +++ b/ExpressAPI/src/managers/HttpManager.ts @@ -5,20 +5,6 @@ import logger from '../shared/logging/Winsto class HttpManager { - public handleCommandErrors: boolean = true; - - private static _instance: HttpManager; - - public static get instance(): HttpManager { - if ( !HttpManager._instance ) { - HttpManager._instance = new HttpManager(); - } - - return HttpManager._instance; - } - - private constructor() { } - registerAxiosInterceptor() { this.registerRequestInterceptor(); this.registerResponseInterceptor(); @@ -54,5 +40,5 @@ class HttpManager { } -export default HttpManager.instance; +export default new HttpManager(); diff --git a/ExpressAPI/src/managers/UserManager.ts b/ExpressAPI/src/managers/UserManager.ts index 5456838..35f63d1 100644 --- a/ExpressAPI/src/managers/UserManager.ts +++ b/ExpressAPI/src/managers/UserManager.ts @@ -5,18 +5,6 @@ import { User } from '../types/DatabaseTypes'; class UserManager { - private static _instance: UserManager; - - private constructor() { } - - public static get instance(): UserManager { - if ( !UserManager._instance ) { - UserManager._instance = new UserManager(); - } - - return UserManager._instance; - } - async getByMail(mail: string, include: Prisma.UserInclude | undefined = undefined): Promise<User | undefined> { return db.user.findUnique({ where : { @@ -65,4 +53,4 @@ class UserManager { } -export default UserManager.instance; +export default new UserManager(); diff --git a/ExpressAPI/src/middlewares/ParamsCallbackManager.ts b/ExpressAPI/src/middlewares/ParamsCallbackManager.ts index 4c09baa..c0ccb39 100644 --- a/ExpressAPI/src/middlewares/ParamsCallbackManager.ts +++ b/ExpressAPI/src/middlewares/ParamsCallbackManager.ts @@ -6,18 +6,6 @@ import EnonceManager from '../managers/EnonceManager'; class ParamsCallbackManager { - private static _instance: ParamsCallbackManager; - - private constructor() { } - - public static get instance(): ParamsCallbackManager { - if ( !ParamsCallbackManager._instance ) { - ParamsCallbackManager._instance = new ParamsCallbackManager(); - } - - return ParamsCallbackManager._instance; - } - protected listenParam(paramName: string, backend: Express, getFunction: (id: string | number, ...args: Array<any>) => Promise<any>, args: Array<any>, indexName: string) { backend.param(paramName, (req: ApiRequest, res: express.Response, next: express.NextFunction, id: string | number) => { getFunction(id, ...args).then(result => { @@ -42,17 +30,12 @@ class ParamsCallbackManager { } register(backend: Express) { - this.listenParam('enonceNameOrUrl', - backend, - EnonceManager.get.bind(EnonceManager), - [ { - exercices: true, - staff: true - } ], - 'enonce' - ); + this.listenParam('enonceNameOrUrl', backend, EnonceManager.get.bind(EnonceManager), [ { + exercices: true, + staff : true + } ], 'enonce'); } } -export default ParamsCallbackManager.instance; +export default new ParamsCallbackManager(); diff --git a/ExpressAPI/src/middlewares/ParamsValidatorMiddleware.ts b/ExpressAPI/src/middlewares/ParamsValidatorMiddleware.ts index f9a927c..9d70f6c 100644 --- a/ExpressAPI/src/middlewares/ParamsValidatorMiddleware.ts +++ b/ExpressAPI/src/middlewares/ParamsValidatorMiddleware.ts @@ -5,18 +5,6 @@ import ApiRequest from '../types/ApiRequest'; class ParamsValidatorMiddleware { - private static _instance: ParamsValidatorMiddleware; - - private constructor() { } - - public static get instance(): ParamsValidatorMiddleware { - if ( !ParamsValidatorMiddleware._instance ) { - ParamsValidatorMiddleware._instance = new ParamsValidatorMiddleware(); - } - - return ParamsValidatorMiddleware._instance; - } - validate(validations: Array<ExpressValidator.ValidationChain> | ExpressValidator.Schema): (req: ApiRequest, res: express.Response, next: express.NextFunction) => void { return async (req: ApiRequest, res: express.Response, next: express.NextFunction) => { @@ -37,4 +25,4 @@ class ParamsValidatorMiddleware { } -export default ParamsValidatorMiddleware.instance; +export default new ParamsValidatorMiddleware(); diff --git a/ExpressAPI/src/middlewares/SecurityMiddleware.ts b/ExpressAPI/src/middlewares/SecurityMiddleware.ts index a488037..62030f9 100644 --- a/ExpressAPI/src/middlewares/SecurityMiddleware.ts +++ b/ExpressAPI/src/middlewares/SecurityMiddleware.ts @@ -6,18 +6,6 @@ import ApiRequest from '../types/ApiRequest'; class SecurityMiddleware { - private static _instance: SecurityMiddleware; - - private constructor() { } - - public static get instance(): SecurityMiddleware { - if ( !SecurityMiddleware._instance ) { - SecurityMiddleware._instance = new SecurityMiddleware(); - } - - return SecurityMiddleware._instance; - } - // First check if connected then check if at least ONE rule match. It's NOT an AND but it's a OR function. check(checkIfConnected: boolean, ...checkTypes: Array<SecurityCheckType>): (req: ApiRequest, res: express.Response, next: express.NextFunction) => void { return async (req: ApiRequest, res: express.Response, next: express.NextFunction) => { @@ -57,4 +45,4 @@ class SecurityMiddleware { } -export default SecurityMiddleware.instance; +export default new SecurityMiddleware(); diff --git a/ExpressAPI/src/middlewares/SessionMiddleware.ts b/ExpressAPI/src/middlewares/SessionMiddleware.ts index 883918f..1204091 100644 --- a/ExpressAPI/src/middlewares/SessionMiddleware.ts +++ b/ExpressAPI/src/middlewares/SessionMiddleware.ts @@ -4,18 +4,6 @@ import Session from '../controllers/Session'; class SessionMiddleware { - private static _instance: SessionMiddleware; - - private constructor() { } - - public static get instance(): SessionMiddleware { - if ( !SessionMiddleware._instance ) { - SessionMiddleware._instance = new SessionMiddleware(); - } - - return SessionMiddleware._instance; - } - register(): (req: ApiRequest, res: express.Response, next: express.NextFunction) => void { return async (req: ApiRequest, res: express.Response, next: express.NextFunction) => { req.session = new Session(); @@ -27,4 +15,4 @@ class SessionMiddleware { } -export default SessionMiddleware.instance; +export default new SessionMiddleware(); diff --git a/ExpressAPI/src/routes/ApiRoutesManager.ts b/ExpressAPI/src/routes/ApiRoutesManager.ts index f45b5cf..d7641bc 100644 --- a/ExpressAPI/src/routes/ApiRoutesManager.ts +++ b/ExpressAPI/src/routes/ApiRoutesManager.ts @@ -8,18 +8,6 @@ import ExerciceRoutes from './ExerciceRoutes'; class AdminRoutesManager implements RoutesManager { - private static _instance: AdminRoutesManager; - - private constructor() { } - - public static get instance(): AdminRoutesManager { - if ( !AdminRoutesManager._instance ) { - AdminRoutesManager._instance = new AdminRoutesManager(); - } - - return AdminRoutesManager._instance; - } - registerOnBackend(backend: Express) { BaseRoutes.registerOnBackend(backend); SessionRoutes.registerOnBackend(backend); @@ -30,4 +18,4 @@ class AdminRoutesManager implements RoutesManager { } -export default AdminRoutesManager.instance; +export default new AdminRoutesManager(); diff --git a/ExpressAPI/src/routes/BaseRoutes.ts b/ExpressAPI/src/routes/BaseRoutes.ts index e78112a..d8cbce5 100644 --- a/ExpressAPI/src/routes/BaseRoutes.ts +++ b/ExpressAPI/src/routes/BaseRoutes.ts @@ -6,18 +6,6 @@ import RoutesManager from '../express/RoutesManager'; class BaseRoutes implements RoutesManager { - private static _instance: BaseRoutes; - - private constructor() { } - - public static get instance(): BaseRoutes { - if ( !BaseRoutes._instance ) { - BaseRoutes._instance = new BaseRoutes(); - } - - return BaseRoutes._instance; - } - registerOnBackend(backend: Express) { backend.get('/', (req: ApiRequest, res: express.Response) => { res.status(StatusCodes.OK).end(); }); backend.get('/health_check', (req: ApiRequest, res: express.Response) => { res.status(StatusCodes.OK).end(); }); @@ -25,4 +13,4 @@ class BaseRoutes implements RoutesManager { } -export default BaseRoutes.instance; +export default new BaseRoutes(); diff --git a/ExpressAPI/src/routes/EnonceRoutes.ts b/ExpressAPI/src/routes/EnonceRoutes.ts index 1a58437..3881412 100644 --- a/ExpressAPI/src/routes/EnonceRoutes.ts +++ b/ExpressAPI/src/routes/EnonceRoutes.ts @@ -19,21 +19,10 @@ import DojoValidators from '../helpers/DojoValidators'; import { Prisma } from '@prisma/client'; import db from '../helpers/DatabaseHelper'; import { Enonce } from '../types/DatabaseTypes'; +import EnonceManager from '../managers/EnonceManager'; class EnonceRoutes implements RoutesManager { - private static _instance: EnonceRoutes; - - private constructor() { } - - public static get instance(): EnonceRoutes { - if ( !EnonceRoutes._instance ) { - EnonceRoutes._instance = new EnonceRoutes(); - } - - return EnonceRoutes._instance; - } - private readonly enonceValidator: ExpressValidator.Schema = { name : { trim : true, @@ -58,7 +47,19 @@ class EnonceRoutes implements RoutesManager { // Get an enonce by its name or gitlab url private async getEnonce(req: ApiRequest, res: express.Response) { - return req.boundParams.enonce ? req.session.sendResponse(res, StatusCodes.OK, req.boundParams.enonce) : res.status(StatusCodes.NOT_FOUND).send(); + const enonce: Enonce = req.boundParams.enonce; + + if ( enonce && !enonce.published && !await EnonceManager.isUserAllowedToAccessEnonce(enonce, req.session.profile) ) { + delete enonce.gitlabId; + delete enonce.gitlabLink; + delete enonce.gitlabCreationInfo; + delete enonce.gitlabLastInfo; + delete enonce.gitlabLastInfoDate; + delete enonce.staff; + delete enonce.exercices; + } + + return enonce ? req.session.sendResponse(res, StatusCodes.OK, enonce) : res.status(StatusCodes.NOT_FOUND).send(); } private async createEnonce(req: ApiRequest, res: express.Response) { @@ -129,4 +130,4 @@ class EnonceRoutes implements RoutesManager { } -export default EnonceRoutes.instance; +export default new EnonceRoutes(); diff --git a/ExpressAPI/src/routes/ExerciceRoutes.ts b/ExpressAPI/src/routes/ExerciceRoutes.ts index 840f4ed..49ac712 100644 --- a/ExpressAPI/src/routes/ExerciceRoutes.ts +++ b/ExpressAPI/src/routes/ExerciceRoutes.ts @@ -22,18 +22,6 @@ import db from '../helpers/DatabaseHelper'; class ExerciceRoutes implements RoutesManager { - private static _instance: ExerciceRoutes; - - private constructor() { } - - public static get instance(): ExerciceRoutes { - if ( !ExerciceRoutes._instance ) { - ExerciceRoutes._instance = new ExerciceRoutes(); - } - - return ExerciceRoutes._instance; - } - private readonly exerciceValidator: ExpressValidator.Schema = { members: { trim : true, @@ -133,4 +121,4 @@ class ExerciceRoutes implements RoutesManager { } -export default ExerciceRoutes.instance; +export default new ExerciceRoutes(); diff --git a/ExpressAPI/src/routes/GitlabRoutes.ts b/ExpressAPI/src/routes/GitlabRoutes.ts index 99ff714..6804d94 100644 --- a/ExpressAPI/src/routes/GitlabRoutes.ts +++ b/ExpressAPI/src/routes/GitlabRoutes.ts @@ -8,18 +8,6 @@ import GitlabManager from '../managers/GitlabManager'; class EnonceRoutes implements RoutesManager { - private static _instance: EnonceRoutes; - - private constructor() { } - - public static get instance(): EnonceRoutes { - if ( !EnonceRoutes._instance ) { - EnonceRoutes._instance = new EnonceRoutes(); - } - - return EnonceRoutes._instance; - } - registerOnBackend(backend: Express) { backend.get('/gitlab/project/:idOrNamespace/checkTemplateAccess', SecurityMiddleware.check(true, SecurityCheckType.TEACHING_STAFF), this.checkTemplateAccess); } @@ -32,4 +20,4 @@ class EnonceRoutes implements RoutesManager { } -export default EnonceRoutes.instance; +export default new EnonceRoutes(); diff --git a/ExpressAPI/src/routes/SessionRoutes.ts b/ExpressAPI/src/routes/SessionRoutes.ts index 08c3f35..839d091 100644 --- a/ExpressAPI/src/routes/SessionRoutes.ts +++ b/ExpressAPI/src/routes/SessionRoutes.ts @@ -12,18 +12,6 @@ import { User } from '../types/DatabaseTypes'; class SessionRoutes implements RoutesManager { - private static _instance: SessionRoutes; - - private constructor() { } - - public static get instance(): SessionRoutes { - if ( !SessionRoutes._instance ) { - SessionRoutes._instance = new SessionRoutes(); - } - - return SessionRoutes._instance; - } - private readonly loginValidator: ExpressValidator.Schema = { user : { trim : true, @@ -59,4 +47,4 @@ class SessionRoutes implements RoutesManager { } -export default SessionRoutes.instance; +export default new SessionRoutes(); diff --git a/ExpressAPI/src/shared b/ExpressAPI/src/shared index 0328c67..f20c94b 160000 --- a/ExpressAPI/src/shared +++ b/ExpressAPI/src/shared @@ -1 +1 @@ -Subproject commit 0328c67fd0cade4b51fbf82afc7a07a7d16abe5d +Subproject commit f20c94b884f7ab76936b059b712274a35fcc6318 -- GitLab