UNPKG

@backstage/backend-defaults

Version:

Backend defaults used by Backstage backend apps

93 lines (90 loc) 2.98 kB
'use strict'; function readAccessRestrictionsFromConfig(externalAccessEntryConfig) { const configs = externalAccessEntryConfig.getOptionalConfigArray("accessRestrictions") ?? []; const result = /* @__PURE__ */ new Map(); for (const config of configs) { const validKeys = ["plugin", "permission", "permissionAttribute"]; for (const key of config.keys()) { if (!validKeys.includes(key)) { const valid = validKeys.map((k) => `'${k}'`).join(", "); throw new Error( `Invalid key '${key}' in 'accessRestrictions' config, expected one of ${valid}` ); } } const pluginId = config.getString("plugin"); const permissionNames = readPermissionNames(config); const permissionAttributes = readPermissionAttributes(config); if (result.has(pluginId)) { throw new Error( `Attempted to declare 'accessRestrictions' twice for plugin '${pluginId}', which is not permitted` ); } result.set(pluginId, { ...permissionNames ? { permissionNames } : {}, ...permissionAttributes ? { permissionAttributes } : {} }); } return result.size ? result : void 0; } function readStringOrStringArrayFromConfig(root, key, validValues) { if (!root.has(key)) { return void 0; } const rawValues = Array.isArray(root.get(key)) ? root.getStringArray(key) : [root.getString(key)]; const values = [ ...new Set( rawValues.map((v) => v.split(/[ ,]/)).flat().filter(Boolean) ) ]; if (!values.length) { return void 0; } if (validValues?.length) { for (const value of values) { if (!validValues.includes(value)) { const valid = validValues.map((k) => `'${k}'`).join(", "); throw new Error( `Invalid value '${value}' at '${key}' in 'permissionAttributes' config, valid values are ${valid}` ); } } } return values; } function readPermissionNames(externalAccessEntryConfig) { return readStringOrStringArrayFromConfig( externalAccessEntryConfig, "permission" ); } function readPermissionAttributes(externalAccessEntryConfig) { const config = externalAccessEntryConfig.getOptionalConfig( "permissionAttribute" ); if (!config) { return void 0; } const validKeys = ["action"]; for (const key of config.keys()) { if (!validKeys.includes(key)) { const valid = validKeys.map((k) => `'${k}'`).join(", "); throw new Error( `Invalid key '${key}' in 'permissionAttribute' config, expected ${valid}` ); } } const action = readStringOrStringArrayFromConfig(config, "action", [ "create", "read", "update", "delete" ]); const result = { ...action ? { action } : {} }; return Object.keys(result).length ? result : void 0; } exports.readAccessRestrictionsFromConfig = readAccessRestrictionsFromConfig; exports.readStringOrStringArrayFromConfig = readStringOrStringArrayFromConfig; //# sourceMappingURL=helpers.cjs.js.map