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

Add ClientVersion Middleware

parent 553de80f
No related branches found
No related tags found
No related merge requests found
Pipeline #26569 passed
...@@ -13,6 +13,7 @@ import logger from '../shared/logging/WinstonLogger'; ...@@ -13,6 +13,7 @@ import logger from '../shared/logging/WinstonLogger';
import ParamsCallbackManager from '../middlewares/ParamsCallbackManager'; import ParamsCallbackManager from '../middlewares/ParamsCallbackManager';
import ApiRoutesManager from '../routes/ApiRoutesManager'; import ApiRoutesManager from '../routes/ApiRoutesManager';
import compression from 'compression'; import compression from 'compression';
import ClientVersionMiddleware from '../middlewares/ClientVersionMiddleware';
class API implements WorkerTask { class API implements WorkerTask {
...@@ -30,6 +31,8 @@ class API implements WorkerTask { ...@@ -30,6 +31,8 @@ class API implements WorkerTask {
this.backend.use(cors()); //Allow CORS requests this.backend.use(cors()); //Allow CORS requests
this.backend.use(compression()); //Compress responses this.backend.use(compression()); //Compress responses
this.backend.use(ClientVersionMiddleware.register());
ParamsCallbackManager.register(this.backend); ParamsCallbackManager.register(this.backend);
this.backend.use(SessionMiddleware.register()); this.backend.use(SessionMiddleware.register());
......
import express from 'express';
import Config from '../config/Config';
import semver from 'semver/preload';
import Session from '../controllers/Session';
import { HttpStatusCode } from 'axios';
import DojoStatusCode from '../shared/types/Dojo/DojoStatusCode';
class ClientVersionMiddleware {
register(): (req: express.Request, res: express.Response, next: express.NextFunction) => void {
return async (req: express.Request, res: express.Response, next: express.NextFunction) => {
if ( req.headers['client'] && req.headers['client-version'] ) {
const requestClient = req.headers['client'] as string;
const requestClientVersion = req.headers['client-version'] as string;
for ( const [ client, condition ] of Object.entries(Config.requestClientValidation.version) ) {
if ( requestClient === client ) {
if ( semver.satisfies(semver.valid(semver.coerce(requestClientVersion)) || '0', condition) ) {
next();
return;
} else {
new Session().sendResponse(res, HttpStatusCode.MethodNotAllowed, {}, `Client version ${ requestClientVersion } is not supported. Please update your client.`, DojoStatusCode.CLIENT_VERSION_NOT_SUPPORTED);
return;
}
}
}
new Session().sendResponse(res, HttpStatusCode.MethodNotAllowed, {}, `Unsupported client.`, DojoStatusCode.CLIENT_NOT_SUPPORTED);
}
};
}
}
export default new ClientVersionMiddleware();
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment