func parseImageManifestMediaType()

in ecr/resolver.go [250:287]


func parseImageManifestMediaType(ctx context.Context, body string) (string, error) {
	// The unsigned variant of Docker v2 Schema 1 manifest mediaType.
	const mediaTypeDockerSchema1ManifestUnsigned = "application/vnd.docker.distribution.manifest.v1+json"

	var manifest manifestProbe
	err := json.Unmarshal([]byte(body), &manifest)
	if err != nil {
		return "", errors.Wrapf(ErrInvalidManifest, "failed to unmarshall %q as a manifest", body)
	}

	switch manifest.SchemaVersion {
	case 2:
		// Defer to the manifest declared type.
		if manifest.MediaType != "" {
			return manifest.MediaType, nil
		}
		// Is a manifest list.
		if len(manifest.Manifests) > 0 {
			return images.MediaTypeDockerSchema2ManifestList, nil
		}
		// Is a single image manifest.
		return images.MediaTypeDockerSchema2Manifest, nil

	case 1:
		// Defer to the manifest declared type.
		if manifest.MediaType != "" {
			return manifest.MediaType, nil
		}
		// Is Signed Docker Schema 1 manifest.
		if len(manifest.Signatures) > 0 {
			return images.MediaTypeDockerSchema1Manifest, nil
		}
		// Is Unsigned Docker Schema 1 manifest.
		return mediaTypeDockerSchema1ManifestUnsigned, nil
	default:
		return "", errors.Wrapf(ErrInvalidManifest, "unsupported schema version %d", manifest.SchemaVersion)
	}
}