@backstage-community/plugin-rbac-backend
Version:
105 lines (101 loc) • 4.38 kB
JavaScript
;
var pluginRbacCommon = require('@backstage-community/plugin-rbac-common');
var restInterceptor = require('../auditor/rest-interceptor.cjs.js');
var policiesRestApi = require('./policies-rest-api.cjs.js');
var errors = require('@backstage/errors');
var pluginValidation = require('../validation/plugin-validation.cjs.js');
function registerPermissionDefinitionRoutes(router, pluginPermMetaData, pluginIdProvider, extraPluginsIdStorage, deps) {
const { auth, auditor } = deps;
router.get(
"/plugins/policies",
restInterceptor.logAuditorEvent(auditor),
async (request, response) => {
await policiesRestApi.authorizeConditional(request, pluginRbacCommon.policyEntityReadPermission, deps);
const body = await pluginPermMetaData.getPluginPolicies(auth);
response.json(body);
}
);
router.get(
"/plugins/condition-rules",
restInterceptor.logAuditorEvent(auditor),
async (request, response) => {
await policiesRestApi.authorizeConditional(request, pluginRbacCommon.policyEntityReadPermission, deps);
const body = await pluginPermMetaData.getPluginConditionRules(auth);
response.json(body);
}
);
router.get(
"/plugins/id",
restInterceptor.logAuditorEvent(auditor),
async (request, response) => {
await policiesRestApi.authorizeConditional(request, pluginRbacCommon.policyEntityReadPermission, deps);
const actualPluginIds = await pluginIdProvider.getPluginIds();
response.status(200).json(pluginIdsToResponse(actualPluginIds));
}
);
router.post(
"/plugins/id",
restInterceptor.logAuditorEvent(auditor),
async (request, response) => {
await policiesRestApi.authorizeConditional(request, pluginRbacCommon.policyEntityCreatePermission, deps);
const pluginIds = request.body;
pluginValidation.validatePermissionDependentPlugin(pluginIds);
const pluginDtos = permissionDependentPluginListToDTO(pluginIds);
let actualPluginIds = await pluginIdProvider.getPluginIds();
const conflictedIds = pluginIds.ids.filter(
(id) => actualPluginIds.includes(id)
);
if (conflictedIds.length > 0) {
throw new errors.ConflictError(
`Plugin IDs ${JSON.stringify(conflictedIds)} already exist in the system. Please use a different set of plugin ids.`
);
}
await extraPluginsIdStorage.addPlugins(pluginDtos);
response.locals.meta = pluginIds;
actualPluginIds = await pluginIdProvider.getPluginIds();
response.status(200).json(pluginIdsToResponse(actualPluginIds));
}
);
router.delete(
"/plugins/id",
restInterceptor.logAuditorEvent(auditor),
async (request, response) => {
await policiesRestApi.authorizeConditional(request, pluginRbacCommon.policyEntityDeletePermission, deps);
const pluginIds = request.body;
pluginValidation.validatePermissionDependentPlugin(pluginIds);
const configuredPluginIds = pluginIds.ids.filter(
(pluginId) => pluginIdProvider.isConfiguredPluginId(pluginId)
);
if (configuredPluginIds.length > 0) {
throw new errors.NotAllowedError(
`Plugin IDs ${JSON.stringify(pluginIds.ids)} can be removed only with help of configuration.`
);
}
let actualPluginIds = await pluginIdProvider.getPluginIds();
const notFoundPlugins = pluginIds.ids.filter(
(pluginToDel) => !actualPluginIds.includes(pluginToDel)
);
if (notFoundPlugins.length > 0) {
throw new errors.NotFoundError(
`Plugin IDs ${JSON.stringify(notFoundPlugins)} were not found.`
);
}
await extraPluginsIdStorage.deletePlugins(pluginIds.ids);
response.locals.meta = pluginIds;
actualPluginIds = await pluginIdProvider.getPluginIds();
response.status(200).json(pluginIdsToResponse(actualPluginIds));
}
);
}
function pluginIdsToResponse(pluginIds) {
return { ids: pluginIds };
}
function permissionDependentPluginListToDTO(pluginList) {
return pluginList.ids.map((pluginId) => {
return { pluginId };
});
}
exports.permissionDependentPluginListToDTO = permissionDependentPluginListToDTO;
exports.pluginIdsToResponse = pluginIdsToResponse;
exports.registerPermissionDefinitionRoutes = registerPermissionDefinitionRoutes;
//# sourceMappingURL=permission-definition-routes.cjs.js.map