api_key_handlers.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package api // import "miniflux.app/v2/internal/api"
  4. import (
  5. json_parser "encoding/json"
  6. "errors"
  7. "net/http"
  8. "miniflux.app/v2/internal/http/request"
  9. "miniflux.app/v2/internal/http/response"
  10. "miniflux.app/v2/internal/model"
  11. "miniflux.app/v2/internal/storage"
  12. "miniflux.app/v2/internal/validator"
  13. )
  14. func (h *handler) createAPIKeyHandler(w http.ResponseWriter, r *http.Request) {
  15. userID := request.UserID(r)
  16. var apiKeyCreationRequest model.APIKeyCreationRequest
  17. if err := json_parser.NewDecoder(r.Body).Decode(&apiKeyCreationRequest); err != nil {
  18. response.JSONBadRequest(w, r, err)
  19. return
  20. }
  21. if validationErr := validator.ValidateAPIKeyCreation(h.store, userID, &apiKeyCreationRequest); validationErr != nil {
  22. response.JSONBadRequest(w, r, validationErr.Error())
  23. return
  24. }
  25. apiKey, err := h.store.CreateAPIKey(userID, apiKeyCreationRequest.Description)
  26. if err != nil {
  27. response.JSONServerError(w, r, err)
  28. return
  29. }
  30. response.JSONCreated(w, r, apiKey)
  31. }
  32. func (h *handler) getAPIKeysHandler(w http.ResponseWriter, r *http.Request) {
  33. userID := request.UserID(r)
  34. apiKeys, err := h.store.APIKeys(userID)
  35. if err != nil {
  36. response.JSONServerError(w, r, err)
  37. return
  38. }
  39. response.JSON(w, r, apiKeys)
  40. }
  41. func (h *handler) deleteAPIKeyHandler(w http.ResponseWriter, r *http.Request) {
  42. userID := request.UserID(r)
  43. apiKeyID := request.RouteInt64Param(r, "apiKeyID")
  44. if apiKeyID == 0 {
  45. response.JSONBadRequest(w, r, errors.New("invalid API key ID"))
  46. return
  47. }
  48. if err := h.store.DeleteAPIKey(userID, apiKeyID); err != nil {
  49. if errors.Is(err, storage.ErrAPIKeyNotFound) {
  50. response.JSONNotFound(w, r)
  51. return
  52. }
  53. response.JSONServerError(w, r, err)
  54. return
  55. }
  56. response.NoContent(w, r)
  57. }