27 lines
1.4 KiB
JavaScript
27 lines
1.4 KiB
JavaScript
|
|
"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 };
|