From 6ccbfd6443cb4d2323251160243336083a795bed Mon Sep 17 00:00:00 2001 From: flightlevel Date: Wed, 17 Feb 2016 23:30:04 +1100 Subject: [PATCH] TehConnection: Attempt to fix cookie expiration TehConnection: Attempt to fix cookie expiration --- src/Jackett/Indexers/TehConnection.cs | 44 ++++++++++++++----- .../ConfigurationDataBasicLoginWithFilter.cs | 2 + 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/Jackett/Indexers/TehConnection.cs b/src/Jackett/Indexers/TehConnection.cs index 1f9a45908..e62ab5f19 100644 --- a/src/Jackett/Indexers/TehConnection.cs +++ b/src/Jackett/Indexers/TehConnection.cs @@ -1,5 +1,4 @@ using CsQuery; -using Jackett.Indexers; using Jackett.Models; using Jackett.Services; using Jackett.Utils; @@ -41,27 +40,35 @@ namespace Jackett.Indexers Separate options with a space if using more than one option.
Filter options available:
QualityEncodeOnly
FreeLeechOnly")) { - AddCategoryMapping(7, TorznabCatType.Movies); - AddCategoryMapping(7, TorznabCatType.MoviesForeign); - AddCategoryMapping(7, TorznabCatType.MoviesOther); - AddCategoryMapping(7, TorznabCatType.MoviesSD); - AddCategoryMapping(7, TorznabCatType.MoviesHD); - AddCategoryMapping(7, TorznabCatType.Movies3D); - AddCategoryMapping(7, TorznabCatType.MoviesBluRay); - AddCategoryMapping(7, TorznabCatType.MoviesDVD); - AddCategoryMapping(7, TorznabCatType.MoviesWEBDL); + AddCategoryMapping(1, TorznabCatType.Movies); + AddCategoryMapping(1, TorznabCatType.MoviesForeign); + AddCategoryMapping(1, TorznabCatType.MoviesOther); + AddCategoryMapping(1, TorznabCatType.MoviesSD); + AddCategoryMapping(1, TorznabCatType.MoviesHD); + AddCategoryMapping(1, TorznabCatType.Movies3D); + AddCategoryMapping(1, TorznabCatType.MoviesBluRay); + AddCategoryMapping(1, TorznabCatType.MoviesDVD); + AddCategoryMapping(1, TorznabCatType.MoviesWEBDL); } public async Task ApplyConfiguration(JToken configJson) { configData.LoadValuesFromJson(configJson); + + await DoLogin(); + + return IndexerConfigurationStatus.RequiresTesting; + } + + private async Task DoLogin() + { var pairs = new Dictionary { { "username", configData.Username.Value }, { "password", configData.Password.Value }, { "keeplogged", "1" }, { "login", "Log In!" } }; - + var response = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, indexUrl, SiteLink); await ConfigureIfOK(response.Cookies, response.Content != null && response.Content.Contains("/logout.php"), () => @@ -70,11 +77,24 @@ namespace Jackett.Indexers string errorMessage = "Unable to login to TehConnection"; throw new ExceptionWithConfigData(errorMessage, configData); }); - return IndexerConfigurationStatus.RequiresTesting; } public async Task> PerformQuery(TorznabQuery query) { + var loggedInCheck = await RequestStringWithCookies(SearchUrl); + if (!loggedInCheck.Content.Contains("/logout.php")) + { + //Cookie appears to expire after a period of time or logging in to the site via browser + DateTime lastLoggedInCheck; + DateTime.TryParse(configData.LastLoggedInCheck.Value, out lastLoggedInCheck); + if (lastLoggedInCheck < DateTime.Now.AddMinutes(-15)) + { + await DoLogin(); + configData.LastLoggedInCheck.Value = DateTime.Now.ToString("o"); + SaveConfig(); + } + } + var releases = new List(); bool configFreeLeechOnly = configData.FilterString.Value.ToLowerInvariant().Contains("freeleechonly"); bool configQualityEncodeOnly = configData.FilterString.Value.ToLowerInvariant().Contains("qualityencodeonly"); diff --git a/src/Jackett/Models/IndexerConfig/ConfigurationDataBasicLoginWithFilter.cs b/src/Jackett/Models/IndexerConfig/ConfigurationDataBasicLoginWithFilter.cs index 10a029db2..8409121a9 100644 --- a/src/Jackett/Models/IndexerConfig/ConfigurationDataBasicLoginWithFilter.cs +++ b/src/Jackett/Models/IndexerConfig/ConfigurationDataBasicLoginWithFilter.cs @@ -11,6 +11,7 @@ namespace Jackett.Models.IndexerConfig { public StringItem Username { get; private set; } public StringItem Password { get; private set; } + public HiddenItem LastLoggedInCheck { get; private set; } public DisplayItem FilterExample { get; private set; } public StringItem FilterString { get; private set; } @@ -18,6 +19,7 @@ namespace Jackett.Models.IndexerConfig { Username = new StringItem { Name = "Username" }; Password = new StringItem { Name = "Password" }; + LastLoggedInCheck = new HiddenItem { Name = "LastLoggedInCheck" }; FilterExample = new DisplayItem(FilterInstructions) { Name = ""