diff --git a/src/Jackett.Common/Definitions/centraltorrent.yml b/src/Jackett.Common/Definitions/centraltorrent.yml index c9630f31b..ae60de49c 100644 --- a/src/Jackett.Common/Definitions/centraltorrent.yml +++ b/src/Jackett.Common/Definitions/centraltorrent.yml @@ -42,13 +42,12 @@ caps: book-search: [q] settings: - - name: cookie + - name: username type: text - label: Cookie - - name: info - type: info - label: How to get the Cookie - default: "
  1. Login to this tracker with your browser
  2. Open the DevTools panel by pressing F12
  3. Select the Network tab
  4. Click on the Doc button (Chrome Browser) or HTML button (FireFox)
  5. Refresh the page by pressing F5
  6. Click on the first row entry
  7. Select the Headers tab on the Right panel
  8. Find 'cookie:' in the Request Headers section
  9. Select and Copy the whole cookie string (everything after 'cookie: ') and Paste here.
" + label: Username + - name: password + type: password + label: Password - name: freeleech type: checkbox label: Search freeleech only @@ -75,12 +74,25 @@ settings: default: For best results, change the Torrents per page: setting to 100 on your account profile. login: - method: cookie + path: login.php + method: form + form: form[action="takelogin.php"] inputs: - cookie: "{{ .Config.cookie }}" + username: "{{ .Config.username }}" + password: "{{ .Config.password }}" + captcha: + type: image + selector: img.cimage + input: captcha + error: + - selector: td.embedded:has(h2:contains("failed")) + - selector: td.embedded:has(h2:contains("Error")) + - selector: form[action="takelogin.php"] + message: + text: "Login page detected at {{ .Config.sitelink }}." test: - path: my.php - selector: a[href="logout.php"] + path: index.php + selector: a[href="/my.php"] download: selectors: diff --git a/src/Jackett.Common/Indexers/BaseIndexer.cs b/src/Jackett.Common/Indexers/BaseIndexer.cs index f5afc3613..aed082602 100644 --- a/src/Jackett.Common/Indexers/BaseIndexer.cs +++ b/src/Jackett.Common/Indexers/BaseIndexer.cs @@ -580,24 +580,29 @@ namespace Jackett.Common.Indexers } } - protected async Task FollowIfRedirect(WebResult response, string referrer = null, string overrideRedirectUrl = null, string overrideCookies = null, bool accumulateCookies = false) + protected async Task FollowIfRedirect(WebResult response, string referrer = null, string overrideRedirectUrl = null, string overrideCookies = null, bool accumulateCookies = false, int maxRedirects = 5) { - // Follow up to 5 redirects - for (var i = 0; i < 5; i++) + for (var i = 0; i < maxRedirects; i++) { if (!response.IsRedirect) + { break; + } var redirectingTo = new Uri(response.RedirectingTo); if (redirectingTo.Scheme == "magnet") + { break; + } await DoFollowIfRedirect(response, referrer, overrideRedirectUrl, overrideCookies, accumulateCookies); + if (accumulateCookies) { CookieHeader = ResolveCookies((CookieHeader != null && CookieHeader != "" ? CookieHeader + " " : "") + (overrideCookies != null && overrideCookies != "" ? overrideCookies + " " : "") + response.Cookies); overrideCookies = response.Cookies = CookieHeader; } + if (overrideCookies != null && response.Cookies == null) { response.Cookies = overrideCookies; diff --git a/src/Jackett.Common/Indexers/CardigannIndexer.cs b/src/Jackett.Common/Indexers/CardigannIndexer.cs index 32abae203..733f3f0a2 100644 --- a/src/Jackett.Common/Indexers/CardigannIndexer.cs +++ b/src/Jackett.Common/Indexers/CardigannIndexer.cs @@ -849,16 +849,23 @@ namespace Jackett.Common.Indexers var headers = ParseCustomHeaders(Definition.Login?.Headers ?? Definition.Search?.Headers, GetBaseTemplateVariables()); var testResult = await RequestWithCookiesAsync(LoginTestUrl, headers: headers); + // Follow the redirect on login if the domain doesn't change + if (testResult.IsRedirect && GetRedirectDomainHint(testResult) == null) + { + await FollowIfRedirect(testResult, LoginTestUrl, overrideCookies: testResult.Cookies, accumulateCookies: true, maxRedirects: 1); + } + if (testResult.IsRedirect) { var errormessage = $"Login Failed, got redirected to: {testResult.RedirectingTo}"; - var DomainHint = GetRedirectDomainHint(testResult); - if (DomainHint != null) + var domainHint = GetRedirectDomainHint(testResult); + + if (domainHint != null) { - errormessage += " Try changing the indexer URL to " + DomainHint + "."; + errormessage += " Try changing the indexer URL to " + domainHint + "."; if (Definition.Followredirect) { - configData.SiteLink.Value = DomainHint; + configData.SiteLink.Value = domainHint; SiteLink = configData.SiteLink.Value; SaveConfig(); errormessage += " Updated site link, please try again."; @@ -1925,12 +1932,15 @@ namespace Jackett.Common.Indexers protected async Task HandleRedirectableRequestAsync(string url, Dictionary headers = null, int maxRedirects = 5) { var response = await RequestWithCookiesAsync(url, headers: headers); + for (var i = 0; i < maxRedirects; i++) { - if (response.IsRedirect) - response = await RequestWithCookiesAsync(response.RedirectingTo, headers: headers); - else + if (!response.IsRedirect) + { break; + } + + response = await RequestWithCookiesAsync(response.RedirectingTo, headers: headers); } return response; }