aboutsummaryrefslogtreecommitdiff
path: root/cmd/anubis/policy.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/anubis/policy.go')
-rw-r--r--cmd/anubis/policy.go26
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,
+ },
+ }
}