From e64e983a797ca60187c8eff0e244f2b6e9227a76 Mon Sep 17 00:00:00 2001 From: Joel von der Weid <joel.von-der-weid@hesge.ch> Date: Wed, 6 Mar 2024 15:08:42 +0100 Subject: [PATCH] Correct boolean validator bug --- ExpressAPI/src/helpers/GlobalHelper.ts | 9 ++++++++- ExpressAPI/src/routes/AssignmentRoutes.ts | 22 +++++++++++++--------- ExpressAPI/src/routes/BaseRoutes.ts | 4 ++-- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/ExpressAPI/src/helpers/GlobalHelper.ts b/ExpressAPI/src/helpers/GlobalHelper.ts index f9e59ee..18f0d57 100644 --- a/ExpressAPI/src/helpers/GlobalHelper.ts +++ b/ExpressAPI/src/helpers/GlobalHelper.ts @@ -6,6 +6,7 @@ import axios, { AxiosError } from 'axios'; import { StatusCodes } from 'http-status-codes'; import DojoStatusCode from '../shared/types/Dojo/DojoStatusCode'; import SharedConfig from '../shared/config/SharedConfig'; +import * as https from 'https'; class GlobalHelper { @@ -31,7 +32,13 @@ class GlobalHelper { async isSonarSupported(): Promise<boolean> { try { - const sonar = await axios.get(SharedConfig.sonar.url); + // Use custom instance to allow self-signed certificates + const instance = axios.create({ + httpsAgent: new https.Agent({ + rejectUnauthorized: false + }) + }); + const sonar = await instance.get(SharedConfig.sonar.url); return SharedConfig.sonar.enabled && sonar.status == 200; } catch ( error ) { return false; diff --git a/ExpressAPI/src/routes/AssignmentRoutes.ts b/ExpressAPI/src/routes/AssignmentRoutes.ts index 28bdb2b..7b192fc 100644 --- a/ExpressAPI/src/routes/AssignmentRoutes.ts +++ b/ExpressAPI/src/routes/AssignmentRoutes.ts @@ -30,23 +30,25 @@ import DojoModelsHelper from '../helpers/DojoModelsHelper'; 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: { - notEmpty: true - } + useSonar : { + trim : true, + notEmpty : true, + isBoolean: true, + }, }; private readonly assignmentAddCorrigeValidator: ExpressValidator.Schema = { @@ -88,12 +90,14 @@ class AssignmentRoutes implements RoutesManager { private async createAssignment(req: express.Request, res: express.Response) { const params: { - name: string, members: Array<GitlabUser>, template: string, useSonar: boolean + name: string, members: Array<GitlabUser>, template: string, useSonar: string } = req.body; + const useSonar = params.useSonar === 'true'; + params.members = [ await req.session.profile.gitlabProfile.value, ...params.members ]; params.members = params.members.removeObjectDuplicates(gitlabUser => gitlabUser.id); - if (params.useSonar && !(await GlobalHelper.isSonarSupported())) { + if (useSonar && !(await GlobalHelper.isSonarSupported())) { return req.session.sendResponse(res, StatusCodes.UNPROCESSABLE_ENTITY, {}, `Sonar integration is not supported`, DojoStatusCode.ASSIGNMENT_CREATION_SONAR_ERROR); } @@ -154,7 +158,7 @@ class AssignmentRoutes implements RoutesManager { gitlabCreationInfo: repository as unknown as Prisma.JsonObject, gitlabLastInfo : repository as unknown as Prisma.JsonObject, gitlabLastInfoDate: new Date(), - useSonar : params.useSonar, + useSonar : useSonar, staff : { connectOrCreate: [ ...params.members.map(gitlabUser => { return { diff --git a/ExpressAPI/src/routes/BaseRoutes.ts b/ExpressAPI/src/routes/BaseRoutes.ts index 5d29ac0..6db7ef7 100644 --- a/ExpressAPI/src/routes/BaseRoutes.ts +++ b/ExpressAPI/src/routes/BaseRoutes.ts @@ -2,7 +2,7 @@ import { Express } from 'express-serve-static-core'; import express from 'express'; import { StatusCodes } from 'http-status-codes'; import RoutesManager from '../express/RoutesManager'; -import SharedConfig from '../shared/config/SharedConfig'; +import GlobalHelper from '../helpers/GlobalHelper'; class BaseRoutes implements RoutesManager { @@ -22,7 +22,7 @@ class BaseRoutes implements RoutesManager { private async sonar(req: express.Request, res: express.Response) { const data = { - sonarEnabled: SharedConfig.useSonar + sonarEnabled: await GlobalHelper.isSonarSupported() }; return req.session.sendResponse(res, StatusCodes.OK, data); } -- GitLab