diff --git a/NodeApp/src/helpers/GlobalHelper.ts b/NodeApp/src/helpers/GlobalHelper.ts index ca90dc7ab6c1b43672993cf8e73cbbd53e4b88f3..50192cb34aab75aacb9b4e7b3fdabf9a202a35b1 100644 --- a/NodeApp/src/helpers/GlobalHelper.ts +++ b/NodeApp/src/helpers/GlobalHelper.ts @@ -1,6 +1,5 @@ import { Command, Option } from 'commander'; import Config from '../config/Config'; -import SharedGitlabManager from '../shared/managers/SharedGitlabManager'; import SessionManager from '../managers/SessionManager'; import GitlabManager from '../managers/GitlabManager'; @@ -17,14 +16,13 @@ class GlobalHelper { } - private readonly refreshTokenFunction = async () => { + private readonly refreshGitlabTokenFunction = async () => { await SessionManager.refreshTokens(); return SessionManager.gitlabCredentials.accessToken ?? ''; }; - readonly gitlabManager = new GitlabManager('', this.refreshTokenFunction.bind(this)); - readonly sharedGitlabManager = new SharedGitlabManager('', this.refreshTokenFunction.bind(this)); + readonly gitlabManager = new GitlabManager('', this.refreshGitlabTokenFunction.bind(this)); } diff --git a/NodeApp/src/managers/GitlabManager.ts b/NodeApp/src/managers/GitlabManager.ts index 91763e0551cea7b2e27ee6af382d6465956c0f7c..fad38cc53a03179fdca2af5d87be448baccdef54 100644 --- a/NodeApp/src/managers/GitlabManager.ts +++ b/NodeApp/src/managers/GitlabManager.ts @@ -1,47 +1,15 @@ -import ora from 'ora'; -import SharedConfig from '../shared/config/SharedConfig'; -import fs from 'fs-extra'; -import { spawn } from 'child_process'; -import { Gitlab, NotificationSettingSchema, UserSchema } from '@gitbeaker/rest'; -import * as GitlabCore from '@gitbeaker/core'; -import { GitbeakerRequestError } from '@gitbeaker/requester-utils'; -import { StatusCodes } from 'http-status-codes'; -import GlobalHelper from '../helpers/GlobalHelper'; +import ora from 'ora'; +import fs from 'fs-extra'; +import { spawn } from 'child_process'; +import { NotificationSettingSchema, UserSchema } from '@gitbeaker/rest'; +import * as GitlabCore from '@gitbeaker/core'; +import SharedGitlabManager from '../shared/managers/SharedGitlabManager'; type getGitlabUser = (param: number | string) => Promise<UserSchema | undefined> -class GitlabManager { - private api!: GitlabCore.Gitlab<false>; - private readonly refreshTokenFunction?: () => Promise<string>; - - setToken(token: string) { - this.api = new Gitlab(Object.assign({ - host : SharedConfig.gitlab.URL, - token: token - })); - } - - constructor(token: string, refreshTokenFunction?: () => Promise<string>) { - this.refreshTokenFunction = refreshTokenFunction; - this.setToken(token); - } - - private async executeGitlabRequest<T>(request: () => Promise<T>, refreshTokenIfNeeded: boolean = true): Promise<T> { - try { - return await request(); - } catch ( error ) { - if ( this.refreshTokenFunction && refreshTokenIfNeeded && error instanceof GitbeakerRequestError && error.cause?.response.status === StatusCodes.UNAUTHORIZED ) { - this.setToken(await this.refreshTokenFunction()); - - return this.executeGitlabRequest(request, false); - } else { - throw error; - } - } - } - +class GitlabManager extends SharedGitlabManager { public async testToken(verbose: boolean = true): Promise<[ boolean, boolean ]> { if ( verbose ) { ora('Checking Gitlab token: ').start().info(); @@ -152,11 +120,11 @@ class GitlabManager { } public async getUsersById(ids: Array<number>, verbose: boolean = false, verboseIndent: number = 0): Promise<Array<UserSchema | undefined>> { - return this.getGitlabUsers(ids, GlobalHelper.sharedGitlabManager.getUserById.bind(GlobalHelper.sharedGitlabManager) as getGitlabUser, verbose, verboseIndent); + return this.getGitlabUsers(ids, this.getUserById.bind(this) as getGitlabUser, verbose, verboseIndent); } public async getUsersByUsername(usernames: Array<string>, verbose: boolean = false, verboseIndent: number = 0): Promise<Array<UserSchema | undefined>> { - return this.getGitlabUsers(usernames, GlobalHelper.sharedGitlabManager.getUserByUsername.bind(GlobalHelper.sharedGitlabManager) as getGitlabUser, verbose, verboseIndent); + return this.getGitlabUsers(usernames, this.getUserByUsername.bind(this) as getGitlabUser, verbose, verboseIndent); } public async fetchMembers(options: { members_id?: Array<number>, members_username?: Array<string> }): Promise<Array<UserSchema> | undefined> { diff --git a/NodeApp/src/managers/SessionManager.ts b/NodeApp/src/managers/SessionManager.ts index db7f4ee7e242bf36ba4cca38be530fb16796ceb9..ef5bc6596c45a918839f99b93cdb4af870cb0ae4 100644 --- a/NodeApp/src/managers/SessionManager.ts +++ b/NodeApp/src/managers/SessionManager.ts @@ -118,7 +118,6 @@ class SessionManager { if ( credentials.accessToken ) { GlobalHelper.gitlabManager.setToken(credentials.accessToken); - GlobalHelper.sharedGitlabManager.setToken(credentials.accessToken); } } @@ -209,7 +208,7 @@ class SessionManager { }).start(); let gitlabTokens: GitlabToken; try { - gitlabTokens = await GlobalHelper.sharedGitlabManager.getTokens(gitlabCode); + gitlabTokens = await GlobalHelper.gitlabManager.getTokens(gitlabCode); this.gitlabCredentials = { refreshToken: gitlabTokens.refresh_token, accessToken : gitlabTokens.access_token diff --git a/NodeApp/src/shared b/NodeApp/src/shared index 92e13a3dc0ca751737d782430f5e902f1ec20c14..04b3a985a963b87aed586e6b06718dd3052ad32e 160000 --- a/NodeApp/src/shared +++ b/NodeApp/src/shared @@ -1 +1 @@ -Subproject commit 92e13a3dc0ca751737d782430f5e902f1ec20c14 +Subproject commit 04b3a985a963b87aed586e6b06718dd3052ad32e