mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-17 17:34:09 +02:00
cardigann: follow login redirect if domain doesn't change (#14544)
This commit is contained in:
@@ -42,13 +42,12 @@ caps:
|
|||||||
book-search: [q]
|
book-search: [q]
|
||||||
|
|
||||||
settings:
|
settings:
|
||||||
- name: cookie
|
- name: username
|
||||||
type: text
|
type: text
|
||||||
label: Cookie
|
label: Username
|
||||||
- name: info
|
- name: password
|
||||||
type: info
|
type: password
|
||||||
label: How to get the Cookie
|
label: Password
|
||||||
default: "<ol><li>Login to this tracker with your browser</li><li>Open the <b>DevTools</b> panel by pressing <b>F12</b></li><li>Select the <b>Network</b> tab</li><li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)</li><li>Refresh the page by pressing <b>F5</b></li><li>Click on the first row entry</li><li>Select the <b>Headers</b> tab on the Right panel</li><li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section</li><li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</li></ol>"
|
|
||||||
- name: freeleech
|
- name: freeleech
|
||||||
type: checkbox
|
type: checkbox
|
||||||
label: Search freeleech only
|
label: Search freeleech only
|
||||||
@@ -75,12 +74,25 @@ settings:
|
|||||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||||
|
|
||||||
login:
|
login:
|
||||||
method: cookie
|
path: login.php
|
||||||
|
method: form
|
||||||
|
form: form[action="takelogin.php"]
|
||||||
inputs:
|
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:
|
test:
|
||||||
path: my.php
|
path: index.php
|
||||||
selector: a[href="logout.php"]
|
selector: a[href="/my.php"]
|
||||||
|
|
||||||
download:
|
download:
|
||||||
selectors:
|
selectors:
|
||||||
|
@@ -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 < maxRedirects; i++)
|
||||||
for (var i = 0; i < 5; i++)
|
|
||||||
{
|
{
|
||||||
if (!response.IsRedirect)
|
if (!response.IsRedirect)
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
var redirectingTo = new Uri(response.RedirectingTo);
|
var redirectingTo = new Uri(response.RedirectingTo);
|
||||||
if (redirectingTo.Scheme == "magnet")
|
if (redirectingTo.Scheme == "magnet")
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
await DoFollowIfRedirect(response, referrer, overrideRedirectUrl, overrideCookies, accumulateCookies);
|
await DoFollowIfRedirect(response, referrer, overrideRedirectUrl, overrideCookies, accumulateCookies);
|
||||||
|
|
||||||
if (accumulateCookies)
|
if (accumulateCookies)
|
||||||
{
|
{
|
||||||
CookieHeader = ResolveCookies((CookieHeader != null && CookieHeader != "" ? CookieHeader + " " : "") + (overrideCookies != null && overrideCookies != "" ? overrideCookies + " " : "") + response.Cookies);
|
CookieHeader = ResolveCookies((CookieHeader != null && CookieHeader != "" ? CookieHeader + " " : "") + (overrideCookies != null && overrideCookies != "" ? overrideCookies + " " : "") + response.Cookies);
|
||||||
overrideCookies = response.Cookies = CookieHeader;
|
overrideCookies = response.Cookies = CookieHeader;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (overrideCookies != null && response.Cookies == null)
|
if (overrideCookies != null && response.Cookies == null)
|
||||||
{
|
{
|
||||||
response.Cookies = overrideCookies;
|
response.Cookies = overrideCookies;
|
||||||
|
@@ -849,16 +849,23 @@ namespace Jackett.Common.Indexers
|
|||||||
var headers = ParseCustomHeaders(Definition.Login?.Headers ?? Definition.Search?.Headers, GetBaseTemplateVariables());
|
var headers = ParseCustomHeaders(Definition.Login?.Headers ?? Definition.Search?.Headers, GetBaseTemplateVariables());
|
||||||
var testResult = await RequestWithCookiesAsync(LoginTestUrl, headers: headers);
|
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)
|
if (testResult.IsRedirect)
|
||||||
{
|
{
|
||||||
var errormessage = $"Login Failed, got redirected to: {testResult.RedirectingTo}";
|
var errormessage = $"Login Failed, got redirected to: {testResult.RedirectingTo}";
|
||||||
var DomainHint = GetRedirectDomainHint(testResult);
|
var domainHint = GetRedirectDomainHint(testResult);
|
||||||
if (DomainHint != null)
|
|
||||||
|
if (domainHint != null)
|
||||||
{
|
{
|
||||||
errormessage += " Try changing the indexer URL to " + DomainHint + ".";
|
errormessage += " Try changing the indexer URL to " + domainHint + ".";
|
||||||
if (Definition.Followredirect)
|
if (Definition.Followredirect)
|
||||||
{
|
{
|
||||||
configData.SiteLink.Value = DomainHint;
|
configData.SiteLink.Value = domainHint;
|
||||||
SiteLink = configData.SiteLink.Value;
|
SiteLink = configData.SiteLink.Value;
|
||||||
SaveConfig();
|
SaveConfig();
|
||||||
errormessage += " Updated site link, please try again.";
|
errormessage += " Updated site link, please try again.";
|
||||||
@@ -1925,12 +1932,15 @@ namespace Jackett.Common.Indexers
|
|||||||
protected async Task<WebResult> HandleRedirectableRequestAsync(string url, Dictionary<string, string> headers = null, int maxRedirects = 5)
|
protected async Task<WebResult> HandleRedirectableRequestAsync(string url, Dictionary<string, string> headers = null, int maxRedirects = 5)
|
||||||
{
|
{
|
||||||
var response = await RequestWithCookiesAsync(url, headers: headers);
|
var response = await RequestWithCookiesAsync(url, headers: headers);
|
||||||
|
|
||||||
for (var i = 0; i < maxRedirects; i++)
|
for (var i = 0; i < maxRedirects; i++)
|
||||||
{
|
{
|
||||||
if (response.IsRedirect)
|
if (!response.IsRedirect)
|
||||||
response = await RequestWithCookiesAsync(response.RedirectingTo, headers: headers);
|
{
|
||||||
else
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
response = await RequestWithCookiesAsync(response.RedirectingTo, headers: headers);
|
||||||
}
|
}
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user