package api import ( "net/http" "github.com/arescom/dockmv/internal/store" ) func (s *Server) handleListUsers(w http.ResponseWriter, r *http.Request) { writeJSON(w, http.StatusOK, s.users.List()) } type createUserRequest struct { Username string `json:"username"` Password string `json:"password"` } // handleCreateUser adds another account. v1 has no roles: any authenticated // account can create or remove any other. func (s *Server) handleCreateUser(w http.ResponseWriter, r *http.Request) { var req createUserRequest if err := decode(r, &req); err != nil { writeError(w, http.StatusBadRequest, "%v", err) return } usr, err := s.users.Create(req.Username, req.Password) if err != nil { writeError(w, http.StatusBadRequest, "%v", err) return } writeJSON(w, http.StatusCreated, usr) } // handleDeleteUser removes an account, along with its sessions and personal // API tokens so nothing left behind still authenticates as it. func (s *Server) handleDeleteUser(w http.ResponseWriter, r *http.Request) { id := r.PathValue("id") if err := s.users.Delete(id); err != nil { status := http.StatusNotFound if err == store.ErrLastAccount { status = http.StatusBadRequest } writeError(w, status, "%v", err) return } s.sessions.DeleteAllForUser(id) _ = s.tokens.RevokeAllForUser(id) w.WriteHeader(http.StatusNoContent) }