164 lines
4.4 KiB
JavaScript
164 lines
4.4 KiB
JavaScript
import Vue from 'vue';
|
|
import VueRouter from 'vue-router';
|
|
import { store } from '@/store';
|
|
|
|
// Fixing new issue with VueRouter caused by new Promise API
|
|
const originalPush = VueRouter.prototype.push;
|
|
VueRouter.prototype.push = function push(location) {
|
|
return originalPush.call(this, location).catch(err => err);
|
|
};
|
|
|
|
Vue.use(VueRouter);
|
|
|
|
const routes = [
|
|
{
|
|
path: '/auth/login',
|
|
name: 'auth.login',
|
|
meta: {
|
|
auth: false,
|
|
guest: true,
|
|
layout: 'auth-layout',
|
|
},
|
|
component: () => import(/* webpackChunkName: "login" */ '@/views/Auth/Login.vue'),
|
|
beforeEnter: (to, from, next) => {
|
|
if (store.getters['user/loggedIn']) {
|
|
next('/');
|
|
} else {
|
|
next();
|
|
}
|
|
},
|
|
},
|
|
{
|
|
path: '/auth/desktop/login',
|
|
name: 'auth.desktop.login',
|
|
meta: {
|
|
auth: false,
|
|
guest: true,
|
|
layout: 'auth-layout',
|
|
},
|
|
beforeEnter: (to, from, next) => {
|
|
if (store.getters['user/loggedIn']) {
|
|
next('/');
|
|
} else {
|
|
next();
|
|
}
|
|
},
|
|
component: () => import(/* webpackChunkName: "desktop-login" */ '@/views/Auth/Desktop.vue'),
|
|
},
|
|
{
|
|
path: '/auth/password/reset',
|
|
name: 'auth.password.reset',
|
|
meta: {
|
|
auth: false,
|
|
},
|
|
component: () => import(/* webpackChunkName: "ResetPassword" */ '@/views/Auth/ResetPassword.vue'),
|
|
},
|
|
{
|
|
path: '/auth/register',
|
|
name: 'auth.register',
|
|
meta: {
|
|
auth: false,
|
|
},
|
|
component: () => import(/* webpackChunkName: "Register" */ '@/views/Auth/Register.vue'),
|
|
beforeEnter: (to, from, next) => {
|
|
if (store.getters['user/loggedIn']) {
|
|
store.dispatch('user/forceUserExit');
|
|
}
|
|
|
|
next();
|
|
},
|
|
},
|
|
{
|
|
path: '*',
|
|
name: 'not-found',
|
|
meta: {
|
|
auth: false,
|
|
},
|
|
component: () => import(/* webpackChunkName: "PageNotFound" */ '@/views/PageNotFound.vue'),
|
|
},
|
|
{
|
|
path: '/error',
|
|
name: 'api.error',
|
|
meta: {
|
|
auth: false,
|
|
},
|
|
component: () => import(/* webpackChunkName: "ApiError" */ '@/views/ApiError.vue'),
|
|
},
|
|
{
|
|
path: '/forbidden',
|
|
name: 'forbidden',
|
|
meta: {
|
|
auth: false,
|
|
},
|
|
component: () => import(/* webpackChunkName: "PageForbidden" */ '@/views/PageForbidden.vue'),
|
|
},
|
|
{
|
|
path: '/about',
|
|
name: 'about',
|
|
component: () => import(/* webpackChunkName: "About" */ '@/views/About.vue'),
|
|
},
|
|
{
|
|
path: '/desktop-login',
|
|
name: 'desktop-login',
|
|
component: () => import(/* webpackChunkName: "DesktopLogin" */ '@/views/DesktopLogin.vue'),
|
|
},
|
|
];
|
|
|
|
const router = new VueRouter({
|
|
mode: 'history',
|
|
base: process.env.BASE_URL,
|
|
routes,
|
|
});
|
|
|
|
router.beforeEach(async (to, from, next) => {
|
|
// Close pending requests when switching pages
|
|
await store.dispatch('httpRequest/cancelPendingRequests');
|
|
|
|
if (to.matched.some(record => record.meta.auth || typeof record.meta.auth === 'undefined')) {
|
|
if (!store.getters['user/loggedIn']) {
|
|
return next({ name: 'auth.login' });
|
|
}
|
|
} else if (to.matched.some(record => !record.meta.auth) && !store.getters['user/loggedIn']) {
|
|
return next();
|
|
}
|
|
|
|
if (to.name === 'setup') {
|
|
if (store.getters['httpRequest/getStatusOfInstalling']) {
|
|
next({ name: 'forbidden' });
|
|
}
|
|
|
|
return next();
|
|
}
|
|
|
|
if (to.matched.some(record => typeof record.meta.guest !== 'undefined' && record.meta.guest)) {
|
|
if (store.getters['user/loggedIn']) {
|
|
return next('/');
|
|
}
|
|
}
|
|
|
|
const checkPermission = () => {
|
|
if (!Vue.prototype.$gate.user) {
|
|
Vue.prototype.$gate.auth(store.getters['user/user']);
|
|
}
|
|
|
|
if (to?.meta?.checkPermission) {
|
|
return to.meta.checkPermission() ? next() : next({ name: 'forbidden' });
|
|
}
|
|
|
|
return next();
|
|
};
|
|
|
|
if (!store.getters['user/user'] || !Object.keys(store.getters['user/user']).length) {
|
|
store.watch(
|
|
() => store.getters['user/user'],
|
|
() => {
|
|
checkPermission();
|
|
},
|
|
);
|
|
} else {
|
|
checkPermission();
|
|
}
|
|
});
|
|
|
|
export default router;
|