Skip to content
Snippets Groups Projects
Select Git revision
  • 1416359bb4d72dbc18bc74307c7137f2680af8aa
  • master default protected
2 results

quicksort.c

Blame
  • Forked from algorithmique / cours
    Source project has a limited visibility.
    SessionRoutes.ts 3.16 KiB
    import { Express }               from 'express-serve-static-core';
    import express                   from 'express';
    import * as ExpressValidator     from 'express-validator';
    import { StatusCodes }           from 'http-status-codes';
    import RoutesManager             from '../express/RoutesManager';
    import ParamsValidatorMiddleware from '../middlewares/ParamsValidatorMiddleware';
    import SecurityMiddleware        from '../middlewares/SecurityMiddleware';
    import GitlabManager             from '../managers/GitlabManager';
    import UserManager               from '../managers/UserManager';
    import DojoStatusCode            from '../shared/types/Dojo/DojoStatusCode';
    import Config                    from '../config/Config';
    import GlobalHelper              from '../helpers/GlobalHelper';
    
    
    class SessionRoutes implements RoutesManager {
        private readonly loginValidator: ExpressValidator.Schema = {
            accessToken : {
                trim    : true,
                notEmpty: true
            },
            refreshToken: {
                trim    : true,
                notEmpty: true
            }
        };
    
        private readonly refreshTokensValidator: ExpressValidator.Schema = {
            refreshToken: {
                trim    : true,
                notEmpty: true
            }
        };
    
        registerOnBackend(backend: Express) {
            backend.post('/login', ParamsValidatorMiddleware.validate(this.loginValidator), this.login.bind(this));
            backend.post('/refresh_tokens', ParamsValidatorMiddleware.validate(this.refreshTokensValidator), this.refreshTokens.bind(this));
            backend.get('/test_session', SecurityMiddleware.check(true), this.testSession.bind(this));
        }
    
        private async login(req: express.Request, res: express.Response) {
            try {
                const params: {
                    accessToken: string, refreshToken: string
                } = req.body;
    
                const gitlabUser = await GitlabManager.getUserProfile(params.accessToken);
    
                if ( gitlabUser ) {
                    req.session.profile = await UserManager.getUpdateFromGitlabProfile(gitlabUser);
    
                    req.session.sendResponse(res, StatusCodes.OK);
                    return;
                } else {
                    req.session.sendResponse(res, StatusCodes.NOT_FOUND);
                }
            } catch ( error ) {
                req.session.sendResponse(res, StatusCodes.INTERNAL_SERVER_ERROR, {}, 'Unknown error while logging in', DojoStatusCode.LOGIN_FAILED);
            }
        }
    
        private async refreshTokens(req: express.Request, res: express.Response) {
            try {
                const params: {
                    refreshToken: string
                } = req.body;
    
                const gitlabTokens = await GlobalHelper.sharedGitlabManager.getTokens(params.refreshToken, true, Config.login.gitlab.client.secret);
    
                req.session.sendResponse(res, StatusCodes.OK, gitlabTokens);
            } catch ( error ) {
                req.session.sendResponse(res, StatusCodes.INTERNAL_SERVER_ERROR, {}, 'Unknown error while refresh tokens', DojoStatusCode.REFRESH_TOKENS_FAILED);
            }
        }
    
        private async testSession(req: express.Request, res: express.Response) {
            req.session.sendResponse(res, StatusCodes.OK);
        }
    }
    
    
    export default new SessionRoutes();