diff --git a/lib/api/api_test.go b/lib/api/api_test.go index 27b6b1193..56b8bec50 100644 --- a/lib/api/api_test.go +++ b/lib/api/api_test.go @@ -492,13 +492,18 @@ func testHTTPRequest(t *testing.T, baseURL string, tc httpTestCase, apikey strin } } -func hasSessionCookie(cookies []*http.Cookie) bool { +func getSessionCookie(cookies []*http.Cookie) (*http.Cookie, bool) { for _, cookie := range cookies { if cookie.MaxAge >= 0 && strings.HasPrefix(cookie.Name, "sessionid") { - return true + return cookie, true } } - return false + return nil, false +} + +func hasSessionCookie(cookies []*http.Cookie) bool { + _, ok := getSessionCookie(cookies) + return ok } func hasDeleteSessionCookie(cookies []*http.Cookie) bool { @@ -510,11 +515,19 @@ func hasDeleteSessionCookie(cookies []*http.Cookie) bool { return false } -func httpGet(url string, basicAuthUsername string, basicAuthPassword string, xapikeyHeader string, authorizationBearer string, cookies []*http.Cookie, t *testing.T) *http.Response { - req, err := http.NewRequest("GET", url, nil) - for _, cookie := range cookies { - req.AddCookie(cookie) +func httpRequest(method string, url string, body any, basicAuthUsername, basicAuthPassword, xapikeyHeader, authorizationBearer, csrfTokenName, csrfTokenValue string, cookies []*http.Cookie, t *testing.T) *http.Response { + t.Helper() + + var bodyReader io.Reader = nil + if body != nil { + bodyBytes, err := json.Marshal(body) + if err != nil { + t.Fatal(err) + } + bodyReader = bytes.NewReader(bodyBytes) } + + req, err := http.NewRequest(method, url, bodyReader) if err != nil { t.Fatal(err) } @@ -531,30 +544,16 @@ func httpGet(url string, basicAuthUsername string, basicAuthPassword string, xap req.Header.Set("Authorization", "Bearer "+authorizationBearer) } - resp, err := http.DefaultClient.Do(req) - if err != nil { - t.Fatal(err) - } - - return resp -} - -func httpPost(url string, body map[string]string, cookies []*http.Cookie, t *testing.T) *http.Response { - bodyBytes, err := json.Marshal(body) - if err != nil { - t.Fatal(err) - } - - req, err := http.NewRequest("POST", url, bytes.NewReader(bodyBytes)) - if err != nil { - t.Fatal(err) + if csrfTokenName != "" && csrfTokenValue != "" { + req.Header.Set("X-"+csrfTokenName, csrfTokenValue) } for _, cookie := range cookies { req.AddCookie(cookie) } - resp, err := http.DefaultClient.Do(req) + client := http.Client{Timeout: 15 * time.Second} + resp, err := client.Do(req) if err != nil { t.Fatal(err) } @@ -562,18 +561,31 @@ func httpPost(url string, body map[string]string, cookies []*http.Cookie, t *tes return resp } +func httpGet(url string, basicAuthUsername, basicAuthPassword, xapikeyHeader, authorizationBearer string, cookies []*http.Cookie, t *testing.T) *http.Response { + t.Helper() + return httpRequest(http.MethodGet, url, nil, basicAuthUsername, basicAuthPassword, xapikeyHeader, authorizationBearer, "", "", cookies, t) +} + +func httpPost(url string, body map[string]string, cookies []*http.Cookie, t *testing.T) *http.Response { + t.Helper() + return httpRequest(http.MethodPost, url, body, "", "", "", "", "", "", cookies, t) +} + func TestHTTPLogin(t *testing.T) { t.Parallel() httpGetBasicAuth := func(url string, username string, password string) *http.Response { + t.Helper() return httpGet(url, username, password, "", "", nil, t) } httpGetXapikey := func(url string, xapikeyHeader string) *http.Response { + t.Helper() return httpGet(url, "", "", xapikeyHeader, "", nil, t) } httpGetAuthorizationBearer := func(url string, bearer string) *http.Response { + t.Helper() return httpGet(url, "", "", "", bearer, nil, t) } @@ -761,10 +773,12 @@ func TestHtmlFormLogin(t *testing.T) { resourceUrl404 := baseURL + "/any-path/that/does/nooooooot/match-any/noauth-pattern" performLogin := func(username string, password string) *http.Response { + t.Helper() return httpPost(loginUrl, map[string]string{"username": username, "password": password}, nil, t) } performResourceRequest := func(url string, cookies []*http.Cookie) *http.Response { + t.Helper() return httpGet(url, "", "", "", "", cookies, t) }