From 46af9223bc7add96929813aee1e17a7d0f16a9c4 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 22 Apr 2023 07:47:14 +0300 Subject: [PATCH] Fixed: (BakaBT) Update check if logged in Resolves #1617 --- .../Indexers/Definitions/BakaBT.cs | 43 +++++++++---------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/BakaBT.cs b/src/NzbDrone.Core/Indexers/Definitions/BakaBT.cs index eb23fc7cf..70350b222 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/BakaBT.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/BakaBT.cs @@ -9,6 +9,7 @@ using System.Threading.Tasks; using AngleSharp.Dom; using AngleSharp.Html.Parser; using NLog; +using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; using NzbDrone.Core.Annotations; using NzbDrone.Core.Configuration; @@ -27,7 +28,6 @@ namespace NzbDrone.Core.Indexers.Definitions public override string[] IndexerUrls => new[] { "https://bakabt.me/" }; public override string Description => "Anime Community"; - private string LoginUrl => Settings.BaseUrl + "login.php"; public override DownloadProtocol Protocol => DownloadProtocol.Torrent; public override IndexerPrivacy Privacy => IndexerPrivacy.Private; public override IndexerCapabilities Capabilities => SetCapabilities(); @@ -59,7 +59,7 @@ namespace NzbDrone.Core.Indexers.Definitions var dom = parser.ParseDocument(response.Content); var downloadLink = dom.QuerySelector(".download_link")?.GetAttribute("href"); - if (string.IsNullOrWhiteSpace(downloadLink)) + if (downloadLink.IsNullOrWhiteSpace()) { throw new Exception("Unable to find download link."); } @@ -71,17 +71,19 @@ namespace NzbDrone.Core.Indexers.Definitions { UpdateCookies(null, null); - var requestBuilder = new HttpRequestBuilder(LoginUrl) + var loginUrl = Settings.BaseUrl + "login.php"; + + var requestBuilder = new HttpRequestBuilder(loginUrl) { LogResponseContent = true, AllowAutoRedirect = true, Method = HttpMethod.Post }; - var loginPage = await ExecuteAuth(new HttpRequest(LoginUrl)); + var loginPage = await ExecuteAuth(new HttpRequest(loginUrl)); var parser = new HtmlParser(); - var dom = parser.ParseDocument(loginPage.Content); + var dom = await parser.ParseDocumentAsync(loginPage.Content); var loginKey = dom.QuerySelector("input[name=\"loginKey\"]"); if (loginKey != null) { @@ -98,21 +100,23 @@ namespace NzbDrone.Core.Indexers.Definitions var response = await ExecuteAuth(authLoginRequest); - if (response.Content != null && !CheckIfLoginNeeded(response)) + if (CheckIfLoginNeeded(response)) { - UpdateCookies(response.GetCookies(), DateTime.Now.AddDays(30)); + var htmlParser = new HtmlParser(); + var document = await htmlParser.ParseDocumentAsync(response.Content); + var errorMessage = document.QuerySelector("#loginError, .error")?.TextContent.Trim(); - _logger.Debug("BakaBT authentication succeeded"); - } - else - { - throw new IndexerAuthException("BakaBT authentication failed"); + throw new IndexerAuthException(errorMessage ?? "Unknown error message, please report."); } + + UpdateCookies(response.GetCookies(), DateTime.Now.AddDays(30)); + + _logger.Debug("BakaBT authentication succeeded"); } protected override bool CheckIfLoginNeeded(HttpResponse httpResponse) { - return !httpResponse.Content.Contains("logout.php"); + return httpResponse.Content.Contains("loginForm"); } private IndexerCapabilities SetCapabilities() @@ -241,7 +245,7 @@ namespace NzbDrone.Core.Indexers.Definitions public IList ParseResponse(IndexerResponse indexerResponse) { - var torrentInfos = new List(); + var releaseInfos = new List(); var parser = new HtmlParser(); var dom = parser.ParseDocument(indexerResponse.Content); @@ -356,11 +360,11 @@ namespace NzbDrone.Core.Indexers.Definitions release.DownloadVolumeFactor = row.QuerySelector("span.freeleech") != null ? 0 : 1; release.UploadVolumeFactor = 1; - torrentInfos.Add(release); + releaseInfos.Add(release); } } - return torrentInfos.ToArray(); + return releaseInfos.ToArray(); } private ICollection GetNextCategory(IElement row, ICollection currentCategories) @@ -388,12 +392,7 @@ namespace NzbDrone.Core.Indexers.Definitions var categoryName = categoryElement.GetAttribute("title"); - if (!string.IsNullOrWhiteSpace(categoryName)) - { - return categoryName; - } - - return null; + return categoryName.IsNotNullOrWhiteSpace() ? categoryName : null; } public Action, DateTime?> CookiesUpdater { get; set; }