From 75bb8cc6b2aaa53dc057b34e806b91ee9ef466f5 Mon Sep 17 00:00:00 2001 From: mp-loki Date: Fri, 9 Nov 2018 22:58:11 +0200 Subject: [PATCH] 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',