From 5e37d41195073f51544a51d7bdd069a9b09b9cd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me> Date: Tue, 25 Jul 2023 11:51:42 +0200 Subject: [PATCH] CheckAccesses => Move to independent function --- .../commander/enonce/EnonceCreateCommand.ts | 12 +-------- .../exercice/ExerciceCreateCommand.ts | 12 +-------- NodeApp/src/helpers/AccessesHelper.ts | 27 +++++++++++++++++++ NodeApp/src/managers/SessionManager.ts | 20 +++++++------- 4 files changed, 38 insertions(+), 33 deletions(-) create mode 100644 NodeApp/src/helpers/AccessesHelper.ts diff --git a/NodeApp/src/commander/enonce/EnonceCreateCommand.ts b/NodeApp/src/commander/enonce/EnonceCreateCommand.ts index 2ea03fb..ea285bd 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 015b780..d05767e 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 0000000..0327ed2 --- /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 aa1420a..ccf34ef 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); } } -- GitLab