package repository import ( "fmt" "regexp" "strings" ) /* * Helm repo kinds: default/oci */ const ( HELM_REPO_OCI = "oci" HELM_REPO_DEFAULT = "default" ) type Repository struct { Name string URL string Kind string `yaml:"-"` } type Repositories []*Repository // ValidateURL returns error if the repo URL doens't follow the format func (r *Repository) ValidateURL() error { // An regex that should check if a string is a valid repo URL const urlRegex = "^(http|https|oci):\\/\\/.*" valid, err := regexp.MatchString(urlRegex, r.URL) if err != nil { return nil } if !valid { return fmt.Errorf("it's not a valid repo URL: %s", r.URL) } return nil } // KindFromUrl sets Repository.Kind according to the prefix of an URL func (r *Repository) KindFromUrl() error { // It panics if URL is not valid, // but invalid url should not pass the ValidateURL function if err := r.ValidateURL(); err != nil { return err } prefix := r.URL[:strings.IndexByte(r.URL, ':')] switch prefix { case "oci": r.Kind = HELM_REPO_OCI case "https", "http": r.Kind = HELM_REPO_DEFAULT default: return fmt.Errorf("unknown repo kind: %s", prefix) } return nil } func (rs Repositories) NameByUrl(repoURL string) (string, error) { for _, r := range rs { if repoURL == r.URL { return r.Name, nil } } return "", fmt.Errorf("repo couldn't be found in the config: %s", repoURL) }