import { createRouter, createWebHistory, type RouteRecordRaw } from 'vue-router' import { useSessionStore } from '../stores/session' import MainLayout from '../layouts/MainLayout.vue' import LoginView from '../views/LoginView.vue' import OverviewView from '../views/OverviewView.vue' import ProjectsView from '../views/ProjectsView.vue' import ReleaseCenterView from '../views/ReleaseCenterView.vue' import RunsView from '../views/RunsView.vue' import SettingsView from '../views/SettingsView.vue' const routes: RouteRecordRaw[] = [ { path: '/login', name: 'login', component: LoginView, meta: { public: true, }, }, { path: '/', component: MainLayout, redirect: '/overview', children: [ { path: 'overview', name: 'overview', component: OverviewView, }, { path: 'projects', name: 'projects', component: ProjectsView, }, { path: 'releases', name: 'releases', component: ReleaseCenterView, }, { path: 'runs', name: 'runs', component: RunsView, }, { path: 'agent', redirect: '/overview', }, { path: 'settings', name: 'settings', component: SettingsView, }, ], }, ] const router = createRouter({ history: createWebHistory(), routes, }) router.beforeEach(async (to) => { const session = useSessionStore() const authenticated = await session.bootstrap() if (!to.meta.public && (!authenticated || session.mustChangePassword)) { return { name: 'login', query: { redirect: to.fullPath, }, } } if (to.name === 'login' && authenticated && !session.mustChangePassword) { return { name: 'overview', } } return true }) export default router