diff --git a/NodeApp/src/Config/Config.ts b/NodeApp/src/Config/Config.ts index a2c6c5bd7558d29bd8502c05a6a19596379b1fd9..c6361d96e8d5a92f601c351406839b98ac183b20 100644 --- a/NodeApp/src/Config/Config.ts +++ b/NodeApp/src/Config/Config.ts @@ -1,10 +1,11 @@ -import * as os from 'os'; +import * as os from 'os'; +import HttpManager from '../managers/HttpManager'; class Config { private static _instance: Config; - public readonly apiURL: string; + private _apiURL!: string; public readonly localConfig: { folder: string; file: string; @@ -19,6 +20,16 @@ class Config { }; } + get apiURL(): string { + return this._apiURL; + } + + set apiURL(url: string) { + this._apiURL = url; + + HttpManager.API_BASE_URL = this._apiURL; + } + public static get instance(): Config { if ( !Config._instance ) { Config._instance = new Config(); diff --git a/NodeApp/src/commander/CommanderApp.ts b/NodeApp/src/commander/CommanderApp.ts index 488f42842899180156b4742e5363e7354d617263..48717ddc617ec57db0bd29d81bb7971f61c29c96 100644 --- a/NodeApp/src/commander/CommanderApp.ts +++ b/NodeApp/src/commander/CommanderApp.ts @@ -5,6 +5,7 @@ import SessionManager from '../managers/SessionManager'; import axios from 'axios'; import HttpManager from '../managers/HttpManager'; import logger from '../shared/logging/WinstonLogger'; +import Config from '../Config/Config'; class CommanderApp { @@ -12,9 +13,20 @@ class CommanderApp { constructor() { this.program - .name('Dojo CLI') + .name('dojo_cli') .description('CLI for the Dojo application') - .version('1.0.0Ɑ'); + .version('1.0.0Ɑ') + .showHelpAfterError() + .configureHelp({ + showGlobalOptions: true, + sortOptions : true, + sortSubcommands : true + }) + .option('-H, --host <string>', 'override the Dojo API endpoint.', Config.apiURL); + + this.program.on('option:host', () => { + Config.apiURL = this.program.opts().host; + }); this.loginCommand(); this.testSessionCommand(); @@ -25,8 +37,8 @@ class CommanderApp { loginCommand() { this.program.command('login') .description('Login into the application') - .requiredOption('-u, --user <string>', '[Required] Username to use when connecting to server.') - .option('-p, --password <string>', 'Password to use when connecting to server. If password is not given it\'s asked.') + .requiredOption('-u, --user <string>', '[required] username to use when connecting to server.') + .option('-p, --password <string>', 'password to use when connecting to server. If password is not given it\'s asked.') .action(async (options) => { const passwordPromise = new Promise((resolve, reject) => { if ( !options.password ) { diff --git a/NodeApp/src/managers/HttpManager.ts b/NodeApp/src/managers/HttpManager.ts index 47091dda02fd3e79f564f930a1abdc8f0ccbe1ef..06f3cd21c9496c86462c5d34ed522ce2894b16f0 100644 --- a/NodeApp/src/managers/HttpManager.ts +++ b/NodeApp/src/managers/HttpManager.ts @@ -6,10 +6,9 @@ import logger from '../shared/logging/WinstonLogger'; class HttpManager { - private readonly API_BASE_URL: string = Config.apiURL; - - public readonly LOGIN_URL: string = `${ this.API_BASE_URL }/login`; - public readonly TEST_SESSION_URL: string = `${ this.API_BASE_URL }/test_session`; + private _API_BASE_URL!: string; + public LOGIN_URL!: string; + public TEST_SESSION_URL!: string; private static _instance: HttpManager; @@ -21,6 +20,17 @@ class HttpManager { return HttpManager._instance; } + private constructor() { + + } + + set API_BASE_URL(url: string) { + this._API_BASE_URL = url; + + this.LOGIN_URL = `${ this._API_BASE_URL }/login`; + this.TEST_SESSION_URL = `${ this._API_BASE_URL }/test_session`; + } + registerAxiosInterceptor() { this.registerRequestInterceptor(); this.registerResponseInterceptor(); @@ -49,17 +59,23 @@ class HttpManager { return response; }, (error) => { - switch ( error.response.status ) { - case 401: // Unauthorized - logger.error('Session expired or inexistent. Please login again.'); - process.exit(1); - break; - case 403: // Forbidden - logger.error('Forbidden access.'); - process.exit(1); - break; + if ( error.response ) { + switch ( error.response.status ) { + case 401: // Unauthorized + logger.error('Session expired or inexistent. Please login again.'); + process.exit(1); + break; + case 403: // Forbidden + logger.error('Forbidden access.'); + process.exit(1); + break; + } + } else { + logger.error('Error connecting to the server.'); + process.exit(1); } + return Promise.reject(error); }); }