in server/multitenancy/routes.ts [22:135]
export function setupMultitenantRoutes(
router: IRouter,
sessionStroageFactory: SessionStorageFactory<SecuritySessionCookie>,
securityClient: SecurityClient
) {
const PREFIX: string = '/api/v1';
const entities = new AllHtmlEntities();
/**
* Updates selected tenant.
*/
router.post(
{
path: `${PREFIX}/multitenancy/tenant`,
validate: {
body: schema.object({
username: schema.string(),
tenant: schema.string(),
}),
},
},
async (context, request, response) => {
const tenant = request.body.tenant;
const cookie: SecuritySessionCookie | null = await sessionStroageFactory
.asScoped(request)
.get();
if (!cookie) {
return response.badRequest({
body: 'Invalid cookie',
});
}
cookie.tenant = tenant;
sessionStroageFactory.asScoped(request).set(cookie);
return response.ok({
body: entities.encode(tenant),
});
}
);
/**
* Gets current selected tenant from session.
*/
router.get(
{
path: `${PREFIX}/multitenancy/tenant`,
validate: false,
},
async (context, request, response) => {
const cookie = await sessionStroageFactory.asScoped(request).get();
if (!cookie) {
return response.badRequest({
body: 'Invalid cookie.',
});
}
return response.ok({
body: entities.encode(cookie.tenant),
});
}
);
/**
* Gets multitenant info of current user.
*
* Sample response of this API:
* {
* "user_name": "admin",
* "not_fail_on_forbidden_enabled": false,
* "opensearch_dashboards_mt_enabled": true,
* "opensearch_dashboards_index": ".opensearch_dashboards",
* "opensearch_dashboards_server_user": "opensearch_dashboardsserver"
* }
*/
router.get(
{
path: `${PREFIX}/multitenancy/info`,
validate: false,
},
async (context, request, response) => {
try {
const esResponse = await securityClient.getMultitenancyInfo(request);
return response.ok({
body: esResponse,
headers: {
'content-type': 'application/json',
},
});
} catch (error) {
return response.internalError({
body: error.message,
});
}
}
);
router.post(
{
// FIXME: Seems this is not being used, confirm and delete if not used anymore
path: `${PREFIX}/multitenancy/migrate/{tenantindex}`,
validate: {
params: schema.object({
tenantindex: schema.string(),
}),
query: schema.object({
force: schema.literal('true'),
}),
},
},
async (context, request, response) => {
return response.ok(); // TODO: implement tenant index migration logic
}
);
}