48 lines
2.6 KiB
TypeScript
48 lines
2.6 KiB
TypeScript
import { createRouter, createWebHistory } from "vue-router";
|
|
import { useAuthStore } from "@/stores/auth";
|
|
|
|
const router = createRouter({
|
|
history: createWebHistory(),
|
|
routes: [
|
|
{ path: "/login", name: "login", component: () => import("@/views/LoginView.vue"), meta: { public: true } },
|
|
{ path: "/verify-2fa", name: "verify-2fa", component: () => import("@/views/Verify2faView.vue"), meta: { public: true } },
|
|
{ path: "/setup-2fa", name: "setup-2fa", component: () => import("@/views/Setup2faView.vue"), meta: { public: true } },
|
|
{
|
|
path: "/",
|
|
component: () => import("@/components/AppLayout.vue"),
|
|
children: [
|
|
{ path: "", name: "dashboard", component: () => import("@/views/DashboardView.vue") },
|
|
{ path: "subnets", name: "subnets", component: () => import("@/views/SubnetsBrowseView.vue") },
|
|
{ path: "devices", name: "devices", component: () => import("@/views/DevicesView.vue") },
|
|
{ path: "devices/:id", name: "device", component: () => import("@/views/DeviceDetailView.vue") },
|
|
{ path: "subnets/:id", name: "subnet", component: () => import("@/views/SubnetDetailView.vue") },
|
|
{ path: "subnets/:id/dhcp", redirect: (to) => `/subnets/${to.params.id}` },
|
|
{ path: "racks", name: "racks", component: () => import("@/views/RacksView.vue") },
|
|
{ path: "racks/:id", name: "rack", component: () => import("@/views/RackDetailView.vue") },
|
|
{ path: "search", redirect: "/" },
|
|
{ path: "tags", name: "tags", component: () => import("@/views/TagsView.vue") },
|
|
{ path: "device-types", redirect: "/devices" },
|
|
{ path: "custom-fields", name: "custom-fields", component: () => import("@/views/CustomFieldsView.vue") },
|
|
{ path: "bulk", redirect: "/devices" },
|
|
{ path: "audit", name: "audit", component: () => import("@/views/AuditView.vue") },
|
|
{ path: "subnets/manage", name: "subnet-management", component: () => import("@/views/SubnetsView.vue") },
|
|
{ path: "admin", redirect: "/subnets/manage" },
|
|
{ path: "users", name: "users", component: () => import("@/views/UsersView.vue") },
|
|
{ path: "settings", name: "settings", component: () => import("@/views/SettingsView.vue") },
|
|
{ path: "account", name: "account", component: () => import("@/views/AccountView.vue") },
|
|
],
|
|
},
|
|
],
|
|
});
|
|
|
|
router.beforeEach(async (to) => {
|
|
const auth = useAuthStore();
|
|
if (!auth.loaded) await auth.fetchMe().catch(() => {});
|
|
if (to.meta.public) return true;
|
|
if (!auth.loggedIn) return { name: "login", query: { redirect: to.fullPath } };
|
|
return true;
|
|
});
|
|
|
|
export { router };
|
|
export default router;
|