diff options
author | vnugent <public@vaughnnugent.com> | 2024-03-09 16:28:52 -0500 |
---|---|---|
committer | vnugent <public@vaughnnugent.com> | 2024-03-09 16:28:52 -0500 |
commit | f2ac807486a00db4ba8486133d567e392f0fe98a (patch) | |
tree | 79ed35b19211300164f13329e1d36bbf616474c2 /lib/vnlib.browser/src/helpers | |
parent | 7f3067b8fc4416d46af9b8b005a18a71770c98fe (diff) |
fix: #1 logout redirection updated to support social methods
Diffstat (limited to 'lib/vnlib.browser/src/helpers')
-rw-r--r-- | lib/vnlib.browser/src/helpers/lastPage.ts | 122 | ||||
-rw-r--r-- | lib/vnlib.browser/src/helpers/pageGuard.ts | 53 |
2 files changed, 0 insertions, 175 deletions
diff --git a/lib/vnlib.browser/src/helpers/lastPage.ts b/lib/vnlib.browser/src/helpers/lastPage.ts deleted file mode 100644 index b3c7103..0000000 --- a/lib/vnlib.browser/src/helpers/lastPage.ts +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright (c) 2024 Vaughn Nugent -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of -// this software and associated documentation files (the "Software"), to deal in -// the Software without restriction, including without limitation the rights to -// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -// the Software, and to permit persons to whom the Software is furnished to do so, -// subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -import { defaultTo } from "lodash-es"; -import { useRouter } from "vue-router" - -export interface ILastPage{ - /** - * Pushes the current page into the last-page stack - */ - push(): void; - /** - * Stores the current page and navigates to the desired route - * @param route The route to navigate to - */ - pushAndNavigate(route: object): void; - /** - * Navigates to the last page if it exists - */ - gotoLastPage(): void; -} - -export interface ILastPageStorage { - - /** - * Pushes the current page into the last-page stack - */ - push(route: string): void; - - /** - * Pops the last page from the last-page stack storage - * @returns {any} The last page route object stored - */ - pop(): string | null; -} - -/** - * Represents a router-like object that can be used - * to navigate to a desired route - */ -export interface RouterLike{ - currentRoute: { - value: { - fullPath: string; - } - } - push(route: object | string): void; -} - -const storageKey = "lastPage"; - -//Storage impl -const defaultStack = (): ILastPageStorage => { - const storage = sessionStorage; - - const push = (route: string) => { - //Serialize the route data and store it - storage?.setItem(storageKey, route); - } - - const pop = (): string | null => { - //Get the route data and deserialize it - const route = storage?.getItem(storageKey); - if (route) { - storage?.removeItem(storageKey); - return route; - } - return null; - } - return { push, pop } -} - -/** - * Gets the configuration for the last page the user was on - * when the page guard was called. This is used to return to the - * last page after login. - * @returns { gotoLastPage: Function } - */ -export const useLastPage = (storage?: ILastPageStorage, router?: RouterLike): ILastPage => { - - //fallback to default storage - const _storage = defaultTo(storage, defaultStack()); - - //Get the current router instance - const _router = defaultTo(router, useRouter()); - - //Store the current page to the last page stack - const push = () => _storage.push(_router.currentRoute.value.fullPath); - - const pushAndNavigate = (route: object) => { - //Store the current page to the last page stack - push(); - //Navigate to the desired route - _router.push(route); - }; - - const gotoLastPage = () => { - //Get the last stored page and navigate to it - const lp = _storage.pop(); - if (lp) { - _router.push(lp); - } - }; - - return { push, pushAndNavigate, gotoLastPage } -}
\ No newline at end of file diff --git a/lib/vnlib.browser/src/helpers/pageGuard.ts b/lib/vnlib.browser/src/helpers/pageGuard.ts deleted file mode 100644 index e6a92c6..0000000 --- a/lib/vnlib.browser/src/helpers/pageGuard.ts +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2024 Vaughn Nugent -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of -// this software and associated documentation files (the "Software"), to deal in -// the Software without restriction, including without limitation the rights to -// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -// the Software, and to permit persons to whom the Software is furnished to do so, -// subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -import { watch } from 'vue' -import { useSession } from "../session"; -import { useLastPage } from './lastPage'; -import type { ILastPageStorage, RouterLike } from "./lastPage"; - -export interface PageGuardOptions { - readonly stack: ILastPageStorage; - readonly router: RouterLike; -} - -/** - * When called, configures the component to - * only be visible when the user is logged in. If the user is - * not logged in, the user is redirected to the login page. - * @remarks Once called, if the user is logged-in changes will be - * watch to redirect if the user becomes logged out. -*/ -export const usePageGuard = (loginRoute = { name: 'Login' }, options?: Partial<PageGuardOptions>): void => { - //Get the session state - const session = useSession(); - - //Get last page controller, fall back to default session storage stack - const { pushAndNavigate } = useLastPage(options?.stack, options?.router) - - // Initial check for logged in to guard the page - if (!session.loggedIn.value) { - //Store last route and redirect to login - pushAndNavigate(loginRoute); - } - - // setup watcher on session login value - // If the login value changes to false, redirect to login page - watch(session.loggedIn, value => value === false ? pushAndNavigate(loginRoute) : null) -} |