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