diff --git a/config/SharedConfig.ts b/config/SharedConfig.ts index 5bd7b65bddf9e0441d51bf269c37f0cbfb8fa80f..2e1cf15fd8971c1a841882e28c3d62c58652defe 100644 --- a/config/SharedConfig.ts +++ b/config/SharedConfig.ts @@ -4,42 +4,11 @@ class SharedConfig { public readonly logsFolder: string; - public gitlab: { - URL: string, apiURL: string - }; - - public readonly login: { - gitlab: { - client: { - id: string - }, url: { - redirect: string, token: string - } - } - }; - constructor() { this.production = process.env.NODE_ENV === 'production'; this.logsFolder = process.env.LOGS_FOLDER ?? ''; - - this.gitlab = { - URL : process.env.GITLAB_URL ?? '', - apiURL: process.env.GITLAB_API_URL ?? '' - }; - - this.login = { - gitlab: { - client: { - id: process.env.LOGIN_GITLAB_CLIENT_ID ?? '' - }, - url : { - redirect: process.env.LOGIN_GITLAB_URL_REDIRECT ?? '', - token : process.env.LOGIN_GITLAB_URL_TOKEN ?? '' - } - } - }; } } diff --git a/helpers/Dojo/SharedAssignmentHelper.ts b/helpers/Dojo/SharedAssignmentHelper.ts index d57caab79ec99384f09629c803cccb2dc2739950..c1930880b3af881fb110b0057e4a0a0a03f8f501 100644 --- a/helpers/Dojo/SharedAssignmentHelper.ts +++ b/helpers/Dojo/SharedAssignmentHelper.ts @@ -3,10 +3,16 @@ import DojoStatusCode from '../../types/Dojo/DojoStatusCode.js'; import Json5FileValidator from '../Json5FileValidator.js'; import * as Gitlab from '@gitbeaker/rest'; import GitlabPipelineStatus from '../../types/Gitlab/GitlabPipelineStatus.js'; -import GitlabManager from '../../../managers/GitlabManager.js'; +import SharedGitlabManager from '../../managers/SharedGitlabManager'; class SharedAssignmentHelper { + private gitlabManager!: SharedGitlabManager; + + init(gitlabManager: SharedGitlabManager) { + this.gitlabManager = gitlabManager; + } + validateDescriptionFile(filePathOrStr: string, isFile: boolean = true, version: number = 1): { content: AssignmentFile | undefined, isValid: boolean, error: string | null } { if ( version === 1 ) { return Json5FileValidator.validateFile(AssignmentFile, filePathOrStr, isFile); @@ -20,7 +26,7 @@ class SharedAssignmentHelper { } async isPublishable(repositoryId: number): Promise<{ isPublishable: boolean, lastPipeline: Gitlab.PipelineSchema | null, status?: { code: DojoStatusCode, message: string } }> { - const pipelines = await GitlabManager.getRepositoryPipelines(repositoryId, 'main'); + const pipelines = await this.gitlabManager.getRepositoryPipelines(repositoryId, 'main'); if ( pipelines.length > 0 ) { const lastPipeline = pipelines[0]; if ( lastPipeline.status !== GitlabPipelineStatus.SUCCESS.valueOf() ) { diff --git a/managers/SharedGitlabManager.ts b/managers/SharedGitlabManager.ts index abddde1b5ca0b38cc6bdc7039deca77f880a5d68..0faa08d72c57c67728a96e9bf60c5067dc239ebf 100644 --- a/managers/SharedGitlabManager.ts +++ b/managers/SharedGitlabManager.ts @@ -1,5 +1,4 @@ import axios from 'axios'; -import SharedConfig from '../config/SharedConfig.js'; import * as GitlabCore from '@gitbeaker/core'; import { GitbeakerRequestError } from '@gitbeaker/requester-utils'; import { Gitlab, PipelineSchema, ProjectSchema, UserSchema } from '@gitbeaker/rest'; @@ -12,11 +11,11 @@ class SharedGitlabManager { setToken(token: string) { this.api = new Gitlab(Object.assign({ - host: SharedConfig.gitlab.URL + host: this.gitlabUrl ?? '' }, this.refreshTokenFunction ? { oauthToken: token } : { token: token })); } - constructor(token: string, refreshTokenFunction?: () => Promise<string>) { + constructor(public gitlabUrl: string, token: string, public clientId?: string, public urlRedirect?: string, public urlToken?: string, refreshTokenFunction?: () => Promise<string>) { this.refreshTokenFunction = refreshTokenFunction; this.setToken(token); } @@ -36,13 +35,17 @@ class SharedGitlabManager { } async getTokens(codeOrRefresh: string, isRefresh: boolean = false, clientSecret: string = ''): Promise<GitlabToken> { - const response = await axios.post<GitlabToken>(SharedConfig.login.gitlab.url.token, { - client_id : SharedConfig.login.gitlab.client.id, + if ( !this.urlToken ) { + throw new Error('Error when initializing GitlabManager'); + } + + const response = await axios.post<GitlabToken>(this.urlToken, { + client_id : this.clientId, client_secret: clientSecret, grant_type : isRefresh ? 'refresh_token' : 'authorization_code', refresh_token: codeOrRefresh, code : codeOrRefresh, - redirect_uri : SharedConfig.login.gitlab.url.redirect + redirect_uri : this.urlRedirect }); return response.data;