blob: 0ff6e49be4e92ea327abaf0a79a24bfd4dee5c36 [file] [log] [blame]
import Vue from "vue";
import Router from "vue-router";
import Landing from "./lib/components/pages/Landing.vue";
import store from './lib/store'
import {custosService} from "./lib/store/util/custos.util";
Vue.use(Router)
export default new Router({
mode: "history",
routes: [
{
path: "/",
name: "home",
component: Landing
},
{
path: "/tenants/default",
name: "tenants-default",
beforeEnter: async (to, from, next) => {
next(`/tenants/${custosService.clientId}`);
}
},
{
path: "/tenants/:clientId/child-tenants",
name: "tenants",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/ListTenants")
},
{
path: "/tenants/:clientId/child-tenants/new",
name: "tenants-new",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/NewTenant")
},
{
path: "/tenants/:clientId",
name: "tenants",
// beforeEnter: async (to, from, next) => {
// next(`/tenants/${to.params.clientId}/profile`);
// }
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, async (val) => {
if (val === true) {
await store.dispatch("tenant/fetchTenant", {clientId: to.params.clientId});
const superTenant = store.getters["tenant/getTenant"]({clientId: custosService.clientId});
const tenant = store.getters["tenant/getTenant"]({clientId: to.params.clientId});
if (superTenant.hasAdminPrivileges || tenant.hasAdminPrivileges || tenant.type === "CHILD_TENANT") {
next(`/tenants/${to.params.clientId}/profile`);
} else {
next(`/tenants/${to.params.clientId}/child-tenants`);
}
} else {
next(val);
}
})
},
// component: () =>
// import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantHome")
},
{
path: "/tenants/:clientId/profile",
name: "tenants",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantProfile")
},
{
path: "/tenants/:clientId/users",
name: "tenants",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantUsers")
},
{
path: "/tenants/:clientId/users/:username",
name: "tenants",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantUser")
},
{
path: "/tenants/:clientId/groups",
name: "tenants",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantGroups")
},
{
path: "/tenants/:clientId/groups/new",
name: "tenants",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantNewGroup")
},
{
path: "/tenants/:clientId/groups/:groupId",
name: "tenants",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantGroup")
},
{
path: "/tenants/:clientId/permission-types/new",
name: "tenants",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantNewPermissionType")
},
{
path: "/tenants/:clientId/permission-types",
name: "tenants",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantPermissionTypes")
},
{
path: "/tenants/:clientId/roles/new",
name: "tenants",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantNewRole")
},
{
path: "/tenants/:clientId/roles",
name: "tenants",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantRoles")
},
{
path: "/tenants/:clientId/entity-types/new",
name: "tenants",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantNewEntityType")
},
{
path: "/tenants/:clientId/entity-types",
name: "tenants",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantEntityTypes")
},
{
path: "/tenants/:clientId/entities/new",
name: "create_entity",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantNewEntity")
},
{
path: "/tenants/:clientId/entities",
name: "tenants",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantEntities")
},
{
path: "/tenants/:clientId/entities/:entityId",
name: "tenants",
beforeEnter: async (to, from, next) => {
await _validateAuthenticationBeforeEnter(to, from, next)
},
component: () =>
import(/*webpackChunkName:"account"*/ "./lib/components/pages/TenantEntity")
},
{
path: "/callback",
name: "callback",
component: () =>
import(/*webpackChunkName:"users"*/ "./lib/components/pages/Callback")
},
{
path: "*",
name: "notFound",
component: () =>
import(/*webpackChunkName:"users"*/ "./lib/components/pages/404")
}
]
})
async function _validateAuthenticationBeforeEnter(to, from, next) {
await store.dispatch('auth/refreshAuthentication');
const authenticated = store.getters['auth/authenticated'];
if (!authenticated) {
// next(true);
next('/');
} else {
const username = store.getters["auth/currentUsername"];
if (!store.getters["user/getUser"]({username, clientId: custosService.clientId})) {
await store.dispatch('user/fetchUsers', {username, clientId: custosService.clientId});
}
if (!store.getters["tenant/getTenant"]({clientId: custosService.clientId})) {
await store.dispatch("tenant/fetchTenant", {clientId: custosService.clientId});
}
next(true);
}
}