From 605c587fd9fce7819f2a0f323d79fd3cef79c1d6 Mon Sep 17 00:00:00 2001 From: sentriz Date: Wed, 27 Nov 2019 01:44:45 +0000 Subject: [PATCH] add multiple flash support --- server/ctrladmin/ctrl.go | 51 ++++++++++++++++---------------- server/ctrladmin/handlers.go | 14 ++++----- server/ctrladmin/handlers_raw.go | 4 +-- server/ctrladmin/middleware.go | 4 +-- 4 files changed, 36 insertions(+), 37 deletions(-) diff --git a/server/ctrladmin/ctrl.go b/server/ctrladmin/ctrl.go index c9f6581..01fb3a4 100644 --- a/server/ctrladmin/ctrl.go +++ b/server/ctrladmin/ctrl.go @@ -111,8 +111,8 @@ type Response struct { data *templateData // code is 303 redirect string - flashN string // normal - flashW string // warning + flashN []string // normal + flashW []string // warning // code is >= 400 code int err string @@ -177,6 +177,13 @@ func (c *Controller) H(h adminHandler) http.Handler { // ## begin utilities // ## begin utilities +type FlashType string + +const ( + FlashNormal = FlashType("normal") + FlashWarning = FlashType("warning") +) + func firstExisting(or string, strings ...string) string { for _, s := range strings { if s != "" { @@ -194,35 +201,27 @@ func sessLogSave(s *sessions.Session, w http.ResponseWriter, r *http.Request) { type Flash struct { Message string - Type string + Type FlashType } -func sessAddFlashW(s *sessions.Session, message string) { - if message == "" { +func sessAddFlashN(s *sessions.Session, messages []string) { + sessAddFlash(s, messages, FlashNormal) +} + +func sessAddFlashW(s *sessions.Session, messages []string) { + sessAddFlash(s, messages, FlashWarning) +} + +func sessAddFlash(s *sessions.Session, messages []string, flashT FlashType) { + if len(messages) == 0 { return } - s.AddFlash(Flash{ - Message: message, - Type: "warning", - }) -} - -func sessAddFlashWf(s *sessions.Session, message string, a ...interface{}) { - sessAddFlashW(s, fmt.Sprintf(message, a...)) -} - -func sessAddFlashN(s *sessions.Session, message string) { - if message == "" { - return + for _, message := range messages { + s.AddFlash(Flash{ + Message: message, + Type: flashT, + }) } - s.AddFlash(Flash{ - Message: message, - Type: "normal", - }) -} - -func sessAddFlashNf(s *sessions.Session, message string, a ...interface{}) { - sessAddFlashN(s, fmt.Sprintf(message, a...)) } // ## begin validation diff --git a/server/ctrladmin/handlers.go b/server/ctrladmin/handlers.go index f7c71e5..cbb4e4c 100644 --- a/server/ctrladmin/handlers.go +++ b/server/ctrladmin/handlers.go @@ -76,7 +76,7 @@ func (c *Controller) ServeChangeOwnPasswordDo(r *http.Request) *Response { if err != nil { return &Response{ redirect: r.Referer(), - flashW: err.Error(), + flashW: []string{err.Error()}, } } user := r.Context().Value(key.User).(*model.User) @@ -101,7 +101,7 @@ func (c *Controller) ServeLinkLastFMDo(r *http.Request) *Response { if err != nil { return &Response{ redirect: "/admin/home", - flashW: err.Error(), + flashW: []string{err.Error()}, } } user := r.Context().Value(key.User).(*model.User) @@ -148,7 +148,7 @@ func (c *Controller) ServeChangePasswordDo(r *http.Request) *Response { if err != nil { return &Response{ redirect: r.Referer(), - flashW: err.Error(), + flashW: []string{err.Error()}, } } user := c.DB.GetUserFromName(username) @@ -197,7 +197,7 @@ func (c *Controller) ServeCreateUserDo(r *http.Request) *Response { if err != nil { return &Response{ redirect: r.Referer(), - flashW: err.Error(), + flashW: []string{err.Error()}, } } passwordOne := r.FormValue("password_one") @@ -206,7 +206,7 @@ func (c *Controller) ServeCreateUserDo(r *http.Request) *Response { if err != nil { return &Response{ redirect: r.Referer(), - flashW: err.Error(), + flashW: []string{err.Error()}, } } user := model.User{ @@ -217,7 +217,7 @@ func (c *Controller) ServeCreateUserDo(r *http.Request) *Response { if err != nil { return &Response{ redirect: r.Referer(), - flashW: fmt.Sprintf("could not create user `%s`: %v", username, err), + flashW: []string{fmt.Sprintf("could not create user `%s`: %v", username, err)}, } } return &Response{redirect: "/admin/home"} @@ -239,7 +239,7 @@ func (c *Controller) ServeUpdateLastFMAPIKeyDo(r *http.Request) *Response { if err := validateAPIKey(apiKey, secret); err != nil { return &Response{ redirect: r.Referer(), - flashW: err.Error(), + flashW: []string{err.Error()}, } } c.DB.SetSetting("lastfm_api_key", apiKey) diff --git a/server/ctrladmin/handlers_raw.go b/server/ctrladmin/handlers_raw.go index 4fad088..30c7a43 100644 --- a/server/ctrladmin/handlers_raw.go +++ b/server/ctrladmin/handlers_raw.go @@ -13,14 +13,14 @@ func (c *Controller) ServeLoginDo(w http.ResponseWriter, r *http.Request) { username := r.FormValue("username") password := r.FormValue("password") if username == "" || password == "" { - sessAddFlashW(session, "please provide both a username and password") + sessAddFlashW(session, []string{"please provide username and password"}) sessLogSave(session, w, r) http.Redirect(w, r, r.Referer(), http.StatusSeeOther) return } user := c.DB.GetUserFromName(username) if user == nil || password != user.Password { - sessAddFlashW(session, "invalid username / password") + sessAddFlashW(session, []string{"invalid username / password"}) sessLogSave(session, w, r) http.Redirect(w, r, r.Referer(), http.StatusSeeOther) return diff --git a/server/ctrladmin/middleware.go b/server/ctrladmin/middleware.go index ed84f02..bac6689 100644 --- a/server/ctrladmin/middleware.go +++ b/server/ctrladmin/middleware.go @@ -24,7 +24,7 @@ func (c *Controller) WithUserSession(next http.Handler) http.Handler { session := r.Context().Value(key.Session).(*sessions.Session) username, ok := session.Values["user"].(string) if !ok { - sessAddFlashW(session, "you are not authenticated") + sessAddFlashW(session, []string{"you are not authenticated"}) sessLogSave(session, w, r) http.Redirect(w, r, "/admin/login", http.StatusSeeOther) return @@ -50,7 +50,7 @@ func (c *Controller) WithAdminSession(next http.Handler) http.Handler { session := r.Context().Value(key.Session).(*sessions.Session) user := r.Context().Value(key.User).(*model.User) if !user.IsAdmin { - sessAddFlashW(session, "you are not an admin") + sessAddFlashW(session, []string{"you are not an admin"}) sessLogSave(session, w, r) http.Redirect(w, r, "/admin/login", http.StatusSeeOther) return