Former-commit-id: ac2160fe6ef9c41c7b180a8af967f3d44f126394 [formerly c99451b289742e4738812c3f4bcfdc63931f2e6a] [formerly 10bc4c44b68391f2be0ee965187caaaaa27ba8f0 [formerly 1a4242ca06a3fa7ede2942364c9854ef3bfb39f1]] Former-commit-id: b3555e3ea88e695ee72a87cee4b226f3d0a1d48d [formerly 70e58315f9e2a3bb3e46d48b3280127aa49107c5] Former-commit-id: d66ddf727e7924b95e2caf88f3c02de17a1f86cf
160 lines
3.3 KiB
JavaScript
160 lines
3.3 KiB
JavaScript
import Vue from 'vue'
|
|
import Router from 'vue-router'
|
|
import Login from '@/components/Login'
|
|
import Main from '@/components/Main'
|
|
import Files from '@/components/Files'
|
|
import Users from '@/components/Users'
|
|
import User from '@/components/User'
|
|
import GlobalSettings from '@/components/GlobalSettings'
|
|
import ProfileSettings from '@/components/ProfileSettings'
|
|
import error403 from '@/components/errors/403'
|
|
import error404 from '@/components/errors/404'
|
|
import error500 from '@/components/errors/500'
|
|
import auth from '@/utils/auth.js'
|
|
import store from '@/store'
|
|
|
|
Vue.use(Router)
|
|
|
|
const router = new Router({
|
|
base: document.querySelector('meta[name="base"]').getAttribute('content'),
|
|
mode: 'history',
|
|
routes: [
|
|
{
|
|
path: '/login',
|
|
name: 'Login',
|
|
component: Login,
|
|
beforeEnter: function (to, from, next) {
|
|
auth.loggedIn()
|
|
.then(() => {
|
|
next({ path: '/files' })
|
|
})
|
|
.catch(() => {
|
|
document.title = 'Login'
|
|
next()
|
|
})
|
|
}
|
|
},
|
|
{
|
|
path: '/',
|
|
redirect: {
|
|
path: '/files/'
|
|
}
|
|
},
|
|
{
|
|
path: '/*',
|
|
component: Main,
|
|
meta: {
|
|
requiresAuth: true
|
|
},
|
|
children: [
|
|
{
|
|
path: '/files/*',
|
|
name: 'Files',
|
|
component: Files
|
|
},
|
|
{
|
|
path: '/settings',
|
|
name: 'Settings',
|
|
redirect: {
|
|
path: '/settings/profile'
|
|
}
|
|
},
|
|
{
|
|
path: '/settings/profile',
|
|
name: 'Profile Settings',
|
|
component: ProfileSettings
|
|
},
|
|
{
|
|
path: '/settings/global',
|
|
name: 'Global Settings',
|
|
component: GlobalSettings,
|
|
meta: {
|
|
requiresAdmin: true
|
|
}
|
|
},
|
|
{
|
|
path: '/403',
|
|
name: 'Forbidden',
|
|
component: error403
|
|
},
|
|
{
|
|
path: '/404',
|
|
name: 'Not Found',
|
|
component: error404
|
|
},
|
|
{
|
|
path: '/500',
|
|
name: 'Internal Server Error',
|
|
component: error500
|
|
},
|
|
{
|
|
path: '/users',
|
|
name: 'Users',
|
|
component: Users,
|
|
meta: {
|
|
requiresAdmin: true
|
|
}
|
|
},
|
|
{
|
|
path: '/users/',
|
|
redirect: {
|
|
path: '/users'
|
|
}
|
|
},
|
|
{
|
|
path: '/users/*',
|
|
name: 'User',
|
|
component: User,
|
|
meta: {
|
|
requiresAdmin: true
|
|
}
|
|
},
|
|
{
|
|
path: '/*',
|
|
redirect: {
|
|
name: 'Files'
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
})
|
|
|
|
router.beforeEach((to, from, next) => {
|
|
document.title = to.name
|
|
|
|
if (to.matched.some(record => record.meta.requiresAuth)) {
|
|
// this route requires auth, check if logged in
|
|
// if not, redirect to login page.
|
|
auth.loggedIn()
|
|
.then(() => {
|
|
if (to.matched.some(record => record.meta.requiresAdmin)) {
|
|
if (store.state.user.admin) {
|
|
next()
|
|
return
|
|
}
|
|
|
|
next({
|
|
path: '/403'
|
|
})
|
|
|
|
return
|
|
}
|
|
|
|
next()
|
|
})
|
|
.catch(e => {
|
|
next({
|
|
path: '/login',
|
|
query: { redirect: to.fullPath }
|
|
})
|
|
})
|
|
|
|
return
|
|
}
|
|
|
|
next()
|
|
})
|
|
|
|
export default router
|