From a5e562f89e7fc12d2dd1ccc021846461e173143a Mon Sep 17 00:00:00 2001 From: krhubert Date: Wed, 10 Apr 2019 08:13:01 +0200 Subject: [PATCH 1/2] Validate env variable --- service/importer/definition.go | 2 +- service/importer/service_file.go | 9 +++++++++ x/xvalidator/validator.go | 10 ++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/service/importer/definition.go b/service/importer/definition.go index e5a2c93d6..a8cbd087c 100644 --- a/service/importer/definition.go +++ b/service/importer/definition.go @@ -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. diff --git a/service/importer/service_file.go b/service/importer/service_file.go index 110902b38..dc72eb91f 100644 --- a/service/importer/service_file.go +++ b/service/importer/service_file.go @@ -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("portmap", "{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) diff --git a/x/xvalidator/validator.go b/x/xvalidator/validator.go index dca27f724..997017b2e 100644 --- a/x/xvalidator/validator.go +++ b/x/xvalidator/validator.go @@ -1,6 +1,7 @@ package xvalidator import ( + "regexp" "strconv" "strings" @@ -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()) @@ -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]) +} From 9f6e6dde531886d6aa64132990bf5175d15db6d9 Mon Sep 17 00:00:00 2001 From: Anthony Date: Thu, 11 Apr 2019 11:13:15 +0200 Subject: [PATCH 2/2] Fix translation for env validation Co-Authored-By: krhubert --- service/importer/service_file.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/importer/service_file.go b/service/importer/service_file.go index dc72eb91f..bde76cd78 100644 --- a/service/importer/service_file.go +++ b/service/importer/service_file.go @@ -108,7 +108,7 @@ func newValidator() (*validator.Validate, ut.Translator) { validate.RegisterValidation("env", xvalidator.IsEnv) validate.RegisterTranslation("env", trans, func(ut ut.Translator) error { - return ut.Add("portmap", "{0} must be a valid env variable name", false) + 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