diff --git a/src/Jackett/Indexers/BitHdtv.cs b/src/Jackett/Indexers/BitHdtv.cs index 6e63fd411..48c8c79f2 100644 --- a/src/Jackett/Indexers/BitHdtv.cs +++ b/src/Jackett/Indexers/BitHdtv.cs @@ -21,13 +21,14 @@ namespace Jackett.Indexers { public class BitHdtv : BaseIndexer, IIndexer { - private string LoginUrl { get { return SiteLink + "takelogin.php"; } } + private string LoginUrl { get { return SiteLink + "login.php"; } } + private string TakeLoginUrl { get { return SiteLink + "takelogin.php"; } } private string SearchUrl { get { return SiteLink + "torrents.php?"; } } private string DownloadUrl { get { return SiteLink + "download.php?id={0}"; } } - new ConfigurationDataBasicLogin configData + new ConfigurationDataRecaptchaLogin configData { - get { return (ConfigurationDataBasicLogin)base.configData; } + get { return (ConfigurationDataRecaptchaLogin)base.configData; } set { base.configData = value; } } @@ -40,7 +41,7 @@ namespace Jackett.Indexers client: w, logger: l, p: ps, - configData: new ConfigurationDataBasicLogin()) + configData: new ConfigurationDataRecaptchaLogin()) { Encoding = Encoding.GetEncoding("iso-8859-1"); Language = "en-us"; @@ -58,16 +59,52 @@ namespace Jackett.Indexers AddCategoryMapping(11, TorznabCatType.XXX); // XXX } + public override async Task GetConfigurationForSetup() + { + var loginPage = await RequestStringWithCookies(LoginUrl, configData.CookieHeader.Value); + CQ cq = loginPage.Content; + string recaptchaSiteKey = cq.Find(".g-recaptcha").Attr("data-sitekey"); + var result = this.configData; + result.CookieHeader.Value = loginPage.Cookies; + result.Captcha.SiteKey = recaptchaSiteKey; + result.Captcha.Version = "2"; + return result; + } + public async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { { "username", configData.Username.Value }, - { "password", configData.Password.Value } + { "password", configData.Password.Value }, + { "g-recaptcha-response", configData.Captcha.Value }, }; - var response = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, null, SiteLink); + if (!string.IsNullOrWhiteSpace(configData.Captcha.Cookie)) + { + // Cookie was manually supplied + CookieHeader = configData.Captcha.Cookie; + try + { + var results = await PerformQuery(new TorznabQuery()); + if (!results.Any()) + { + throw new Exception("Your cookie did not work"); + } + + IsConfigured = true; + SaveConfig(); + return IndexerConfigurationStatus.Completed; + } + catch (Exception e) + { + IsConfigured = false; + throw new Exception("Your cookie did not work: " + e.Message); + } + } + + var response = await RequestLoginAndFollowRedirect(TakeLoginUrl, pairs, null, true, null, SiteLink); await ConfigureIfOK(response.Cookies, response.Content != null && response.Content.Contains("logout.php"), () => { CQ dom = response.Content;