import { Command, Option } from 'commander'; import Config from '../config/Config.js'; import SessionManager from '../managers/SessionManager.js'; import TextStyle from '../types/TextStyle.js'; import ora from 'ora'; import DojoBackendManager from '../managers/DojoBackendManager.js'; import Assignment from '../sharedByClients/models/Assignment.js'; class GlobalHelper { public runCommandDefinition(command: Command) { command .option('-p, --path <value>', 'assignment path', Config.folders.defaultLocalExercise) .option('-v, --verbose', 'verbose mode - display principal container output in live') .addOption(new Option('-w, --super-verbose', 'verbose mode - display all docker compose logs (build included) in live').conflicts('verbose')) .addOption(new Option('--verbose-ssj2').hideHelp().implies({ superVerbose: true })); return command; } public readonly refreshGitlabTokenFunction = async () => { await SessionManager.refreshTokens(); return SessionManager.gitlabCredentials.accessToken ?? ''; }; public async checkAssignmentCorrectionAccess(assignmentName: string): Promise<Assignment | undefined> { console.log(TextStyle.BLOCK('Please wait while we check access...')); const assignmentGetSpinner: ora.Ora = ora('Checking if assignment exists').start(); const assignment = await DojoBackendManager.getAssignment(assignmentName); if ( !assignment ) { assignmentGetSpinner.fail(`The assignment doesn't exists`); return undefined; } assignmentGetSpinner.succeed(`The assignment exists`); const assignmentAccessSpinner: ora.Ora = ora('Checking assignment access').start(); if ( assignment.staff.find(staff => staff.id === SessionManager.profile?.id) === undefined ) { assignmentAccessSpinner.fail(`You are not in the staff of the assignment`); return undefined; } assignmentAccessSpinner.succeed(`You are in the staff of the assignment`); return assignment; } } export default new GlobalHelper();