@backstage/backend-defaults
Version:
Backend defaults used by Backstage backend apps
93 lines (90 loc) • 2.98 kB
JavaScript
;
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