subscription.go 2.1 KB

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