From bd538abd372c41336c355a7d0890a289bad256a5 Mon Sep 17 00:00:00 2001 From: crapStone Date: Wed, 11 Jan 2023 00:00:37 +0000 Subject: [PATCH 1/2] 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 } From 513e79832ae5bd8e825eb4f5a2605b1c585eccd6 Mon Sep 17 00:00:00 2001 From: Gusted Date: Sun, 22 Jan 2023 18:52:21 +0000 Subject: [PATCH 2/2] Use correct log level for `CheckCanonicalDomain` (#162) - Currently any error generated by requesting the `.domains` file of a repository would be logged under the info log level, which isn't the correct log level when we exclude the not found error. - Use warn log level if the error isn't the not found error. Co-authored-by: Gusted Reviewed-on: https://codeberg.org/Codeberg/pages-server/pulls/162 Reviewed-by: Otto --- server/upstream/domains.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/server/upstream/domains.go b/server/upstream/domains.go index 0e29673..ba1c494 100644 --- a/server/upstream/domains.go +++ b/server/upstream/domains.go @@ -45,7 +45,11 @@ func (o *Options) CheckCanonicalDomain(giteaClient *gitea.Client, actualDomain, } } } else { - log.Info().Err(err).Msgf("could not read %s of %s/%s", canonicalDomainConfig, o.TargetOwner, o.TargetRepo) + if err != gitea.ErrorNotFound { + log.Error().Err(err).Msgf("could not read %s of %s/%s", canonicalDomainConfig, o.TargetOwner, o.TargetRepo) + } else { + log.Info().Err(err).Msgf("could not read %s of %s/%s", canonicalDomainConfig, o.TargetOwner, o.TargetRepo) + } } domains = append(domains, o.TargetOwner+mainDomainSuffix) if domains[len(domains)-1] == actualDomain {