diff --git a/UI/WebServerResources/js/Common/Common.app.js b/UI/WebServerResources/js/Common/Common.app.js index b9bef78b1..8c7f9a4d5 100644 --- a/UI/WebServerResources/js/Common/Common.app.js +++ b/UI/WebServerResources/js/Common/Common.app.js @@ -121,13 +121,15 @@ 'gt-lg': '(min-width: 1280px)' }) - .config(configure); + .config(configure) + + .factory('AuthInterceptor', AuthInterceptor); /** * @ngInject */ - configure.$inject = ['$logProvider', '$compileProvider', '$mdThemingProvider']; - function configure($logProvider, $compileProvider, $mdThemingProvider) { + configure.$inject = ['$logProvider', '$compileProvider', '$mdThemingProvider', '$httpProvider']; + function configure($logProvider, $compileProvider, $mdThemingProvider, $httpProvider) { $mdThemingProvider.definePalette('sogo-green', { '50': 'eaf5e9', '100': 'cbe5c8', @@ -211,6 +213,23 @@ $logProvider.debugEnabled(false); $compileProvider.debugInfoEnabled(false); } + + $httpProvider.interceptors.push('AuthInterceptor'); + } + + AuthInterceptor.$inject = ['$window', '$q']; + function AuthInterceptor($window, $q) { + return { + response: function(response) { + // When expecting JSON but receiving HTML, assume session has expired and reload page + if (/^application\/json/.test(response.config.headers.Accept) && + /^/.test(response.data)) { + $window.location.reload(true); + return $q.reject(); + } + return response; + } + }; } })(); diff --git a/UI/WebServerResources/js/Main/Main.app.js b/UI/WebServerResources/js/Main/Main.app.js index 3d7b0b9fe..578daa4d0 100644 --- a/UI/WebServerResources/js/Main/Main.app.js +++ b/UI/WebServerResources/js/Main/Main.app.js @@ -23,7 +23,10 @@ function login() { Authentication.login(vm.creds) .then(function(url) { - window.location.href = url; + if (window.location.href === url) + window.location.reload(true); + else + window.location.href = url; }, function(msg) { Dialog.alert(l('Authentication Failed'), msg.error); });