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 fphttp "git.tebibyte.media/sashakoshka/step/providers/http"
|
||||||
import fppath "git.tebibyte.media/sashakoshka/step/providers/path"
|
import fppath "git.tebibyte.media/sashakoshka/step/providers/path"
|
||||||
import fpmime "git.tebibyte.media/sashakoshka/step/providers/mime"
|
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 fpsprig "git.tebibyte.media/sashakoshka/step/providers/sprig"
|
||||||
import fpimport "git.tebibyte.media/sashakoshka/step/providers/import"
|
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"
|
import fpmarkdown "git.tebibyte.media/sashakoshka/step/providers/markdown"
|
||||||
|
|
||||||
// All returns a slice of all providers defined in sub-packages.
|
// All returns a slice of all providers defined in sub-packages.
|
||||||
@ -17,9 +17,9 @@ func All () []step.Provider {
|
|||||||
new(fphttp.Provider),
|
new(fphttp.Provider),
|
||||||
new(fppath.Provider),
|
new(fppath.Provider),
|
||||||
new(fpmime.Provider),
|
new(fpmime.Provider),
|
||||||
new(fpslice.Provider),
|
|
||||||
new(fpsprig.Provider),
|
new(fpsprig.Provider),
|
||||||
new(fpimport.Provider),
|
new(fpimport.Provider),
|
||||||
|
new(fpvalidate.Provider),
|
||||||
fpmarkdown.Default(),
|
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