diff --git a/NodeApp/src/commander/enonce/EnonceCreateCommand.ts b/NodeApp/src/commander/enonce/EnonceCreateCommand.ts index 2ea03fb4d7afb81cab400935dd418c8db60e5478..ea285bd5f9d43e435d7cce1800225f87bbfbb535 100644 --- a/NodeApp/src/commander/enonce/EnonceCreateCommand.ts +++ b/NodeApp/src/commander/enonce/EnonceCreateCommand.ts @@ -22,16 +22,6 @@ class EnonceCreateCommand extends CommanderCommand { .action(this.commandAction.bind(this)); } - private async checkAccesses(): Promise<boolean> { - let sessionResult = await SessionManager.testSession(true, [ 'teachingStaff' ]); - - if ( !sessionResult || !sessionResult.teachingStaff ) { - return false; - } - - return (await GitlabManager.testToken(true)).every(result => result); - } - protected async commandAction(options: any): Promise<void> { let members!: Array<GitlabUser> | false; let templateIdOrNamespace: string | null = null; @@ -40,7 +30,7 @@ class EnonceCreateCommand extends CommanderCommand { { console.log(chalk.cyan('Please wait while we verify and retrieve data...')); - if ( !await this.checkAccesses() ) { + if ( !await AccessesHelper.checkTeachingStaff() ) { return; } diff --git a/NodeApp/src/commander/exercice/ExerciceCreateCommand.ts b/NodeApp/src/commander/exercice/ExerciceCreateCommand.ts index 015b780c9dfc963175eaf267f8c29f12d2a9e342..d05767ee53c3ca14552a1ca99e763fd313645b14 100644 --- a/NodeApp/src/commander/exercice/ExerciceCreateCommand.ts +++ b/NodeApp/src/commander/exercice/ExerciceCreateCommand.ts @@ -21,16 +21,6 @@ class ExerciceCreateCommand extends CommanderCommand { .action(this.commandAction.bind(this)); } - private async checkAccesses(): Promise<boolean> { - let sessionResult = await SessionManager.testSession(true, [ 'student' ]); - - if ( !sessionResult ) { - return false; - } - - return (await GitlabManager.testToken(true)).every(result => result); - } - protected async commandAction(options: any): Promise<void> { let members!: Array<GitlabUser> | false; let enonce!: Enonce | undefined; @@ -39,7 +29,7 @@ class ExerciceCreateCommand extends CommanderCommand { { console.log(chalk.cyan('Please wait while we verify and retrieve data...')); - if ( !await this.checkAccesses() ) { + if ( !await AccessesHelper.checkStudent() ) { return; } diff --git a/NodeApp/src/helpers/AccessesHelper.ts b/NodeApp/src/helpers/AccessesHelper.ts new file mode 100644 index 0000000000000000000000000000000000000000..0327ed2ddc644e485460ec3903df3d74219ba70b --- /dev/null +++ b/NodeApp/src/helpers/AccessesHelper.ts @@ -0,0 +1,27 @@ +import SessionManager from '../managers/SessionManager'; +import GitlabManager from '../managers/GitlabManager'; + + +class AccessesHelper { + async checkStudent(): Promise<boolean> { + let sessionResult = await SessionManager.testSession(true, [ 'student' ]); + + if ( !sessionResult ) { + return false; + } + + return (await GitlabManager.testToken(true)).every(result => result); + } + + async checkTeachingStaff(): Promise<boolean> { + let sessionResult = await SessionManager.testSession(true, [ 'teachingStaff' ]); + + if ( !sessionResult || !sessionResult.teachingStaff ) { + return false; + } + + return (await GitlabManager.testToken(true)).every(result => result); + } +}; + +export default new AccessesHelper(); \ No newline at end of file diff --git a/NodeApp/src/managers/SessionManager.ts b/NodeApp/src/managers/SessionManager.ts index aa1420a1bd97a1253a37e465a6320b6ddb848747..ccf34ef43acdf39c40dccac24ad2aa59f76bc403 100644 --- a/NodeApp/src/managers/SessionManager.ts +++ b/NodeApp/src/managers/SessionManager.ts @@ -70,17 +70,15 @@ class SessionManager { this.token = ''; } - checkPermissions(verbose: boolean = true, indent: number = 8, ...checkPermissions: Array<string>): Permissions { + checkPermissions(verbose: boolean = true, indent: number = 8, checkPermissions: Array<string> | null = []): Permissions { const hasPermission = (permissionPredicate: () => boolean, verboseText: string): boolean => { - const spinner: ora.Ora = ora({ - text : verboseText, - indent: indent - }); - let isAllowed: boolean = this.profile.id !== -1 && permissionPredicate(); if ( verbose ) { - spinner.start(); + const spinner: ora.Ora = ora({ + text : verboseText, + indent: indent + }).start(); isAllowed ? spinner.succeed() : spinner.fail(); } @@ -88,13 +86,13 @@ class SessionManager { }; return { - teachingStaff: checkPermissions.length == 0 || checkPermissions.includes('teachingStaff') ? hasPermission(() => this.profile.isTeachingStaff, 'Teaching staff permissions') : false, - student : checkPermissions.length == 0 || checkPermissions.includes('student') ? hasPermission(() => true, 'Student permissions') : false + teachingStaff: checkPermissions && (checkPermissions.length == 0 || checkPermissions.includes('teachingStaff')) ? hasPermission(() => this.profile.isTeachingStaff, 'Teaching staff permissions') : false, + student : checkPermissions && (checkPermissions.length == 0 || checkPermissions.includes('student')) ? hasPermission(() => true, 'Student permissions') : false }; } - async testSession(verbose: boolean = true, checkPermissions: Array<string> = []): Promise<false | Permissions> { + async testSession(verbose: boolean = true, checkPermissions: Array<string> | null = []): Promise<false | Permissions> { if ( verbose ) { ora('Checking Dojo session: ').start().info(); } @@ -123,7 +121,7 @@ class SessionManager { return false; } - return this.checkPermissions(verbose, 8, ...checkPermissions); + return this.checkPermissions(verbose, 8, checkPermissions); } }