mercury/web/app/template.go

60 lines
1.2 KiB
Go

package app
import (
"net/http"
"time"
"github.com/flosch/pongo2/v6"
)
func (app *App) ErrorTemplate(w http.ResponseWriter, r *http.Request, header, desc string) error {
return app.Template(w, r, "error.tpl", pongo2.Context{
"header": header,
"description": desc,
})
}
func (app *App) Template(w http.ResponseWriter, r *http.Request, tmplName string, ctx pongo2.Context) error {
tmpl, err := app.tmpl.FromCache(tmplName)
if err != nil {
return err
}
tctx := pongo2.Context{
"config": app.DBConfig.Get(),
"flash_message": app.getFlash(w, r),
}
tctx.Update(ctx)
w.Header().Set("Content-Type", "text/html")
return tmpl.ExecuteWriter(tctx, w)
}
const flashCookieName = "mercury-flash-message"
func (app *App) Flash(w http.ResponseWriter, msg string) {
http.SetCookie(w, &http.Cookie{
Name: flashCookieName,
Value: msg,
Path: "/",
HttpOnly: true,
Expires: time.Now().Add(time.Minute),
})
}
func (app *App) getFlash(w http.ResponseWriter, r *http.Request) string {
cookie, err := r.Cookie(flashCookieName)
if err != nil {
return ""
}
defer http.SetCookie(w, &http.Cookie{
Name: flashCookieName,
Value: "",
Path: "/",
HttpOnly: true,
Expires: time.Now(),
})
return cookie.Value
}