import { createRouter, createWebHistory, RouteRecordRaw, } from 'vue-router'; import RegisterView from '@/views/RegisterView.vue'; import LoginView from '@/views/LoginView.vue'; import { Privileges, SuccessResponse, } from '@/api/types'; import HomeView from '@/views/HomeView.vue'; import FundView from '@/views/FundView.vue'; import AddFundView from '@/views/AddFundView.vue'; import hasPermission from '@/lib/auth'; import SignetRequestController from '@/api/requests'; const routes: Array = [ { path: '/', name: 'home', component: HomeView, meta: { title: 'Home' }, }, { path: '/fund/:id', name: 'fund', component: FundView, meta: { title: undefined }, }, { path: '/login', name: 'login', component: LoginView, meta: { title: 'Login' }, }, { path: '/register', name: 'register', component: RegisterView, meta: { requiredRights: Privileges.AdminPlus, accessible: async () => { const controller = new SignetRequestController(); const canProceed = await controller.post('/UsersExist', null); return canProceed?.success; }, title: 'Register', }, }, { path: '/addfund', name: 'addfund', component: AddFundView, meta: { requiredRights: Privileges.Admin, title: 'Add Group Fund', }, }, ]; const router = createRouter({ history: createWebHistory(process.env.BASE_URL), routes, }); router.beforeEach(async (to, from, next) => { document.title = `Beignet - ${to.meta.title}`; const requiredRights = to.meta.requiredRights as number | undefined; const accessible = to.meta.accessible as (() => SuccessResponse) | undefined; const allowed = requiredRights ? hasPermission(requiredRights) || (accessible && !accessible().success) : true; if (allowed) { next(); } else { next('/'); } }); export default router;