From d8d10cd764ecca494de41f787f9389dda9ffb2f7 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Tue, 20 Feb 2018 11:20:55 +0100
Subject: [PATCH] when session expire, reload of webpage is enforced (in case
 of logged user redirection to login page is enforced)

---
 frontend-js/src/main/js/NetworkError.js    |  4 ++++
 frontend-js/src/main/js/ServerConnector.js | 12 ++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/frontend-js/src/main/js/NetworkError.js b/frontend-js/src/main/js/NetworkError.js
index 438539ed6b..109b0ff5e6 100644
--- a/frontend-js/src/main/js/NetworkError.js
+++ b/frontend-js/src/main/js/NetworkError.js
@@ -2,6 +2,7 @@
 
 /* exported logger */
 
+// noinspection JSUnusedLocalSymbols
 var logger = require('./logger');
 
 function NetworkError(message, connectionParams) {
@@ -13,6 +14,9 @@ function NetworkError(message, connectionParams) {
   this.statusCode = connectionParams.statusCode;
   this.url = connectionParams.url;
   this.content = connectionParams.content;
+  if (this.content === undefined) {
+    this.content = "";
+  }
 }
 
 NetworkError.prototype = Object.create(Error.prototype);
diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index e7e6662fe6..4b020e2468 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -158,6 +158,18 @@ ServerConnector.sendRequest = function (params) {
     });
   }).then(function () {
     return content;
+  }, function (error) {
+    if (error instanceof NetworkError) {
+      if (error.statusCode === HttpStatus.FORBIDDEN && error.content.indexOf('"reason":"Invalid token"') >= 0) {
+        self.getSessionData().setToken(undefined);
+        if (self.getSessionData().getLogin() === "anonymous") {
+          window.location.reload(false);
+        } else {
+          window.location.href = ServerConnector.getServerBaseUrl() + "login.xhtml?from=" + encodeURI(window.location.href);
+        }
+      }
+    }
+    return Promise.reject(error);
   });
 
 };
-- 
GitLab