diff --git a/internal/reader/fetcher/response_handler.go b/internal/reader/fetcher/response_handler.go index e5d6a5a1..b71db54f 100644 --- a/internal/reader/fetcher/response_handler.go +++ b/internal/reader/fetcher/response_handler.go @@ -89,6 +89,15 @@ func (r *ResponseHandler) IsModified(lastEtagValue, lastModifiedValue string) bo return true } +func (r *ResponseHandler) IsRedirect() bool { + return r.httpResponse != nil && + (r.httpResponse.StatusCode == http.StatusMovedPermanently || + r.httpResponse.StatusCode == http.StatusFound || + r.httpResponse.StatusCode == http.StatusSeeOther || + r.httpResponse.StatusCode == http.StatusTemporaryRedirect || + r.httpResponse.StatusCode == http.StatusPermanentRedirect) +} + func (r *ResponseHandler) Close() { if r.httpResponse != nil && r.httpResponse.Body != nil && r.clientErr == nil { r.httpResponse.Body.Close() diff --git a/internal/reader/subscription/finder.go b/internal/reader/subscription/finder.go index ebebe56a..55088735 100644 --- a/internal/reader/subscription/finder.go +++ b/internal/reader/subscription/finder.go @@ -228,8 +228,17 @@ func (f *SubscriptionFinder) FindSubscriptionsFromWellKnownURLs(websiteURL strin localizedError := responseHandler.LocalizedError() responseHandler.Close() + // Do not add redirections to the possible list of subscriptions to avoid confusion. + if responseHandler.IsRedirect() { + slog.Debug("Ignore URL redirection during feed discovery", slog.String("fullURL", fullURL)) + continue + } + if localizedError != nil { - slog.Debug("Unable to subscribe", slog.String("fullURL", fullURL), slog.Any("error", localizedError.Error())) + slog.Debug("Ignore invalid feed URL during feed discovery", + slog.String("fullURL", fullURL), + slog.Any("error", localizedError.Error()), + ) continue }