aboutsummaryrefslogtreecommitdiff
path: root/front-end/src/router
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2024-06-07 15:45:56 -0400
committerLibravatar vnugent <public@vaughnnugent.com>2024-06-07 15:45:56 -0400
commitf77ff50150e6ff5d1f2b03c4f465846d5bb49a96 (patch)
tree1096bba241834211a25f7895db21e1a8d581ea17 /front-end/src/router
parentf9e2109c27af5ece546261c018d4b2781860ff1c (diff)
Squashed commit of the following:v0.1.5-alpha
commit 8ed4663e539d9c2ea58aaad02a1fc2896956f6b6 Author: vnugent <public@vaughnnugent.com> Date: Fri Jun 7 15:43:48 2024 -0400 fix: invalid chars in status cookie name commit 9d1df65d99732a68b4fe96dcc75273442cbd322f Author: vnugent <public@vaughnnugent.com> Date: Thu Jun 6 21:31:30 2024 -0400 fix: Some container fixes and compatability commit 5ecd6b39cccdc9500540b10685605b5fcba61f69 Author: vnugent <public@vaughnnugent.com> Date: Thu Jun 6 17:19:48 2024 -0400 Update and expose storage config for container commit 3a62bafd210a2e00d23d3df773e47011e09eba6e Author: vnugent <public@vaughnnugent.com> Date: Thu Jun 6 16:18:36 2024 -0400 ci: build admin lib before building front-end commit 35920ad6c8596fc14bcfed66303511e8c249be8d Author: vnugent <public@vaughnnugent.com> Date: Thu Jun 6 15:56:36 2024 -0400 ci: Local vite config, force set lib versions commit 3c228b3cc5172fae398af8de72b64bd780ace20c Author: vnugent <public@vaughnnugent.com> Date: Wed Jun 5 19:55:39 2024 -0400 ci: Update packages and add container build commit 21d2719701f851d4a555c363b141f289f14a5192 Author: vnugent <public@vaughnnugent.com> Date: Wed Jun 5 15:58:07 2024 -0400 fix: #1 new channel page when hitting new button commit eefba88ac4e2c70517aa71c79ed94c346f9de554 Author: vnugent <public@vaughnnugent.com> Date: Wed Jun 5 15:26:15 2024 -0400 chore: Package updates commit 9eed4022a79f2cba139c9f8a359bfc8c1f9c31c5 Author: vnugent <public@vaughnnugent.com> Date: Wed Jun 5 14:44:08 2024 -0400 ci: Stage blocking changes
Diffstat (limited to 'front-end/src/router')
-rw-r--r--front-end/src/router/index.ts70
1 files changed, 68 insertions, 2 deletions
diff --git a/front-end/src/router/index.ts b/front-end/src/router/index.ts
index 538c132..4238621 100644
--- a/front-end/src/router/index.ts
+++ b/front-end/src/router/index.ts
@@ -1,5 +1,71 @@
+import { watch } from 'vue';
+import { useSession } from '@vnuge/vnlib.browser';
+import { useSessionStorage, get, set } from '@vueuse/core';
+import { includes, map, toLower } from 'lodash-es';
+import { type Router } from 'vue-router';
+
import { createRouter, createWebHistory } from 'vue-router/auto'
+import { routes } from 'vue-router/auto-routes'
export default createRouter({
- history: createWebHistory(import.meta.env.BASE_URL)
-}) \ No newline at end of file
+ history: createWebHistory(import.meta.env.BASE_URL),
+ routes
+})
+
+/**
+ * Enables page guards for protected routes and configures a
+ * last page store.
+ */
+export const guardRoutes = (router: Router, protectedRoutes: string[]) => {
+ const { loggedIn } = useSession()
+
+ const lastPageStore = useSessionStorage('lastPageStore', undefined)
+
+ const { beforeEach, currentRoute, afterEach, push } = router
+
+ //Convert routes to lowercase
+ protectedRoutes = map(protectedRoutes, toLower);
+
+ //Setup nav guards
+ beforeEach((to, from) => {
+ if (!to.name) {
+ return true;
+ }
+
+ if (!get(loggedIn)) {
+ if (includes(protectedRoutes, toLower(to.name as string))) {
+
+ //Set last page as from page
+ set(lastPageStore, from.fullPath)
+
+ return { name: 'Login' }
+ }
+ }
+ else {
+ /**
+ * If the user is going back to the login page, are logged in,
+ * and have a previous page to go back to, redirect to the last page
+ * instead of the login page
+ */
+ const lastPath = get(lastPageStore);
+
+ if (to.name === 'Login' && lastPath) {
+ set(lastPageStore, undefined) //Clear the last page
+ return lastPath ? { path: lastPath } : true;
+ }
+ }
+
+ //Allow
+ return true;
+ })
+
+ //scroll window back to top
+ afterEach(() => window.scrollTo(0, 0))
+
+ watch(loggedIn, (li) => {
+ //If the user gets logged out, redirect to login
+ if (li === false && currentRoute.value.name !== 'Login') {
+ push({ name: 'Login' })
+ }
+ })
+} \ No newline at end of file