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: "
- Login to this tracker with your browser
- Open the DevTools panel by pressing F12
- Select the Network tab
- Click on the Doc button (Chrome Browser) or HTML button (FireFox)
- Refresh the page by pressing F5
- Click on the first row entry
- Select the Headers tab on the Right panel
- Find 'cookie:' in the Request Headers section
- 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;
}