package api import ( "net/http" "github.com/arescom/dockmv/internal/store" ) // handleListTokens lists only the caller's own tokens; there is no way to see // another account's. func (s *Server) handleListTokens(w http.ResponseWriter, r *http.Request) { writeJSON(w, http.StatusOK, s.tokens.List(identityFrom(r).UserID)) } type createTokenRequest struct { Name string `json:"name"` } // createTokenResponse embeds the stored token plus the plaintext secret, // which is only ever shown this once. type createTokenResponse struct { store.APIToken Token string `json:"token"` } func (s *Server) handleCreateToken(w http.ResponseWriter, r *http.Request) { var req createTokenRequest if err := decode(r, &req); err != nil { writeError(w, http.StatusBadRequest, "%v", err) return } if req.Name == "" { writeError(w, http.StatusBadRequest, "name is required") return } tok, plain, err := s.tokens.Create(identityFrom(r).UserID, req.Name) if err != nil { writeError(w, http.StatusInternalServerError, "%v", err) return } writeJSON(w, http.StatusCreated, createTokenResponse{APIToken: tok, Token: plain}) } func (s *Server) handleRevokeToken(w http.ResponseWriter, r *http.Request) { if err := s.tokens.Revoke(identityFrom(r).UserID, r.PathValue("id")); err != nil { writeError(w, http.StatusNotFound, "%v", err) return } w.WriteHeader(http.StatusNoContent) }