From f3ef590d3f8fe24f1a20f01522f36ed285a0978b Mon Sep 17 00:00:00 2001 From: kaso17 Date: Fri, 23 Dec 2016 17:18:37 +0100 Subject: [PATCH] Cardigann: Add support for image captchas --- src/Jackett/Indexers/CardigannIndexer.cs | 47 ++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/Jackett/Indexers/CardigannIndexer.cs b/src/Jackett/Indexers/CardigannIndexer.cs index aaf5c7e25..672988d1e 100644 --- a/src/Jackett/Indexers/CardigannIndexer.cs +++ b/src/Jackett/Indexers/CardigannIndexer.cs @@ -66,6 +66,13 @@ namespace Jackett.Indexers public Dictionary> Modes { get; set; } } + public class captchaBlock + { + public string Type { get; set; } + public string Image { get; set; } + public string Input { get; set; } + } + public class loginBlock { public string Path { get; set; } @@ -74,6 +81,7 @@ namespace Jackett.Indexers public Dictionary Inputs { get; set; } public List Error { get; set; } public pageTestBlock Test { get; set; } + public captchaBlock Captcha { get; set; } } public class errorBlock @@ -467,6 +475,17 @@ namespace Jackett.Indexers pairs["submitme"] = "X"; } + if (Login.Captcha != null) + { + var Captcha = Login.Captcha; + if (Captcha.Type == "image") + { + var CaptchaText = (StringItem)configData.GetDynamic("CaptchaText"); + if (CaptchaText != null) + pairs[Captcha.Input] = CaptchaText.Value; + } + } + // clear landingResults/Document, otherwise we might use an old version for a new relogin (if GetConfigurationForSetup() wasn't called before) landingResult = null; landingResultDocument = null; @@ -590,6 +609,34 @@ namespace Jackett.Indexers configData.AddDynamic("Captcha", CaptchaItem); } + if (Login.Captcha != null) + { + var Captcha = Login.Captcha; + if (Captcha.Type == "image") + { + var captchaElement = landingResultDocument.QuerySelector(Captcha.Image); + if (captchaElement != null) { + var CaptchaUrl = resolvePath(captchaElement.GetAttribute("src")); + var captchaImageData = await RequestBytesWithCookies(CaptchaUrl.ToString(), landingResult.Cookies); + var CaptchaImage = new ImageItem { Name = "Captcha Image" }; + var CaptchaText = new StringItem { Name = "Captcha Text" }; + logger.Error("captchaImageData Cookies: " + captchaImageData.Cookies); + CaptchaImage.Value = captchaImageData.Content; + + configData.AddDynamic("CaptchaImage", CaptchaImage); + configData.AddDynamic("CaptchaText", CaptchaText); + } + else + { + logger.Debug(string.Format("CardigannIndexer ({0}): No captcha image found", ID)); + } + } + else + { + throw new NotImplementedException(string.Format("Captcha type \"{0}\" is not implemented", Captcha.Type)); + } + } + return configData; }