aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/src/main/js/helpers/request.ts
diff options
context:
space:
mode:
authorStas Vilchik <stas.vilchik@sonarsource.com>2018-04-18 14:28:15 +0200
committerSonarTech <sonartech@sonarsource.com>2018-05-10 20:20:53 +0200
commita271c79ff6c168b0d61a065997f3da3dd63d76d2 (patch)
tree9fb8920f4aabf376b6594735c14db872c6d0272d /server/sonar-web/src/main/js/helpers/request.ts
parentd71425fe1accb072fbaeed32af4db504bdfdc6f1 (diff)
downloadsonarqube-a271c79ff6c168b0d61a065997f3da3dd63d76d2.tar.gz
sonarqube-a271c79ff6c168b0d61a065997f3da3dd63d76d2.zip
SONAR-10601 check application version when receiving WS response
Diffstat (limited to 'server/sonar-web/src/main/js/helpers/request.ts')
-rw-r--r--server/sonar-web/src/main/js/helpers/request.ts36
1 files 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<Response> {
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 });
+ }
}
});
}