New: Support for indexers with image CAPTCHAs

This commit is contained in:
ta264
2021-03-17 21:30:11 +00:00
committed by Qstick
parent 95d5e0d347
commit 0fa526a1af
15 changed files with 314 additions and 159 deletions

View File

@@ -1,7 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using FluentValidation.Results;
using NLog;
using NzbDrone.Common.Cache;
using NzbDrone.Common.Http;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.IndexerVersions;
@@ -13,6 +16,7 @@ namespace NzbDrone.Core.Indexers.Cardigann
public class Cardigann : HttpIndexerBase<CardigannSettings>
{
private readonly IIndexerDefinitionUpdateService _definitionService;
private readonly ICached<CardigannRequestGenerator> _generatorCache;
public override string Name => "Cardigann";
public override string BaseUrl => "";
@@ -23,21 +27,24 @@ namespace NzbDrone.Core.Indexers.Cardigann
public override IIndexerRequestGenerator GetRequestGenerator()
{
return new CardigannRequestGenerator(_configService,
_definitionService.GetDefinition(Settings.DefinitionFile),
Settings,
_logger)
{
HttpClient = _httpClient
};
return _generatorCache.Get(Settings.DefinitionFile, () =>
new CardigannRequestGenerator(_configService,
_definitionService.GetDefinition(Settings.DefinitionFile),
_logger)
{
HttpClient = _httpClient,
Settings = Settings
});
}
public override IParseIndexerResponse GetParser()
{
return new CardigannParser(_configService,
_definitionService.GetDefinition(Settings.DefinitionFile),
Settings,
_logger);
_definitionService.GetDefinition(Settings.DefinitionFile),
_logger)
{
Settings = Settings
};
}
public override IEnumerable<ProviderDefinition> DefaultDefinitions
@@ -55,10 +62,12 @@ namespace NzbDrone.Core.Indexers.Cardigann
IHttpClient httpClient,
IIndexerStatusService indexerStatusService,
IConfigService configService,
ICacheManager cacheManager,
Logger logger)
: base(httpClient, indexerStatusService, configService, logger)
{
_definitionService = definitionService;
_generatorCache = cacheManager.GetRollingCache<CardigannRequestGenerator>(GetType(), "CardigannGeneratorCache", TimeSpan.FromMinutes(5));
}
private IndexerDefinition GetDefinition(CardigannMetaDefinition definition)
@@ -71,6 +80,16 @@ namespace NzbDrone.Core.Indexers.Cardigann
var settings = definition.Settings ?? defaultSettings;
if (definition.Login?.Captcha != null)
{
settings.Add(new SettingsField
{
Name = "cardigannCaptcha",
Type = "cardigannCaptcha",
Label = "CAPTCHA"
});
}
return new IndexerDefinition
{
Enable = true,
@@ -93,6 +112,8 @@ namespace NzbDrone.Core.Indexers.Cardigann
SetCookieFunctions(generator);
generator.Settings = Settings;
return generator.CheckIfLoginIsNeeded(httpResponse);
}
@@ -102,6 +123,8 @@ namespace NzbDrone.Core.Indexers.Cardigann
SetCookieFunctions(generator);
generator.Settings = Settings;
await generator.DoLogin();
}
@@ -113,5 +136,21 @@ namespace NzbDrone.Core.Indexers.Cardigann
return;
}
}
public override object RequestAction(string action, IDictionary<string, string> query)
{
if (action == "checkCaptcha")
{
var generator = (CardigannRequestGenerator)GetRequestGenerator();
var result = generator.GetConfigurationForSetup(false).GetAwaiter().GetResult();
return new
{
captchaRequest = result
};
}
return null;
}
}
}