add multiple flash support
This commit is contained in:
@@ -111,8 +111,8 @@ type Response struct {
|
|||||||
data *templateData
|
data *templateData
|
||||||
// code is 303
|
// code is 303
|
||||||
redirect string
|
redirect string
|
||||||
flashN string // normal
|
flashN []string // normal
|
||||||
flashW string // warning
|
flashW []string // warning
|
||||||
// code is >= 400
|
// code is >= 400
|
||||||
code int
|
code int
|
||||||
err string
|
err string
|
||||||
@@ -177,6 +177,13 @@ func (c *Controller) H(h adminHandler) http.Handler {
|
|||||||
// ## begin utilities
|
// ## begin utilities
|
||||||
// ## begin utilities
|
// ## begin utilities
|
||||||
|
|
||||||
|
type FlashType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
FlashNormal = FlashType("normal")
|
||||||
|
FlashWarning = FlashType("warning")
|
||||||
|
)
|
||||||
|
|
||||||
func firstExisting(or string, strings ...string) string {
|
func firstExisting(or string, strings ...string) string {
|
||||||
for _, s := range strings {
|
for _, s := range strings {
|
||||||
if s != "" {
|
if s != "" {
|
||||||
@@ -194,35 +201,27 @@ func sessLogSave(s *sessions.Session, w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
type Flash struct {
|
type Flash struct {
|
||||||
Message string
|
Message string
|
||||||
Type string
|
Type FlashType
|
||||||
}
|
}
|
||||||
|
|
||||||
func sessAddFlashW(s *sessions.Session, message string) {
|
func sessAddFlashN(s *sessions.Session, messages []string) {
|
||||||
if message == "" {
|
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
|
return
|
||||||
}
|
}
|
||||||
s.AddFlash(Flash{
|
for _, message := range messages {
|
||||||
Message: message,
|
s.AddFlash(Flash{
|
||||||
Type: "warning",
|
Message: message,
|
||||||
})
|
Type: flashT,
|
||||||
}
|
})
|
||||||
|
|
||||||
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
|
|
||||||
}
|
}
|
||||||
s.AddFlash(Flash{
|
|
||||||
Message: message,
|
|
||||||
Type: "normal",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func sessAddFlashNf(s *sessions.Session, message string, a ...interface{}) {
|
|
||||||
sessAddFlashN(s, fmt.Sprintf(message, a...))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ## begin validation
|
// ## begin validation
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ func (c *Controller) ServeChangeOwnPasswordDo(r *http.Request) *Response {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return &Response{
|
return &Response{
|
||||||
redirect: r.Referer(),
|
redirect: r.Referer(),
|
||||||
flashW: err.Error(),
|
flashW: []string{err.Error()},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
user := r.Context().Value(key.User).(*model.User)
|
user := r.Context().Value(key.User).(*model.User)
|
||||||
@@ -101,7 +101,7 @@ func (c *Controller) ServeLinkLastFMDo(r *http.Request) *Response {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return &Response{
|
return &Response{
|
||||||
redirect: "/admin/home",
|
redirect: "/admin/home",
|
||||||
flashW: err.Error(),
|
flashW: []string{err.Error()},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
user := r.Context().Value(key.User).(*model.User)
|
user := r.Context().Value(key.User).(*model.User)
|
||||||
@@ -148,7 +148,7 @@ func (c *Controller) ServeChangePasswordDo(r *http.Request) *Response {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return &Response{
|
return &Response{
|
||||||
redirect: r.Referer(),
|
redirect: r.Referer(),
|
||||||
flashW: err.Error(),
|
flashW: []string{err.Error()},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
user := c.DB.GetUserFromName(username)
|
user := c.DB.GetUserFromName(username)
|
||||||
@@ -197,7 +197,7 @@ func (c *Controller) ServeCreateUserDo(r *http.Request) *Response {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return &Response{
|
return &Response{
|
||||||
redirect: r.Referer(),
|
redirect: r.Referer(),
|
||||||
flashW: err.Error(),
|
flashW: []string{err.Error()},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
passwordOne := r.FormValue("password_one")
|
passwordOne := r.FormValue("password_one")
|
||||||
@@ -206,7 +206,7 @@ func (c *Controller) ServeCreateUserDo(r *http.Request) *Response {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return &Response{
|
return &Response{
|
||||||
redirect: r.Referer(),
|
redirect: r.Referer(),
|
||||||
flashW: err.Error(),
|
flashW: []string{err.Error()},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
user := model.User{
|
user := model.User{
|
||||||
@@ -217,7 +217,7 @@ func (c *Controller) ServeCreateUserDo(r *http.Request) *Response {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return &Response{
|
return &Response{
|
||||||
redirect: r.Referer(),
|
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"}
|
return &Response{redirect: "/admin/home"}
|
||||||
@@ -239,7 +239,7 @@ func (c *Controller) ServeUpdateLastFMAPIKeyDo(r *http.Request) *Response {
|
|||||||
if err := validateAPIKey(apiKey, secret); err != nil {
|
if err := validateAPIKey(apiKey, secret); err != nil {
|
||||||
return &Response{
|
return &Response{
|
||||||
redirect: r.Referer(),
|
redirect: r.Referer(),
|
||||||
flashW: err.Error(),
|
flashW: []string{err.Error()},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c.DB.SetSetting("lastfm_api_key", apiKey)
|
c.DB.SetSetting("lastfm_api_key", apiKey)
|
||||||
|
|||||||
@@ -13,14 +13,14 @@ func (c *Controller) ServeLoginDo(w http.ResponseWriter, r *http.Request) {
|
|||||||
username := r.FormValue("username")
|
username := r.FormValue("username")
|
||||||
password := r.FormValue("password")
|
password := r.FormValue("password")
|
||||||
if username == "" || 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)
|
sessLogSave(session, w, r)
|
||||||
http.Redirect(w, r, r.Referer(), http.StatusSeeOther)
|
http.Redirect(w, r, r.Referer(), http.StatusSeeOther)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
user := c.DB.GetUserFromName(username)
|
user := c.DB.GetUserFromName(username)
|
||||||
if user == nil || password != user.Password {
|
if user == nil || password != user.Password {
|
||||||
sessAddFlashW(session, "invalid username / password")
|
sessAddFlashW(session, []string{"invalid username / password"})
|
||||||
sessLogSave(session, w, r)
|
sessLogSave(session, w, r)
|
||||||
http.Redirect(w, r, r.Referer(), http.StatusSeeOther)
|
http.Redirect(w, r, r.Referer(), http.StatusSeeOther)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ func (c *Controller) WithUserSession(next http.Handler) http.Handler {
|
|||||||
session := r.Context().Value(key.Session).(*sessions.Session)
|
session := r.Context().Value(key.Session).(*sessions.Session)
|
||||||
username, ok := session.Values["user"].(string)
|
username, ok := session.Values["user"].(string)
|
||||||
if !ok {
|
if !ok {
|
||||||
sessAddFlashW(session, "you are not authenticated")
|
sessAddFlashW(session, []string{"you are not authenticated"})
|
||||||
sessLogSave(session, w, r)
|
sessLogSave(session, w, r)
|
||||||
http.Redirect(w, r, "/admin/login", http.StatusSeeOther)
|
http.Redirect(w, r, "/admin/login", http.StatusSeeOther)
|
||||||
return
|
return
|
||||||
@@ -50,7 +50,7 @@ func (c *Controller) WithAdminSession(next http.Handler) http.Handler {
|
|||||||
session := r.Context().Value(key.Session).(*sessions.Session)
|
session := r.Context().Value(key.Session).(*sessions.Session)
|
||||||
user := r.Context().Value(key.User).(*model.User)
|
user := r.Context().Value(key.User).(*model.User)
|
||||||
if !user.IsAdmin {
|
if !user.IsAdmin {
|
||||||
sessAddFlashW(session, "you are not an admin")
|
sessAddFlashW(session, []string{"you are not an admin"})
|
||||||
sessLogSave(session, w, r)
|
sessLogSave(session, w, r)
|
||||||
http.Redirect(w, r, "/admin/login", http.StatusSeeOther)
|
http.Redirect(w, r, "/admin/login", http.StatusSeeOther)
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user