88 lines
2.0 KiB
TypeScript
88 lines
2.0 KiB
TypeScript
|
|
import { createRouter, createWebHashHistory } from 'vue-router'
|
||
|
|
import { hasApiKey } from '@/api/client'
|
||
|
|
|
||
|
|
const router = createRouter({
|
||
|
|
history: createWebHashHistory(),
|
||
|
|
routes: [
|
||
|
|
{
|
||
|
|
path: '/',
|
||
|
|
name: 'login',
|
||
|
|
component: () => import('@/views/LoginView.vue'),
|
||
|
|
meta: { public: true },
|
||
|
|
},
|
||
|
|
{
|
||
|
|
path: '/hermes/chat',
|
||
|
|
name: 'hermes.chat',
|
||
|
|
component: () => import('@/views/hermes/ChatView.vue'),
|
||
|
|
},
|
||
|
|
{
|
||
|
|
path: '/hermes/jobs',
|
||
|
|
name: 'hermes.jobs',
|
||
|
|
component: () => import('@/views/hermes/JobsView.vue'),
|
||
|
|
},
|
||
|
|
{
|
||
|
|
path: '/hermes/models',
|
||
|
|
name: 'hermes.models',
|
||
|
|
component: () => import('@/views/hermes/ModelsView.vue'),
|
||
|
|
},
|
||
|
|
{
|
||
|
|
path: '/hermes/logs',
|
||
|
|
name: 'hermes.logs',
|
||
|
|
component: () => import('@/views/hermes/LogsView.vue'),
|
||
|
|
},
|
||
|
|
{
|
||
|
|
path: '/hermes/usage',
|
||
|
|
name: 'hermes.usage',
|
||
|
|
component: () => import('@/views/hermes/UsageView.vue'),
|
||
|
|
},
|
||
|
|
{
|
||
|
|
path: '/hermes/skills',
|
||
|
|
name: 'hermes.skills',
|
||
|
|
component: () => import('@/views/hermes/SkillsView.vue'),
|
||
|
|
},
|
||
|
|
{
|
||
|
|
path: '/hermes/memory',
|
||
|
|
name: 'hermes.memory',
|
||
|
|
component: () => import('@/views/hermes/MemoryView.vue'),
|
||
|
|
},
|
||
|
|
{
|
||
|
|
path: '/hermes/settings',
|
||
|
|
name: 'hermes.settings',
|
||
|
|
component: () => import('@/views/hermes/SettingsView.vue'),
|
||
|
|
},
|
||
|
|
{
|
||
|
|
path: '/hermes/channels',
|
||
|
|
name: 'hermes.channels',
|
||
|
|
component: () => import('@/views/hermes/ChannelsView.vue'),
|
||
|
|
},
|
||
|
|
{
|
||
|
|
path: '/hermes/terminal',
|
||
|
|
name: 'hermes.terminal',
|
||
|
|
component: () => import('@/views/hermes/TerminalView.vue'),
|
||
|
|
},
|
||
|
|
],
|
||
|
|
})
|
||
|
|
|
||
|
|
router.beforeEach((to, _from, next) => {
|
||
|
|
// Public pages don't need auth
|
||
|
|
if (to.meta.public) {
|
||
|
|
// Already has key, skip login
|
||
|
|
if (to.name === 'login' && hasApiKey()) {
|
||
|
|
next({ path: '/hermes/chat' })
|
||
|
|
return
|
||
|
|
}
|
||
|
|
next()
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// All other pages require token
|
||
|
|
if (!hasApiKey()) {
|
||
|
|
next({ name: 'login' })
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
next()
|
||
|
|
})
|
||
|
|
|
||
|
|
export default router
|