pkg/urlparser/azure.go (25 lines of code) (raw):
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
package urlparser
import (
"fmt"
"regexp"
"github.com/opencontainers/go-digest"
)
var (
regexes = []*regexp.Regexp{
// Azure Container Registry public cloud data endpoints.
regexp.MustCompile(`https:\/\/[a-zA-Z0-9\.]+\.azurecr\.[a-z\.]+\/?\?[a-zA-Z0-9\.\&\=\-]+\&d=sha256:([a-zA-Z0-9]{64})[.]*`),
// Microsoft Artifact Registry public cloud data endpoints.
regexp.MustCompile(`https:\/\/[a-zA-Z0-9]+\.data.mcr.microsoft.com\/[a-zA-Z0-9\-]+\/\/docker\/registry\/v2\/blobs\/sha256\/[a-z0-9]{2}\/([a-zA-Z0-9]{64})\/data.*`),
// Azure Blob Storage public cloud blob endpoints.
regexp.MustCompile(`https:\/\/[a-zA-Z0-9]+\.blob\.[a-z\.]+\/[a-zA-Z0-9\-]+\/\/docker\/registry\/v2\/blobs\/sha256\/[a-z0-9]{2}\/([a-zA-Z0-9]{64})\/data.*`),
}
)
// parseDigestFromAzureUrl parses the digest from the given blob url or returns an error.
func parseDigestFromAzureUrl(url string) (digest.Digest, error) {
if url == "" {
return "", fmt.Errorf("empty url")
}
for _, r := range regexes {
matches := r.FindStringSubmatch(url)
if len(matches) == 2 {
return digest.Digest("sha256:" + matches[1]), nil
}
}
return "", fmt.Errorf("unknown url")
}