mirror of https://github.com/go-gitea/gitea
Use strict protocol check when redirect (#29642)
parent
9730d3a9af
commit
c72e1a7abb
@ -0,0 +1,47 @@ |
||||
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package context |
||||
|
||||
import ( |
||||
"net/http" |
||||
"net/http/httptest" |
||||
"testing" |
||||
|
||||
"code.gitea.io/gitea/modules/setting" |
||||
|
||||
"github.com/stretchr/testify/assert" |
||||
) |
||||
|
||||
func TestRedirect(t *testing.T) { |
||||
req, _ := http.NewRequest("GET", "/", nil) |
||||
|
||||
cases := []struct { |
||||
url string |
||||
keep bool |
||||
}{ |
||||
{"http://test", false}, |
||||
{"https://test", false}, |
||||
{"//test", false}, |
||||
{"/://test", true}, |
||||
{"/test", true}, |
||||
} |
||||
for _, c := range cases { |
||||
resp := httptest.NewRecorder() |
||||
b, cleanup := NewBaseContext(resp, req) |
||||
resp.Header().Add("Set-Cookie", (&http.Cookie{Name: setting.SessionConfig.CookieName, Value: "dummy"}).String()) |
||||
b.Redirect(c.url) |
||||
cleanup() |
||||
has := resp.Header().Get("Set-Cookie") == "i_like_gitea=dummy" |
||||
assert.Equal(t, c.keep, has, "url = %q", c.url) |
||||
} |
||||
|
||||
req, _ = http.NewRequest("GET", "/", nil) |
||||
resp := httptest.NewRecorder() |
||||
req.Header.Add("HX-Request", "true") |
||||
b, cleanup := NewBaseContext(resp, req) |
||||
b.Redirect("/other") |
||||
cleanup() |
||||
assert.Equal(t, "/other", resp.Header().Get("HX-Redirect")) |
||||
assert.Equal(t, http.StatusNoContent, resp.Code) |
||||
} |
Loading…
Reference in new issue