in scan/dependencies.go [120:154]
func NewImageReference(imagePath string) (*image.Reference, error) {
ref, err := reference.Parse(imagePath)
if err != nil {
return nil, errors.Wrapf(err, "Failed to parse image reference, ensure tags have a valid format: %s", imagePath)
}
result := &image.Reference{
Reference: ref.String(),
}
if named, ok := ref.(reference.Named); ok {
result.Registry = reference.Domain(named)
if strings.Contains(result.Registry, ".") {
// The domain is the registry, eg, registryname.azurecr.io
result.Repository = reference.Path(named)
} else {
// DockerHub
if result.Registry == "" {
result.Registry = DockerHubRegistry
result.Repository = strings.Join([]string{"library", reference.Path(named)}, "/")
} else {
// The domain is the DockerHub user name
result.Registry = DockerHubRegistry
result.Repository = strings.Join([]string{reference.Domain(named), reference.Path(named)}, "/")
}
}
}
if tagged, ok := ref.(reference.Tagged); ok {
result.Tag = tagged.Tag()
}
if digested, ok := ref.(reference.Digested); ok {
result.Digest = digested.Digest().String()
}
return result, nil
}