From 85a114e5912700981ea7ab416bb39895204e5caa Mon Sep 17 00:00:00 2001 From: Nazar Kanaev Date: Wed, 17 Mar 2021 12:17:17 +0000 Subject: [PATCH] login page tweaks --- src/assets/assets.go | 9 +++++++-- src/assets/login.html | 8 ++++++-- src/router/context.go | 7 +++++++ src/server/middleware.go | 10 +++++----- src/server/routes.go | 3 +-- 5 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/assets/assets.go b/src/assets/assets.go index aa550f4..f656516 100644 --- a/src/assets/assets.go +++ b/src/assets/assets.go @@ -4,8 +4,8 @@ import ( "embed" "html/template" "io" - "io/ioutil" "io/fs" + "io/ioutil" "os" ) @@ -23,7 +23,7 @@ func (afs assetsfs) Open(name string) (fs.File, error) { return os.DirFS("src/assets").Open(name) } -func Render(path string, writer io.Writer, data interface{}) { +func Template(path string) *template.Template { var tmpl *template.Template tmpl, found := FS.templates[path] if !found { @@ -39,6 +39,11 @@ func Render(path string, writer io.Writer, data interface{}) { FS.templates[path] = tmpl } } + return tmpl +} + +func Render(path string, writer io.Writer, data interface{}) { + tmpl := Template(path) tmpl.Execute(writer, data) } diff --git a/src/assets/login.html b/src/assets/login.html index 8de1cd9..e20b95e 100644 --- a/src/assets/login.html +++ b/src/assets/login.html @@ -24,13 +24,17 @@
+ {% if .error %} +
{% .error %}
+ {% end %}
- +
- +
diff --git a/src/router/context.go b/src/router/context.go index 83424a8..af9d441 100644 --- a/src/router/context.go +++ b/src/router/context.go @@ -3,6 +3,7 @@ package router import ( "encoding/json" "fmt" + "html/template" "log" "net/http" "strconv" @@ -34,6 +35,12 @@ func (c *Context) JSON(status int, data interface{}) { c.Out.Write([]byte("\n")) } +func (c *Context) HTML(status int, tmpl *template.Template, data interface{}) { + c.Out.WriteHeader(status) + c.Out.Header().Set("Content-Type", "text/html") + tmpl.Execute(c.Out, data) +} + func (c *Context) VarInt64(key string) (int64, error) { if val, ok := c.Vars[key]; ok { return strconv.ParseInt(val, 10, 64) diff --git a/src/server/middleware.go b/src/server/middleware.go index e162872..acb9094 100644 --- a/src/server/middleware.go +++ b/src/server/middleware.go @@ -41,12 +41,12 @@ func (m *authMiddleware) handler(c *router.Context) { return } else { // TODO: show error - c.Out.Header().Set("Content-Type", "text/html") - assets.Render("login.html", c.Out, nil) + c.HTML(http.StatusOK, assets.Template("login.html"), map[string]string{ + "username": username, + "error": "Invalid username/password", + }) return } } - - c.Out.Header().Set("Content-Type", "text/html") - assets.Render("login.html", c.Out, nil) + c.HTML(http.StatusOK, assets.Template("login.html"), nil) } diff --git a/src/server/routes.go b/src/server/routes.go index 47dce41..35a44b4 100644 --- a/src/server/routes.go +++ b/src/server/routes.go @@ -51,8 +51,7 @@ func (s *Server) handler() http.Handler { } func (s *Server) handleIndex(c *router.Context) { - c.Out.Header().Set("Content-Type", "text/html") - assets.Render("index.html", c.Out, nil) + c.HTML(http.StatusOK, assets.Template("index.html"), nil) } func (s *Server) handleStatic(c *router.Context) {