diff options
Diffstat (limited to 'cmd/anubis/policy.go')
| -rw-r--r-- | cmd/anubis/policy.go | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/cmd/anubis/policy.go b/cmd/anubis/policy.go index f636349..a637f09 100644 --- a/cmd/anubis/policy.go +++ b/cmd/anubis/policy.go @@ -32,7 +32,8 @@ type Bot struct { Name string UserAgent *regexp.Regexp Path *regexp.Regexp - Action config.Rule `json:"action"` + Action config.Rule + Challenge *config.ChallengeRules } func (b Bot) Hash() (string, error) { @@ -48,7 +49,7 @@ func (b Bot) Hash() (string, error) { return sha256sum(fmt.Sprintf("%s::%s::%s", b.Name, pathRex, userAgentRex)) } -func parseConfig(fin io.Reader, fname string) (*ParsedConfig, error) { +func parseConfig(fin io.Reader, fname string, defaultDifficulty int) (*ParsedConfig, error) { var c config.Config if err := json.NewDecoder(fin).Decode(&c); err != nil { return nil, fmt.Errorf("can't parse policy config JSON %s: %w", fname, err) @@ -96,6 +97,19 @@ func parseConfig(fin io.Reader, fname string) (*ParsedConfig, error) { } } + if b.Challenge == nil { + parsedBot.Challenge = &config.ChallengeRules{ + Difficulty: defaultDifficulty, + ReportAs: defaultDifficulty, + Algorithm: config.AlgorithmFast, + } + } else { + parsedBot.Challenge = b.Challenge + if parsedBot.Challenge.Algorithm == config.AlgorithmUnknown { + parsedBot.Challenge.Algorithm = config.AlgorithmFast + } + } + result.Bots = append(result.Bots, parsedBot) } @@ -142,5 +156,11 @@ func (s *Server) check(r *http.Request) (CheckResult, *Bot) { } } - return cr("default/allow", config.RuleAllow), nil + return cr("default/allow", config.RuleAllow), &Bot{ + Challenge: &config.ChallengeRules{ + Difficulty: defaultDifficulty, + ReportAs: defaultDifficulty, + Algorithm: config.AlgorithmFast, + }, + } } |
