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

HttpManager => Detect errors like no server response of wrong client version

parent d603b397
No related branches found
No related tags found
No related merge requests found
Pipeline #26571 passed
...@@ -2,6 +2,11 @@ import axios, { AxiosRequestHeaders } from 'axios'; ...@@ -2,6 +2,11 @@ import axios, { AxiosRequestHeaders } from 'axios';
import FormData from 'form-data'; import FormData from 'form-data';
import ClientsSharedConfig from '../sharedByClients/config/ClientsSharedConfig'; import ClientsSharedConfig from '../sharedByClients/config/ClientsSharedConfig';
import Config from '../config/Config'; import Config from '../config/Config';
import { version } from '../config/Version';
import boxen from 'boxen';
import DojoStatusCode from '../shared/types/Dojo/DojoStatusCode';
import DojoBackendResponse from '../shared/types/Dojo/DojoBackendResponse';
import { StatusCodes } from 'http-status-codes';
class HttpManager { class HttpManager {
...@@ -12,6 +17,19 @@ class HttpManager { ...@@ -12,6 +17,19 @@ class HttpManager {
this.registerResponseInterceptor(); this.registerResponseInterceptor();
} }
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 registerRequestInterceptor() { private registerRequestInterceptor() {
axios.interceptors.request.use((config) => { axios.interceptors.request.use((config) => {
if ( config.data instanceof FormData ) { if ( config.data instanceof FormData ) {
...@@ -26,6 +44,9 @@ class HttpManager { ...@@ -26,6 +44,9 @@ class HttpManager {
} }
config.headers.Authorization = `ExerciseSecret ${ Config.exercise.secret }`; config.headers.Authorization = `ExerciseSecret ${ Config.exercise.secret }`;
config.headers['client'] = 'DojoExerciseChecker';
config.headers['client-version'] = version;
} }
return config; return config;
...@@ -36,6 +57,25 @@ class HttpManager { ...@@ -36,6 +57,25 @@ class HttpManager {
axios.interceptors.response.use((response) => { axios.interceptors.response.use((response) => {
return response; return response;
}, (error) => { }, (error) => {
if ( error.response ) {
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(`ExerciseChecker version not supported by the server.\nPlease check that the CI/CD pipeline use the "${ Config.dockerhub.repositories.exerciseChecker }:latest" image.\nIf yes, try again later and if the problem persists, please contact the administrator.`);
break;
default:
break;
}
}
} else {
this.requestError('Error connecting to the server. Please check your internet connection. If the problem persists, please contact the administrator.');
}
return Promise.reject(error); return Promise.reject(error);
}); });
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment