Skip to content
Snippets Groups Projects
Select Git revision
  • fee26a0f8244907739dbfbe3d5b21ef71247f829
  • main default protected
  • jw_sonar
  • v6.0.0 protected
  • bedran_exercise-list
  • ask-user-to-delete-exercises-on-duplicates
  • update-dependencies
  • jw_sonar_backup
  • add_route_assignments
  • 6.0.0-dev
  • 5.0.1
  • 5.0.0
  • 4.1.0
  • 4.0.0
  • 3.5.3
  • 3.5.2
  • 3.5.1
  • 3.5.0
  • 3.4.2
  • 3.4.1
  • 3.4.0
  • 3.3.0
  • 3.2.0
  • 3.1.3
  • 3.1.2
  • 3.1.1
  • 3.1.0
  • 3.0.1
  • 3.0.0
29 results

ExerciseRoutes.ts

Blame
  • ExerciseRoutes.ts 18.43 KiB
    import { Express }                 from 'express-serve-static-core';
    import express, { RequestHandler } from 'express';
    import * as ExpressValidator       from 'express-validator';
    import { StatusCodes }             from 'http-status-codes';
    import RoutesManager               from '../express/RoutesManager.js';
    import ParamsValidatorMiddleware   from '../middlewares/ParamsValidatorMiddleware.js';
    import SecurityMiddleware          from '../middlewares/SecurityMiddleware.js';
    import GitlabManager               from '../managers/GitlabManager.js';
    import Config                      from '../config/Config.js';
    import logger                      from '../shared/logging/WinstonLogger.js';
    import DojoValidators              from '../helpers/DojoValidators.js';
    import { v4 as uuidv4 }            from 'uuid';
    import { Prisma }                  from '@prisma/client';
    import { Assignment, Exercise }    from '../types/DatabaseTypes.js';
    import db                          from '../helpers/DatabaseHelper.js';
    import SecurityCheckType           from '../types/SecurityCheckType.js';
    import JSON5                       from 'json5';
    import fs                          from 'fs';
    import path                        from 'path';
    import AssignmentFile              from '../shared/types/Dojo/AssignmentFile.js';
    import ExerciseResultsFile         from '../shared/types/Dojo/ExerciseResultsFile.js';
    import DojoStatusCode              from '../shared/types/Dojo/DojoStatusCode.js';
    import GlobalHelper                from '../helpers/GlobalHelper.js';
    import { IFileDirStat }            from '../shared/helpers/recursiveFilesStats/RecursiveFilesStats.js';
    import ExerciseManager             from '../managers/ExerciseManager.js';
    import * as Gitlab                 from '@gitbeaker/rest';
    import GitlabTreeFileType          from '../shared/types/Gitlab/GitlabTreeFileType.js';
    import { GitbeakerRequestError }   from '@gitbeaker/requester-utils';
    
    
    class ExerciseRoutes implements RoutesManager {
        private readonly exerciseValidator: ExpressValidator.Schema = {
            members: {
                trim           : true,
                notEmpty       : true,
                customSanitizer: DojoValidators.jsonSanitizer
            }
        };
    
        private readonly resultValidator: ExpressValidator.Schema = {
            exitCode     : {
                isInt: true,
                toInt: true
            },
            commit       : {
                trim           : true,
                notEmpty       : true,
                customSanitizer: DojoValidators.jsonSanitizer
            },
            results      : {
                trim           : true,
                notEmpty       : true,
                custom         : DojoValidators.exerciseResultsValidator,
                customSanitizer: DojoValidators.jsonSanitizer
            },
            files        : {
                trim           : true,
                notEmpty       : true,
                customSanitizer: DojoValidators.jsonSanitizer
            },
            archiveBase64: {
                isBase64: true,
                notEmpty: true
            }
        };
    
        registerOnBackend(backend: Express) {
            backend.post('/assignments/:assignmentNameOrUrl/exercises', SecurityMiddleware.check(true, SecurityCheckType.ASSIGNMENT_IS_PUBLISHED), ParamsValidatorMiddleware.validate(this.exerciseValidator), this.createExercise.bind(this) as RequestHandler);
    
            backend.get('/exercises', SecurityMiddleware.check(true, SecurityCheckType.ADMIN), this.getAllExercises.bind(this) as RequestHandler);