From 478c41fed6a7f34817ad6d935f0b60af71e8c6dc Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 2 Aug 2015 11:28:59 -0600 Subject: [PATCH] Fixed BitMeTV login, fixed failed login callback failing if async --- src/Jackett/Content/custom.css | 4 ++++ src/Jackett/Content/custom.js | 3 +++ src/Jackett/Content/index.html | 4 +++- src/Jackett/Indexers/AlphaRatio.cs | 2 +- src/Jackett/Indexers/BB.cs | 2 +- src/Jackett/Indexers/BakaBT.cs | 2 +- src/Jackett/Indexers/BaseIndexer.cs | 12 ------------ src/Jackett/Indexers/BeyondHD.cs | 2 +- src/Jackett/Indexers/BitHdtv.cs | 2 +- src/Jackett/Indexers/BitMeTV.cs | 6 ++++-- src/Jackett/Indexers/FrenchTorrentDb.cs | 2 +- src/Jackett/Indexers/Freshon.cs | 2 +- src/Jackett/Indexers/HDSpace.cs | 2 +- src/Jackett/Indexers/HDTorrents.cs | 2 +- src/Jackett/Indexers/IPTorrents.cs | 2 +- src/Jackett/Indexers/ImmortalSeed.cs | 2 +- src/Jackett/Indexers/MoreThanTV.cs | 2 +- src/Jackett/Indexers/Pretome.cs | 2 +- src/Jackett/Indexers/PrivateHD.cs | 2 +- src/Jackett/Indexers/SceneAccess.cs | 2 +- src/Jackett/Indexers/SceneTime.cs | 2 +- src/Jackett/Indexers/SpeedCD.cs | 2 +- src/Jackett/Indexers/TorrentBytes.cs | 2 +- src/Jackett/Indexers/TorrentDay.cs | 2 +- src/Jackett/Indexers/TorrentLeech.cs | 2 +- src/Jackett/Indexers/TorrentShack.cs | 2 +- src/Jackett/Models/ConfigurationData.cs | 12 ++++++++++++ src/Jackett/Models/IndexerConfig/BmtvConfig.cs | 5 ++++- 28 files changed, 51 insertions(+), 37 deletions(-) diff --git a/src/Jackett/Content/custom.css b/src/Jackett/Content/custom.css index 56b458fde..32415c386 100644 --- a/src/Jackett/Content/custom.css +++ b/src/Jackett/Content/custom.css @@ -114,6 +114,10 @@ height: 20px; } +[data-type=hiddendata]{ + display: none; +} + .spinner { -webkit-animation: spin 2s infinite linear; -moz-animation: spin 2s infinite linear; diff --git a/src/Jackett/Content/custom.js b/src/Jackett/Content/custom.js index 3ffc91b93..ad73e89be 100644 --- a/src/Jackett/Content/custom.js +++ b/src/Jackett/Content/custom.js @@ -251,6 +251,9 @@ function getConfigModalJson(configForm) { var type = $el.data("type"); var id = $el.data("id"); switch (type) { + case "hiddendata": + configJson[id] = $el.find(".setup-item-hiddendata input").val(); + break; case "inputstring": configJson[id] = $el.find(".setup-item-inputstring input").val(); break; diff --git a/src/Jackett/Content/index.html b/src/Jackett/Content/index.html index 3ae4f9727..e7f9e1507 100644 --- a/src/Jackett/Content/index.html +++ b/src/Jackett/Content/index.html @@ -236,7 +236,6 @@ {{else}} {{/if}} -
@@ -248,6 +247,9 @@
+
+ +
diff --git a/src/Jackett/Indexers/AlphaRatio.cs b/src/Jackett/Indexers/AlphaRatio.cs index f2a573478..dd4e7f16a 100644 --- a/src/Jackett/Indexers/AlphaRatio.cs +++ b/src/Jackett/Indexers/AlphaRatio.cs @@ -54,7 +54,7 @@ namespace Jackett.Indexers // Do the login var response = await RequestLoginAndFollowRedirect(LoginUrl, pairs, string.Empty, true, SiteLink); - ConfigureIfOK(response.Cookies, response.Content!=null && response.Content.Contains("logout.php?"), () => + await ConfigureIfOK(response.Cookies, response.Content!=null && response.Content.Contains("logout.php?"), () => { CQ dom = response.Content; dom["#loginform > table"].Remove(); diff --git a/src/Jackett/Indexers/BB.cs b/src/Jackett/Indexers/BB.cs index ad441aa59..f24d498f3 100644 --- a/src/Jackett/Indexers/BB.cs +++ b/src/Jackett/Indexers/BB.cs @@ -52,7 +52,7 @@ namespace Jackett.Indexers }; var response = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, null, SiteLink); - ConfigureIfOK(response.Cookies, response.Content != null && response.Content.Contains("logout.php"), () => + await ConfigureIfOK(response.Cookies, response.Content != null && response.Content.Contains("logout.php"), () => { CQ dom = response.Content; var messageEl = dom["#loginform"]; diff --git a/src/Jackett/Indexers/BakaBT.cs b/src/Jackett/Indexers/BakaBT.cs index ffea36e56..7575501a3 100644 --- a/src/Jackett/Indexers/BakaBT.cs +++ b/src/Jackett/Indexers/BakaBT.cs @@ -56,7 +56,7 @@ namespace Jackett.Indexers var response = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginForm.Cookies, true, null, SiteLink); var responseContent = response.Content; - ConfigureIfOK(response.Cookies, responseContent.Contains("Logout"), () => + await ConfigureIfOK(response.Cookies, responseContent.Contains("Logout"), () => { CQ dom = responseContent; var messageEl = dom[".error"].First(); diff --git a/src/Jackett/Indexers/BaseIndexer.cs b/src/Jackett/Indexers/BaseIndexer.cs index a9bf992d8..273e7eb9f 100644 --- a/src/Jackett/Indexers/BaseIndexer.cs +++ b/src/Jackett/Indexers/BaseIndexer.cs @@ -312,18 +312,6 @@ namespace Jackett.Indexers return response; } - protected void ConfigureIfOK(string cookies, bool isLoggedin, Action onError) - { - if (isLoggedin) - { - cookieHeader = cookies; - SaveCookieHeaderAndConfigure(); - } else - { - onError(); - } - } - protected async Task ConfigureIfOK(string cookies, bool isLoggedin, Func onError) { if (isLoggedin) diff --git a/src/Jackett/Indexers/BeyondHD.cs b/src/Jackett/Indexers/BeyondHD.cs index 230321618..cab8600b9 100644 --- a/src/Jackett/Indexers/BeyondHD.cs +++ b/src/Jackett/Indexers/BeyondHD.cs @@ -49,7 +49,7 @@ namespace Jackett.Indexers Cookies = cookieHeader }); - ConfigureIfOK(cookieHeader, response.Content.Contains("logout.php"), () => + await ConfigureIfOK(cookieHeader, response.Content.Contains("logout.php"), () => { CQ dom = response.Content; throw new ExceptionWithConfigData("Invalid cookie header", (ConfigurationData)config); diff --git a/src/Jackett/Indexers/BitHdtv.cs b/src/Jackett/Indexers/BitHdtv.cs index 83b51790b..1dd1e165f 100644 --- a/src/Jackett/Indexers/BitHdtv.cs +++ b/src/Jackett/Indexers/BitHdtv.cs @@ -50,7 +50,7 @@ namespace Jackett.Indexers }; var response = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, null, SiteLink); - ConfigureIfOK(response.Cookies, response.Content != null && response.Content.Contains("logout.php"), () => + await ConfigureIfOK(response.Cookies, response.Content != null && response.Content.Contains("logout.php"), () => { CQ dom = response.Content; var messageEl = dom["table.detail td.text"].Last(); diff --git a/src/Jackett/Indexers/BitMeTV.cs b/src/Jackett/Indexers/BitMeTV.cs index befc3f953..e8b7cc123 100644 --- a/src/Jackett/Indexers/BitMeTV.cs +++ b/src/Jackett/Indexers/BitMeTV.cs @@ -47,6 +47,7 @@ namespace Jackett.Indexers var captchaImage = await RequestBytesWithCookies(CaptchaUrl); var config = new BmtvConfig(); config.CaptchaImage.Value = captchaImage.Content; + config.CaptchaCookie.Value = captchaImage.Cookies; return (ConfigurationData)config; } @@ -61,8 +62,8 @@ namespace Jackett.Indexers { "secimage", config.CaptchaText.Value } }; - var response = await RequestLoginAndFollowRedirect(LoginPost, pairs, cookieHeader, true); - await ConfigureIfOK(cookieHeader, response.Content.Contains("/logout.php"), async () => + var response = await RequestLoginAndFollowRedirect(LoginPost, pairs, config.CaptchaCookie.Value, true); + await ConfigureIfOK(response.Cookies, response.Content.Contains("/logout.php"), async () => { CQ dom = response.Content; var messageEl = dom["table tr > td.embedded > h2"].Last(); @@ -70,6 +71,7 @@ namespace Jackett.Indexers var captchaImage = await RequestBytesWithCookies(CaptchaUrl); config.CaptchaImage.Value = captchaImage.Content; config.CaptchaText.Value = ""; + config.CaptchaCookie.Value = captchaImage.Cookies; throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); }); } diff --git a/src/Jackett/Indexers/FrenchTorrentDb.cs b/src/Jackett/Indexers/FrenchTorrentDb.cs index 4de553fdd..bfd7854d2 100644 --- a/src/Jackett/Indexers/FrenchTorrentDb.cs +++ b/src/Jackett/Indexers/FrenchTorrentDb.cs @@ -49,7 +49,7 @@ namespace Jackett.Indexers Cookies = cookies }); - ConfigureIfOK(cookies, response.Content.Contains("/?section=LOGOUT"), () => + await ConfigureIfOK(cookies, response.Content.Contains("/?section=LOGOUT"), () => { throw new ExceptionWithConfigData("Failed to login", (ConfigurationData)config); }); diff --git a/src/Jackett/Indexers/Freshon.cs b/src/Jackett/Indexers/Freshon.cs index e2af7ce70..687025ddd 100644 --- a/src/Jackett/Indexers/Freshon.cs +++ b/src/Jackett/Indexers/Freshon.cs @@ -56,7 +56,7 @@ namespace Jackett.Indexers var loginPage = await RequestStringWithCookies(LoginUrl, string.Empty); var response = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, null, LoginUrl); - ConfigureIfOK(response.Cookies, response.Content != null && response.Content.Contains("/logout.php"), () => + await ConfigureIfOK(response.Cookies, response.Content != null && response.Content.Contains("/logout.php"), () => { CQ dom = response.Content; var messageEl = dom[".error_text"]; diff --git a/src/Jackett/Indexers/HDSpace.cs b/src/Jackett/Indexers/HDSpace.cs index f252e4db1..d266a079b 100644 --- a/src/Jackett/Indexers/HDSpace.cs +++ b/src/Jackett/Indexers/HDSpace.cs @@ -52,7 +52,7 @@ namespace Jackett.Indexers // Send Post var response = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, null, LoginUrl); - ConfigureIfOK(response.Cookies, response.Content != null && response.Content.Contains("logout.php"), () => + await ConfigureIfOK(response.Cookies, response.Content != null && response.Content.Contains("logout.php"), () => { var errorStr = "You have {0} remaining login attempts"; var remainingAttemptSpan = new Regex(string.Format(errorStr, "(.*?)")).Match(loginPage.Content).Groups[1].ToString(); diff --git a/src/Jackett/Indexers/HDTorrents.cs b/src/Jackett/Indexers/HDTorrents.cs index 5088992c5..d8e3d5158 100644 --- a/src/Jackett/Indexers/HDTorrents.cs +++ b/src/Jackett/Indexers/HDTorrents.cs @@ -52,7 +52,7 @@ namespace Jackett.Indexers var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, null, LoginUrl); - ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("If your browser doesn't have javascript enabled"), () => + await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("If your browser doesn't have javascript enabled"), () => { var errorMessage = "Couldn't login"; throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)incomingConfig); diff --git a/src/Jackett/Indexers/IPTorrents.cs b/src/Jackett/Indexers/IPTorrents.cs index 7e405ae06..975c7a74e 100644 --- a/src/Jackett/Indexers/IPTorrents.cs +++ b/src/Jackett/Indexers/IPTorrents.cs @@ -99,7 +99,7 @@ namespace Jackett.Indexers // Redirect to ? then to /t await FollowIfRedirect(response, request.Url, null, firstCallCookies); - ConfigureIfOK(firstCallCookies, response.Content.Contains("/my.php"), () => + await ConfigureIfOK(firstCallCookies, response.Content.Contains("/my.php"), () => { CQ dom = response.Content; var messageEl = dom["body > div"].First(); diff --git a/src/Jackett/Indexers/ImmortalSeed.cs b/src/Jackett/Indexers/ImmortalSeed.cs index 6f9858ec0..7bd11569e 100644 --- a/src/Jackett/Indexers/ImmortalSeed.cs +++ b/src/Jackett/Indexers/ImmortalSeed.cs @@ -84,7 +84,7 @@ namespace Jackett.Indexers var resultPage = await RequestStringWithCookies(link.Attr("href"), response.Cookies); CQ resultDom = resultPage.Content; - ConfigureIfOK(response.Cookies, resultPage.Content.Contains("/logout.php"), () => + await ConfigureIfOK(response.Cookies, resultPage.Content.Contains("/logout.php"), () => { var tries = resultDom["#main tr:eq(1) td font"].First().Text(); var errorMessage = "Incorrect username or password! " + tries + " tries remaining."; diff --git a/src/Jackett/Indexers/MoreThanTV.cs b/src/Jackett/Indexers/MoreThanTV.cs index 3908ae1d2..8d4d74a8c 100644 --- a/src/Jackett/Indexers/MoreThanTV.cs +++ b/src/Jackett/Indexers/MoreThanTV.cs @@ -52,7 +52,7 @@ namespace Jackett.Indexers }; var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, SearchUrl, SiteLink); - ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php?"), () => + await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php?"), () => { CQ dom = result.Content; dom["#loginform > table"].Remove(); diff --git a/src/Jackett/Indexers/Pretome.cs b/src/Jackett/Indexers/Pretome.cs index be189c12f..2b4575561 100644 --- a/src/Jackett/Indexers/Pretome.cs +++ b/src/Jackett/Indexers/Pretome.cs @@ -62,7 +62,7 @@ namespace Jackett.Indexers // Get result from redirect await FollowIfRedirect(result,LoginUrl,null, loginCookies); - ConfigureIfOK(loginCookies, result.Content != null && result.Content.Contains("logout.php"), () => + await ConfigureIfOK(loginCookies, result.Content != null && result.Content.Contains("logout.php"), () => { cookieHeader = string.Empty; throw new ExceptionWithConfigData("Failed", (ConfigurationData)config); diff --git a/src/Jackett/Indexers/PrivateHD.cs b/src/Jackett/Indexers/PrivateHD.cs index 0e1ffa566..23a79a399 100644 --- a/src/Jackett/Indexers/PrivateHD.cs +++ b/src/Jackett/Indexers/PrivateHD.cs @@ -47,7 +47,7 @@ namespace Jackett.Indexers }; var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, null, LoginUrl); - ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("auth/logout"), () => + await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("auth/logout"), () => { CQ dom = result.Content; var messageEl = dom[".form-error"]; diff --git a/src/Jackett/Indexers/SceneAccess.cs b/src/Jackett/Indexers/SceneAccess.cs index 04decb32d..6add4bd21 100644 --- a/src/Jackett/Indexers/SceneAccess.cs +++ b/src/Jackett/Indexers/SceneAccess.cs @@ -50,7 +50,7 @@ namespace Jackett.Indexers var loginPage = await RequestStringWithCookies(LoginUrl, string.Empty); var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, SiteLink, LoginUrl); - ConfigureIfOK(result.Cookies + " " + loginPage.Cookies, result.Content != null && result.Content.Contains("nav_profile"), () => + await ConfigureIfOK(result.Cookies + " " + loginPage.Cookies, result.Content != null && result.Content.Contains("nav_profile"), () => { CQ dom = result.Content; var messageEl = dom["#login_box_desc"]; diff --git a/src/Jackett/Indexers/SceneTime.cs b/src/Jackett/Indexers/SceneTime.cs index 3a3df8e61..0144dfc3a 100644 --- a/src/Jackett/Indexers/SceneTime.cs +++ b/src/Jackett/Indexers/SceneTime.cs @@ -49,7 +49,7 @@ namespace Jackett.Indexers }; var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, null, LoginUrl); - ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () => + await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () => { CQ dom = result.Content; var errorMessage = dom["td.text"].Text().Trim(); diff --git a/src/Jackett/Indexers/SpeedCD.cs b/src/Jackett/Indexers/SpeedCD.cs index 7aae678c8..acaa991f1 100644 --- a/src/Jackett/Indexers/SpeedCD.cs +++ b/src/Jackett/Indexers/SpeedCD.cs @@ -52,7 +52,7 @@ namespace Jackett.Indexers }; var result = await RequestLoginAndFollowRedirect(SiteLink, pairs, null, true, null, SiteLink); - ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () => + await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () => { CQ dom = result.Content; var errorMessage = dom["h5"].First().Text().Trim(); diff --git a/src/Jackett/Indexers/TorrentBytes.cs b/src/Jackett/Indexers/TorrentBytes.cs index 7b6bc03f9..033040127 100644 --- a/src/Jackett/Indexers/TorrentBytes.cs +++ b/src/Jackett/Indexers/TorrentBytes.cs @@ -81,7 +81,7 @@ namespace Jackett.Indexers var loginPage = await RequestStringWithCookies(SiteLink, string.Empty); var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, SiteLink, SiteLink); - ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () => + await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () => { CQ dom = result.Content; var messageEl = dom["body > div"].First(); diff --git a/src/Jackett/Indexers/TorrentDay.cs b/src/Jackett/Indexers/TorrentDay.cs index 50394dff1..cbb9daefa 100644 --- a/src/Jackett/Indexers/TorrentDay.cs +++ b/src/Jackett/Indexers/TorrentDay.cs @@ -53,7 +53,7 @@ namespace Jackett.Indexers }; var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, SiteLink, LoginUrl); - ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () => + await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () => { CQ dom = result.Content; var messageEl = dom["#login"]; diff --git a/src/Jackett/Indexers/TorrentLeech.cs b/src/Jackett/Indexers/TorrentLeech.cs index f0f83fd79..306786100 100644 --- a/src/Jackett/Indexers/TorrentLeech.cs +++ b/src/Jackett/Indexers/TorrentLeech.cs @@ -50,7 +50,7 @@ namespace Jackett.Indexers }; var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true,null, LoginUrl); - ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("/user/account/logout"), () => + await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("/user/account/logout"), () => { CQ dom = result.Content; var messageEl = dom[".ui-state-error"].Last(); diff --git a/src/Jackett/Indexers/TorrentShack.cs b/src/Jackett/Indexers/TorrentShack.cs index 79e5c489f..3823ce379 100644 --- a/src/Jackett/Indexers/TorrentShack.cs +++ b/src/Jackett/Indexers/TorrentShack.cs @@ -51,7 +51,7 @@ namespace Jackett.Indexers }; var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, null, LoginUrl); - ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () => + await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () => { CQ dom = result.Content; var messageEl = dom["#loginform"]; diff --git a/src/Jackett/Models/ConfigurationData.cs b/src/Jackett/Models/ConfigurationData.cs index 08ff9b105..be1841446 100644 --- a/src/Jackett/Models/ConfigurationData.cs +++ b/src/Jackett/Models/ConfigurationData.cs @@ -43,6 +43,9 @@ namespace Jackett.Models case ItemType.InputBool: ((BoolItem)item).Value = (bool)dictionary[item.ID]; break; + case ItemType.HiddenData: + ((HiddenItem)item).Value = (string)dictionary[item.ID]; + break; } } } @@ -84,6 +87,15 @@ namespace Jackett.Models public string ID { get { return Name.Replace(" ", "").ToLower(); } } } + public class HiddenItem : StringItem + { + public HiddenItem(string value) + { + Value = value; + ItemType = ItemType.HiddenData; + } + } + public class DisplayItem : StringItem { public DisplayItem(string value) diff --git a/src/Jackett/Models/IndexerConfig/BmtvConfig.cs b/src/Jackett/Models/IndexerConfig/BmtvConfig.cs index c3c431e24..c7f1af558 100644 --- a/src/Jackett/Models/IndexerConfig/BmtvConfig.cs +++ b/src/Jackett/Models/IndexerConfig/BmtvConfig.cs @@ -16,17 +16,20 @@ namespace Jackett.Models.IndexerConfig public StringItem CaptchaText { get; private set; } + public HiddenItem CaptchaCookie { get; private set; } + public BmtvConfig() { Username = new StringItem { Name = "Username" }; Password = new StringItem { Name = "Password" }; CaptchaImage = new ImageItem { Name = "Captcha Image" }; CaptchaText = new StringItem { Name = "Captcha Text" }; + CaptchaCookie = new HiddenItem("") { Name = "Captcha Cookie" }; } public override Item[] GetItems() { - return new Item[] { Username, Password, CaptchaImage, CaptchaText }; + return new Item[] { Username, Password, CaptchaImage, CaptchaText, CaptchaCookie }; } } }