Skip to content

Commit

Permalink
Merge pull request #869 from mesg-foundation/fix/env-validation
Browse files Browse the repository at this point in the history
Validate env variable
  • Loading branch information
antho1404 authored Apr 11, 2019
2 parents 5552a57 + 96bfe88 commit 5598fcf
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
2 changes: 1 addition & 1 deletion service/importer/definition.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ type Dependency struct {
Args []string `yaml:"args" json:"args,omitempty" validate:"dive,printascii"`

// Env is a slice of environment variables in key=value format.
Env []string `yaml:"env" json:"env,omitempty" validate:"unique,dive,printascii"`
Env []string `yaml:"env" json:"env,omitempty" validate:"unique,dive,env"`
}

// Task describes a service task.
Expand Down
9 changes: 9 additions & 0 deletions service/importer/service_file.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,15 @@ func newValidator() (*validator.Validate, ut.Translator) {
uni := ut.New(en, en)
trans, _ := uni.GetTranslator("en")
validate := validator.New()

validate.RegisterValidation("env", xvalidator.IsEnv)
validate.RegisterTranslation("env", trans, func(ut ut.Translator) error {
return ut.Add("env", "{0} must be a valid env variable name", false)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("env", fe.Field(), namespacePrefix)
return t
})

validate.RegisterValidation("portmap", xvalidator.IsPortMapping)
validate.RegisterTranslation("portmap", trans, func(ut ut.Translator) error {
return ut.Add("portmap", "{0} must be a valid port mapping. Eg: 80 or 80:80", false)
Expand Down
10 changes: 10 additions & 0 deletions x/xvalidator/validator.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package xvalidator

import (
"regexp"
"strconv"
"strings"

Expand All @@ -13,8 +14,11 @@ const (
maxPort = 65535

portSeparator = ":"
envSeparator = "="
)

var envNameRegexp = regexp.MustCompile("^[a-zA-Z][a-zA-Z0-9_]*$")

// IsDomainName validates if given field is valid domain name.
func IsDomainName(fl validator.FieldLevel) bool {
return xnet.IsDomainName(fl.Field().String())
Expand All @@ -35,3 +39,9 @@ func IsPortMapping(fl validator.FieldLevel) bool {
}
return true
}

// IsEnv validates if given field is valid env variable declaration.
func IsEnv(fl validator.FieldLevel) bool {
e := strings.Split(fl.Field().String(), envSeparator)
return len(e) == 2 && envNameRegexp.MatchString(e[0])
}

0 comments on commit 5598fcf

Please sign in to comment.