64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
package serve
|
|
|
|
import (
|
|
"bytes"
|
|
"html/template"
|
|
"net/http"
|
|
|
|
"git.andreafazzi.eu/andrea/probo/pkg/store/file"
|
|
)
|
|
|
|
type Controller struct {
|
|
handlerFunc http.HandlerFunc
|
|
|
|
sStore *file.SessionFileStore
|
|
rStore *file.ResponseFileStore
|
|
|
|
template *template.Template
|
|
}
|
|
|
|
func NewController(sStore *file.SessionFileStore, rStore *file.ResponseFileStore) *Controller {
|
|
return &Controller{
|
|
sStore: sStore,
|
|
rStore: rStore,
|
|
}
|
|
}
|
|
|
|
func (c *Controller) WithHandlerFunc(f func(c *Controller, w http.ResponseWriter, r *http.Request)) *Controller {
|
|
hf := func(w http.ResponseWriter, r *http.Request) {
|
|
f(c, w, r)
|
|
}
|
|
|
|
c.handlerFunc = hf
|
|
|
|
return c
|
|
}
|
|
|
|
func (c *Controller) WithTemplates(paths ...string) *Controller {
|
|
tmpl, err := template.ParseFiles(paths...)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
c.template = tmpl
|
|
return c
|
|
}
|
|
|
|
func (c *Controller) ExecuteTemplate(w http.ResponseWriter, data any) error {
|
|
var buf bytes.Buffer
|
|
|
|
err := c.template.Execute(&buf, data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
w.Header().Set("Content-Type", "text/html; charset=UTF-8")
|
|
|
|
buf.WriteTo(w)
|
|
|
|
return nil
|
|
}
|
|
|
|
func (c *Controller) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
c.handlerFunc.ServeHTTP(w, r)
|
|
}
|