From a271c79ff6c168b0d61a065997f3da3dd63d76d2 Mon Sep 17 00:00:00 2001 From: Stas Vilchik Date: Wed, 18 Apr 2018 14:28:15 +0200 Subject: [PATCH] SONAR-10601 check application version when receiving WS response --- .../sonar-web/src/main/js/helpers/request.ts | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/server/sonar-web/src/main/js/helpers/request.ts b/server/sonar-web/src/main/js/helpers/request.ts index e37923337ee..1b0e075b21e 100644 --- a/server/sonar-web/src/main/js/helpers/request.ts +++ b/server/sonar-web/src/main/js/helpers/request.ts @@ -22,6 +22,9 @@ import { omitBy, isNil } from 'lodash'; import { getCookie } from './cookies'; import { translate } from './l10n'; +/** Current application version. Can be changed if a newer version is deployed. */ +let currentApplicationVersion: string | undefined; + export function getCSRFTokenName(): string { return 'X-XSRF-TOKEN'; } @@ -142,20 +145,35 @@ export function corsRequest(url: string, mode: RequestMode = 'cors'): Request { return request; } +function checkApplicationVersion(response: Response): boolean { + const version = response.headers.get('Sonar-Version'); + if (version) { + if (currentApplicationVersion && currentApplicationVersion !== version) { + window.location.reload(); + return false; + } else { + currentApplicationVersion = version; + } + } + return true; +} + /** * Check that response status is ok */ export function checkStatus(response: Response): Promise { return new Promise((resolve, reject) => { - if (response.status === 401) { - // workaround cyclic dependencies - const requireAuthentication = require('../app/utils/handleRequiredAuthentication').default; - requireAuthentication(); - reject(); - } else if (response.status >= 200 && response.status < 300) { - resolve(response); - } else { - reject({ response }); + if (checkApplicationVersion(response)) { + if (response.status === 401) { + // workaround cyclic dependencies + const requireAuthentication = require('../app/utils/handleRequiredAuthentication').default; + requireAuthentication(); + reject(); + } else if (response.status >= 200 && response.status < 300) { + resolve(response); + } else { + reject({ response }); + } } }); } -- 2.39.5