diff options
-rw-r--r-- | integrations/links_test.go | 10 | ||||
-rw-r--r-- | integrations/signout_test.go | 2 | ||||
-rw-r--r-- | routers/web/web.go | 10 |
3 files changed, 21 insertions, 1 deletions
diff --git a/integrations/links_test.go b/integrations/links_test.go index 91166274a2..872234e61f 100644 --- a/integrations/links_test.go +++ b/integrations/links_test.go @@ -61,6 +61,16 @@ func TestRedirectsNoLogin(t *testing.T) { resp := MakeRequest(t, req, http.StatusFound) assert.EqualValues(t, path.Join(setting.AppSubURL, redirectLink), test.RedirectURL(resp)) } + + var temporaryRedirects = map[string]string{ + "/user2/repo1/": "/user2/repo1", + } + for link, redirectLink := range temporaryRedirects { + req := NewRequest(t, "GET", link) + resp := MakeRequest(t, req, http.StatusTemporaryRedirect) + assert.EqualValues(t, path.Join(setting.AppSubURL, redirectLink), test.RedirectURL(resp)) + } + } func TestNoLoginNotExist(t *testing.T) { diff --git a/integrations/signout_test.go b/integrations/signout_test.go index c31c913070..b54e7ee9ee 100644 --- a/integrations/signout_test.go +++ b/integrations/signout_test.go @@ -18,7 +18,7 @@ func TestSignOut(t *testing.T) { session.MakeRequest(t, req, http.StatusFound) // try to view a private repo, should fail - req = NewRequest(t, "GET", "/user2/repo2/") + req = NewRequest(t, "GET", "/user2/repo2") session.MakeRequest(t, req, http.StatusNotFound) // invalidate cached cookies for user2, for subsequent tests diff --git a/routers/web/web.go b/routers/web/web.go index 41c4e122fb..ebd0995df8 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -1078,4 +1078,14 @@ func RegisterRoutes(m *web.Route) { if setting.API.EnableSwagger { m.Get("/swagger.v1.json", SwaggerV1Json) } + m.NotFound(func(w http.ResponseWriter, req *http.Request) { + escapedPath := req.URL.EscapedPath() + if len(escapedPath) > 1 && escapedPath[len(escapedPath)-1] == '/' { + http.Redirect(w, req, setting.AppSubURL+escapedPath[:len(escapedPath)-1], http.StatusTemporaryRedirect) + return + } + ctx := context.GetContext(req) + ctx.NotFound("", nil) + }) + } |