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

Inform about the DojoCLI version in responses header

parent 7c9b8604
No related branches found
No related tags found
No related merge requests found
Pipeline #28428 passed
......@@ -21,6 +21,11 @@ class Config {
}
}; // { version: { CLIENT: CONDITION } }
public readonly dojoCLI: {
versionUpdatePeriodMs: number
repositoryId: number
};
public readonly jwtConfig: {
secret: string; expiresIn: number;
};
......@@ -64,6 +69,11 @@ class Config {
this.requestClientValidation = JSON5.parse(process.env.REQUEST_CLIENT_VALIDATION || '{"version": {}}');
this.dojoCLI = {
versionUpdatePeriodMs: Number(process.env.DOJO_CLI_VERSION_UPDATE_PERIOD_MS || 3600),
repositoryId : Number(process.env.DOJO_CLI_GITLAB_REPOSITORY_ID || 0)
};
this.jwtConfig = {
secret : process.env.JWT_SECRET_KEY || '',
expiresIn: Number(process.env.SESSION_TIMEOUT || 0)
......
......@@ -16,6 +16,7 @@ import compression from 'compression';
import ClientVersionCheckerMiddleware from '../middlewares/ClientVersionCheckerMiddleware';
import swaggerUi from 'swagger-ui-express';
import path from 'path';
import DojoCliVersionHelper from '../helpers/DojoCliVersionHelper';
class API implements WorkerTask {
......@@ -25,7 +26,7 @@ class API implements WorkerTask {
constructor() {
this.backend = express();
this.initSwagger();
this.initOpenAPI();
this.initBaseMiddlewares();
this.backend.use(ClientVersionCheckerMiddleware.register());
......@@ -43,9 +44,14 @@ class API implements WorkerTask {
this.backend.use(helmet()); //Help to secure express, https://helmetjs.github.io/
this.backend.use(cors()); //Allow CORS requests
this.backend.use(compression()); //Compress responses
this.backend.use(async (req, res, next) => {
res.header('dojocli-latest-version', await DojoCliVersionHelper.getLatestVersion());
next();
});
}
private initSwagger() {
private initOpenAPI() {
const options = {
customSiteTitle: 'Dojo API',
explorer : false,
......
import Config from '../config/Config';
import GitlabRelease from '../shared/types/Gitlab/GitlabRelease';
import GitlabManager from '../managers/GitlabManager';
class DojoCliVersionHelper {
private latestUpdate: Date | undefined;
private latestVersion: string | undefined;
constructor() { }
private async updateVersion(): Promise<void> {
const releases: Array<GitlabRelease> = await GitlabManager.getRepositoryReleases(Config.dojoCLI.repositoryId);
for ( const release of releases ) {
if ( !isNaN(+release.tag_name.replace('.', '')) ) {
this.latestVersion = release.tag_name;
this.latestUpdate = new Date();
return;
}
}
}
public async getLatestVersion(): Promise<string> {
if ( !this.latestVersion || !this.latestUpdate || (new Date()).getTime() - this.latestUpdate.getTime() >= Config.dojoCLI.versionUpdatePeriodMs ) {
await this.updateVersion();
}
return this.latestVersion!;
}
}
export default new DojoCliVersionHelper();
\ 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