mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-09-17 17:14:18 +02:00
New: (FlareSolverr) DDOS Guard Support
(based on Flaresolverr b62c203f96222602964a291b845e4d16c1a0d43a)
This commit is contained in:
@@ -128,6 +128,30 @@ namespace NzbDrone.Common.Http
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string ContentEncoding
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return GetSingleValue("Content-Encoding");
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetSingleValue("Content-Encoding", value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Vary
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return GetSingleValue("Vary");
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetSingleValue("Vary", value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public string UserAgent
|
public string UserAgent
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
@@ -18,7 +18,7 @@ namespace NzbDrone.Core.IndexerProxies.FlareSolverr
|
|||||||
{
|
{
|
||||||
public class FlareSolverr : HttpIndexerProxyBase<FlareSolverrSettings>
|
public class FlareSolverr : HttpIndexerProxyBase<FlareSolverrSettings>
|
||||||
{
|
{
|
||||||
private static readonly HashSet<string> CloudflareServerNames = new HashSet<string> { "cloudflare", "cloudflare-nginx" };
|
private static readonly HashSet<string> CloudflareServerNames = new HashSet<string> { "cloudflare", "cloudflare-nginx", "ddos-guard" };
|
||||||
private readonly ICached<string> _cache;
|
private readonly ICached<string> _cache;
|
||||||
|
|
||||||
public FlareSolverr(IProwlarrCloudRequestBuilder cloudRequestBuilder, IHttpClient httpClient, Logger logger, ILocalizationService localizationService, ICacheManager cacheManager)
|
public FlareSolverr(IProwlarrCloudRequestBuilder cloudRequestBuilder, IHttpClient httpClient, Logger logger, ILocalizationService localizationService, ICacheManager cacheManager)
|
||||||
@@ -70,7 +70,7 @@ namespace NzbDrone.Core.IndexerProxies.FlareSolverr
|
|||||||
|
|
||||||
InjectCookies(newRequest, result);
|
InjectCookies(newRequest, result);
|
||||||
|
|
||||||
//Request again with User-Agent and Cookies from Flaresolvrr
|
//Request again with User-Agent and Cookies from Flaresolverr
|
||||||
var finalResponse = _httpClient.Execute(newRequest);
|
var finalResponse = _httpClient.Execute(newRequest);
|
||||||
|
|
||||||
return finalResponse;
|
return finalResponse;
|
||||||
@@ -78,13 +78,24 @@ namespace NzbDrone.Core.IndexerProxies.FlareSolverr
|
|||||||
|
|
||||||
private static bool IsCloudflareProtected(HttpResponse response)
|
private static bool IsCloudflareProtected(HttpResponse response)
|
||||||
{
|
{
|
||||||
// check status code
|
if (!response.Headers.Any(i => i.Key != null && i.Key.ToLower() == "server" && CloudflareServerNames.Contains(i.Value.ToLower())))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// detect CloudFlare and DDoS-GUARD
|
||||||
if (response.StatusCode.Equals(HttpStatusCode.ServiceUnavailable) ||
|
if (response.StatusCode.Equals(HttpStatusCode.ServiceUnavailable) ||
|
||||||
response.StatusCode.Equals(HttpStatusCode.Forbidden))
|
response.StatusCode.Equals(HttpStatusCode.Forbidden))
|
||||||
{
|
{
|
||||||
// check response headers
|
return true; // Defected CloudFlare and DDoS-GUARD
|
||||||
return response.Headers.Any(i =>
|
}
|
||||||
i.Key != null && i.Key.ToLower() == "server" && CloudflareServerNames.Contains(i.Value.ToLower()));
|
|
||||||
|
// detect Custom CloudFlare for EbookParadijs, Film-Paleis, MuziekFabriek and Puur-Hollands
|
||||||
|
if (response.Headers.Vary.ToString() == "Accept-Encoding,User-Agent" &&
|
||||||
|
response.Headers.ContentEncoding.ToString() == "" &&
|
||||||
|
response.Content.ToLower().Contains("ddos"))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
Reference in New Issue
Block a user