| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package v4
- import (
- "net/http"
- "strings"
- )
- // validator houses a set of rule needed for validation of a
- // string value
- type rules []rule
- // rule interface allows for more flexible rules and just simply
- // checks whether or not a value adheres to that rule
- type rule interface {
- IsValid(value string) bool
- }
- // IsValid will iterate through all rules and see if any rules
- // apply to the value and supports nested rules
- func (r rules) IsValid(value string) bool {
- for _, rule := range r {
- if rule.IsValid(value) {
- return true
- }
- }
- return false
- }
- // mapRule generic rule for maps
- type mapRule map[string]struct{}
- // IsValid for the map rule satisfies whether it exists in the map
- func (m mapRule) IsValid(value string) bool {
- _, ok := m[value]
- return ok
- }
- // whitelist is a generic rule for whitelisting
- type whitelist struct {
- rule
- }
- // IsValid for whitelist checks if the value is within the whitelist
- func (w whitelist) IsValid(value string) bool {
- return w.rule.IsValid(value)
- }
- // blacklist is a generic rule for blacklisting
- type blacklist struct {
- rule
- }
- // IsValid for whitelist checks if the value is within the whitelist
- func (b blacklist) IsValid(value string) bool {
- return !b.rule.IsValid(value)
- }
- type patterns []string
- // IsValid for patterns checks each pattern and returns if a match has
- // been found
- func (p patterns) IsValid(value string) bool {
- for _, pattern := range p {
- if strings.HasPrefix(http.CanonicalHeaderKey(value), pattern) {
- return true
- }
- }
- return false
- }
- // inclusiveRules rules allow for rules to depend on one another
- type inclusiveRules []rule
- // IsValid will return true if all rules are true
- func (r inclusiveRules) IsValid(value string) bool {
- for _, rule := range r {
- if !rule.IsValid(value) {
- return false
- }
- }
- return true
- }
|