blob: 5f216940e35e9ae04d1b836afa7983f56143549c [file] [log] [blame]
import {custosService} from "../util/custos.util";
import config from "@/config";
const getDefaultState = () => {
return {
tenantsMap: {},
clientIdToTenantIdMap: {},
tenantsListMap: {},
tenantsListPaginationMap: {},
tenantRolesMap: {},
tenantRolesListMap: {}
}
};
const state = getDefaultState();
const actions = {
async fetchTenantSecret({commit}, {clientId}) {
const clientSecret = await custosService.identity.getClientSecret({clientId});
commit('SET_TENANT_SECRET', {clientId, clientSecret});
},
async fetchTenants({commit, rootGetters}, {limit, offset, status, requesterEmail, parentTenantId, parentClientId}) {
const params = {limit, offset, status, requesterEmail, parentTenantId, parentClientId};
const queryString = JSON.stringify(params);
let {tenant, total_num_of_tenants} = await custosService.tenants.fetchTenants(params);
const tenantIds = tenant.map(({tenant_id, tenant_status, client_name, domain, client_id, parent_tenant_id, admin_username, requester_email}) => {
let type = "CHILD_TENANT";
let hasAdminPrivileges = false;
let currentUsername = rootGetters["auth/currentUsername"];
// TODO fix
if (client_id === config.value('superClientId')) {
type = "SUPER_TENANT";
} else if (parent_tenant_id === "0") {
type = "ADMIN_TENANT";
}
if (currentUsername === admin_username) {
hasAdminPrivileges = true;
}
commit('SET_TENANT', {
tenantId: tenant_id,
status: tenant_status,
name: client_name,
domain,
clientId: client_id,
type,
hasAdminPrivileges,
adminUsername: admin_username,
requesterEmail: requester_email
});
return tenant_id;
});
commit('SET_TENANT_LIST', {queryString, tenantIds});
const pagination = {totalRows: total_num_of_tenants, perPage: limit, activePage: offset + 1};
commit('SET_TENANT_LIST_PAGINATION', {queryString, pagination});
},
async fetchTenant({commit, rootGetters}, {clientId}) {
let tenant = await custosService.tenants.fetchTenant({clientId});
const {
admin_username, admin_first_name, admin_last_name, admin_email,
tenant_id, tenant_status, client_name, domain,
redirect_uris, scope, client_uri, logo_uri, comment, application_type,
parent_tenant_id, requester_email
} = tenant;
let type = "CHILD_TENANT";
let hasAdminPrivileges = false;
let currentUsername = rootGetters["auth/currentUsername"];
// TODO fix
if (clientId === config.value('superClientId')) {
type = "SUPER_TENANT";
} else if (parent_tenant_id === "0") {
type = "ADMIN_TENANT";
}
if (currentUsername === admin_username) {
hasAdminPrivileges = true;
}
commit('SET_TENANT', {
username: admin_username, firstName: admin_first_name, lastName: admin_last_name, email: admin_email,
tenantId: tenant_id, status: tenant_status, name: client_name, domain, clientId,
redirectUris: redirect_uris, scope: scope, clientUri: client_uri,
logoUri: logo_uri, comment: comment, applicationType: application_type,
type, hasAdminPrivileges,
adminUsername: admin_username, requesterEmail: requester_email
});
},
async createTenantRole({commit}, {clientId, name, description, composite = false, clientLevel = false}) {
const {id} = await custosService.tenants.createTenantRole({
clientId, name, description, composite, clientLevel
});
commit('SET_TENANT_ROLE', {
tenantRoleId: id,
name,
description,
composite
});
},
async deleteTenantRole(obj, {clientId, name, clientLevel = false}) {
await custosService.tenants.deleteTenantRole({
clientId, name, clientLevel
});
},
async fetchTenantRoles({commit}, {clientId, clientLevel = false}) {
const DEFAULT_CUSTOS_ROLES = [
// "admin-read-only", "admin", "gateway-provider", "gateway-user", "offline_access",
// "uma_authorization", "user-pending"
];
let queryString = JSON.stringify({clientId, clientLevel});
let {data: {roles}} = await custosService.tenants.fetchTenantRoles({clientId, clientLevel});
const tenantRoleIds = roles.filter(({name}) => {
return DEFAULT_CUSTOS_ROLES.indexOf(name) < 0
}).map(({id, name, description, composite}) => {
const tenantRoleId = id
commit('SET_TENANT_ROLE', {tenantRoleId, name, description, composite});
return tenantRoleId;
});
commit('SET_TENANT_ROLES_LIST', {queryString, tenantRoleIds});
},
async createTenant(o, {username, firstName, lastName, email, password, tenantName, redirectUris, scope, domain, clientUri, logoUri, comment, applicationType, parentClientId, parentClientSecret}) {
const res = await custosService.tenants.createTenant({
username,
firstName,
lastName,
email,
password,
tenantName,
redirectUris,
scope,
domain,
clientUri,
logoUri,
comment,
applicationType,
parentClientId,
parentClientSecret
});
const {client_id, client_secret} = res.data;
// {
// "client_id": "custos-xj1jamrkt4smtdz3tpn6-10001501",
// "client_secret": "69vJnB744dWIirSaTWFrA1MHSxGmXRmkyJOwZOkv",
// "is_activated": true,
// "client_id_issued_at": 1618549123000,
// "client_secret_expires_at": 0,
// "registration_client_uri": "https://custos.scigap.org:32036/tenant-management/v1.0.0/oauth2/tenant?client_id=custos-xj1jamrkt4smtdz3tpn6-10001501",
// "token_endpoint_auth_method": "client_secret_basic",
// "msg": "Credentials are activated"
// }
return {clientId: client_id, clientSecret: client_secret}
// commit('SET_TENANT', {tenantId: client_id, status: "", clientSecret: client_secret, name: tenantName, domain});
},
async updateTenant(o, {tenantId, clientId, username, firstName, lastName, email, password, tenantName, redirectUris, scope, domain, clientUri, logoUri, comment, applicationType, requesterEmail}) {
await custosService.tenants.updateTenant({
tenantId,
clientId,
username,
firstName,
lastName,
email,
password,
tenantName,
redirectUris,
scope,
domain,
clientUri,
logoUri,
comment,
applicationType,
requesterEmail
});
},
async updateTenantStatus({commit}, {clientId, status}) {
await custosService.tenants.updateTenantStatus({clientId, status});
commit('SET_TENANT_STATUS', {clientId, status});
}
}
const mutations = {
SET_TENANT(state, {
username = null, firstName = null, lastName = null, email = null,
tenantId, status, name, domain, clientId, redirectUris = null, scope = null,
clientUri = null, logoUri = null, comment = null, applicationType = null,
type, hasAdminPrivileges, adminUsername, requesterEmail
}) {
state.tenantsMap = {
...state.tenantsMap,
[clientId]: {
...state.tenantsMap[clientId],
username, firstName, lastName, email,
tenantId, status, name, domain, clientId,
redirectUris, scope, clientUri, logoUri, comment, applicationType,
type, hasAdminPrivileges, adminUsername, requesterEmail
}
};
state.clientIdToTenantIdMap = {
...state.clientIdToTenantIdMap,
[tenantId]: clientId
};
},
SET_TENANT_SECRET(state, {clientId, clientSecret}) {
state.tenantsMap = {
...state.tenantsMap,
[clientId]: {
...state.tenantsMap[clientId],
clientSecret
}
};
},
SET_TENANT_STATUS(state, {clientId, status}) {
state.tenantsMap = {
...state.tenantsMap,
[clientId]: {
...state.tenantsMap[clientId],
status
}
};
},
SET_TENANT_LIST(state, {queryString, tenantIds}) {
state.tenantsListMap = {
...state.tenantsListMap,
[queryString]: tenantIds
}
},
SET_TENANT_LIST_PAGINATION(state, {queryString, pagination}) {
state.tenantsListPaginationMap = {
...state.tenantsListPaginationMap,
[queryString]: pagination
}
},
SET_TENANT_ROLE(state, {tenantRoleId, name, description, composite}) {
state.tenantRolesMap = {
...state.tenantRolesMap,
[tenantRoleId]: {tenantRoleId, name, description, composite}
};
},
SET_TENANT_ROLES_LIST(state, {queryString, tenantRoleIds}) {
state.tenantRolesListMap = {
...state.tenantRolesListMap,
[queryString]: tenantRoleIds
}
}
}
const getters = {
getTenants(state, getters) {
return ({limit, offset, status, requesterEmail, parentTenantId, parentClientId}) => {
const queryString = JSON.stringify({limit, offset, status, requesterEmail, parentTenantId, parentClientId});
if (state.tenantsListMap[queryString]) {
const r = state.tenantsListMap[queryString].map(tenantId => getters.getTenant({tenantId}));
return r
} else {
return null;
}
}
},
getTenantsPagination(state) {
return ({limit, offset, status, requesterEmail, parentTenantId, parentClientId}) => {
const queryString = JSON.stringify({limit, offset, status, requesterEmail, parentTenantId, parentClientId});
if (state.tenantsListPaginationMap[queryString]) {
return state.tenantsListPaginationMap[queryString];
} else {
return null;
}
}
},
getTenant(state) {
return ({tenantId, clientId}) => {
if (state.clientIdToTenantIdMap[tenantId]) {
return state.tenantsMap[state.clientIdToTenantIdMap[tenantId]];
} else if (state.tenantsMap[clientId]) {
return state.tenantsMap[clientId];
} else {
return null;
}
}
},
getTenantRoles(state, getters) {
return ({clientId, clientLevel = false}) => {
const queryString = JSON.stringify({clientId, clientLevel});
if (state.tenantRolesListMap[queryString]) {
return state.tenantRolesListMap[queryString].map(tenantRoleId => getters.getTenantRole({tenantRoleId}));
} else {
return null;
}
}
},
getTenantRole(state) {
return ({tenantRoleId}) => {
if (state.tenantRolesMap[tenantRoleId]) {
return state.tenantRolesMap[tenantRoleId];
} else {
return null;
}
}
}
}
export default {
namespaced: true,
state,
getters,
actions,
mutations
}