Fixed: (Indexers) Show validation errors for Cardigann

This commit is contained in:
Bogdan
2023-03-19 20:33:42 +02:00
parent a7a2ccd9b8
commit 1ac1c94b55

View File

@@ -3,9 +3,7 @@ using System.Collections.Generic;
using System.Collections.Specialized; using System.Collections.Specialized;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using AngleSharp.Html.Parser; using AngleSharp.Html.Parser;
using NLog; using NLog;
@@ -31,7 +29,6 @@ namespace NzbDrone.Core.Indexers.Definitions
public override DownloadProtocol Protocol => DownloadProtocol.Torrent; public override DownloadProtocol Protocol => DownloadProtocol.Torrent;
public override IndexerPrivacy Privacy => IndexerPrivacy.Private; public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
public override IndexerCapabilities Capabilities => SetCapabilities(); public override IndexerCapabilities Capabilities => SetCapabilities();
private string LoginUrl => Settings.BaseUrl + "index.php?page=login";
public HDSpace(IIndexerHttpClient httpClient, IEventAggregator eventAggregator, IIndexerStatusService indexerStatusService, IConfigService configService, Logger logger) public HDSpace(IIndexerHttpClient httpClient, IEventAggregator eventAggregator, IIndexerStatusService indexerStatusService, IConfigService configService, Logger logger)
: base(httpClient, eventAggregator, indexerStatusService, configService, logger) : base(httpClient, eventAggregator, indexerStatusService, configService, logger)
@@ -50,37 +47,41 @@ namespace NzbDrone.Core.Indexers.Definitions
protected override async Task DoLogin() protected override async Task DoLogin()
{ {
var loginPage = await ExecuteAuth(new HttpRequest(LoginUrl)); var loginUrl = Settings.BaseUrl + "index.php?page=login";
var requestBuilder = new HttpRequestBuilder(LoginUrl) var loginPage = await ExecuteAuth(new HttpRequest(loginUrl));
var requestBuilder = new HttpRequestBuilder(loginUrl)
{ {
LogResponseContent = true, LogResponseContent = true,
AllowAutoRedirect = true, AllowAutoRedirect = true
Method = HttpMethod.Post
}; };
var cookies = Cookies; var cookies = Cookies;
Cookies = null; Cookies = null;
var authLoginRequest = requestBuilder var authLoginRequest = requestBuilder
.Post()
.AddFormParameter("uid", Settings.Username) .AddFormParameter("uid", Settings.Username)
.AddFormParameter("pwd", Settings.Password) .AddFormParameter("pwd", Settings.Password)
.SetCookies(loginPage.GetCookies()) .SetCookies(loginPage.GetCookies())
.SetHeader("Content-Type", "application/x-www-form-urlencoded") .SetHeader("Content-Type", "application/x-www-form-urlencoded")
.SetHeader("Referer", LoginUrl) .SetHeader("Referer", loginUrl)
.Build(); .Build();
var response = await ExecuteAuth(authLoginRequest); var response = await ExecuteAuth(authLoginRequest);
if (CheckIfLoginNeeded(response)) if (CheckIfLoginNeeded(response))
{ {
var errorStr = "Login Failed: You have {0} remaining login attempts"; var parser = new HtmlParser();
var remainingAttemptSpan = new Regex(string.Format(errorStr, "(.*?)")) var dom = parser.ParseDocument(response.Content);
.Match(loginPage.Content).Groups[1].ToString(); var errorMessages = dom
var attempts = Regex.Replace(remainingAttemptSpan, "<.*?>", string.Empty); .QuerySelectorAll("table.lista td.lista span[style*=\"#FF0000\"], table.lista td.header:contains(\"login attempts\")")
var errorMessage = string.Format(errorStr, attempts); .Select(r => r.TextContent.Trim())
.Where(m => m.IsNotNullOrWhiteSpace())
.ToArray();
throw new IndexerAuthException(errorMessage); throw new IndexerAuthException(errorMessages.Any() ? errorMessages.Join(" ") : "Unknown error message, please report.");
} }
cookies = response.GetCookies(); cookies = response.GetCookies();
@@ -91,7 +92,7 @@ namespace NzbDrone.Core.Indexers.Definitions
protected override bool CheckIfLoginNeeded(HttpResponse httpResponse) protected override bool CheckIfLoginNeeded(HttpResponse httpResponse)
{ {
return !httpResponse.Content.Contains("logout.php"); return !httpResponse.Content.Contains("logout.php") && !httpResponse.Content.Contains("Rank: Parked");
} }
private IndexerCapabilities SetCapabilities() private IndexerCapabilities SetCapabilities()