From 9f589825a91760cf492fd13535b18d066fcaa98f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <git@minelli.me> Date: Mon, 4 Mar 2024 15:15:27 +0100 Subject: [PATCH] GitlabManager => Add custom error status code --- ExpressAPI/src/managers/GitlabManager.ts | 15 +++++++++++---- ExpressAPI/src/routes/GitlabRoutes.ts | 2 +- ExpressAPI/src/shared | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/ExpressAPI/src/managers/GitlabManager.ts b/ExpressAPI/src/managers/GitlabManager.ts index ceadae5..c03c34b 100644 --- a/ExpressAPI/src/managers/GitlabManager.ts +++ b/ExpressAPI/src/managers/GitlabManager.ts @@ -16,6 +16,7 @@ import GitlabProfile from '../shared/types/Gitlab/GitlabProfile'; import GitlabRelease from '../shared/types/Gitlab/GitlabRelease'; import { CommitSchema, Gitlab } from '@gitbeaker/rest'; import logger from '../shared/logging/WinstonLogger'; +import DojoStatusCode from '../shared/types/Dojo/DojoStatusCode'; class GitlabManager { @@ -169,16 +170,18 @@ class GitlabManager { return response.data; } - async checkTemplateAccess(projectIdOrNamespace: string, req: express.Request): Promise<StatusCodes> { + async checkTemplateAccess(projectIdOrNamespace: string, req: express.Request, res: express.Response) { // 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) ) { - return StatusCodes.OK; + req.session.sendResponse(res, StatusCodes.OK); + return; } } catch ( e ) { - return StatusCodes.NOT_FOUND; + req.session.sendResponse(res, StatusCodes.NOT_FOUND, undefined, 'Template not found', DojoStatusCode.GITLAB_TEMPLATE_NOT_FOUND); + return; } // Check if the user and dojo are members (with at least reporter access) of the project @@ -197,7 +200,11 @@ class GitlabManager { } }); - return isUsersAtLeastReporter.user && isUsersAtLeastReporter.dojo ? StatusCodes.OK : StatusCodes.UNAUTHORIZED; + if ( isUsersAtLeastReporter.user && isUsersAtLeastReporter.dojo ) { + req.session.sendResponse(res, StatusCodes.OK); + } else { + req.session.sendResponse(res, StatusCodes.UNAUTHORIZED, undefined, 'Template access unauthorized', DojoStatusCode.GITLAB_TEMPLATE_ACCESS_UNAUTHORIZED); + } } async protectBranch(repoId: number, branchName: string, allowForcePush: boolean, allowedToMerge: GitlabAccessLevel, allowedToPush: GitlabAccessLevel, allowedToUnprotect: GitlabAccessLevel): Promise<GitlabMember> { diff --git a/ExpressAPI/src/routes/GitlabRoutes.ts b/ExpressAPI/src/routes/GitlabRoutes.ts index 2f4affb..2d8ced0 100644 --- a/ExpressAPI/src/routes/GitlabRoutes.ts +++ b/ExpressAPI/src/routes/GitlabRoutes.ts @@ -14,7 +14,7 @@ class GitlabRoutes implements RoutesManager { private async checkTemplateAccess(req: express.Request, res: express.Response) { const gitlabProjectIdOrNamespace: string = req.params.gitlabProjectIdOrNamespace; - return res.status(await GitlabManager.checkTemplateAccess(gitlabProjectIdOrNamespace, req)).send(); + await GitlabManager.checkTemplateAccess(gitlabProjectIdOrNamespace, req, res); } } diff --git a/ExpressAPI/src/shared b/ExpressAPI/src/shared index 1346565..6e8f458 160000 --- a/ExpressAPI/src/shared +++ b/ExpressAPI/src/shared @@ -1 +1 @@ -Subproject commit 1346565c5759be045a1347f82eea230d393e38cb +Subproject commit 6e8f45841ca086956d34370cb3639262e69aa3c3 -- GitLab