From 3cf69d1398828cff006ede2b0ceb71a1a428ce5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me> Date: Mon, 19 Jun 2023 13:12:39 +0200 Subject: [PATCH] EnonceCreate => Increase verify data interface --- .../commander/enonce/EnonceCreateCommand.ts | 43 ++++++++++--------- NodeApp/src/managers/GitlabManager.ts | 28 +++++++++--- NodeApp/src/managers/HttpManager.ts | 5 +++ NodeApp/src/managers/SessionManager.ts | 6 +-- 4 files changed, 50 insertions(+), 32 deletions(-) diff --git a/NodeApp/src/commander/enonce/EnonceCreateCommand.ts b/NodeApp/src/commander/enonce/EnonceCreateCommand.ts index 9291f3a..75a5a9c 100644 --- a/NodeApp/src/commander/enonce/EnonceCreateCommand.ts +++ b/NodeApp/src/commander/enonce/EnonceCreateCommand.ts @@ -42,46 +42,47 @@ class EnonceCreateCommand extends CommanderCommand { } private async fetchMembers(options: any): Promise<Array<GitlabUser> | false> { - options.members_id = options.members_id ? options.members_id.concat([ Config.gitlab.dojoAccountId ]) : [ Config.gitlab.dojoAccountId ]; - - const spinner: ora.Ora = ora('Checking Gitlab members: Fetching members by id...').start(); + ora('Checking Gitlab members:').start().info(); let members: Array<GitlabUser> = []; - async function getMembers<T>(context: any, functionName: string, paramsToSearch: Array<T>, spinner: ora.Ora): Promise<boolean> { - const result = await (context[functionName] as (arg: Array<T>) => Promise<Array<GitlabUser | undefined>>)(paramsToSearch); + async function getMembers<T>(context: any, functionName: string, paramsToSearch: Array<T>): Promise<boolean> { + const result = await (context[functionName] as (arg: Array<T>, verbose: boolean, verboseIndent: number) => Promise<Array<GitlabUser | undefined>>)(paramsToSearch, true, 8); + if ( result.every(user => user) ) { members = members.concat(result as Array<GitlabUser>); return true; } else { - spinner.fail('Checking Gitlab members: Some members were not found : ' + result.map((value, index: number) => { - if ( value === undefined ) { - return paramsToSearch[index]; - } else { - return undefined; - } - }).filter((value) => value).join(', ') + '.'); return false; } } + let result = true; + if ( options.members_id ) { - spinner.text = 'Checking Gitlab members: Fetching members by id...'; - if ( !await getMembers(GitlabManager, 'getUsersById', options.members_id, spinner) ) { - return false; - } + ora({ + text : 'Fetching members by id:', + indent: 4 + }).start().info(); + + result = await getMembers(GitlabManager, 'getUsersById', options.members_id); } if ( options.members_username ) { - spinner.text = 'Checking Gitlab members: Fetching members by username...'; - if ( !await getMembers(GitlabManager, 'getUsersByUsername', options.members_username, spinner) ) { - return false; - } + ora({ + text : 'Fetching members by username:', + indent: 4 + }).start().info(); + + result = result && await getMembers(GitlabManager, 'getUsersByUsername', options.members_username); + } + + if ( !result ) { + return false; } members = members.reduce((unique, user) => (unique.findIndex(uniqueUser => uniqueUser.id === user.id) !== -1 ? unique : [ ...unique, user ]), Array<GitlabUser>()); - spinner.succeed('Checking Gitlab members: All members were found.'); return members; } diff --git a/NodeApp/src/managers/GitlabManager.ts b/NodeApp/src/managers/GitlabManager.ts index 8223e6e..c40e1a7 100644 --- a/NodeApp/src/managers/GitlabManager.ts +++ b/NodeApp/src/managers/GitlabManager.ts @@ -121,15 +121,31 @@ class GitlabManager { return axios.put(`${ Config.gitlab.apiURL }/notification_settings`, { params: new URLSearchParams(newSettings) }); } - private async getGitlabUser(paramsToSearch: Array<string | number>, paramName: string): Promise<Array<GitlabUser | undefined>> { + private async getGitlabUser(paramsToSearch: Array<string | number>, paramName: string, verbose: boolean = false, verboseIndent: number = 0): Promise<Array<GitlabUser | undefined>> { try { return await Promise.all(paramsToSearch.map(async param => { + const spinner: ora.Ora = ora({ + text : `Getting user ${ param }`, + indent: verboseIndent + }); + if ( verbose ) { + spinner.start(); + } const params: any = {}; params[paramName] = param; const user = await axios.get(`${ Config.gitlab.apiURL }/users`, { params: params }); if ( user.data[0] ) { - return GitlabUser.createFromJson(user.data[0]); + const gitlabUser = GitlabUser.createFromJson(user.data[0]); + + if ( verbose ) { + spinner.succeed(`${ gitlabUser.username } (${ gitlabUser.id })`); + } + return gitlabUser; + } else { + if ( verbose ) { + spinner.fail(`${ param }`); + } } })); } catch ( e ) { @@ -137,12 +153,12 @@ class GitlabManager { } } - public async getUsersById(ids: Array<number>): Promise<Array<GitlabUser | undefined>> { - return await this.getGitlabUser(ids, 'id'); + public async getUsersById(ids: Array<number>, verbose: boolean = false, verboseIndent: number = 0): Promise<Array<GitlabUser | undefined>> { + return await this.getGitlabUser(ids, 'id', verbose, verboseIndent); } - public async getUsersByUsername(usernames: Array<string>): Promise<Array<GitlabUser | undefined>> { - return await this.getGitlabUser(usernames, 'search'); + public async getUsersByUsername(usernames: Array<string>, verbose: boolean = false, verboseIndent: number = 0): Promise<Array<GitlabUser | undefined>> { + return await this.getGitlabUser(usernames, 'search', verbose, verboseIndent); } } diff --git a/NodeApp/src/managers/HttpManager.ts b/NodeApp/src/managers/HttpManager.ts index 2efb5e2..b82ae45 100644 --- a/NodeApp/src/managers/HttpManager.ts +++ b/NodeApp/src/managers/HttpManager.ts @@ -46,6 +46,11 @@ class HttpManager { } if ( SessionManager.isLogged && config.url && config.url.indexOf(Config.apiURL) !== -1 ) { + config.headers = { + ...config.headers, + 'Content-Type': 'multipart/form-data' + } as AxiosRequestHeaders; + config.headers.Authorization = 'Bearer ' + SessionManager.token; } diff --git a/NodeApp/src/managers/SessionManager.ts b/NodeApp/src/managers/SessionManager.ts index 4d533c0..9ede571 100644 --- a/NodeApp/src/managers/SessionManager.ts +++ b/NodeApp/src/managers/SessionManager.ts @@ -57,11 +57,7 @@ class SessionManager { const response = await axios.post(HttpManager.LOGIN_URL, { user : user, password: password - }, { - headers: { - 'Content-Type': 'multipart/form-data' - } - }); + }); spinner.succeed('Logged in'); } catch ( error ) { -- GitLab