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

HttpManager => Add support for client version errors from server

parent 00d45704
Branches
Tags
No related merge requests found
Pipeline #26572 passed
import axios, { AxiosRequestHeaders } from 'axios'; import axios, { AxiosRequestHeaders } from 'axios';
import SessionManager from './SessionManager'; import SessionManager from './SessionManager';
import FormData from 'form-data'; import FormData from 'form-data';
import logger from '../shared/logging/WinstonLogger';
import GitlabManager from './GitlabManager'; import GitlabManager from './GitlabManager';
import { StatusCodes } from 'http-status-codes'; import { StatusCodes } from 'http-status-codes';
import ClientsSharedConfig from '../sharedByClients/config/ClientsSharedConfig'; import ClientsSharedConfig from '../sharedByClients/config/ClientsSharedConfig';
import { version } from '../config/Version';
import DojoBackendResponse from '../shared/types/Dojo/DojoBackendResponse';
import DojoStatusCode from '../shared/types/Dojo/DojoStatusCode';
import boxen from 'boxen';
import Config from '../config/Config';
class HttpManager { class HttpManager {
public handleCommandErrors: boolean = true; public handleAuthorizationCommandErrors: boolean = true;
registerAxiosInterceptor() { registerAxiosInterceptor() {
this.registerRequestInterceptor(); this.registerRequestInterceptor();
...@@ -32,6 +36,9 @@ class HttpManager { ...@@ -32,6 +36,9 @@ class HttpManager {
if ( SessionManager.isLogged ) { if ( SessionManager.isLogged ) {
config.headers.Authorization = `Bearer ${ SessionManager.token }`; config.headers.Authorization = `Bearer ${ SessionManager.token }`;
} }
config.headers['client'] = 'DojoCLI';
config.headers['client-version'] = version;
} }
if ( GitlabManager.isLogged && config.url && config.url.indexOf(ClientsSharedConfig.gitlab.apiURL) !== -1 ) { if ( GitlabManager.isLogged && config.url && config.url.indexOf(ClientsSharedConfig.gitlab.apiURL) !== -1 ) {
...@@ -42,6 +49,19 @@ class HttpManager { ...@@ -42,6 +49,19 @@ class HttpManager {
}); });
} }
private requestError(message: string) {
console.log(boxen(message, {
title : 'Request error',
titleAlignment: 'center',
borderColor : 'red',
borderStyle : 'bold',
margin : 1,
padding : 1,
textAlignment : 'left'
}));
process.exit(1);
}
private registerResponseInterceptor() { private registerResponseInterceptor() {
axios.interceptors.response.use((response) => { axios.interceptors.response.use((response) => {
if ( response.data && response.data.sessionToken ) { if ( response.data && response.data.sessionToken ) {
...@@ -51,28 +71,39 @@ class HttpManager { ...@@ -51,28 +71,39 @@ class HttpManager {
return response; return response;
}, (error) => { }, (error) => {
if ( error.response ) { if ( error.response ) {
if ( this.handleCommandErrors ) { if ( error.response.status === StatusCodes.METHOD_NOT_ALLOWED && error.response.data ) {
const data: DojoBackendResponse<{}> = error.response.data;
switch ( data.code ) {
case DojoStatusCode.CLIENT_NOT_SUPPORTED:
this.requestError('Client not recognized by the server. Please contact the administrator.');
break;
case DojoStatusCode.CLIENT_VERSION_NOT_SUPPORTED:
this.requestError(`CLI version not anymore supported by the server. Please update the CLI.\nYou can download the latest stable version (latest release without "-dev" suffix) on this page:\n${ Config.gitlab.cliReleasePage }`);
break;
default:
break;
}
}
if ( this.handleAuthorizationCommandErrors ) {
if ( error.response.url && error.response.url.indexOf(ClientsSharedConfig.apiURL) !== -1 ) { if ( error.response.url && error.response.url.indexOf(ClientsSharedConfig.apiURL) !== -1 ) {
switch ( error.response.status ) { switch ( error.response.status ) {
case StatusCodes.UNAUTHORIZED: // Unauthorized case StatusCodes.UNAUTHORIZED:
logger.error('Session expired or inexistent. Please login again.'); this.requestError('Session expired or does not exist. Please login again.');
process.exit(1);
break; break;
case StatusCodes.FORBIDDEN: // Forbidden case StatusCodes.FORBIDDEN:
logger.error('Forbidden access.'); this.requestError('Forbidden access.');
process.exit(1);
break; break;
} }
} }
} else { } else {
this.handleCommandErrors = true; this.handleAuthorizationCommandErrors = true;
} }
} else { } else {
logger.error('Error connecting to the server.'); this.requestError('Error connecting to the server. Please check your internet connection. If the problem persists, please contact the administrator.');
process.exit(1);
} }
return Promise.reject(error); return Promise.reject(error);
}); });
} }
......
...@@ -97,7 +97,7 @@ class SessionManager { ...@@ -97,7 +97,7 @@ class SessionManager {
ora('Checking Dojo session: ').start().info(); ora('Checking Dojo session: ').start().info();
} }
HttpManager.handleCommandErrors = false; HttpManager.handleAuthorizationCommandErrors = false;
const spinner: ora.Ora = ora({ const spinner: ora.Ora = ora({
text : `Testing Dojo session`, text : `Testing Dojo session`,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment