This repository has been archived on 2021-05-23. You can view files and clone it, but cannot push or open issues or pull requests.
simpledash/template.go

55 lines
1.3 KiB
Go

package main
import (
"bytes"
"encoding/base64"
"fmt"
"html/template"
"regexp"
)
// Function to dynamically execute template and return results
func dynamicTemplate(name string, data interface{}) (template.HTML, error) {
// Create new buffer
buf := &bytes.Buffer{}
// Execute template writing to buffer with provided data
err := templates[name].Execute(buf, data)
if err != nil {
return "", nil
}
// Return results of template execution
return template.HTML(buf.String()), nil
}
// Wrap URL with proxy
func wrapProxy(url string) string {
// Encode URL with base64
b64url := base64.StdEncoding.EncodeToString([]byte(url))
// Return /proxy/{url}
return fmt.Sprint("/proxy/", b64url)
}
// Wrap string in template.JS to unescape JS code
func unescapeJS(s string) template.JS {
return template.JS(s)
}
// Remove all non-alphanumeric characters
func toAlphaNum(s string) string {
// Create regex matching everything but alphanumeric
regex := regexp.MustCompile(`[^a-zA-Z0-9]+`)
// Remove all matched characters in string, then return
return regex.ReplaceAllString(s, "")
}
// Function to get template function map
func getFuncMap() template.FuncMap {
// Return function map with template functions
return template.FuncMap{
"dyn_template": dynamicTemplate,
"proxy": wrapProxy,
"unescJS": unescapeJS,
"toAlphaNum": toAlphaNum,
}
}