From dda269a4f08cbfc353272ec2661b2be5e6cf0e2a Mon Sep 17 00:00:00 2001 From: Sanskar Soni Date: Tue, 26 Sep 2023 14:38:30 +0530 Subject: [PATCH] Improved: code to redirect the user to SSO screen when enabled otherwise redirect to launchpad on logout, and added support to loader for custom message in case of logout --- src/App.vue | 9 ++++++--- src/locales/en.json | 1 + src/store/modules/user/actions.ts | 23 ++++++++++++++++++++++- src/views/Settings.vue | 9 ++++++--- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/App.vue b/src/App.vue index 15ff14da..cc299a54 100644 --- a/src/App.vue +++ b/src/App.vue @@ -42,13 +42,16 @@ export default defineComponent({ }) }, methods: { - async presentLoader() { + async presentLoader(options = { message: '', backdropDismiss: true }) { + // When having a custom message remove already existing loader + if(options.message && this.loader) this.dismissLoader(); + if (!this.loader) { this.loader = await loadingController .create({ - message: this.$t("Click the backdrop to dismiss."), + message: options.message ? this.$t(options.message) : this.$t("Click the backdrop to dismiss."), translucent: true, - backdropDismiss: true + backdropDismiss: options.backdropDismiss }); } this.loader.present(); diff --git a/src/locales/en.json b/src/locales/en.json index ddf1fb7e..8063f4d9 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -36,6 +36,7 @@ "Loading": "Loading", "Login": "Login", "Logging in": "Logging in", + "Logging out": "Logging out", "Logout": "Logout", "Make sure you have entered all the inventory you received. You cannot edit this information after proceeding.": "Make sure you have entered all the inventory you received. { space } You cannot edit this information after proceeding.", "No more shipments found": "No more shipments found", diff --git a/src/store/modules/user/actions.ts b/src/store/modules/user/actions.ts index 7e25d60b..c36ea60a 100644 --- a/src/store/modules/user/actions.ts +++ b/src/store/modules/user/actions.ts @@ -14,6 +14,7 @@ import { setPermissions } from '@/authorization' import { useAuthStore } from '@hotwax/dxp-components' +import emitter from '@/event-bus' const actions: ActionTree = { @@ -104,10 +105,22 @@ const actions: ActionTree = { * Logout user */ async logout ({ commit }, payload) { + // store the url on which we need to redirect the user after logout api completes in case of SSO enabled + let redirectionUrl = '' + + emitter.emit('presentLoader', { message: 'Logging out', backdropDismiss: false }) + // Calling the logout api to flag the user as logged out, only when user is authorised // if the user is already unauthorised then not calling the logout api as it returns 401 again that results in a loop, thus there is no need to call logout api if the user is unauthorised if(!payload?.isUserUnauthorised) { - await logout(); + let resp = await logout(); + + // Added logic to remove the `//` from the resp as in case of get request we are having the extra characters and in case of post we are having 403 + resp = JSON.parse(resp.startsWith('//') ? resp.replace('//', '') : resp) + + if(resp.logoutAuthType == 'SAML2SSO') { + redirectionUrl = resp.logoutUrl + } } const authStore = useAuthStore() @@ -121,6 +134,14 @@ const actions: ActionTree = { // reset plugin state on logout authStore.$reset() + + // If we get any url in logout api resp then we will redirect the user to the url + if(redirectionUrl) { + window.location.href = redirectionUrl + } + + emitter.emit('dismissLoader') + return redirectionUrl; }, /** diff --git a/src/views/Settings.vue b/src/views/Settings.vue index 77bf65c8..8ed20f02 100644 --- a/src/views/Settings.vue +++ b/src/views/Settings.vue @@ -248,12 +248,15 @@ export default defineComponent({ await alert.present(); }, logout () { - this.store.dispatch('user/logout').then(() => { + this.store.dispatch('user/logout', { isUserUnauthorised: false }).then((redirectionUrl) => { this.store.dispatch('shipment/clearShipments'); this.store.dispatch('return/clearReturns'); this.store.dispatch("party/resetReceiversDetails"); - const redirectUrl = window.location.origin + '/login' - window.location.href = `${process.env.VUE_APP_LOGIN_URL}?isLoggedOut=true&redirectUrl=${redirectUrl}` + // if not having redirection url then redirect the user to launchpad + if(!redirectionUrl) { + const redirectUrl = window.location.origin + '/login' + window.location.href = `${process.env.VUE_APP_LOGIN_URL}?isLoggedOut=true&redirectUrl=${redirectUrl}` + } }) }, goToLaunchpad() {