github.com/aavshr/aws-sdk-go@v1.41.3/aws/signer/v4/header_rules.go (about)

     1  package v4
     2  
     3  import (
     4  	"github.com/aavshr/aws-sdk-go/internal/strings"
     5  )
     6  
     7  // validator houses a set of rule needed for validation of a
     8  // string value
     9  type rules []rule
    10  
    11  // rule interface allows for more flexible rules and just simply
    12  // checks whether or not a value adheres to that rule
    13  type rule interface {
    14  	IsValid(value string) bool
    15  }
    16  
    17  // IsValid will iterate through all rules and see if any rules
    18  // apply to the value and supports nested rules
    19  func (r rules) IsValid(value string) bool {
    20  	for _, rule := range r {
    21  		if rule.IsValid(value) {
    22  			return true
    23  		}
    24  	}
    25  	return false
    26  }
    27  
    28  // mapRule generic rule for maps
    29  type mapRule map[string]struct{}
    30  
    31  // IsValid for the map rule satisfies whether it exists in the map
    32  func (m mapRule) IsValid(value string) bool {
    33  	_, ok := m[value]
    34  	return ok
    35  }
    36  
    37  // allowList is a generic rule for allow listing
    38  type allowList struct {
    39  	rule
    40  }
    41  
    42  // IsValid for allow list checks if the value is within the allow list
    43  func (w allowList) IsValid(value string) bool {
    44  	return w.rule.IsValid(value)
    45  }
    46  
    47  // excludeList is a generic rule for exclude listing
    48  type excludeList struct {
    49  	rule
    50  }
    51  
    52  // IsValid for exclude list checks if the value is within the exclude list
    53  func (b excludeList) IsValid(value string) bool {
    54  	return !b.rule.IsValid(value)
    55  }
    56  
    57  type patterns []string
    58  
    59  // IsValid for patterns checks each pattern and returns if a match has
    60  // been found
    61  func (p patterns) IsValid(value string) bool {
    62  	for _, pattern := range p {
    63  		if strings.HasPrefixFold(value, pattern) {
    64  			return true
    65  		}
    66  	}
    67  	return false
    68  }
    69  
    70  // inclusiveRules rules allow for rules to depend on one another
    71  type inclusiveRules []rule
    72  
    73  // IsValid will return true if all rules are true
    74  func (r inclusiveRules) IsValid(value string) bool {
    75  	for _, rule := range r {
    76  		if !rule.IsValid(value) {
    77  			return false
    78  		}
    79  	}
    80  	return true
    81  }