From 1d9a5e9252915db2598ed75135a2178e5ab30191 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <git@minelli.me> Date: Tue, 30 Apr 2024 13:22:07 +0200 Subject: [PATCH] AssignmentCreation => Add secret in CI/CD env vars --- ExpressAPI/src/routes/AssignmentRoutes.ts | 24 ++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/ExpressAPI/src/routes/AssignmentRoutes.ts b/ExpressAPI/src/routes/AssignmentRoutes.ts index 91c618f..3423f5b 100644 --- a/ExpressAPI/src/routes/AssignmentRoutes.ts +++ b/ExpressAPI/src/routes/AssignmentRoutes.ts @@ -29,30 +29,31 @@ import DojoModelsHelper from '../helpers/DojoModelsHelper'; import SonarManager from '../managers/SonarManager'; import SonarProjectCreation from '../shared/types/Sonar/SonarProjectCreation'; import SharedSonarManager from '../shared/managers/SharedSonarManager'; +import { v4 as uuidv4 } from 'uuid'; class AssignmentRoutes implements RoutesManager { private readonly assignmentValidator: ExpressValidator.Schema = { - name : { + name : { trim : true, notEmpty: true }, - members : { + members : { trim : true, notEmpty : true, customSanitizer: DojoValidators.jsonSanitizer }, - template : { + template: { trim : true, custom : DojoValidators.templateUrlValidator, customSanitizer: DojoValidators.templateUrlSanitizer }, - useSonar : { + useSonar: { trim : true, notEmpty : true, - isBoolean: true, + isBoolean: true }, - language : { + language: { trim : true, notEmpty: true, custom : DojoValidators.supportedLanguageValidator @@ -107,11 +108,13 @@ class AssignmentRoutes implements RoutesManager { params.members = [ await req.session.profile.gitlabProfile.value, ...params.members ]; params.members = params.members.removeObjectDuplicates(gitlabUser => gitlabUser.id); - if (useSonar && !(await SharedSonarManager.isSonarSupported())) { + if ( useSonar && !(await SharedSonarManager.isSonarSupported()) ) { return req.session.sendResponse(res, StatusCodes.UNPROCESSABLE_ENTITY, {}, `Sonar integration is not supported`, DojoStatusCode.ASSIGNMENT_CREATION_SONAR_ERROR); } let repository: GitlabRepository; + const secret: string = uuidv4(); + try { repository = await GitlabManager.createRepository(params.name, Config.assignment.default.description.replace('{{ASSIGNMENT_NAME}}', params.name), Config.assignment.default.visibility, Config.assignment.default.initReadme, Config.gitlab.group.assignments, Config.assignment.default.sharedRunnersEnabled, Config.assignment.default.wikiEnabled, params.template); } catch ( error ) { @@ -134,6 +137,9 @@ class AssignmentRoutes implements RoutesManager { try { await GitlabManager.protectBranch(repository.id, '*', true, GitlabAccessLevel.DEVELOPER, GitlabAccessLevel.DEVELOPER, GitlabAccessLevel.OWNER); + await GitlabManager.addRepositoryVariable(repository.id, 'DOJO_ASSIGNMENT_NAME', repository.name, false, true); + await GitlabManager.addRepositoryVariable(repository.id, 'DOJO_ASSIGNMENT_SECRET', secret, false, true); + await GitlabManager.addRepositoryBadge(repository.id, Config.gitlab.badges.pipeline.link, Config.gitlab.badges.pipeline.imageUrl, 'Pipeline Status'); } catch ( error ) { return GlobalHelper.repositoryCreationError('Repo params error', error, req, res, DojoStatusCode.ASSIGNMENT_CREATION_GITLAB_ERROR, DojoStatusCode.ASSIGNMENT_CREATION_INTERNAL_ERROR, repository); @@ -165,11 +171,11 @@ class AssignmentRoutes implements RoutesManager { // Create Sonar project let sonarProject: SonarProjectCreation | undefined = undefined; - if (useSonar) { + if ( useSonar ) { try { sonarProject = await SonarManager.createProjectFromGitlab(repository.id); } catch ( error ) { - logger.error("Sonar project creation error"); + logger.error('Sonar project creation error'); logger.error(error); return GlobalHelper.repositoryCreationError('Sonar error', error, req, res, DojoStatusCode.ASSIGNMENT_CREATION_SONAR_ERROR, DojoStatusCode.ASSIGNMENT_CREATION_INTERNAL_ERROR, repository); } -- GitLab