Allow CloudFlareUtilities loading to fail (#547)

This commit is contained in:
kaso17
2016-10-12 21:32:41 +02:00
committed by JigSaw
parent c33315f59c
commit 5384f85b5a

View File

@@ -18,18 +18,32 @@ namespace Jackett.Utils.Clients
public class UnixLibCurlWebClient : IWebClient public class UnixLibCurlWebClient : IWebClient
{ {
private Logger logger; private Logger logger;
private Assembly CloudFlareUtilities; private static Boolean CloudFlareUtilitiesInit = false;
private MethodInfo ChallengeSolverSolveMethod; private static Assembly CloudFlareUtilities = null;
private MethodInfo ChallengeSolutionGetClearanceQueryMethod; private static MethodInfo ChallengeSolverSolveMethod = null;
private static MethodInfo ChallengeSolutionGetClearanceQueryMethod = null;
public UnixLibCurlWebClient(Logger l) public UnixLibCurlWebClient(Logger l)
{ {
logger = l; logger = l;
// use reflections to get the internal CloudFlareUtilities methods we need // try loading CloudFlareUtilities
CloudFlareUtilities = Assembly.LoadFile(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "/CloudFlareUtilities.dll"); if (!CloudFlareUtilitiesInit)
ChallengeSolverSolveMethod = CloudFlareUtilities.GetType("CloudFlareUtilities.ChallengeSolver").GetMethod("Solve"); {
ChallengeSolutionGetClearanceQueryMethod = CloudFlareUtilities.GetType("CloudFlareUtilities.ChallengeSolution").GetMethod("get_ClearanceQuery"); try
{
// use reflections to get the internal CloudFlareUtilities methods we need
CloudFlareUtilities = Assembly.LoadFile(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "/CloudFlareUtilities.dll");
ChallengeSolverSolveMethod = CloudFlareUtilities.GetType("CloudFlareUtilities.ChallengeSolver").GetMethod("Solve");
ChallengeSolutionGetClearanceQueryMethod = CloudFlareUtilities.GetType("CloudFlareUtilities.ChallengeSolution").GetMethod("get_ClearanceQuery");
}
catch (Exception e)
{
Engine.Logger.Error(e.ToString());
Engine.Logger.Error(string.Format("UnixLibCurlWebClient: Error while loading CloudFlareUtilities.dll from {0}", Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)));
}
}
CloudFlareUtilitiesInit = true;
} }
public async Task<WebClientByteResult> GetBytes(WebRequest request) public async Task<WebClientByteResult> GetBytes(WebRequest request)
@@ -93,6 +107,11 @@ namespace Jackett.Utils.Clients
if (result.Status == HttpStatusCode.ServiceUnavailable && ((request.Cookies != null && request.Cookies.Contains("__cfduid")) || result.Cookies.Contains("__cfduid"))) if (result.Status == HttpStatusCode.ServiceUnavailable && ((request.Cookies != null && request.Cookies.Contains("__cfduid")) || result.Cookies.Contains("__cfduid")))
{ {
logger.Info("UnixLibCurlWebClient: Received a new CloudFlare challenge"); logger.Info("UnixLibCurlWebClient: Received a new CloudFlare challenge");
if(ChallengeSolutionGetClearanceQueryMethod == null)
{
logger.Error("UnixLibCurlWebClient: CloudFlareUtilities not available, can't solve challenge");
return result;
}
// solve the challenge // solve the challenge
string pageContent = Encoding.UTF8.GetString(result.Content); string pageContent = Encoding.UTF8.GetString(result.Content);