aboutsummaryrefslogtreecommitdiffstats
path: root/modules/auth/httpauth/httpauth_test.go
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2025-07-03 11:02:38 +0800
committerGitHub <noreply@github.com>2025-07-03 03:02:38 +0000
commitd6d643fe86f125ee7fdda82264602b7e8db2a36b (patch)
treeb2908dd68401fd62e2b1189c7540acf697d4e2e5 /modules/auth/httpauth/httpauth_test.go
parent8cbec63cc70f9ebbe1558123d95cbe63b2f31782 (diff)
downloadgitea-main.tar.gz
gitea-main.zip
Fix http auth header parsing (#34936)HEADmain
Using `strings.EqualFold` is wrong in many cases.
Diffstat (limited to 'modules/auth/httpauth/httpauth_test.go')
-rw-r--r--modules/auth/httpauth/httpauth_test.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/modules/auth/httpauth/httpauth_test.go b/modules/auth/httpauth/httpauth_test.go
new file mode 100644
index 0000000000..087b86917f
--- /dev/null
+++ b/modules/auth/httpauth/httpauth_test.go
@@ -0,0 +1,43 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package httpauth
+
+import (
+ "encoding/base64"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestParseAuthorizationHeader(t *testing.T) {
+ type parsed = ParsedAuthorizationHeader
+ type basic = BasicAuth
+ type bearer = BearerToken
+ cases := []struct {
+ headerValue string
+ expected parsed
+ ok bool
+ }{
+ {"", parsed{}, false},
+ {"?", parsed{}, false},
+ {"foo", parsed{}, false},
+ {"any value", parsed{}, false},
+
+ {"Basic ?", parsed{}, false},
+ {"Basic " + base64.StdEncoding.EncodeToString([]byte("foo")), parsed{}, false},
+ {"Basic " + base64.StdEncoding.EncodeToString([]byte("foo:bar")), parsed{BasicAuth: &basic{"foo", "bar"}}, true},
+ {"basic " + base64.StdEncoding.EncodeToString([]byte("foo:bar")), parsed{BasicAuth: &basic{"foo", "bar"}}, true},
+
+ {"token value", parsed{BearerToken: &bearer{"value"}}, true},
+ {"Token value", parsed{BearerToken: &bearer{"value"}}, true},
+ {"bearer value", parsed{BearerToken: &bearer{"value"}}, true},
+ {"Bearer value", parsed{BearerToken: &bearer{"value"}}, true},
+ {"Bearer wrong value", parsed{}, false},
+ }
+ for _, c := range cases {
+ ret, ok := ParseAuthorizationHeader(c.headerValue)
+ assert.Equal(t, c.ok, ok, "header %q", c.headerValue)
+ assert.Equal(t, c.expected, ret, "header %q", c.headerValue)
+ }
+}