ref: ad34be9d77f8abf948d36de4498e8955a02bbec6
parent: a6170154cf8b82243510682c73c55a75ff201805
author: spf13 <[email protected]>
date: Mon Apr 7 18:02:08 EDT 2014
strip trailing baseurl slash. Added a new template function "sanitizeurl" which ensures no double slashes. Fixed #221
--- a/helpers/url.go
+++ b/helpers/url.go
@@ -16,8 +16,18 @@
import (
"net/url"
"path"
+
+ "github.com/PuerkitoBio/purell"
)
+func SanitizeUrl(in string) string {
+ url, err := purell.NormalizeURLString(in, purell.FlagsUsuallySafeGreedy|purell.FlagRemoveDuplicateSlashes|purell.FlagRemoveUnnecessaryHostDots|purell.FlagRemoveEmptyPortSeparator)
+ if err != nil {
+ return in
+ }
+ return url
+}
+
// Similar to MakePath, but with Unicode handling
// Example:
// uri: Vim (text editor)
@@ -55,6 +65,7 @@
}
func UrlPrep(ugly bool, in string) string {
+ in = SanitizeUrl(in)
if ugly {
return Uglify(in)
} else {
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -227,7 +227,7 @@
}
s.Info = SiteInfo{
- BaseUrl: template.URL(viper.GetString("BaseUrl")),
+ BaseUrl: template.URL(helpers.SanitizeUrl(viper.GetString("BaseUrl"))),
Title: viper.GetString("Title"),
Recent: &s.Pages,
Params: params,
--- a/template/bundle/template.go
+++ b/template/bundle/template.go
@@ -2,8 +2,6 @@
import (
"errors"
- "github.com/eknkc/amber"
- "github.com/spf13/hugo/helpers"
"html"
"html/template"
"io"
@@ -13,6 +11,9 @@
"reflect"
"strconv"
"strings"
+
+ "github.com/eknkc/amber"
+ "github.com/spf13/hugo/helpers"
)
func Gt(a interface{}, b interface{}) bool {
@@ -159,22 +160,23 @@
}
funcMap := template.FuncMap{
- "urlize": helpers.Urlize,
- "gt": Gt,
- "isset": IsSet,
- "echoParam": ReturnWhenSet,
- "safeHtml": SafeHtml,
- "first": First,
- "highlight": Highlight,
- "add": func(a, b int) int { return a + b },
- "sub": func(a, b int) int { return a - b },
- "div": func(a, b int) int { return a / b },
- "mod": func(a, b int) int { return a % b },
- "mul": func(a, b int) int { return a * b },
- "modBool": func(a, b int) bool { return a%b == 0 },
- "lower": func(a string) string { return strings.ToLower(a) },
- "upper": func(a string) string { return strings.ToUpper(a) },
- "title": func(a string) string { return strings.Title(a) },
+ "urlize": helpers.Urlize,
+ "sanitizeurl": helpers.SanitizeUrl,
+ "gt": Gt,
+ "isset": IsSet,
+ "echoParam": ReturnWhenSet,
+ "safeHtml": SafeHtml,
+ "first": First,
+ "highlight": Highlight,
+ "add": func(a, b int) int { return a + b },
+ "sub": func(a, b int) int { return a - b },
+ "div": func(a, b int) int { return a / b },
+ "mod": func(a, b int) int { return a % b },
+ "mul": func(a, b int) int { return a * b },
+ "modBool": func(a, b int) bool { return a%b == 0 },
+ "lower": func(a string) string { return strings.ToLower(a) },
+ "upper": func(a string) string { return strings.ToUpper(a) },
+ "title": func(a string) string { return strings.Title(a) },
}
templates.Funcs(funcMap)