Centralize source manifest validation
This commit is contained in:
@@ -59,9 +59,6 @@ func ParseManifest(data []byte) (Manifest, error) {
|
||||
return Manifest{}, fmt.Errorf("manifest schema_version is required")
|
||||
}
|
||||
manifest.SchemaVersion = *raw.SchemaVersion
|
||||
if manifest.SchemaVersion != 1 {
|
||||
return Manifest{}, fmt.Errorf("manifest schema_version must be 1")
|
||||
}
|
||||
if raw.ID == nil || *raw.ID == "" {
|
||||
return Manifest{}, fmt.Errorf("manifest id is required")
|
||||
}
|
||||
@@ -69,9 +66,6 @@ func ParseManifest(data []byte) (Manifest, error) {
|
||||
if raw.Digest == nil || *raw.Digest == "" {
|
||||
return Manifest{}, fmt.Errorf("manifest digest is required")
|
||||
}
|
||||
if err := ValidateDigest(*raw.Digest); err != nil {
|
||||
return Manifest{}, fmt.Errorf("manifest digest: %w", err)
|
||||
}
|
||||
manifest.Digest = *raw.Digest
|
||||
if raw.Created == nil || *raw.Created == "" {
|
||||
return Manifest{}, fmt.Errorf("manifest created is required")
|
||||
@@ -85,18 +79,16 @@ func ParseManifest(data []byte) (Manifest, error) {
|
||||
return Manifest{}, fmt.Errorf("manifest files is required")
|
||||
}
|
||||
|
||||
seen := make(map[string]struct{}, len(raw.Files))
|
||||
for index, rawFile := range raw.Files {
|
||||
file, err := parseManifestFile(index, rawFile)
|
||||
if err != nil {
|
||||
return Manifest{}, err
|
||||
}
|
||||
if _, exists := seen[file.Path]; exists {
|
||||
return Manifest{}, fmt.Errorf("manifest files[%d].path duplicates %q", index, file.Path)
|
||||
}
|
||||
seen[file.Path] = struct{}{}
|
||||
manifest.Files = append(manifest.Files, file)
|
||||
}
|
||||
if err := ValidateManifest(manifest); err != nil {
|
||||
return Manifest{}, fmt.Errorf("manifest %w", err)
|
||||
}
|
||||
return manifest, nil
|
||||
}
|
||||
|
||||
@@ -104,21 +96,12 @@ func parseManifestFile(index int, raw rawManifestFile) (ManifestFile, error) {
|
||||
if raw.Path == nil || *raw.Path == "" {
|
||||
return ManifestFile{}, fmt.Errorf("manifest files[%d].path is required", index)
|
||||
}
|
||||
if err := ValidateSourcePath(*raw.Path); err != nil {
|
||||
return ManifestFile{}, fmt.Errorf("manifest files[%d].path: %w", index, err)
|
||||
}
|
||||
if raw.SHA256 == nil || *raw.SHA256 == "" {
|
||||
return ManifestFile{}, fmt.Errorf("manifest files[%d].sha256 is required", index)
|
||||
}
|
||||
if err := ValidateDigest(*raw.SHA256); err != nil {
|
||||
return ManifestFile{}, fmt.Errorf("manifest files[%d].sha256: %w", index, err)
|
||||
}
|
||||
if raw.Size == nil {
|
||||
return ManifestFile{}, fmt.Errorf("manifest files[%d].size is required", index)
|
||||
}
|
||||
if *raw.Size < 0 {
|
||||
return ManifestFile{}, fmt.Errorf("manifest files[%d].size must be non-negative", index)
|
||||
}
|
||||
return ManifestFile{
|
||||
Path: *raw.Path,
|
||||
SHA256: *raw.SHA256,
|
||||
|
||||
Reference in New Issue
Block a user