providers: Add validation functions
This commit is contained in:
parent
588061e3e0
commit
99e244fa92
@ -5,9 +5,9 @@ import fpos "git.tebibyte.media/sashakoshka/step/providers/os"
|
||||
import fphttp "git.tebibyte.media/sashakoshka/step/providers/http"
|
||||
import fppath "git.tebibyte.media/sashakoshka/step/providers/path"
|
||||
import fpmime "git.tebibyte.media/sashakoshka/step/providers/mime"
|
||||
import fpslice "git.tebibyte.media/sashakoshka/step/providers/slice"
|
||||
import fpsprig "git.tebibyte.media/sashakoshka/step/providers/sprig"
|
||||
import fpimport "git.tebibyte.media/sashakoshka/step/providers/import"
|
||||
import fpvalidate "git.tebibyte.media/sashakoshka/step/providers/validate"
|
||||
import fpmarkdown "git.tebibyte.media/sashakoshka/step/providers/markdown"
|
||||
|
||||
// All returns a slice of all providers defined in sub-packages.
|
||||
@ -17,9 +17,9 @@ func All () []step.Provider {
|
||||
new(fphttp.Provider),
|
||||
new(fppath.Provider),
|
||||
new(fpmime.Provider),
|
||||
new(fpslice.Provider),
|
||||
new(fpsprig.Provider),
|
||||
new(fpimport.Provider),
|
||||
new(fpvalidate.Provider),
|
||||
fpmarkdown.Default(),
|
||||
}
|
||||
}
|
||||
|
7
providers/validate/strings.go
Normal file
7
providers/validate/strings.go
Normal file
@ -0,0 +1,7 @@
|
||||
package validate
|
||||
|
||||
import "regexp"
|
||||
|
||||
// see:
|
||||
// https://stackoverflow.com/questions/201323/how-can-i-validate-an-email-address-using-a-regular-expression
|
||||
var defaultEmailRegexp = regexp.MustCompile("(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])")
|
47
providers/validate/validate.go
Normal file
47
providers/validate/validate.go
Normal file
@ -0,0 +1,47 @@
|
||||
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
|
||||
}
|
Loading…
Reference in New Issue
Block a user