package accounts import ( "encoding/json" "net/http" "net/url" "github.com/go-chi/chi/v5" ) func (h *Handler) setAccountRole(w http.ResponseWriter, r *http.Request) { identifier := chi.URLParam(r, "identifier") if decoded, err := url.PathUnescape(identifier); err == nil { identifier = decoded } var req struct { Role string `json:"role"` } if err := json.NewDecoder(r.Body).Decode(&req); err != nil { writeJSON(w, http.StatusBadRequest, map[string]any{"detail": "invalid json"}) return } acc, err := h.Store.SetAccountRole(identifier, req.Role) if err != nil { writeJSON(w, http.StatusBadRequest, map[string]any{"detail": err.Error()}) return } h.Pool.Reset() writeJSON(w, http.StatusOK, map[string]any{ "success": true, "identifier": acc.Identifier(), "role": acc.Role, }) } func (h *Handler) setAccountBanned(w http.ResponseWriter, r *http.Request) { identifier := chi.URLParam(r, "identifier") if decoded, err := url.PathUnescape(identifier); err == nil { identifier = decoded } var req struct { Banned bool `json:"banned"` } if err := json.NewDecoder(r.Body).Decode(&req); err != nil { writeJSON(w, http.StatusBadRequest, map[string]any{"detail": "invalid json"}) return } acc, err := h.Store.SetAccountBanned(identifier, req.Banned) if err != nil { writeJSON(w, http.StatusBadRequest, map[string]any{"detail": err.Error()}) return } h.Pool.Reset() writeJSON(w, http.StatusOK, map[string]any{ "success": true, "identifier": acc.Identifier(), "banned": acc.Banned, }) } func (h *Handler) promoteStandby(w http.ResponseWriter, r *http.Request) { var req struct { Count int `json:"count"` } _ = json.NewDecoder(r.Body).Decode(&req) if req.Count <= 0 { req.Count = h.Store.RuntimeBackupReleaseCount() } promoted := h.Store.PromoteStandbyAccounts(req.Count) if len(promoted) > 0 { h.Pool.Reset() } writeJSON(w, http.StatusOK, map[string]any{ "success": true, "promoted": promoted, "count": len(promoted), }) }