summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--helpers/url.go16
-rw-r--r--helpers/url_test.go32
-rw-r--r--hugolib/site.go2
3 files changed, 44 insertions, 6 deletions
diff --git a/helpers/url.go b/helpers/url.go
index a07a3c6bd..f31e7a4e1 100644
--- a/helpers/url.go
+++ b/helpers/url.go
@@ -52,9 +52,8 @@ func (PathBridge) Separator() string {
var pathBridge PathBridge
-// SanitizeUrl sanitizes the input URL string.
-func SanitizeUrl(in string) string {
- s, err := purell.NormalizeURLString(in, purell.FlagsSafe|purell.FlagRemoveTrailingSlash|purell.FlagRemoveDotSegments|purell.FlagRemoveDuplicateSlashes|purell.FlagRemoveUnnecessaryHostDots|purell.FlagRemoveEmptyPortSeparator)
+func sanitizeUrlWithFlags(in string, f purell.NormalizationFlags) string {
+ s, err := purell.NormalizeURLString(in, f)
if err != nil {
return in
}
@@ -85,6 +84,17 @@ func SanitizeUrl(in string) string {
// End temporary kludge
//return s
+
+}
+
+// SanitizeUrl sanitizes the input URL string.
+func SanitizeUrl(in string) string {
+ return sanitizeUrlWithFlags(in, purell.FlagsSafe|purell.FlagRemoveTrailingSlash|purell.FlagRemoveDotSegments|purell.FlagRemoveDuplicateSlashes|purell.FlagRemoveUnnecessaryHostDots|purell.FlagRemoveEmptyPortSeparator)
+}
+
+// SanitizeUrlKeepTrailingSlash is the same as SanitizeUrl, but will keep any trailing slash.
+func SanitizeUrlKeepTrailingSlash(in string) string {
+ return sanitizeUrlWithFlags(in, purell.FlagsSafe|purell.FlagRemoveDotSegments|purell.FlagRemoveDuplicateSlashes|purell.FlagRemoveUnnecessaryHostDots|purell.FlagRemoveEmptyPortSeparator)
}
// Similar to MakePath, but with Unicode handling
diff --git a/helpers/url_test.go b/helpers/url_test.go
index e27e2bb02..c38750a63 100644
--- a/helpers/url_test.go
+++ b/helpers/url_test.go
@@ -1,9 +1,9 @@
package helpers
import (
- "testing"
-
"github.com/stretchr/testify/assert"
+ "strings"
+ "testing"
)
func TestUrlize(t *testing.T) {
@@ -26,6 +26,34 @@ func TestUrlize(t *testing.T) {
}
}
+func TestSanitizeUrl(t *testing.T) {
+ tests := []struct {
+ input string
+ expected string
+ }{
+ {"http://foo.bar/", "http://foo.bar/"},
+ {"http://foo.bar/zoo/", "http://foo.bar/zoo"}, // issue #931
+ }
+
+ for _, test := range tests {
+ o1 := SanitizeUrl(test.input)
+ o2 := SanitizeUrlKeepTrailingSlash(test.input)
+
+ expected2 := test.expected
+
+ if strings.HasSuffix(test.input, "/") && !strings.HasSuffix(expected2, "/") {
+ expected2 += "/"
+ }
+
+ if o1 != test.expected {
+ t.Errorf("Expected %#v, got %#v\n", test.expected, o1)
+ }
+ if o2 != expected2 {
+ t.Errorf("Expected %#v, got %#v\n", expected2, o2)
+ }
+ }
+}
+
func TestMakePermalink(t *testing.T) {
type test struct {
host, link, output string
diff --git a/hugolib/site.go b/hugolib/site.go
index 0acc287d5..c5b5b85c1 100644
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -444,7 +444,7 @@ func (s *Site) initializeSiteInfo() {
}
s.Info = SiteInfo{
- BaseUrl: template.URL(helpers.SanitizeUrl(viper.GetString("BaseUrl"))),
+ BaseUrl: template.URL(helpers.SanitizeUrlKeepTrailingSlash(viper.GetString("BaseUrl"))),
Title: viper.GetString("Title"),
Author: viper.GetStringMap("author"),
LanguageCode: viper.GetString("languagecode"),