diff --git a/NodeApp/src/commander/enonce/EnonceCreateCommand.ts b/NodeApp/src/commander/enonce/EnonceCreateCommand.ts index 9291f3a88fbef421aadcc776d60152606531d10e..75a5a9cfe9ead2a3eed8e254067c8f554d44d63d 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 8223e6edf6896b67b238262fd6f2df247b8180bf..c40e1a7ccf1f6a6d0bf9188be7d57c8248c64daa 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 2efb5e265151102d02c1bf0b2a8417fef48e57bb..b82ae45ff41a57c895c6ea9d67e792cb6ca85ed1 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 4d533c08eec39e1fcd9623787104f65a370b2cb8..9ede571d49e780480c62560f780036df0accf7af 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 ) {