diff --git a/webui/alert.tmpl b/webui/alert.tmpl new file mode 100644 index 0000000..c5bb084 --- /dev/null +++ b/webui/alert.tmpl @@ -0,0 +1,21 @@ + + + + {{.Head}} + + + +
+
+

+ {{.Message}} +

+ +
+
+ + diff --git a/webui_handler.go b/webui_handler.go index bc92ee3..5cf0806 100644 --- a/webui_handler.go +++ b/webui_handler.go @@ -33,6 +33,12 @@ type ConfirmData struct { CancelUrl string } +type AlertData struct { + Head template.HTML + Message string + RedirectUrl string +} + type LoginData struct { Head template.HTML } @@ -310,12 +316,20 @@ func (h *WebUiHandler) users(w http.ResponseWriter, r *http.Request) { } username := r.Form["username"][0] + minUsernameLen := 6 + if len(username) < minUsernameLen { + w.WriteHeader(400) + errStr := fmt.Sprintf("Username must be at least %d characters", minUsernameLen) + h.alertDialog(w, r, errStr, "/users") + return + } + isAdmin := len(r.Form["is-admin"]) == 1 && r.Form["is-admin"][0] == "on" err := h.db.AddUser(username, isAdmin) if err != nil { w.WriteHeader(500) - io.WriteString(w, err.Error()) + h.alertDialog(w, r, err.Error(), "/users") return } @@ -379,6 +393,21 @@ func (h *WebUiHandler) deleteUser(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, "/users", 303) } +func (h *WebUiHandler) alertDialog(w http.ResponseWriter, r *http.Request, message, redirectUrl string) error { + tmpl, err := h.loadTemplate("alert.tmpl") + if err != nil { + return err + } + + tmpl.Execute(w, &AlertData{ + Head: h.headHtml, + Message: message, + RedirectUrl: redirectUrl, + }) + + return nil +} + func (h *WebUiHandler) loadTemplate(name string) (*template.Template, error) { tmplStr, err := h.box.String(name)