diff --git a/backend/00-router.go b/backend/00-router.go
index c505ae2..bdd6818 100644
--- a/backend/00-router.go
+++ b/backend/00-router.go
@@ -19,6 +19,7 @@ func RegisterRoutes(mux *http.ServeMux) {
mux.HandleFunc("/logout", logoutHandler)
mux.HandleFunc("/users", usersHandler)
mux.HandleFunc("/users/save", userSaveHandler)
+ mux.HandleFunc("/users/toggle-active", userToggleActiveHandler)
mux.HandleFunc("/users/delete", userDeleteHandler)
// Umzug (Konten pflegen + starten/beobachten)
@@ -63,9 +64,9 @@ func renderShell(w http.ResponseWriter, active, readingPane string) {
fmt.Fprintf(w, `
Mail-Graveyard
-
+
-
+
@@ -453,6 +454,46 @@ func userDeleteHandler(w http.ResponseWriter, r *http.Request) {
redirectUsers(w, r, "", "Benutzer geloescht.")
}
+func userToggleActiveHandler(w http.ResponseWriter, r *http.Request) {
+ if !requireManager(w, r) {
+ return
+ }
+ if r.Method != http.MethodPost {
+ http.Error(w, "method not allowed", http.StatusMethodNotAllowed)
+ return
+ }
+ username := strings.TrimSpace(r.FormValue("username"))
+ active := r.FormValue("active") == "1"
+ if username == "" {
+ redirectUsers(w, r, "", "Kein Benutzer gewaehlt.")
+ return
+ }
+ current := CurrentUser(r)
+ if strings.EqualFold(username, current.Username) && !active {
+ redirectUsers(w, r, username, "Eigenen Benutzer nicht sperren.")
+ return
+ }
+ target, err := GetAppUser(username)
+ if err != nil {
+ redirectUsers(w, r, username, err.Error())
+ return
+ }
+ if !IsAdmin(r) && target.Role != roleUser {
+ redirectUsers(w, r, username, "Nur Admins duerfen Verwalter oder Admins sperren.")
+ return
+ }
+ if err := SaveAppUser(username, "", target.Role, active); err != nil {
+ redirectUsers(w, r, username, err.Error())
+ return
+ }
+ if !active {
+ _, _ = DB.Exec(`DELETE FROM app_sessions WHERE user_id=?`, target.ID)
+ redirectUsers(w, r, username, "Benutzer gesperrt.")
+ return
+ }
+ redirectUsers(w, r, username, "Benutzer aktiviert.")
+}
+
func renderAccountsPage(w http.ResponseWriter, accounts []Account, edit Account, msg, errMsg string) {
if edit.Name == "" {
edit = Account{SrcPort: 993, SrcSecurity: "tls", SrcProto: "imap", DstPort: 993, DstSecurity: "tls", Active: true}
@@ -462,9 +503,9 @@ func renderAccountsPage(w http.ResponseWriter, accounts []Account, edit Account,
fmt.Fprintf(w, `
Konten-Verwaltung - Mail-Graveyard
-
+
-
+
@@ -507,9 +548,9 @@ func renderArchivesPage(w http.ResponseWriter, archives []string, accounts []Acc
fmt.Fprintf(w, `
Archiv-mbox Verwaltung - Mail-Graveyard
-
+
-
+
@@ -555,9 +596,9 @@ func renderUsersPage(w http.ResponseWriter, r *http.Request, users []AppUser, ed
fmt.Fprintf(w, `
Benutzerverwaltung - Mail-Graveyard
-
+
-
+
@@ -625,9 +666,9 @@ func renderTransferPage(w http.ResponseWriter, mode transferMode, accounts []Acc
fmt.Fprintf(w, `
%s - Mail-Graveyard
-
+
-
+
@@ -666,9 +707,9 @@ func renderSourceEmailBoxPage(w http.ResponseWriter, accounts []Account) {
fmt.Fprintf(w, `
Quell-Postfach - Mail-Graveyard
-
+
-
+