Skip to content
Snippets Groups Projects
Select Git revision
  • 7ad41b5c7585eef542ad48ea5349ee1ca4e718d7
  • 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

AssignmentRoutes.ts

Blame
  • AssignmentRoutes.ts 11.91 KiB
    import { Express }                    from 'express-serve-static-core';
    import express                        from 'express';
    import * as ExpressValidator          from 'express-validator';
    import { NON_AUTHORITATIVE_INFORMATION, StatusCodes }                from 'http-status-codes';
    import RoutesManager                  from '../express/RoutesManager';
    import ParamsValidatorMiddleware      from '../middlewares/ParamsValidatorMiddleware';
    import SecurityMiddleware             from '../middlewares/SecurityMiddleware';
    import SecurityCheckType              from '../types/SecurityCheckType';
    import GitlabUser                     from '../shared/types/Gitlab/GitlabUser';
    import GitlabManager                  from '../managers/GitlabManager';
    import Config                         from '../config/Config';
    import GitlabMember                   from '../shared/types/Gitlab/GitlabMember';
    import GitlabAccessLevel              from '../shared/types/Gitlab/GitlabAccessLevel';
    import GitlabRepository               from '../shared/types/Gitlab/GitlabRepository';
    import { AxiosError, HttpStatusCode } from 'axios';
    import logger                         from '../shared/logging/WinstonLogger';
    import DojoValidators                 from '../helpers/DojoValidators';
    import { Prisma }                     from '@prisma/client';
    import db                             from '../helpers/DatabaseHelper';
    import { Assignment }                 from '../types/DatabaseTypes';
    import AssignmentManager              from '../managers/AssignmentManager';
    import GitlabVisibility               from '../shared/types/Gitlab/GitlabVisibility';
    import fs                             from 'fs';
    import path                           from 'path';
    import SharedAssignmentHelper         from '../shared/helpers/Dojo/SharedAssignmentHelper';
    import GlobalHelper                   from '../helpers/GlobalHelper';
    import DojoStatusCode                 from '../shared/types/Dojo/DojoStatusCode';
    
    class AssignmentRoutes implements RoutesManager {
        private readonly assignmentValidator: ExpressValidator.Schema = {
            name    : {
                trim    : true,
                notEmpty: true
            },
            members : {
                trim           : true,
                notEmpty       : true,
                customSanitizer: DojoValidators.jsonSanitizer
            },
            template: {
                trim           : true,
                custom         : DojoValidators.templateUrlValidator,
                customSanitizer: DojoValidators.templateUrlSanitizer
            }
        };
        
        registerOnBackend(backend: Express) {
            backend.get('/assignments/:assignmentNameOrUrl', SecurityMiddleware.check(true), this.getAssignment.bind(this));
            backend.post('/assignments', SecurityMiddleware.check(true, SecurityCheckType.TEACHING_STAFF), ParamsValidatorMiddleware.validate(this.assignmentValidator), this.createAssignment.bind(this));
            
            backend.patch('/assignments/:assignmentNameOrUrl/publish', SecurityMiddleware.check(true, SecurityCheckType.ASSIGNMENT_STAFF), this.publishAssignment.bind(this));
            backend.patch('/assignments/:assignmentNameOrUrl/unpublish', SecurityMiddleware.check(true, SecurityCheckType.ASSIGNMENT_STAFF), this.unpublishAssignment.bind(this));
    
            backend.patch('/assignments/:assignmentNameOrUrl/deleted', SecurityMiddleware.check(false, SecurityCheckType.ASSIGNMENT_STAFF), this.deleteAssignment.bind(this));
        }
        // Get an assignment by its name or gitlab url
        private async getAssignment(req: express.Request, res: express.Response) {
            const assignment: Assignment | undefined = req.boundParams.assignment;
            
            if ( assignment && !assignment.published && !await AssignmentManager.isUserAllowedToAccessAssignment(assignment, req.session.profile) ) {
                // eslint-disable-next-line @typescript-eslint/ban-ts-comment
                // @ts-ignore
                delete assignment.gitlabId;
                // eslint-disable-next-line @typescript-eslint/ban-ts-comment
                // @ts-ignore
                delete assignment.gitlabLink;
                // eslint-disable-next-line @typescript-eslint/ban-ts-comment
                // @ts-ignore
                delete assignment.gitlabCreationInfo;
                // eslint-disable-next-line @typescript-eslint/ban-ts-comment