diff --git a/ExpressAPI/src/managers/GitlabManager.ts b/ExpressAPI/src/managers/GitlabManager.ts index ceadae5bfe1ce54625095bf9f1c25871d564c2f0..c03c34b2d31cb260f4f2a0c7cf3fe0602cc9312c 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 2f4affb7a12eb72ab9c5bd927994f5aac7c60c16..2d8ced089e6321ee86e7493e6cc97ad04cb93e63 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 1346565c5759be045a1347f82eea230d393e38cb..6e8f45841ca086956d34370cb3639262e69aa3c3 160000 --- a/ExpressAPI/src/shared +++ b/ExpressAPI/src/shared @@ -1 +1 @@ -Subproject commit 1346565c5759be045a1347f82eea230d393e38cb +Subproject commit 6e8f45841ca086956d34370cb3639262e69aa3c3