aboutsummaryrefslogtreecommitdiff
path: root/lib/anubis_test.go
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2025-03-26 19:04:18 -0400
committerGitHub <noreply@github.com>2025-03-26 19:04:18 -0400
commite7cbd349f3ff96788dc7a8540d29808ca72e1c44 (patch)
tree63cfdb5045e26bd86f09d156e0d7588514e39c55 /lib/anubis_test.go
parent07bb5f63f9d57d7ac2a95d0bf7560a985078cfbc (diff)
downloadanubis-e7cbd349f3ff96788dc7a8540d29808ca72e1c44.tar.xz
anubis-e7cbd349f3ff96788dc7a8540d29808ca72e1c44.zip
lib/anubis: support setting extended cookie flags (#120)
* lib/anubis: support setting extended cookie flags Signed-off-by: Xe Iaso <me@xeiaso.net> * lib: use cookie name consistently Signed-off-by: Xe Iaso <me@xeiaso.net> --------- Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'lib/anubis_test.go')
-rw-r--r--lib/anubis_test.go99
1 files changed, 88 insertions, 11 deletions
diff --git a/lib/anubis_test.go b/lib/anubis_test.go
index 0498c13..7369b5d 100644
--- a/lib/anubis_test.go
+++ b/lib/anubis_test.go
@@ -1,15 +1,18 @@
package lib
import (
+ "encoding/json"
"fmt"
"net/http"
"net/http/httptest"
"testing"
"github.com/TecharoHQ/anubis"
+ "github.com/TecharoHQ/anubis/internal"
+ "github.com/TecharoHQ/anubis/lib/policy"
)
-func spawnAnubis(t *testing.T, h http.Handler) string {
+func loadPolicies(t *testing.T, fname string) *policy.ParsedConfig {
t.Helper()
policy, err := LoadPoliciesOrDefault("", anubis.DefaultDifficulty)
@@ -17,23 +20,97 @@ func spawnAnubis(t *testing.T, h http.Handler) string {
t.Fatal(err)
}
- s, err := New(Options{
- Next: h,
- Policy: policy,
- ServeRobotsTXT: true,
- })
+ return policy
+}
+
+func spawnAnubis(t *testing.T, opts Options) *Server {
+ t.Helper()
+
+ s, err := New(opts)
if err != nil {
t.Fatalf("can't construct libanubis.Server: %v", err)
}
- ts := httptest.NewServer(s)
- t.Log(ts.URL)
+ return s
+}
+
+func TestCookieSettings(t *testing.T) {
+ pol := loadPolicies(t, "")
+ pol.DefaultDifficulty = 0
+
+ srv := spawnAnubis(t, Options{
+ Next: http.NewServeMux(),
+ Policy: pol,
- t.Cleanup(func() {
- ts.Close()
+ CookieDomain: "local.cetacean.club",
+ CookiePartitioned: true,
+ CookieName: t.Name(),
})
- return ts.URL
+ ts := httptest.NewServer(internal.DefaultXRealIP("127.0.0.1", srv))
+ defer ts.Close()
+
+ cli := &http.Client{
+ CheckRedirect: func(req *http.Request, via []*http.Request) error {
+ return http.ErrUseLastResponse
+ },
+ }
+
+ resp, err := cli.Post(ts.URL+"/.within.website/x/cmd/anubis/api/make-challenge", "", nil)
+ if err != nil {
+ t.Fatalf("can't request challenge: %v", err)
+ }
+ defer resp.Body.Close()
+
+ var chall = struct {
+ Challenge string `json:"challenge"`
+ }{}
+ if err := json.NewDecoder(resp.Body).Decode(&chall); err != nil {
+ t.Fatalf("can't read challenge response body: %v", err)
+ }
+
+ nonce := 0
+ elapsedTime := 420
+ redir := "/"
+ calcString := fmt.Sprintf("%s%d", chall.Challenge, nonce)
+ calculated := internal.SHA256sum(calcString)
+
+ req, err := http.NewRequest(http.MethodGet, ts.URL+"/.within.website/x/cmd/anubis/api/pass-challenge", nil)
+ if err != nil {
+ t.Fatalf("can't make request: %v", err)
+ }
+
+ q := req.URL.Query()
+ q.Set("response", calculated)
+ q.Set("nonce", fmt.Sprint(nonce))
+ q.Set("redir", redir)
+ q.Set("elapsedTime", fmt.Sprint(elapsedTime))
+ req.URL.RawQuery = q.Encode()
+
+ resp, err = cli.Do(req)
+ if err != nil {
+ t.Fatalf("can't do challenge passing")
+ }
+
+ if resp.StatusCode != http.StatusFound {
+ t.Errorf("wanted %d, got: %d", http.StatusFound, resp.StatusCode)
+ }
+
+ found := false
+ for _, cookie := range resp.Cookies() {
+ t.Logf("%#v", cookie)
+ if cookie.Name == t.Name() {
+ found = true
+ }
+
+ if found && cookie.Domain != "local.cetacean.club" {
+ t.Errorf("cookie domain is wrong, wanted local.cetacean.club, got: %s", cookie.Domain)
+ }
+ }
+
+ if !found {
+ t.Errorf("Cookie %q not found", t.Name())
+ }
}
func TestCheckDefaultDifficultyMatchesPolicy(t *testing.T) {