go-sample-webpage/pkg/webpage/layoutmiddleware.go

56 lines
1.1 KiB
Go
Raw Normal View History

2021-11-08 02:33:36 +00:00
package webpage
2021-11-03 01:10:36 +00:00
import (
"bytes"
2021-11-25 00:32:48 +00:00
"github.com/go-chi/jwtauth/v5"
2021-11-03 01:10:36 +00:00
"github.com/unrolled/render"
"html/template"
"io"
"net/http"
)
type LayoutMiddlewareResponseWriter struct {
http.ResponseWriter
buf *bytes.Buffer
}
func (myrw *LayoutMiddlewareResponseWriter) Write(p []byte) (int, error) {
return myrw.buf.Write(p)
}
func TemplateMiddelware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
render := render.New(render.Options{
Layout: "layout",
FileSystem: &render.EmbedFileSystem{
2021-11-08 02:33:36 +00:00
FS: config.Templates,
2021-11-03 01:10:36 +00:00
},
})
rw := &LayoutMiddlewareResponseWriter{
ResponseWriter: w,
buf: &bytes.Buffer{},
}
next.ServeHTTP(rw, r)
content, err := io.ReadAll(rw.buf)
if err != nil {
panic(err)
}
rw.buf.Reset()
2021-11-25 00:32:48 +00:00
_, claims, _ := jwtauth.FromContext(r.Context())
loggedin := false
if claims["username"] != nil {
loggedin = true
}
render.HTML(w, http.StatusOK, "sub", map[string]interface{}{"loggedin": loggedin, "content": template.HTML(string(content))})
2021-11-03 01:10:36 +00:00
})
}