import express from 'express'; import Config from '../config/Config'; import semver from 'semver/preload'; import Session from '../controllers/Session'; import DojoStatusCode from '../shared/types/Dojo/DojoStatusCode'; import { StatusCodes } from 'http-status-codes'; class ClientVersionCheckerMiddleware { 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, StatusCodes.METHOD_NOT_ALLOWED, {}, `Client version ${ requestClientVersion } is not supported. Please update your client.`, DojoStatusCode.CLIENT_VERSION_NOT_SUPPORTED); return; } } } new Session().sendResponse(res, StatusCodes.METHOD_NOT_ALLOWED, {}, `Unsupported client.`, DojoStatusCode.CLIENT_NOT_SUPPORTED); } else { next(); } }; } } export default new ClientVersionCheckerMiddleware();