/vendor/github.com/storageos/go-api/validation.go
https://gitlab.com/unofficial-mirrors/kubernetes · Go · 74 lines · 48 code · 12 blank · 14 comment · 8 complexity · 262cb55572fea95da60eaea130b047f9 MD5 · raw file
- package storageos
- import (
- "errors"
- "regexp"
- )
- const (
- // IDFormat are the characters allowed to represent an ID.
- IDFormat = `[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}`
- // NameFormat are the characters allowed to represent a name.
- NameFormat = `[a-zA-Z0-9][a-zA-Z0-9~_.-]+`
- )
- var (
- // IDPattern is a regular expression to validate a unique id against the
- // collection of restricted characters.
- IDPattern = regexp.MustCompile(`^` + IDFormat + `$`)
- // NamePattern is a regular expression to validate names against the
- // collection of restricted characters.
- NamePattern = regexp.MustCompile(`^` + NameFormat + `$`)
- ErrNoRef = errors.New("no ref provided or incorrect format")
- ErrNoNamespace = errors.New("no namespace provided or incorrect format")
- )
- // ValidateNamespaceAndRef returns true if both the namespace and ref are valid.
- func ValidateNamespaceAndRef(namespace, ref string) error {
- if !IsUUID(ref) && !IsName(ref) {
- return ErrNoRef
- }
- if !IsName(namespace) {
- return ErrNoNamespace
- }
- return nil
- }
- // ValidateNamespace returns true if the namespace uses a valid name.
- func ValidateNamespace(namespace string) error {
- if !IsName(namespace) {
- return ErrNoNamespace
- }
- return nil
- }
- // IsUUID returns true if the string input is a valid UUID string.
- func IsUUID(s string) bool {
- return IDPattern.MatchString(s)
- }
- // IsName returns true if the string input is a valid Name string.
- func IsName(s string) bool {
- return NamePattern.MatchString(s)
- }
- // namespacedPath checks for valid input and returns api path for a namespaced
- // objectType. Use namespacedRefPath for objects.
- func namespacedPath(namespace, objectType string) (string, error) {
- if err := ValidateNamespace(namespace); err != nil {
- return "", err
- }
- return "/namespaces/" + namespace + "/" + objectType, nil
- }
- // namespacedRefPath checks for valid input and returns api path for a single
- // namespaced object. Use namespacedPath for objects type path.
- func namespacedRefPath(namespace, objectType, ref string) (string, error) {
- if err := ValidateNamespaceAndRef(namespace, ref); err != nil {
- return "", err
- }
- return "/namespaces/" + namespace + "/" + objectType + "/" + ref, nil
- }