1
0
mirror of https://github.com/pocketbase/pocketbase.git synced 2024-11-28 10:03:42 +02:00
pocketbase/mails/base.go
2022-07-07 00:19:05 +03:00

59 lines
1.2 KiB
Go

// Package mails implements various helper methods for sending user and admin
// emails like forgotten password, verification, etc.
package mails
import (
"bytes"
"net/url"
"path"
"strings"
"text/template"
)
// normalizeUrl removes duplicated slashes from a url path.
func normalizeUrl(originalUrl string) (string, error) {
u, err := url.Parse(originalUrl)
if err != nil {
return "", err
}
hasSlash := strings.HasSuffix(u.Path, "/")
// clean up path by removing duplicated /
u.Path = path.Clean(u.Path)
u.RawPath = path.Clean(u.RawPath)
// restore original trailing slash
if hasSlash && !strings.HasSuffix(u.Path, "/") {
u.Path += "/"
u.RawPath += "/"
}
return u.String(), nil
}
// resolveTemplateContent resolves inline html template strings.
func resolveTemplateContent(data any, content ...string) (string, error) {
if len(content) == 0 {
return "", nil
}
t := template.New("inline_template")
var parseErr error
for _, v := range content {
t, parseErr = t.Parse(v)
if parseErr != nil {
return "", parseErr
}
}
var wr bytes.Buffer
if executeErr := t.Execute(&wr, data); executeErr != nil {
return "", executeErr
}
return wr.String(), nil
}