From f53145b2748067a9d50ab57efc6423d7568c237c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Tue, 13 Sep 2016 21:37:27 +0200 Subject: [PATCH] helpers: Avoid adding language prefix if already present Fixes #2444 --- helpers/url.go | 19 +++++++++++++++++-- helpers/url_test.go | 4 ++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/helpers/url.go b/helpers/url.go index 1d87cf89f..1bc6042e6 100644 --- a/helpers/url.go +++ b/helpers/url.go @@ -169,8 +169,15 @@ func AbsURL(in string, addLanguage bool) string { if addLanguage { prefix := getLanguagePrefix() + hasPrefix := false + // avoid adding language prefix if already present + if strings.HasPrefix(in, "/") { + hasPrefix = strings.HasPrefix(in[1:], prefix) + } else { + hasPrefix = strings.HasPrefix(in, prefix) + } - if prefix != "" { + if prefix != "" && !hasPrefix { addSlash := in == "" || strings.HasSuffix(in, "/") in = path.Join(prefix, in) @@ -224,7 +231,15 @@ func RelURL(in string, addLanguage bool) string { if addLanguage { prefix := getLanguagePrefix() - if prefix != "" { + hasPrefix := false + // avoid adding language prefix if already present + if strings.HasPrefix(in, "/") { + hasPrefix = strings.HasPrefix(in[1:], prefix) + } else { + hasPrefix = strings.HasPrefix(in, prefix) + } + + if prefix != "" && !hasPrefix { hadSlash := strings.HasSuffix(u, "/") u = path.Join(prefix, u) diff --git a/helpers/url_test.go b/helpers/url_test.go index d1fadb252..2cf93b859 100644 --- a/helpers/url_test.go +++ b/helpers/url_test.go @@ -69,12 +69,14 @@ func doTestAbsURL(t *testing.T, defaultInSubDir, addLanguage, multilingual bool, expected string }{ {"/test/foo", "http://base/", "http://base/MULTItest/foo"}, + {"/" + lang + "/test/foo", "http://base/", "http://base/" + lang + "/test/foo"}, {"", "http://base/ace/", "http://base/ace/MULTI"}, {"/test/2/foo/", "http://base", "http://base/MULTItest/2/foo/"}, {"http://abs", "http://base/", "http://abs"}, {"schema://abs", "http://base/", "schema://abs"}, {"//schemaless", "http://base/", "//schemaless"}, {"test/2/foo/", "http://base/path", "http://base/path/MULTItest/2/foo/"}, + {lang + "/test/2/foo/", "http://base/path", "http://base/path/" + lang + "/test/2/foo/"}, {"/test/2/foo/", "http://base/path", "http://base/MULTItest/2/foo/"}, {"http//foo", "http://base/path", "http://base/path/MULTIhttp/foo"}, } @@ -141,6 +143,8 @@ func doTestRelURL(t *testing.T, defaultInSubDir, addLanguage, multilingual bool, expected string }{ {"/test/foo", "http://base/", false, "MULTI/test/foo"}, + {"/" + lang + "/test/foo", "http://base/", false, "/" + lang + "/test/foo"}, + {lang + "/test/foo", "http://base/", false, "/" + lang + "/test/foo"}, {"test.css", "http://base/sub", false, "/subMULTI/test.css"}, {"test.css", "http://base/sub", true, "MULTI/test.css"}, {"/test/", "http://base/", false, "MULTI/test/"},