From 75bb8cc6b2aaa53dc057b34e806b91ee9ef466f5 Mon Sep 17 00:00:00 2001 From: mp-loki Date: Fri, 9 Nov 2018 22:58:11 +0200 Subject: [PATCH 1/5] Redirect to a previous page after login --- ui/src/app/api/user.service.js | 12 ++++++++++- ui/src/app/app.run.js | 32 ++++++---------------------- ui/src/app/login/login.controller.js | 13 +++++++++-- ui/src/app/login/login.routes.js | 4 ++++ 4 files changed, 32 insertions(+), 29 deletions(-) diff --git a/ui/src/app/api/user.service.js b/ui/src/app/api/user.service.js index a49c4a040a..64075b8abf 100644 --- a/ui/src/app/api/user.service.js +++ b/ui/src/app/api/user.service.js @@ -110,24 +110,34 @@ function UserService($http, $q, $rootScope, adminService, dashboardService, time lastPublicDashboardId = null; userTokenAccessEnabled = false; allowedDashboardIds = []; + var deferred = $q.defer(); if (!jwtToken) { clearTokenData(); if (notify) { $rootScope.$broadcast('unauthenticated', doLogout); + deferred.reject(); } + deferred.resolve(); } else { updateAndValidateToken(jwtToken, 'jwt_token', true); updateAndValidateToken(refreshToken, 'refresh_token', true); if (notify) { loadUser(false).then(function success() { $rootScope.$broadcast('authenticated'); + deferred.resolve(); }, function fail() { $rootScope.$broadcast('unauthenticated'); + deferred.reject(); }); } else { - loadUser(false); + loadUser(false).then(function success() { + deferred.resolve(); + }, function fail() { + deferred.reject(); + }); } } + return deferred.promise; } function isAuthenticated() { diff --git a/ui/src/app/app.run.js b/ui/src/app/app.run.js index 4667b09e06..407a472893 100644 --- a/ui/src/app/app.run.js +++ b/ui/src/app/app.run.js @@ -27,7 +27,6 @@ export default function AppRun($rootScope, $window, $injector, $location, $log, // ie11 fix } - var unauthorizedDialog = null; var forbiddenDialog = null; $rootScope.iframeMode = false; @@ -125,11 +124,17 @@ export default function AppRun($rootScope, $window, $injector, $location, $log, reloadUserFromPublicId(); } else if (to.module === 'private') { evt.preventDefault(); + /* if (to.url === '/home' || to.url === '/') { $state.go('login', params); } else { showUnauthorizedDialog(); } + */ + var redirectParams = {}; + redirectParams.toName = to.name; + redirectParams.params = params; + $state.go('login', redirectParams); } } } else { @@ -159,31 +164,6 @@ export default function AppRun($rootScope, $window, $injector, $location, $log, userService.gotoDefaultPlace(params); } - function showUnauthorizedDialog() { - if (unauthorizedDialog === null) { - $translate(['access.unauthorized-access', - 'access.unauthorized-access-text', - 'access.unauthorized', - 'action.cancel', - 'action.sign-in']).then(function (translations) { - if (unauthorizedDialog === null) { - unauthorizedDialog = $mdDialog.confirm() - .title(translations['access.unauthorized-access']) - .textContent(translations['access.unauthorized-access-text']) - .ariaLabel(translations['access.unauthorized']) - .cancel(translations['action.cancel']) - .ok(translations['action.sign-in']); - $mdDialog.show(unauthorizedDialog).then(function () { - unauthorizedDialog = null; - $state.go('login'); - }, function () { - unauthorizedDialog = null; - }); - } - }); - } - } - function showForbiddenDialog() { if (forbiddenDialog === null) { $translate(['access.access-forbidden', diff --git a/ui/src/app/login/login.controller.js b/ui/src/app/login/login.controller.js index 3f378aca77..73ad0fb89e 100644 --- a/ui/src/app/login/login.controller.js +++ b/ui/src/app/login/login.controller.js @@ -20,7 +20,7 @@ import logoSvg from '../../svg/logo_title_white.svg'; /* eslint-enable import/no-unresolved, import/default */ /*@ngInject*/ -export default function LoginController(toast, loginService, userService/*, $rootScope, $log, $translate*/) { +export default function LoginController(toast, loginService, userService, $state, $stateParams, $rootScope) { var vm = this; vm.logoSvg = logoSvg; @@ -30,13 +30,22 @@ export default function LoginController(toast, loginService, userService/*, $roo password: '' }; + vm.params = $stateParams; vm.login = login; function doLogin() { loginService.login(vm.user).then(function success(response) { var token = response.data.token; var refreshToken = response.data.refreshToken; - userService.setUserFromJwtToken(token, refreshToken, true); + userService.setUserFromJwtToken(token, refreshToken, true).then(function() { + if (vm.params.toName && vm.params.toName !== 'login') { + if (vm.params.toName == 'home.dashboards.dashboard' && $rootScope.forceFullscreen) { + $state.go('dashboard', vm.params.params) + } else { + $state.go(vm.params.toName, vm.params.params) + } + } + }); }, function fail(/*response*/) { /*if (response && response.data && response.data.message) { toast.showError(response.data.message); diff --git a/ui/src/app/login/login.routes.js b/ui/src/app/login/login.routes.js index 0c6a545d6f..d6239307fd 100644 --- a/ui/src/app/login/login.routes.js +++ b/ui/src/app/login/login.routes.js @@ -27,6 +27,10 @@ export default function LoginRoutes($stateProvider) { $stateProvider.state('login', { url: '/login', module: 'public', + params: { + params: null, + toName: null + }, views: { "@": { controller: 'LoginController', From f026a30171539bbc27b94fad9c7c7635db74da03 Mon Sep 17 00:00:00 2001 From: mp-loki Date: Fri, 9 Nov 2018 23:24:35 +0200 Subject: [PATCH 2/5] Redirect to a previous page after login --- ui/src/app/app.run.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/ui/src/app/app.run.js b/ui/src/app/app.run.js index 407a472893..8a209450b5 100644 --- a/ui/src/app/app.run.js +++ b/ui/src/app/app.run.js @@ -124,13 +124,6 @@ export default function AppRun($rootScope, $window, $injector, $location, $log, reloadUserFromPublicId(); } else if (to.module === 'private') { evt.preventDefault(); - /* - if (to.url === '/home' || to.url === '/') { - $state.go('login', params); - } else { - showUnauthorizedDialog(); - } - */ var redirectParams = {}; redirectParams.toName = to.name; redirectParams.params = params; From 74bf131930df891132fcc3ef72a17bb2994667ae Mon Sep 17 00:00:00 2001 From: mp-loki Date: Thu, 15 Nov 2018 16:34:37 +0200 Subject: [PATCH 3/5] Redirect to a previous page after login --- ui/src/app/api/user.service.js | 22 ++++++++++------------ ui/src/app/app.run.js | 3 ++- ui/src/app/login/login.controller.js | 14 +++----------- 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/ui/src/app/api/user.service.js b/ui/src/app/api/user.service.js index 64075b8abf..71c04ce980 100644 --- a/ui/src/app/api/user.service.js +++ b/ui/src/app/api/user.service.js @@ -27,6 +27,7 @@ function UserService($http, $q, $rootScope, adminService, dashboardService, time currentUserDetails = null, lastPublicDashboardId = null, allowedDashboardIds = [], + redirectParams = null, userTokenAccessEnabled = false, userLoaded = false; @@ -56,6 +57,7 @@ function UserService($http, $q, $rootScope, adminService, dashboardService, time refreshTokenPending: refreshTokenPending, updateAuthorizationHeader: updateAuthorizationHeader, setAuthorizationRequestHeader: setAuthorizationRequestHeader, + setRedirectParams: setRedirectParams, gotoDefaultPlace: gotoDefaultPlace, forceDefaultPlace: forceDefaultPlace, updateLastPublicDashboardId: updateLastPublicDashboardId, @@ -110,34 +112,24 @@ function UserService($http, $q, $rootScope, adminService, dashboardService, time lastPublicDashboardId = null; userTokenAccessEnabled = false; allowedDashboardIds = []; - var deferred = $q.defer(); if (!jwtToken) { clearTokenData(); if (notify) { $rootScope.$broadcast('unauthenticated', doLogout); - deferred.reject(); } - deferred.resolve(); } else { updateAndValidateToken(jwtToken, 'jwt_token', true); updateAndValidateToken(refreshToken, 'refresh_token', true); if (notify) { loadUser(false).then(function success() { $rootScope.$broadcast('authenticated'); - deferred.resolve(); }, function fail() { $rootScope.$broadcast('unauthenticated'); - deferred.reject(); }); } else { - loadUser(false).then(function success() { - deferred.resolve(); - }, function fail() { - deferred.reject(); - }); + loadUser(false); } } - return deferred.promise; } function isAuthenticated() { @@ -551,9 +543,15 @@ function UserService($http, $q, $rootScope, adminService, dashboardService, time return false; } + function setRedirectParams(params) { + redirectParams = params; + } + function gotoDefaultPlace(params) { if (currentUser && isAuthenticated()) { - var place = 'home.links'; + var place = redirectParams ? redirectParams.toName : 'home.links'; + params = redirectParams ? redirectParams.params : params; + redirectParams = null; if (currentUser.authority === 'TENANT_ADMIN' || currentUser.authority === 'CUSTOMER_USER') { if (userHasDefaultDashboard()) { place = $rootScope.forceFullscreen ? 'dashboard' : 'home.dashboards.dashboard'; diff --git a/ui/src/app/app.run.js b/ui/src/app/app.run.js index 8a209450b5..8064ae5917 100644 --- a/ui/src/app/app.run.js +++ b/ui/src/app/app.run.js @@ -127,7 +127,8 @@ export default function AppRun($rootScope, $window, $injector, $location, $log, var redirectParams = {}; redirectParams.toName = to.name; redirectParams.params = params; - $state.go('login', redirectParams); + userService.setRedirectParams(redirectParams); + $state.go('login', params); } } } else { diff --git a/ui/src/app/login/login.controller.js b/ui/src/app/login/login.controller.js index 73ad0fb89e..ffda552be1 100644 --- a/ui/src/app/login/login.controller.js +++ b/ui/src/app/login/login.controller.js @@ -20,7 +20,7 @@ import logoSvg from '../../svg/logo_title_white.svg'; /* eslint-enable import/no-unresolved, import/default */ /*@ngInject*/ -export default function LoginController(toast, loginService, userService, $state, $stateParams, $rootScope) { +export default function LoginController(toast, loginService, userService) { var vm = this; vm.logoSvg = logoSvg; @@ -30,22 +30,14 @@ export default function LoginController(toast, loginService, userService, $state password: '' }; - vm.params = $stateParams; + // vm.params = $stateParams; vm.login = login; function doLogin() { loginService.login(vm.user).then(function success(response) { var token = response.data.token; var refreshToken = response.data.refreshToken; - userService.setUserFromJwtToken(token, refreshToken, true).then(function() { - if (vm.params.toName && vm.params.toName !== 'login') { - if (vm.params.toName == 'home.dashboards.dashboard' && $rootScope.forceFullscreen) { - $state.go('dashboard', vm.params.params) - } else { - $state.go(vm.params.toName, vm.params.params) - } - } - }); + userService.setUserFromJwtToken(token, refreshToken, true); }, function fail(/*response*/) { /*if (response && response.data && response.data.message) { toast.showError(response.data.message); From 4f7ce892ecb8da7862838aca610caa3a4871cd66 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Thu, 15 Nov 2018 20:42:10 +0200 Subject: [PATCH 4/5] Update login.routes.js --- ui/src/app/login/login.routes.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ui/src/app/login/login.routes.js b/ui/src/app/login/login.routes.js index d6239307fd..0c6a545d6f 100644 --- a/ui/src/app/login/login.routes.js +++ b/ui/src/app/login/login.routes.js @@ -27,10 +27,6 @@ export default function LoginRoutes($stateProvider) { $stateProvider.state('login', { url: '/login', module: 'public', - params: { - params: null, - toName: null - }, views: { "@": { controller: 'LoginController', From 0d01071df5f6a8a90d4cbb698a29d7929108d18e Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Thu, 15 Nov 2018 20:42:52 +0200 Subject: [PATCH 5/5] Update login.controller.js --- ui/src/app/login/login.controller.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ui/src/app/login/login.controller.js b/ui/src/app/login/login.controller.js index ffda552be1..3f378aca77 100644 --- a/ui/src/app/login/login.controller.js +++ b/ui/src/app/login/login.controller.js @@ -20,7 +20,7 @@ import logoSvg from '../../svg/logo_title_white.svg'; /* eslint-enable import/no-unresolved, import/default */ /*@ngInject*/ -export default function LoginController(toast, loginService, userService) { +export default function LoginController(toast, loginService, userService/*, $rootScope, $log, $translate*/) { var vm = this; vm.logoSvg = logoSvg; @@ -30,7 +30,6 @@ export default function LoginController(toast, loginService, userService) { password: '' }; - // vm.params = $stateParams; vm.login = login; function doLogin() {