|
|
|
|
@ -6,7 +6,6 @@ package templates
@@ -6,7 +6,6 @@ package templates
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"fmt" |
|
|
|
|
"html" |
|
|
|
|
"html/template" |
|
|
|
|
"net/url" |
|
|
|
|
"strconv" |
|
|
|
|
@ -38,9 +37,7 @@ func NewFuncMap() template.FuncMap {
@@ -38,9 +37,7 @@ func NewFuncMap() template.FuncMap {
|
|
|
|
|
"dict": dict, // it's lowercase because this name has been widely used. Our other functions should have uppercase names.
|
|
|
|
|
"Iif": iif, |
|
|
|
|
"Eval": evalTokens, |
|
|
|
|
"SafeHTML": safeHTML, |
|
|
|
|
"HTMLFormat": htmlFormat, |
|
|
|
|
"HTMLEscape": htmlEscape, |
|
|
|
|
"QueryEscape": queryEscape, |
|
|
|
|
"QueryBuild": QueryBuild, |
|
|
|
|
"JSEscape": jsEscapeSafe, |
|
|
|
|
@ -165,32 +162,11 @@ func NewFuncMap() template.FuncMap {
@@ -165,32 +162,11 @@ func NewFuncMap() template.FuncMap {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// safeHTML render raw as HTML
|
|
|
|
|
func safeHTML(s any) template.HTML { |
|
|
|
|
switch v := s.(type) { |
|
|
|
|
case string: |
|
|
|
|
return template.HTML(v) |
|
|
|
|
case template.HTML: |
|
|
|
|
return v |
|
|
|
|
} |
|
|
|
|
panic(fmt.Sprintf("unexpected type %T", s)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// SanitizeHTML sanitizes the input by default sanitization rules.
|
|
|
|
|
func SanitizeHTML(s string) template.HTML { |
|
|
|
|
return markup.Sanitize(s) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func htmlEscape(s any) template.HTML { |
|
|
|
|
switch v := s.(type) { |
|
|
|
|
case string: |
|
|
|
|
return template.HTML(html.EscapeString(v)) |
|
|
|
|
case template.HTML: |
|
|
|
|
return v |
|
|
|
|
} |
|
|
|
|
panic(fmt.Sprintf("unexpected type %T", s)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func htmlFormat(s any, args ...any) template.HTML { |
|
|
|
|
if len(args) == 0 { |
|
|
|
|
// to prevent developers from calling "HTMLFormat $userInput" by mistake which will lead to XSS
|
|
|
|
|
|