Files
attest/pkg/policy/policy.go

39 lines
1.2 KiB
Go
Raw Permalink Normal View History

2024-04-22 12:22:15 -05:00
package policy
import (
"fmt"
2024-08-12 14:49:52 -05:00
"github.com/docker/attest/pkg/attestation"
"github.com/docker/attest/pkg/config"
2024-04-22 12:51:10 -05:00
"github.com/docker/attest/pkg/oci"
2024-04-22 12:22:15 -05:00
)
func CreateImageDetailsResolver(imageSource *oci.ImageSpec) (oci.ImageDetailsResolver, error) {
switch imageSource.Type {
case oci.OCI:
2024-08-12 14:49:52 -05:00
return attestation.NewOCILayoutResolver(imageSource)
case oci.Docker:
return oci.NewRegistryImageDetailsResolver(imageSource)
}
return nil, fmt.Errorf("unsupported image source type: %s", imageSource.Type)
}
2024-08-12 14:49:52 -05:00
func CreateAttestationResolver(resolver oci.ImageDetailsResolver, mapping *config.PolicyMapping) (attestation.Resolver, error) {
2024-08-05 13:24:58 -05:00
if mapping.Attestations != nil {
if mapping.Attestations.Style == config.AttestationStyleAttached {
switch resolver := resolver.(type) {
case *oci.RegistryImageDetailsResolver:
2024-08-12 14:49:52 -05:00
return attestation.NewRegistryResolver(resolver)
case *attestation.LayoutResolver:
return resolver, nil
default:
2024-08-05 13:24:58 -05:00
return nil, fmt.Errorf("unsupported image details resolver type: %T", resolver)
}
}
2024-08-05 13:24:58 -05:00
if mapping.Attestations.Repo != "" {
2024-08-12 14:49:52 -05:00
return attestation.NewReferrersResolver(resolver, attestation.WithReferrersRepo(mapping.Attestations.Repo))
2024-08-05 13:24:58 -05:00
}
}
2024-08-12 14:49:52 -05:00
return attestation.NewReferrersResolver(resolver)
}