package validate import "regexp" import "html/template" import "git.tebibyte.media/sashakoshka/step" var _ step.FuncProvider = new(Provider) var _ step.Configurable = new(Provider) // Provider provides validation functions. type Provider struct { emailRegexp *regexp.Regexp } // Package fulfills the step.Provider interface. func (this *Provider) Package () string { return "validate" } func (this *Provider) Configure (config step.Meta) error { emailRegexpText := config.Get("validate.email-regexp") this.emailRegexp = nil if emailRegexpText != "" { emailRegexp, err := regexp.Compile(emailRegexpText) if err != nil { return err } this.emailRegexp = emailRegexp } return nil } // FuncMap fulfills the step.FuncProvider interface. func (this *Provider) FuncMap () template.FuncMap { return template.FuncMap { "isEmail": this.funcIsEmail, "inRange": this.funcInRange, } } func (this *Provider) funcIsEmail (input string) bool { emailRegexp := this.emailRegexp if emailRegexp == nil { emailRegexp = defaultEmailRegexp } return emailRegexp.Match([]byte(input)) } func (this *Provider) funcInRange (min, max, value int) bool { return value >= min && value <= max }