52 lines
1.4 KiB
Go
52 lines
1.4 KiB
Go
// Copyright (C) MongoDB, Inc. 2017-present.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
// not use this file except in compliance with the License. You may obtain
|
|
// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Based on github.com/aws/aws-sdk-go by Amazon.com, Inc. with code from:
|
|
// - github.com/aws/aws-sdk-go/blob/v1.44.225/aws/signer/v4/header_rules.go
|
|
// See THIRD-PARTY-NOTICES for original license terms
|
|
|
|
package v4
|
|
|
|
// 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
|
|
}
|
|
|
|
// excludeList is a generic rule for exclude listing
|
|
type excludeList struct {
|
|
rule
|
|
}
|
|
|
|
// IsValid for exclude list checks if the value is within the exclude list
|
|
func (b excludeList) IsValid(value string) bool {
|
|
return !b.rule.IsValid(value)
|
|
}
|