api.go 4.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. "net/http"
  6. "miniflux.app/v2/internal/storage"
  7. "miniflux.app/v2/internal/worker"
  8. )
  9. type handler struct {
  10. store *storage.Storage
  11. pool *worker.Pool
  12. }
  13. // NewHandler returns an http.Handler that handles API v1 calls.
  14. // The returned handler expects the base path to be stripped from the request URL.
  15. func NewHandler(store *storage.Storage, pool *worker.Pool) http.Handler {
  16. handler := &handler{store: store, pool: pool}
  17. middleware := newMiddleware(store)
  18. mux := http.NewServeMux()
  19. mux.HandleFunc("POST /v1/users", handler.createUserHandler)
  20. mux.HandleFunc("GET /v1/users", handler.usersHandler)
  21. mux.HandleFunc("GET /v1/users/{identifier}", handler.dispatchUserLookupHandler)
  22. mux.HandleFunc("PUT /v1/users/{userID}", handler.updateUserHandler)
  23. mux.HandleFunc("DELETE /v1/users/{userID}", handler.removeUserHandler)
  24. mux.HandleFunc("PUT /v1/users/{userID}/mark-all-as-read", handler.markUserAsReadHandler)
  25. mux.HandleFunc("GET /v1/me", handler.currentUserHandler)
  26. mux.HandleFunc("POST /v1/categories", handler.createCategoryHandler)
  27. mux.HandleFunc("GET /v1/categories", handler.getCategoriesHandler)
  28. mux.HandleFunc("PUT /v1/categories/{categoryID}", handler.updateCategoryHandler)
  29. mux.HandleFunc("DELETE /v1/categories/{categoryID}", handler.removeCategoryHandler)
  30. mux.HandleFunc("PUT /v1/categories/{categoryID}/mark-all-as-read", handler.markCategoryAsReadHandler)
  31. mux.HandleFunc("GET /v1/categories/{categoryID}/feeds", handler.getCategoryFeedsHandler)
  32. mux.HandleFunc("PUT /v1/categories/{categoryID}/refresh", handler.refreshCategoryHandler)
  33. mux.HandleFunc("GET /v1/categories/{categoryID}/entries", handler.getCategoryEntriesHandler)
  34. mux.HandleFunc("GET /v1/categories/{categoryID}/entries/{entryID}", handler.getCategoryEntryHandler)
  35. mux.HandleFunc("POST /v1/discover", handler.discoverSubscriptionsHandler)
  36. mux.HandleFunc("POST /v1/feeds", handler.createFeedHandler)
  37. mux.HandleFunc("GET /v1/feeds", handler.getFeedsHandler)
  38. mux.HandleFunc("GET /v1/feeds/counters", handler.fetchCountersHandler)
  39. mux.HandleFunc("PUT /v1/feeds/refresh", handler.refreshAllFeedsHandler)
  40. mux.HandleFunc("PUT /v1/feeds/{feedID}/refresh", handler.refreshFeedHandler)
  41. mux.HandleFunc("GET /v1/feeds/{feedID}", handler.getFeedHandler)
  42. mux.HandleFunc("PUT /v1/feeds/{feedID}", handler.updateFeedHandler)
  43. mux.HandleFunc("DELETE /v1/feeds/{feedID}", handler.removeFeedHandler)
  44. mux.HandleFunc("GET /v1/feeds/{feedID}/icon", handler.getIconByFeedIDHandler)
  45. mux.HandleFunc("PUT /v1/feeds/{feedID}/mark-all-as-read", handler.markFeedAsReadHandler)
  46. mux.HandleFunc("GET /v1/export", handler.exportFeedsHandler)
  47. mux.HandleFunc("POST /v1/import", handler.importFeedsHandler)
  48. mux.HandleFunc("GET /v1/feeds/{feedID}/entries", handler.getFeedEntriesHandler)
  49. mux.HandleFunc("POST /v1/feeds/{feedID}/entries/import", handler.importFeedEntryHandler)
  50. mux.HandleFunc("GET /v1/feeds/{feedID}/entries/{entryID}", handler.getFeedEntryHandler)
  51. mux.HandleFunc("GET /v1/entries", handler.getEntriesHandler)
  52. mux.HandleFunc("PUT /v1/entries", handler.setEntryStatusHandler)
  53. mux.HandleFunc("GET /v1/entries/{entryID}", handler.getEntryHandler)
  54. mux.HandleFunc("PUT /v1/entries/{entryID}", handler.updateEntryHandler)
  55. mux.HandleFunc("PUT /v1/entries/{entryID}/bookmark", handler.toggleStarredHandler)
  56. mux.HandleFunc("PUT /v1/entries/{entryID}/star", handler.toggleStarredHandler)
  57. mux.HandleFunc("POST /v1/entries/{entryID}/save", handler.saveEntryHandler)
  58. mux.HandleFunc("GET /v1/entries/{entryID}/fetch-content", handler.fetchContentHandler)
  59. mux.HandleFunc("PUT /v1/flush-history", handler.flushHistoryHandler)
  60. mux.HandleFunc("DELETE /v1/flush-history", handler.flushHistoryHandler)
  61. mux.HandleFunc("GET /v1/icons/{iconID}", handler.getIconByIconIDHandler)
  62. mux.HandleFunc("GET /v1/enclosures/{enclosureID}", handler.getEnclosureByIDHandler)
  63. mux.HandleFunc("PUT /v1/enclosures/{enclosureID}", handler.updateEnclosureByIDHandler)
  64. mux.HandleFunc("GET /v1/integrations/status", handler.getIntegrationsStatusHandler)
  65. mux.HandleFunc("GET /v1/version", handler.versionHandler)
  66. mux.HandleFunc("POST /v1/api-keys", handler.createAPIKeyHandler)
  67. mux.HandleFunc("GET /v1/api-keys", handler.getAPIKeysHandler)
  68. mux.HandleFunc("DELETE /v1/api-keys/{apiKeyID}", handler.deleteAPIKeyHandler)
  69. return middleware.withCORSHeaders(middleware.validateAPIKeyAuth(middleware.validateBasicAuth(mux)))
  70. }