mirror of
https://github.com/Jackett/Jackett
synced 2025-03-15 08:28:59 +00:00
Fixed BitMeTV login, fixed failed login callback failing if async
This commit is contained in:
parent
394519e779
commit
478c41fed6
28 changed files with 51 additions and 37 deletions
|
@ -114,6 +114,10 @@
|
|||
height: 20px;
|
||||
}
|
||||
|
||||
[data-type=hiddendata]{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.spinner {
|
||||
-webkit-animation: spin 2s infinite linear;
|
||||
-moz-animation: spin 2s infinite linear;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -236,7 +236,6 @@
|
|||
{{else}}
|
||||
<input class="form-control" type="text" value="{{{value}}}" />
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
|
||||
<div class="setup-item-inputbool">
|
||||
|
@ -248,6 +247,9 @@
|
|||
</div>
|
||||
<img class="setup-item-displayimage" src="{{{value}}}" />
|
||||
<div class="setup-item-displayinfo alert alert-info" role="alert">{{{value}}}</div>
|
||||
<div class="setup-item-hiddendata">
|
||||
<input class="form-control" type="text" value="{{{value}}}" />
|
||||
</div>
|
||||
|
||||
<span class="spinner glyphicon glyphicon-refresh"></span>
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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"];
|
||||
|
|
|
@ -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("<a href=\"logout.php\">Logout</a>"), () =>
|
||||
await ConfigureIfOK(response.Cookies, responseContent.Contains("<a href=\"logout.php\">Logout</a>"), () =>
|
||||
{
|
||||
CQ dom = responseContent;
|
||||
var messageEl = dom[".error"].First();
|
||||
|
|
|
@ -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<Task> onError)
|
||||
{
|
||||
if (isLoggedin)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
|
|
|
@ -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"];
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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.";
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"];
|
||||
|
|
|
@ -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"];
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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"];
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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"];
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue