guanghu-ice-heart/server-tools/lake-lamp-authz/deployment-source-policy.js

27 lines
1.4 KiB
JavaScript
Raw Permalink Normal View History

"use strict";
function validateDeploymentSource(event, registry) {
const entry = registry && registry[event.repo];
if (!entry) return "deployment_repository_not_registered";
const policy = entry.deployment_policy;
if (!policy) return "";
if (policy.deployable === false) return "deployment_repository_not_deployable";
const source = event.deployment_source;
if (!source || typeof source !== "object") return "deployment_source_binding_required";
const profile = (policy.profiles || []).find(candidate =>
candidate.repository_id === source.repository_id
&& candidate.channel_id === source.channel_id
&& candidate.distribution === source.distribution
);
if (!profile) return "deployment_source_profile_not_registered";
if (profile.state && profile.state !== "active") return "deployment_source_profile_inactive";
if (profile.source_owner_id !== source.owner_id) return "deployment_source_owner_mismatch";
if (!(profile.allowed_authorizers || []).includes(event.authorizer_id)) return "deployment_authorizer_not_allowed";
if (!(profile.allowed_personas || []).includes(event.persona_id)) return "deployment_persona_not_allowed";
if (!(profile.allowed_execution_runtimes || []).includes(event.execution_runtime_id)) return "deployment_execution_runtime_not_allowed";
if (!(profile.allowed_targets || []).includes(event.target)) return "deployment_target_not_allowed";
return "";
}
module.exports = { validateDeploymentSource };