Fixed BitMeTV login, fixed failed login callback failing if async

This commit is contained in:
unknown 2015-08-02 11:28:59 -06:00
parent 394519e779
commit 478c41fed6
28 changed files with 51 additions and 37 deletions

View File

@ -114,6 +114,10 @@
height: 20px;
}
[data-type=hiddendata]{
display: none;
}
.spinner {
-webkit-animation: spin 2s infinite linear;
-moz-animation: spin 2s infinite linear;

View File

@ -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;

View File

@ -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>

View File

@ -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();

View File

@ -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"];

View File

@ -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();

View File

@ -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)

View File

@ -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);

View File

@ -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();

View File

@ -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);
});
}

View File

@ -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);
});

View File

@ -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"];

View File

@ -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();

View File

@ -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);

View File

@ -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();

View File

@ -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.";

View File

@ -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();

View File

@ -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);

View File

@ -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"];

View File

@ -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"];

View File

@ -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();

View File

@ -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();

View File

@ -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();

View File

@ -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"];

View File

@ -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();

View File

@ -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"];

View File

@ -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)

View File

@ -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 };
}
}
}