From bd538abd372c41336c355a7d0890a289bad256a5 Mon Sep 17 00:00:00 2001 From: crapStone Date: Wed, 11 Jan 2023 00:00:37 +0000 Subject: [PATCH] Fix wrong redirect on custom domain with path (#154) closes #153 Co-authored-by: crapStone Co-authored-by: 6543 <6543@obermui.de> Reviewed-on: https://codeberg.org/Codeberg/pages-server/pulls/154 Reviewed-by: 6543 <6543@obermui.de> Co-authored-by: crapStone Co-committed-by: crapStone --- integration/get_test.go | 18 ++++++++++++++++++ server/handler/handler_custom_domain.go | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/integration/get_test.go b/integration/get_test.go index f13ce8b..556ac53 100644 --- a/integration/get_test.go +++ b/integration/get_test.go @@ -78,6 +78,24 @@ func TestCustomDomain(t *testing.T) { assert.EqualValues(t, 106, getSize(resp.Body)) } +func TestCustomDomainRedirects(t *testing.T) { + log.Println("=== TestCustomDomainRedirects ===") + // test redirect from default pages domain to custom domain + resp, err := getTestHTTPSClient().Get("https://6543.localhost.mock.directory:4430/test_pages-server_custom-mock-domain/@main/README.md") + assert.NoError(t, err) + if !assert.NotNil(t, resp) { + t.FailNow() + } + assert.EqualValues(t, http.StatusTemporaryRedirect, resp.StatusCode) + assert.EqualValues(t, "text/html; charset=utf-8", resp.Header.Get("Content-Type")) + // TODO: custom port is not evaluated (witch does hurt tests & dev env only) + assert.EqualValues(t, "https://mock-pages.codeberg-test.org/@main/README.md", resp.Header.Get("Location")) + assert.EqualValues(t, `https:/codeberg.org/6543/test_pages-server_custom-mock-domain/src/branch/main/README.md; rel="canonical"; rel="canonical"`, resp.Header.Get("Link")) + + // TODO: test redirect from an custom domain to the primary custom domain (www.example.com -> example.com) + // (cover bug https://codeberg.org/Codeberg/pages-server/issues/153) +} + func TestGetNotFound(t *testing.T) { log.Println("=== TestGetNotFound ===") // test custom not found pages diff --git a/server/handler/handler_custom_domain.go b/server/handler/handler_custom_domain.go index 2f98085..a541b74 100644 --- a/server/handler/handler_custom_domain.go +++ b/server/handler/handler_custom_domain.go @@ -54,7 +54,7 @@ func handleCustomDomain(log zerolog.Logger, ctx *context.Context, giteaClient *g // only redirect if the target is also a codeberg page! targetOwner, _, _ = dns.GetTargetFromDNS(strings.SplitN(canonicalDomain, "/", 2)[0], mainDomainSuffix, dnsLookupCache) if targetOwner != "" { - ctx.Redirect("https://"+canonicalDomain+targetOpt.TargetPath, http.StatusTemporaryRedirect) + ctx.Redirect("https://"+canonicalDomain+"/"+targetOpt.TargetPath, http.StatusTemporaryRedirect) return }