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 }