From bef802eda0d954f49cff8866c967fc2fb4109561 Mon Sep 17 00:00:00 2001 From: Dmitry Chepurovskiy Date: Sun, 5 Jun 2022 00:04:05 +0300 Subject: [PATCH] WIP --- .../Indexers/Definitions/Lostfilm.cs | 26 ++++++++++++++++--- .../UserPassCaptchaTorrentBaseSettings.cs | 22 +++++++++++----- .../Settings/UserPassTorrentBaseSettings.cs | 14 ++++------ 3 files changed, 43 insertions(+), 19 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Lostfilm.cs b/src/NzbDrone.Core/Indexers/Definitions/Lostfilm.cs index d3b364f41..87216ba9f 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Lostfilm.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Lostfilm.cs @@ -56,10 +56,30 @@ public override IParseIndexerResponse GetParser() return new LostfilmParser(Settings, Capabilities.Categories) { HttpClient = _httpClient, Logger = _logger }; } - // protected override async Task DoLogin() - // { - // UpdateCookies(null, null); + protected override async Task DoLogin() + { + UpdateCookies(null, null); + var loginPage = await ExecuteAuth(new HttpRequest(Settings.BaseUrl + "login")); + // UpdateCookies(loginPage.Cookies); + var parser = new HtmlParser(); + var document = parser.ParseDocument(loginPage.Content); + var qCaptchaImg = document.QuerySelector("img#captcha_pictcha"); + if (qCaptchaImg != null) + { + var captchaUrl = Settings.BaseUrl + qCaptchaImg.GetAttribute("src"); + var captchaImage = await ExecuteAuth(new HttpRequest(captchaUrl)); + Settings.ExtraFieldData["CAPTCHA"] = captchaImage.Content; + } + + // else + // { + // configData.CaptchaImage.Value = new byte[0]; + // } + // configData.CaptchaCookie.Value = loginPage.Cookies; + } + + // UpdateCookies(null, null); // var requestBuilder = new HttpRequestBuilder(Settings.BaseUrl + "index.php") // { // LogResponseContent = true, diff --git a/src/NzbDrone.Core/Indexers/Settings/UserPassCaptchaTorrentBaseSettings.cs b/src/NzbDrone.Core/Indexers/Settings/UserPassCaptchaTorrentBaseSettings.cs index 7b03f66ee..3497be5aa 100644 --- a/src/NzbDrone.Core/Indexers/Settings/UserPassCaptchaTorrentBaseSettings.cs +++ b/src/NzbDrone.Core/Indexers/Settings/UserPassCaptchaTorrentBaseSettings.cs @@ -1,26 +1,29 @@ +using System.Collections.Generic; using FluentValidation; using NzbDrone.Core.Annotations; using NzbDrone.Core.Validation; namespace NzbDrone.Core.Indexers.Settings { - public class UserPassTorrentBaseSettings : ITorrentIndexerSettings + public class UserPassCaptchaTorrentBaseSettings : ITorrentIndexerSettings { - public class UserPassBaseSettingsValidator : AbstractValidator + public class UserPassCaptchaBaseSettingsValidator : AbstractValidator { - public UserPassBaseSettingsValidator() + public UserPassCaptchaBaseSettingsValidator() { RuleFor(c => c.Username).NotEmpty(); RuleFor(c => c.Password).NotEmpty(); } } - private static readonly UserPassBaseSettingsValidator Validator = new UserPassBaseSettingsValidator(); + private static readonly UserPassCaptchaBaseSettingsValidator Validator = new UserPassCaptchaBaseSettingsValidator(); - public UserPassTorrentBaseSettings() + public UserPassCaptchaTorrentBaseSettings() { Username = ""; Password = ""; + Captcha = ""; + ExtraFieldData = new Dictionary(); } [FieldDefinition(1, Label = "Base Url", HelpText = "Select which baseurl Prowlarr will use for requests to the site", Type = FieldType.Select, SelectOptionsProviderAction = "getUrls")] @@ -32,12 +35,17 @@ public UserPassTorrentBaseSettings() [FieldDefinition(3, Label = "Password", HelpText = "Site Password", Privacy = PrivacyLevel.Password, Type = FieldType.Password)] public string Password { get; set; } - [FieldDefinition(4)] - public IndexerBaseSettings BaseSettings { get; set; } = new IndexerBaseSettings(); + [FieldDefinition(4, Label = "Captcha", HelpText = "Site Captcha", Privacy = PrivacyLevel.Normal, Type = FieldType.Captcha)] + public string Captcha { get; set; } [FieldDefinition(5)] + public IndexerBaseSettings BaseSettings { get; set; } = new IndexerBaseSettings(); + + [FieldDefinition(6)] public IndexerTorrentBaseSettings TorrentBaseSettings { get; set; } = new IndexerTorrentBaseSettings(); + public Dictionary ExtraFieldData { get; set; } + public NzbDroneValidationResult Validate() { return new NzbDroneValidationResult(Validator.Validate(this)); diff --git a/src/NzbDrone.Core/Indexers/Settings/UserPassTorrentBaseSettings.cs b/src/NzbDrone.Core/Indexers/Settings/UserPassTorrentBaseSettings.cs index 4761bdeac..7b03f66ee 100644 --- a/src/NzbDrone.Core/Indexers/Settings/UserPassTorrentBaseSettings.cs +++ b/src/NzbDrone.Core/Indexers/Settings/UserPassTorrentBaseSettings.cs @@ -4,9 +4,9 @@ namespace NzbDrone.Core.Indexers.Settings { - public class UserPassCaptchaTorrentBaseSettings : ITorrentIndexerSettings + public class UserPassTorrentBaseSettings : ITorrentIndexerSettings { - public class UserPassBaseSettingsValidator : AbstractValidator + public class UserPassBaseSettingsValidator : AbstractValidator { public UserPassBaseSettingsValidator() { @@ -17,11 +17,10 @@ public UserPassBaseSettingsValidator() private static readonly UserPassBaseSettingsValidator Validator = new UserPassBaseSettingsValidator(); - public UserPassCaptchaTorrentBaseSettings() + public UserPassTorrentBaseSettings() { Username = ""; Password = ""; - Captcha = ""; } [FieldDefinition(1, Label = "Base Url", HelpText = "Select which baseurl Prowlarr will use for requests to the site", Type = FieldType.Select, SelectOptionsProviderAction = "getUrls")] @@ -33,13 +32,10 @@ public UserPassCaptchaTorrentBaseSettings() [FieldDefinition(3, Label = "Password", HelpText = "Site Password", Privacy = PrivacyLevel.Password, Type = FieldType.Password)] public string Password { get; set; } - [FieldDefinition(4, Label = "Captcha", HelpText = "Site Captcha", Privacy = PrivacyLevel.Normal, Type = FieldType.Captcha)] - public string Captcha { get; set; } - - [FieldDefinition(5)] + [FieldDefinition(4)] public IndexerBaseSettings BaseSettings { get; set; } = new IndexerBaseSettings(); - [FieldDefinition(6)] + [FieldDefinition(5)] public IndexerTorrentBaseSettings TorrentBaseSettings { get; set; } = new IndexerTorrentBaseSettings(); public NzbDroneValidationResult Validate()