mirror of
https://github.com/TecharoHQ/anubis.git
synced 2026-04-11 11:08:48 +00:00
47 lines
895 B
Go
47 lines
895 B
Go
package policy
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"sort"
|
|
"strings"
|
|
|
|
"github.com/TecharoHQ/anubis/lib/checker"
|
|
"github.com/TecharoHQ/anubis/lib/checker/headerexists"
|
|
"github.com/TecharoHQ/anubis/lib/checker/headermatches"
|
|
)
|
|
|
|
func NewHeadersChecker(headermap map[string]string) (checker.Interface, error) {
|
|
var result checker.All
|
|
var errs []error
|
|
|
|
var keys []string
|
|
for key := range headermap {
|
|
keys = append(keys, key)
|
|
}
|
|
|
|
sort.Strings(keys)
|
|
|
|
for _, key := range keys {
|
|
rexStr := headermap[key]
|
|
if rexStr == ".*" {
|
|
result = append(result, headerexists.New(strings.TrimSpace(key)))
|
|
continue
|
|
}
|
|
|
|
c, err := headermatches.New(key, rexStr)
|
|
if err != nil {
|
|
errs = append(errs, fmt.Errorf("while parsing header %s regex %s: %w", key, rexStr, err))
|
|
continue
|
|
}
|
|
|
|
result = append(result, c)
|
|
}
|
|
|
|
if len(errs) != 0 {
|
|
return nil, errors.Join(errs...)
|
|
}
|
|
|
|
return result, nil
|
|
}
|