fix: layout attestation resolver

This commit is contained in:
mrjoelkamp
2024-08-05 13:24:58 -05:00
parent 58021646e3
commit c7d17faf05
6 changed files with 41 additions and 91 deletions

View File

@@ -219,40 +219,20 @@ func CreateImageDetailsResolver(imageSource *oci.ImageSpec) (oci.ImageDetailsRes
}
func CreateAttestationResolver(resolver oci.ImageDetailsResolver, mapping *config.PolicyMapping) (oci.AttestationResolver, error) {
switch resolver := resolver.(type) {
case *oci.RegistryImageDetailsResolver:
if mapping.Attestations != nil && mapping.Attestations.Style == config.AttestationStyleAttached {
return oci.NewRegistryAttestationResolver(resolver)
} else {
if mapping.Attestations != nil && mapping.Attestations.Repo != "" {
return oci.NewReferrersAttestationResolver(resolver, oci.WithReferrersRepo(mapping.Attestations.Repo))
}
return oci.NewReferrersAttestationResolver(resolver)
}
case *oci.LayoutResolver:
if mapping.Attestations != nil {
switch mapping.Attestations.Style {
case config.AttestationStyleAttached:
if mapping.Attestations != nil {
if mapping.Attestations.Style == config.AttestationStyleAttached {
switch resolver := resolver.(type) {
case *oci.RegistryImageDetailsResolver:
return oci.NewRegistryAttestationResolver(resolver)
case *oci.LayoutResolver:
return resolver, nil
case config.AttestationStyleReferrers:
if mapping.Attestations.Repo != "" {
referrersSpec, err := oci.ParseImageSpec(mapping.Attestations.Repo)
if err != nil {
return nil, fmt.Errorf("failed to parse referrers image spec: %w", err)
}
referrersResolver, err := CreateImageDetailsResolver(referrersSpec)
if err != nil {
return nil, fmt.Errorf("failed to create referrers resolver: %w", err)
}
return oci.NewReferrersAttestationResolver(referrersResolver, oci.WithReferrersRepo(mapping.Attestations.Repo))
}
return oci.NewReferrersAttestationResolver(resolver)
default:
return nil, fmt.Errorf("unsupported attestation style: %s", mapping.Attestations.Style)
return nil, fmt.Errorf("unsupported image details resolver type: %T", resolver)
}
}
return resolver, nil
default:
return nil, fmt.Errorf("unsupported image details resolver type: %T", resolver)
if mapping.Attestations.Repo != "" {
return oci.NewReferrersAttestationResolver(resolver, oci.WithReferrersRepo(mapping.Attestations.Repo))
}
}
return oci.NewReferrersAttestationResolver(resolver)
}