subscription.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. "net/http"
  7. "miniflux.app/v2/internal/http/request"
  8. "miniflux.app/v2/internal/http/response/json"
  9. "miniflux.app/v2/internal/model"
  10. "miniflux.app/v2/internal/reader/subscription"
  11. "miniflux.app/v2/internal/validator"
  12. )
  13. func (h *handler) discoverSubscriptions(w http.ResponseWriter, r *http.Request) {
  14. var subscriptionDiscoveryRequest model.SubscriptionDiscoveryRequest
  15. if err := json_parser.NewDecoder(r.Body).Decode(&subscriptionDiscoveryRequest); err != nil {
  16. json.BadRequest(w, r, err)
  17. return
  18. }
  19. if validationErr := validator.ValidateSubscriptionDiscovery(&subscriptionDiscoveryRequest); validationErr != nil {
  20. json.BadRequest(w, r, validationErr.Error())
  21. return
  22. }
  23. var rssbridgeURL string
  24. intg, err := h.store.Integration(request.UserID(r))
  25. if err == nil && intg != nil && intg.RSSBridgeEnabled {
  26. rssbridgeURL = intg.RSSBridgeURL
  27. }
  28. subscriptions, localizedError := subscription.FindSubscriptions(
  29. subscriptionDiscoveryRequest.URL,
  30. subscriptionDiscoveryRequest.UserAgent,
  31. subscriptionDiscoveryRequest.Cookie,
  32. subscriptionDiscoveryRequest.Username,
  33. subscriptionDiscoveryRequest.Password,
  34. subscriptionDiscoveryRequest.FetchViaProxy,
  35. subscriptionDiscoveryRequest.AllowSelfSignedCertificates,
  36. rssbridgeURL,
  37. )
  38. if localizedError != nil {
  39. json.ServerError(w, r, localizedError.Error())
  40. return
  41. }
  42. if len(subscriptions) == 0 {
  43. json.NotFound(w, r)
  44. return
  45. }
  46. json.OK(w, r, subscriptions)
  47. }