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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user