UNPKG

@backstage-community/plugin-rbac-backend

Version:
105 lines (101 loc) 4.38 kB
'use strict'; 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