aboutsummaryrefslogtreecommitdiff
path: root/lib/vnlib.browser/src/helpers
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2024-03-09 16:28:52 -0500
committerLibravatar vnugent <public@vaughnnugent.com>2024-03-09 16:28:52 -0500
commitf2ac807486a00db4ba8486133d567e392f0fe98a (patch)
tree79ed35b19211300164f13329e1d36bbf616474c2 /lib/vnlib.browser/src/helpers
parent7f3067b8fc4416d46af9b8b005a18a71770c98fe (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.ts122
-rw-r--r--lib/vnlib.browser/src/helpers/pageGuard.ts53
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)
-}