aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2025-03-23 10:30:55 -0400
committerXe Iaso <me@xeiaso.net>2025-03-23 18:29:06 -0400
commita3ede62bbd3b4b8c981df45797d4b899fbf7e8c1 (patch)
tree1b85f32537e501e6e0ff7f1a2fb6e1add71eb0ea
parentf462209b02cbb62864f5c4ccacd5a31cca5b138e (diff)
downloadanubis-a3ede62bbd3b4b8c981df45797d4b899fbf7e8c1.tar.xz
anubis-a3ede62bbd3b4b8c981df45797d4b899fbf7e8c1.zip
lib: fix default difficultyXe/default-difficulty-fix
Before this did not respect the difficulty flag and instead used difficulty 4. This has been fixed. Signed-off-by: Xe Iaso <me@xeiaso.net>
-rw-r--r--docs/docs/CHANGELOG.md1
-rw-r--r--lib/anubis.go4
-rw-r--r--lib/anubis_test.go81
3 files changed, 84 insertions, 2 deletions
diff --git a/docs/docs/CHANGELOG.md b/docs/docs/CHANGELOG.md
index e0743c0..10ddf29 100644
--- a/docs/docs/CHANGELOG.md
+++ b/docs/docs/CHANGELOG.md
@@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Introduced integration tests using Playwright
- Refactor & Split up Anubis into cmd and lib.go
- Fixed bot check to only apply if address range matches
+- Fix default difficulty setting that was broken in a refactor
## v1.14.2
diff --git a/lib/anubis.go b/lib/anubis.go
index 5953a48..43993bb 100644
--- a/lib/anubis.go
+++ b/lib/anubis.go
@@ -498,8 +498,8 @@ func (s *Server) check(r *http.Request) (CheckResult, *policy.Bot, error) {
return cr("default/allow", config.RuleAllow), &policy.Bot{
Challenge: &config.ChallengeRules{
- Difficulty: anubis.DefaultDifficulty,
- ReportAs: anubis.DefaultDifficulty,
+ Difficulty: s.policy.DefaultDifficulty,
+ ReportAs: s.policy.DefaultDifficulty,
Algorithm: config.AlgorithmFast,
},
}, nil
diff --git a/lib/anubis_test.go b/lib/anubis_test.go
new file mode 100644
index 0000000..0498c13
--- /dev/null
+++ b/lib/anubis_test.go
@@ -0,0 +1,81 @@
+package lib
+
+import (
+ "fmt"
+ "net/http"
+ "net/http/httptest"
+ "testing"
+
+ "github.com/TecharoHQ/anubis"
+)
+
+func spawnAnubis(t *testing.T, h http.Handler) string {
+ t.Helper()
+
+ policy, err := LoadPoliciesOrDefault("", anubis.DefaultDifficulty)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ s, err := New(Options{
+ Next: h,
+ Policy: policy,
+ ServeRobotsTXT: true,
+ })
+ if err != nil {
+ t.Fatalf("can't construct libanubis.Server: %v", err)
+ }
+
+ ts := httptest.NewServer(s)
+ t.Log(ts.URL)
+
+ t.Cleanup(func() {
+ ts.Close()
+ })
+
+ return ts.URL
+}
+
+func TestCheckDefaultDifficultyMatchesPolicy(t *testing.T) {
+ h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprintln(w, "OK")
+ })
+
+ for i := 1; i < 10; i++ {
+ t.Run(fmt.Sprint(i), func(t *testing.T) {
+ policy, err := LoadPoliciesOrDefault("", i)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ s, err := New(Options{
+ Next: h,
+ Policy: policy,
+ ServeRobotsTXT: true,
+ })
+ if err != nil {
+ t.Fatalf("can't construct libanubis.Server: %v", err)
+ }
+
+ req, err := http.NewRequest(http.MethodGet, "/", nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ req.Header.Add("X-Real-Ip", "127.0.0.1")
+
+ _, bot, err := s.check(req)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if bot.Challenge.Difficulty != i {
+ t.Errorf("Challenge.Difficulty is wrong, wanted %d, got: %d", i, bot.Challenge.Difficulty)
+ }
+
+ if bot.Challenge.ReportAs != i {
+ t.Errorf("Challenge.ReportAs is wrong, wanted %d, got: %d", i, bot.Challenge.ReportAs)
+ }
+ })
+ }
+}