Skip to content
Snippets Groups Projects
Commit cffbc71b authored by michael.minelli's avatar michael.minelli
Browse files

Sonar => Reduce code duplication

parent b2754da9
No related branches found
No related tags found
No related merge requests found
Pipeline #30325 passed
import { Command, Option } from 'commander'; import { Command, Option } from 'commander';
import Config from '../config/Config'; import Config from '../config/Config';
import SharedGitlabManager from '../shared/managers/SharedGitlabManager';
import SessionManager from '../managers/SessionManager'; import SessionManager from '../managers/SessionManager';
import GitlabManager from '../managers/GitlabManager'; import GitlabManager from '../managers/GitlabManager';
...@@ -17,14 +16,13 @@ class GlobalHelper { ...@@ -17,14 +16,13 @@ class GlobalHelper {
} }
private readonly refreshTokenFunction = async () => { private readonly refreshGitlabTokenFunction = async () => {
await SessionManager.refreshTokens(); await SessionManager.refreshTokens();
return SessionManager.gitlabCredentials.accessToken ?? ''; return SessionManager.gitlabCredentials.accessToken ?? '';
}; };
readonly gitlabManager = new GitlabManager('', this.refreshTokenFunction.bind(this)); readonly gitlabManager = new GitlabManager('', this.refreshGitlabTokenFunction.bind(this));
readonly sharedGitlabManager = new SharedGitlabManager('', this.refreshTokenFunction.bind(this));
} }
......
import ora from 'ora'; import ora from 'ora';
import SharedConfig from '../shared/config/SharedConfig'; import fs from 'fs-extra';
import fs from 'fs-extra'; import { spawn } from 'child_process';
import { spawn } from 'child_process'; import { NotificationSettingSchema, UserSchema } from '@gitbeaker/rest';
import { Gitlab, NotificationSettingSchema, UserSchema } from '@gitbeaker/rest'; import * as GitlabCore from '@gitbeaker/core';
import * as GitlabCore from '@gitbeaker/core'; import SharedGitlabManager from '../shared/managers/SharedGitlabManager';
import { GitbeakerRequestError } from '@gitbeaker/requester-utils';
import { StatusCodes } from 'http-status-codes';
import GlobalHelper from '../helpers/GlobalHelper';
type getGitlabUser = (param: number | string) => Promise<UserSchema | undefined> type getGitlabUser = (param: number | string) => Promise<UserSchema | undefined>
class GitlabManager { class GitlabManager extends SharedGitlabManager {
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;
}
}
}
public async testToken(verbose: boolean = true): Promise<[ boolean, boolean ]> { public async testToken(verbose: boolean = true): Promise<[ boolean, boolean ]> {
if ( verbose ) { if ( verbose ) {
ora('Checking Gitlab token: ').start().info(); ora('Checking Gitlab token: ').start().info();
...@@ -152,11 +120,11 @@ class GitlabManager { ...@@ -152,11 +120,11 @@ class GitlabManager {
} }
public async getUsersById(ids: Array<number>, verbose: boolean = false, verboseIndent: number = 0): Promise<Array<UserSchema | undefined>> { 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>> { 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> { public async fetchMembers(options: { members_id?: Array<number>, members_username?: Array<string> }): Promise<Array<UserSchema> | undefined> {
......
...@@ -118,7 +118,6 @@ class SessionManager { ...@@ -118,7 +118,6 @@ class SessionManager {
if ( credentials.accessToken ) { if ( credentials.accessToken ) {
GlobalHelper.gitlabManager.setToken(credentials.accessToken); GlobalHelper.gitlabManager.setToken(credentials.accessToken);
GlobalHelper.sharedGitlabManager.setToken(credentials.accessToken);
} }
} }
...@@ -209,7 +208,7 @@ class SessionManager { ...@@ -209,7 +208,7 @@ class SessionManager {
}).start(); }).start();
let gitlabTokens: GitlabToken; let gitlabTokens: GitlabToken;
try { try {
gitlabTokens = await GlobalHelper.sharedGitlabManager.getTokens(gitlabCode); gitlabTokens = await GlobalHelper.gitlabManager.getTokens(gitlabCode);
this.gitlabCredentials = { this.gitlabCredentials = {
refreshToken: gitlabTokens.refresh_token, refreshToken: gitlabTokens.refresh_token,
accessToken : gitlabTokens.access_token accessToken : gitlabTokens.access_token
......
Subproject commit 92e13a3dc0ca751737d782430f5e902f1ec20c14 Subproject commit 04b3a985a963b87aed586e6b06718dd3052ad32e
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment