🐛 Invalidate sessions when user changes
This commit is contained in:
parent
f5869bfc3b
commit
67b1e206d0
33
webadmin.go
33
webadmin.go
|
@ -31,6 +31,7 @@ import (
|
||||||
"html/template"
|
"html/template"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
@ -579,8 +580,6 @@ Are you sure you want to continue?`, share.UUID, share.Name)
|
||||||
ar.Post("/delete-user", func(w http.ResponseWriter, r *http.Request) {
|
ar.Post("/delete-user", func(w http.ResponseWriter, r *http.Request) {
|
||||||
sessionContext := h.buildSessionContext(w, r)
|
sessionContext := h.buildSessionContext(w, r)
|
||||||
|
|
||||||
// TODO invalidate sessions
|
|
||||||
|
|
||||||
if sessionContext.user.Role != GlobalRoleAdmin {
|
if sessionContext.user.Role != GlobalRoleAdmin {
|
||||||
sessionContext.Unauthorized()
|
sessionContext.Unauthorized()
|
||||||
return
|
return
|
||||||
|
@ -605,6 +604,9 @@ Are you sure you want to continue?`, user.Username, user.Role)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
invalidateSession(sessionStore, user.Username)
|
||||||
|
|
||||||
sessionContext.Redirect("users")
|
sessionContext.Redirect("users")
|
||||||
})
|
})
|
||||||
ar.Route("/change-password", func(r chi.Router) {
|
ar.Route("/change-password", func(r chi.Router) {
|
||||||
|
@ -648,6 +650,8 @@ Are you sure you want to continue?`, user.Username, user.Role)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
invalidateSession(sessionStore, sessionContext.user.Username)
|
||||||
|
|
||||||
sessionContext.Redirect("./")
|
sessionContext.Redirect("./")
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -785,3 +789,28 @@ func userFromContext(r *http.Request) *User {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func invalidateSession(store *buntdb.DB, username string) {
|
||||||
|
err := store.Update(func(tx *buntdb.Tx) error {
|
||||||
|
var sessionIds []string
|
||||||
|
if err := tx.AscendKeys("*", func(key, value string) bool {
|
||||||
|
if value == username {
|
||||||
|
sessionIds = append(sessionIds, key)
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, sessionId := range sessionIds {
|
||||||
|
if _, err := tx.Delete(sessionId); err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "cannot remove session: %v\n", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "cannot invalidate session: %v\n", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue