From c74208f9dee81d6a28733989e57439b3fb7bd4d1 Mon Sep 17 00:00:00 2001 From: Qstick Date: Sat, 20 Feb 2021 17:09:25 -0500 Subject: [PATCH] More AnimeTorrents work --- .../Indexers/Definitions/AnimeTorrents.cs | 23 +++++++++++++------ .../BroadcastheNet/BroadcastheNetParser.cs | 2 +- .../Definitions/Newznab/NewznabRssParser.cs | 4 ++-- .../Definitions/Torznab/TorznabRssParser.cs | 4 ++-- .../Indexers/Exceptions/ApiKeyException.cs | 17 -------------- .../Exceptions/IndexerAuthException.cs | 17 ++++++++++++++ src/NzbDrone.Core/Indexers/HttpIndexerBase.cs | 8 +++---- 7 files changed, 42 insertions(+), 33 deletions(-) delete mode 100644 src/NzbDrone.Core/Indexers/Exceptions/ApiKeyException.cs create mode 100644 src/NzbDrone.Core/Indexers/Exceptions/IndexerAuthException.cs diff --git a/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs b/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs index ed7f4ad91..c32fc7ce2 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/AnimeTorrents.cs @@ -10,6 +10,7 @@ using NLog; using NzbDrone.Common.Http; using NzbDrone.Core.Annotations; using NzbDrone.Core.Configuration; +using NzbDrone.Core.Indexers.Exceptions; using NzbDrone.Core.IndexerSearch.Definitions; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; @@ -45,17 +46,19 @@ namespace NzbDrone.Core.Indexers.Definitions protected override void DoLogin() { + UpdateCookies(null, null); + var requestBuilder = new HttpRequestBuilder(LoginUrl) { - LogResponseContent = true + LogResponseContent = true, + AllowAutoRedirect = true }; + var loginPage = _httpClient.Execute(new HttpRequest(LoginUrl)); requestBuilder.Method = HttpMethod.POST; requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); + requestBuilder.SetCookies(loginPage.GetCookies()); - var cookies = Cookies; - - Cookies = null; var authLoginRequest = requestBuilder .AddFormParameter("username", Settings.Username) .AddFormParameter("password", Settings.Password) @@ -66,10 +69,16 @@ namespace NzbDrone.Core.Indexers.Definitions var response = _httpClient.Execute(authLoginRequest); - cookies = response.GetCookies(); - UpdateCookies(cookies, DateTime.Now + TimeSpan.FromDays(30)); + if (response.Content != null && response.Content.Contains("logout.php")) + { + UpdateCookies(response.GetCookies(), DateTime.Now + TimeSpan.FromDays(30)); - _logger.Debug("AnimeTorrents authentication succeeded."); + _logger.Debug("AnimeTorrents authentication succeeded"); + } + else + { + throw new IndexerAuthException("AnimeTorrents authentication failed"); + } } protected override bool CheckIfLoginNeeded(HttpResponse httpResponse) diff --git a/src/NzbDrone.Core/Indexers/Definitions/BroadcastheNet/BroadcastheNetParser.cs b/src/NzbDrone.Core/Indexers/Definitions/BroadcastheNet/BroadcastheNetParser.cs index 6468de241..2a006ca96 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/BroadcastheNet/BroadcastheNetParser.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/BroadcastheNet/BroadcastheNetParser.cs @@ -21,7 +21,7 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet switch (indexerResponse.HttpResponse.StatusCode) { case HttpStatusCode.Unauthorized: - throw new ApiKeyException("API Key invalid or not authorized"); + throw new IndexerAuthException("API Key invalid or not authorized"); case HttpStatusCode.NotFound: throw new IndexerException(indexerResponse, "Indexer API call returned NotFound, the Indexer API may have changed."); case HttpStatusCode.ServiceUnavailable: diff --git a/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRssParser.cs b/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRssParser.cs index 50b491099..53b62359b 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRssParser.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRssParser.cs @@ -35,12 +35,12 @@ namespace NzbDrone.Core.Indexers.Newznab if (code >= 100 && code <= 199) { - throw new ApiKeyException(errorMessage); + throw new IndexerAuthException(errorMessage); } if (!indexerResponse.Request.Url.FullUri.Contains("apikey=") && (errorMessage == "Missing parameter" || errorMessage.Contains("apikey"))) { - throw new ApiKeyException("Indexer requires an API key"); + throw new IndexerAuthException("Indexer requires an API key"); } if (errorMessage == "Request limit reached") diff --git a/src/NzbDrone.Core/Indexers/Definitions/Torznab/TorznabRssParser.cs b/src/NzbDrone.Core/Indexers/Definitions/Torznab/TorznabRssParser.cs index f93eae9c5..7da495d9b 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Torznab/TorznabRssParser.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Torznab/TorznabRssParser.cs @@ -32,12 +32,12 @@ namespace NzbDrone.Core.Indexers.Torznab if (code >= 100 && code <= 199) { - throw new ApiKeyException("Invalid API key"); + throw new IndexerAuthException("Invalid API key"); } if (!indexerResponse.Request.Url.FullUri.Contains("apikey=") && errorMessage == "Missing parameter") { - throw new ApiKeyException("Indexer requires an API key"); + throw new IndexerAuthException("Indexer requires an API key"); } if (errorMessage == "Request limit reached") diff --git a/src/NzbDrone.Core/Indexers/Exceptions/ApiKeyException.cs b/src/NzbDrone.Core/Indexers/Exceptions/ApiKeyException.cs deleted file mode 100644 index eb4e26654..000000000 --- a/src/NzbDrone.Core/Indexers/Exceptions/ApiKeyException.cs +++ /dev/null @@ -1,17 +0,0 @@ -using NzbDrone.Common.Exceptions; - -namespace NzbDrone.Core.Indexers.Exceptions -{ - public class ApiKeyException : NzbDroneException - { - public ApiKeyException(string message, params object[] args) - : base(message, args) - { - } - - public ApiKeyException(string message) - : base(message) - { - } - } -} diff --git a/src/NzbDrone.Core/Indexers/Exceptions/IndexerAuthException.cs b/src/NzbDrone.Core/Indexers/Exceptions/IndexerAuthException.cs new file mode 100644 index 000000000..0c9e089af --- /dev/null +++ b/src/NzbDrone.Core/Indexers/Exceptions/IndexerAuthException.cs @@ -0,0 +1,17 @@ +using NzbDrone.Common.Exceptions; + +namespace NzbDrone.Core.Indexers.Exceptions +{ + public class IndexerAuthException : NzbDroneException + { + public IndexerAuthException(string message, params object[] args) + : base(message, args) + { + } + + public IndexerAuthException(string message) + : base(message) + { + } + } +} diff --git a/src/NzbDrone.Core/Indexers/HttpIndexerBase.cs b/src/NzbDrone.Core/Indexers/HttpIndexerBase.cs index 51ce416b8..fade9fcbd 100644 --- a/src/NzbDrone.Core/Indexers/HttpIndexerBase.cs +++ b/src/NzbDrone.Core/Indexers/HttpIndexerBase.cs @@ -304,10 +304,10 @@ namespace NzbDrone.Core.Indexers _indexerStatusService.RecordFailure(Definition.Id, TimeSpan.FromHours(1)); _logger.Warn("API Request Limit reached for {0}", this); } - catch (ApiKeyException) + catch (IndexerAuthException) { _indexerStatusService.RecordFailure(Definition.Id); - _logger.Warn("Invalid API Key for {0} {1}", this, url); + _logger.Warn("Invalid Credentials for {0} {1}", this, url); } catch (CloudFlareCaptchaException ex) { @@ -480,9 +480,9 @@ namespace NzbDrone.Core.Indexers return new ValidationFailure(string.Empty, "Query successful, but no results were returned from your indexer. This may be an issue with the indexer or your indexer category settings."); } } - catch (ApiKeyException ex) + catch (IndexerAuthException ex) { - _logger.Warn("Indexer returned result for RSS URL, API Key appears to be invalid: " + ex.Message); + _logger.Warn("Indexer returned result for RSS URL, Credentials appears to be invalid: " + ex.Message); return new ValidationFailure("ApiKey", "Invalid API Key"); }