From d8ac566877e0ce2cd82d90f5e4e4518e30d33925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <git@minelli.me> Date: Mon, 4 Mar 2024 15:31:46 +0100 Subject: [PATCH] GitlabManager => checkTemplateAccess: Return boolean if res is undefined --- ExpressAPI/src/controllers/Session.ts | 12 +++++++----- ExpressAPI/src/helpers/DojoValidators.ts | 3 +-- ExpressAPI/src/managers/GitlabManager.ts | 8 +++++--- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/ExpressAPI/src/controllers/Session.ts b/ExpressAPI/src/controllers/Session.ts index 7be2dea..d264c7a 100644 --- a/ExpressAPI/src/controllers/Session.ts +++ b/ExpressAPI/src/controllers/Session.ts @@ -64,12 +64,14 @@ class Session { Send a response to the client Information: Data could be a promise or an object. If it's a promise, we wait on the data to be resolved before sending the response */ - sendResponse(res: express.Response, code: number, data?: unknown, descriptionOverride?: string, internalCode?: number) { - Promise.resolve(data).then((toReturn: unknown) => { - this.getResponse(internalCode ?? code, toReturn, descriptionOverride).then(response => { - res.status(code).json(response); + sendResponse(res: express.Response | undefined, code: number, data?: unknown, descriptionOverride?: string, internalCode?: number) { + if ( res ) { + Promise.resolve(data).then((toReturn: unknown) => { + this.getResponse(internalCode ?? code, toReturn, descriptionOverride).then(response => { + res.status(code).json(response); + }); }); - }); + } } } diff --git a/ExpressAPI/src/helpers/DojoValidators.ts b/ExpressAPI/src/helpers/DojoValidators.ts index 2f3797f..442f160 100644 --- a/ExpressAPI/src/helpers/DojoValidators.ts +++ b/ExpressAPI/src/helpers/DojoValidators.ts @@ -1,5 +1,4 @@ import Config from '../config/Config'; -import { StatusCodes } from 'http-status-codes'; import { CustomValidator, ErrorMessage, FieldMessageFactory, Meta } from 'express-validator/src/base'; import { BailOptions, ValidationChain } from 'express-validator/src/chain'; import GitlabManager from '../managers/GitlabManager'; @@ -63,7 +62,7 @@ class DojoValidators { const template = this.getParamValue(req, path) as string; if ( template ) { GitlabManager.checkTemplateAccess(template, req).then(templateAccess => { - templateAccess !== StatusCodes.OK ? reject() : resolve(true); + templateAccess ? resolve(true) : reject(); }); } resolve(true); diff --git a/ExpressAPI/src/managers/GitlabManager.ts b/ExpressAPI/src/managers/GitlabManager.ts index c03c34b..528d24d 100644 --- a/ExpressAPI/src/managers/GitlabManager.ts +++ b/ExpressAPI/src/managers/GitlabManager.ts @@ -170,18 +170,18 @@ class GitlabManager { return response.data; } - async checkTemplateAccess(projectIdOrNamespace: string, req: express.Request, res: express.Response) { + async checkTemplateAccess(projectIdOrNamespace: string, req: express.Request, res?: express.Response): Promise<boolean> { // Get the Gitlab project and check if it have public or internal visibility try { const project: GitlabRepository = await this.getRepository(projectIdOrNamespace); if ( [ GitlabVisibility.PUBLIC.valueOf(), GitlabVisibility.INTERNAL.valueOf() ].includes(project.visibility) ) { req.session.sendResponse(res, StatusCodes.OK); - return; + return true; } } catch ( e ) { req.session.sendResponse(res, StatusCodes.NOT_FOUND, undefined, 'Template not found', DojoStatusCode.GITLAB_TEMPLATE_NOT_FOUND); - return; + return false; } // Check if the user and dojo are members (with at least reporter access) of the project @@ -202,8 +202,10 @@ class GitlabManager { if ( isUsersAtLeastReporter.user && isUsersAtLeastReporter.dojo ) { req.session.sendResponse(res, StatusCodes.OK); + return true; } else { req.session.sendResponse(res, StatusCodes.UNAUTHORIZED, undefined, 'Template access unauthorized', DojoStatusCode.GITLAB_TEMPLATE_ACCESS_UNAUTHORIZED); + return false; } } -- GitLab