From 6a985c1a84c9a3dfa711036f7ae15c4dc9bd28f4 Mon Sep 17 00:00:00 2001 From: Gregory Wells Date: Mon, 13 Apr 2026 09:32:22 -0400 Subject: [PATCH] send simple test email to my email on server startup --- data/email-templates/expired-password.html | 25 ++++++++++++++++++++++ src/email/render_template.go | 21 +++++++++++------- src/main/main.go | 25 ++++++++++++++++++++++ 3 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 data/email-templates/expired-password.html diff --git a/data/email-templates/expired-password.html b/data/email-templates/expired-password.html new file mode 100644 index 0000000..660d8dc --- /dev/null +++ b/data/email-templates/expired-password.html @@ -0,0 +1,25 @@ + + + + + Hi + + + +

Hi {{.Username}}

+ + Profile Picture + + diff --git a/src/email/render_template.go b/src/email/render_template.go index ad82fe3..befd336 100644 --- a/src/email/render_template.go +++ b/src/email/render_template.go @@ -2,19 +2,24 @@ package email import ( "bytes" + "path/filepath" "text/template" ) -func RenderTemplate(baseURL string, path string, data any) (string, error) { - // funcMap := template.FuncMap{ - // "asset": func(p string) string { - // return baseURL + "/" + strings.TrimPrefix(p, "/") - // }, - // } +func RenderTemplate(path string, data any, funcMap template.FuncMap) (string, error) { + tmpl := template.New("") + + if funcMap != nil { + tmpl = tmpl.Funcs(funcMap) + } + + tmpl, err := tmpl.ParseFiles(path) + if err != nil { + return "", err + } - tmpl := template.Must(template.ParseFiles(path)) var buf bytes.Buffer - err := tmpl.Execute(&buf, data) + err = tmpl.ExecuteTemplate(&buf, filepath.Base(path), data) if err != nil { return "", err } diff --git a/src/main/main.go b/src/main/main.go index 6e629a6..59cee5f 100644 --- a/src/main/main.go +++ b/src/main/main.go @@ -5,10 +5,12 @@ import ( "html/template" "log" "net/http" + "net/url" "strings" "sync" "astraltech.xyz/accountmanager/src/components" + "astraltech.xyz/accountmanager/src/email" "astraltech.xyz/accountmanager/src/helpers" "astraltech.xyz/accountmanager/src/ldap" "astraltech.xyz/accountmanager/src/logging" @@ -19,6 +21,7 @@ var ( ldapServer ldap.LDAPServer serverConfig *ServerConfig sessionManager *session.SessionManager + noReplyEmail email.EmailAccount ) type UserData struct { @@ -250,6 +253,28 @@ func main() { log.Fatal("Could not load server config") } + noReplyEmail = email.CreateEmailAccount(email.EmailAccountData{ + Username: serverConfig.EmailConfig.Username, + Password: serverConfig.EmailConfig.Password, + Email: serverConfig.EmailConfig.Email, + }, serverConfig.EmailConfig.SMTPURL, serverConfig.EmailConfig.SMTPPort) + + funcs := template.FuncMap{ + "avatar": func(username string) string { + return serverConfig.WebserverConfig.BaseURL + "/avatar?user=" + url.QueryEscape(username) + }, + } + + data := map[string]any{ + "Username": "gawells", + } + + email_template, err := email.RenderTemplate("./data/email-templates/expired-password.html", data, funcs) + if err != nil { + logging.Errorf("Failed to load email template: %s", err.Error()) + } + noReplyEmail.SendEmail([]string{"gawells@astraltech.xyz"}, "Test", email_template) + ldapServer = ldap.LDAPServer{ URL: serverConfig.LDAPConfig.LDAPURL, StartTLS: serverConfig.LDAPConfig.Security == "tls",