private void SendNotification(string title, string message, HttpRequestBuilder requestBuilder, PushBulletSettings settings) { try { requestBuilder.AddFormParameter("type", "note") .AddFormParameter("title", title) .AddFormParameter("body", message); if (settings.SenderId.IsNotNullOrWhiteSpace()) { requestBuilder.AddFormParameter("source_device_iden", settings.SenderId); } var request = requestBuilder.Build(); request.Credentials = new BasicNetworkCredential(settings.ApiKey, string.Empty); _httpClient.Execute(request); } catch (HttpException ex) { if (ex.Response.StatusCode == HttpStatusCode.Unauthorized) { _logger.Error(ex, "Access token is invalid"); throw; } throw new PushBulletException("Unable to send text message: {0}", ex, ex.Message); } }
public void SendNotification(string title, string message, PushoverSettings settings) { var requestBuilder = new HttpRequestBuilder(URL).Post(); requestBuilder.AddFormParameter("token", settings.ApiKey) .AddFormParameter("user", settings.UserKey) .AddFormParameter("device", string.Join(",", settings.Devices)) .AddFormParameter("title", title) .AddFormParameter("message", message) .AddFormParameter("priority", settings.Priority); if ((PushoverPriority)settings.Priority == PushoverPriority.Emergency) { requestBuilder.AddFormParameter("retry", settings.Retry); requestBuilder.AddFormParameter("expire", settings.Expire); } if (!settings.Sound.IsNullOrWhiteSpace()) { requestBuilder.AddFormParameter("sound", settings.Sound); } var request = requestBuilder.Build(); _httpClient.Post(request); }
private void ProcessNotification(StringDictionary message, DiscordNotifierSettings settings) { try { var requestBuilder = new HttpRequestBuilder(URL).Post(); requestBuilder.AddFormParameter("api", settings.APIKey).Build(); foreach (string key in message.Keys) { requestBuilder.AddFormParameter(key, message[key]); } var request = requestBuilder.Build(); _httpClient.Post(request); } catch (HttpException ex) { if (ex.Response.StatusCode == HttpStatusCode.BadRequest) { _logger.Error(ex, "API key is invalid"); throw; } throw new DiscordNotifierException("Unable to send notification", ex); } }
private void AddTorrentDownloadFormParameters(HttpRequestBuilder request, QBittorrentSettings settings) { if (settings.MovieCategory.IsNotNullOrWhiteSpace()) { request.AddFormParameter("category", settings.MovieCategory); } // Note: ForceStart is handled by separate api call if ((QBittorrentState)settings.InitialState == QBittorrentState.Start) { request.AddFormParameter("paused", false); } else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause) { request.AddFormParameter("paused", true); } if (settings.SequentialOrder) { request.AddFormParameter("sequentialDownload", true); } if (settings.FirstAndLast) { request.AddFormParameter("firstLastPiecePrio", true); } }
private HttpRequestBuilder BuildRequest(DownloadStationSettings settings, DiskStationApiInfo apiInfo, string methodName, int apiVersion, HttpMethod httpVerb = null) { httpVerb ??= HttpMethod.Get; var requestBuilder = new HttpRequestBuilder(settings.UseSsl, settings.Host, settings.Port).Resource($"webapi/{apiInfo.Path}"); requestBuilder.Method = httpVerb; requestBuilder.LogResponseContent = true; requestBuilder.SuppressHttpError = true; requestBuilder.AllowAutoRedirect = false; requestBuilder.Headers.ContentType = "application/json"; if (apiVersion < apiInfo.MinVersion || apiVersion > apiInfo.MaxVersion) { throw new ArgumentOutOfRangeException(nameof(apiVersion)); } if (httpVerb == HttpMethod.Post) { if (apiInfo.NeedsAuthentication) { if (_apiType == DiskStationApi.DownloadStation2Task) { requestBuilder.AddQueryParam("_sid", _sessionCache.Get(GenerateSessionCacheKey(settings), () => AuthenticateClient(settings), TimeSpan.FromHours(6))); } else { requestBuilder.AddFormParameter("_sid", _sessionCache.Get(GenerateSessionCacheKey(settings), () => AuthenticateClient(settings), TimeSpan.FromHours(6))); } } requestBuilder.AddFormParameter("api", apiInfo.Name); requestBuilder.AddFormParameter("version", apiVersion); requestBuilder.AddFormParameter("method", methodName); } else { if (apiInfo.NeedsAuthentication) { requestBuilder.AddQueryParam("_sid", _sessionCache.Get(GenerateSessionCacheKey(settings), () => AuthenticateClient(settings), TimeSpan.FromHours(6))); } requestBuilder.AddQueryParam("api", apiInfo.Name); requestBuilder.AddQueryParam("version", apiVersion); requestBuilder.AddQueryParam("method", methodName); } return(requestBuilder); }
private void AddTorrentSeedingFormParameters(HttpRequestBuilder request, TorrentSeedConfiguration seedConfiguration, bool always = false) { var ratioLimit = seedConfiguration.Ratio.HasValue ? seedConfiguration.Ratio : -2; var seedingTimeLimit = seedConfiguration.SeedTime.HasValue ? (long)seedConfiguration.SeedTime.Value.TotalMinutes : -2; if (ratioLimit != -2 || always) { request.AddFormParameter("ratioLimit", ratioLimit); } if (seedingTimeLimit != -2 || always) { request.AddFormParameter("seedingTimeLimit", seedingTimeLimit); } }
private void ProcessNotification(string title, string message, BoxcarSettings settings) { try { var requestBuilder = new HttpRequestBuilder(URL).Post(); var request = requestBuilder.AddFormParameter("user_credentials", settings.Token) .AddFormParameter("notification[title]", title) .AddFormParameter("notification[long_message]", message) .AddFormParameter("notification[source_name]", BuildInfo.AppName) .AddFormParameter("notification[icon_url]", "https://raw.githubusercontent.com/Sonarr/Sonarr/phantom-develop/Logo/64.png") .Build(); _httpClient.Post(request); } catch (HttpException ex) { if (ex.Response.StatusCode == HttpStatusCode.Unauthorized) { _logger.Error(ex, "Access Token is invalid"); throw; } throw new BoxcarException("Unable to send text message: " + ex.Message, ex); } }
protected override async Task DoLogin() { var requestBuilder = new HttpRequestBuilder(LoginUrl) { LogResponseContent = true }; requestBuilder.Method = HttpMethod.Post; requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); var cookies = Cookies; Cookies = null; var authLoginRequest = requestBuilder .AddFormParameter("username", Settings.Username) .AddFormParameter("password", Settings.Password) .SetHeader("Content-Type", "multipart/form-data") .Build(); var response = await ExecuteAuth(authLoginRequest); if (!response.Content.Contains("You have successfully logged in")) { throw new IndexerAuthException("ImmortalSeed Auth Failed"); } cookies = response.GetCookies(); UpdateCookies(cookies, DateTime.Now + TimeSpan.FromDays(30)); _logger.Debug("ImmortalSeed authentication succeeded."); }
protected override async Task DoLogin() { UpdateCookies(null, null); var requestBuilder = new HttpRequestBuilder(LoginUrl) { LogResponseContent = true, AllowAutoRedirect = true }; var loginPage = await ExecuteAuth(new HttpRequest(Settings.BaseUrl + "login.php")); requestBuilder.Method = HttpMethod.Post; requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); requestBuilder.SetCookies(loginPage.GetCookies()); var authLoginRequest = requestBuilder .AddFormParameter("username", Settings.Username) .AddFormParameter("password", Settings.Password) .SetHeader("Content-Type", "multipart/form-data") .Build(); var response = await ExecuteAuth(authLoginRequest); if (response.Content != null && response.Content.Contains("/logout.php")) { UpdateCookies(response.GetCookies(), DateTime.Now + TimeSpan.FromDays(30)); _logger.Debug("RevolutionTT authentication succeeded"); } else { throw new IndexerAuthException("RevolutionTT authentication failed"); } }
protected override async Task DoLogin() { var requestBuilder = new HttpRequestBuilder(LoginUrl) { LogResponseContent = true }; requestBuilder.Method = HttpMethod.Post; requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); var cookies = Cookies; Cookies = null; var authLoginRequest = requestBuilder .AddFormParameter("username", Settings.Username) .AddFormParameter("password", Settings.Password) .SetHeader("Content-Type", "multipart/form-data") .Build(); var response = await ExecuteAuth(authLoginRequest); cookies = response.GetCookies(); UpdateCookies(cookies, DateTime.Now + TimeSpan.FromDays(30)); _logger.Debug("TorrentLeech authentication succeeded."); }
protected override async Task DoLogin() { UpdateCookies(null, null); var requestBuilder = new HttpRequestBuilder(LoginUrl) { LogResponseContent = true, AllowAutoRedirect = true }; var loginPage = await ExecuteAuth(new HttpRequest(LoginUrl)); requestBuilder.Method = HttpMethod.Post; requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); requestBuilder.SetCookies(loginPage.GetCookies()); requestBuilder.AddFormParameter("username", Settings.Username); requestBuilder.AddFormParameter("password", Settings.Password); requestBuilder.AddFormParameter("returnto", "/index.php"); var parser = new HtmlParser(); var dom = parser.ParseDocument(loginPage.Content); var loginKey = dom.QuerySelector("input[name=\"loginKey\"]"); if (loginKey != null) { requestBuilder.AddFormParameter("loginKey", loginKey.GetAttribute("value")); } var authLoginRequest = requestBuilder .SetHeader("Content-Type", "multipart/form-data") .Build(); var response = await ExecuteAuth(authLoginRequest); if (response.Content != null && response.Content.Contains("<a href=\"logout.php\">Logout</a>")) { UpdateCookies(response.GetCookies(), DateTime.Now + TimeSpan.FromDays(30)); _logger.Debug("BakaBT authentication succeeded"); } else { throw new IndexerAuthException("BakaBT authentication failed"); } }
protected override async Task DoLogin() { var requestBuilder = new HttpRequestBuilder(Settings.BaseUrl) { LogResponseContent = true, AllowAutoRedirect = true }; var indexPage = await ExecuteAuth(requestBuilder.Build()); var loginUrl = string.Format("{0}/{1}", Settings.BaseUrl.TrimEnd('/'), "login.php"); var requestBuilder2 = new HttpRequestBuilder(loginUrl) { LogResponseContent = true, AllowAutoRedirect = true }; var authLoginRequest = requestBuilder2 .SetCookies(indexPage.GetCookies()) .Build(); // Get login page -- (not used, but simulation needed by tracker security's checks) await ExecuteAuth(authLoginRequest); var requestBuilder3 = new HttpRequestBuilder(string.Format("{0}/{1}", Settings.BaseUrl.TrimEnd('/'), "takelogin.php")) { LogResponseContent = true, AllowAutoRedirect = true, Method = HttpMethod.Post }; var authLoginCheckRequest = requestBuilder3 .AddFormParameter("username", Settings.Username) .AddFormParameter("password", Settings.Password) .SetCookies(indexPage.GetCookies()) .SetHeader("Referer", loginUrl) .Build(); var loginResponse = await ExecuteAuth(authLoginCheckRequest); if (!loginResponse.GetCookies().ContainsKey("uid")) { // Default error message var message = "Error during attempt !"; // Oops, unable to login _logger.Info("NorBits - Login failed: " + message, "error"); throw new IndexerAuthException(message); } var cookies = loginResponse.GetCookies(); UpdateCookies(cookies, DateTime.Now + TimeSpan.FromDays(30)); _logger.Debug("NorBits authentication succeeded."); }
protected override async Task DoLogin() { var requestBuilder = new HttpRequestBuilder(string.Format("{0}/{1}", Settings.BaseUrl.TrimEnd('/'), "checkpoint/API")) { Method = HttpMethod.Post, LogResponseContent = true, AllowAutoRedirect = true }; var loginPage = await ExecuteAuth(requestBuilder.AddFormParameter("username", Settings.Username).Build()); var tokenRegex = new Regex(@"name=\\""a\\"" value=\\""([^""]+)\\"""); var matches = tokenRegex.Match(loginPage.Content); if (!matches.Success) { throw new IndexerAuthException("Error parsing the login form"); } var token = matches.Groups[1].Value; Cookies = null; var requestBuilder2 = new HttpRequestBuilder(string.Format("{0}/{1}", Settings.BaseUrl.TrimEnd('/'), "checkpoint/")) { Method = HttpMethod.Post, LogResponseContent = true, AllowAutoRedirect = true }; var authLoginRequest = requestBuilder2 .AddFormParameter("pwd", Settings.Password) .AddFormParameter("a", token) .SetCookies(loginPage.GetCookies()) .Build(); var response = await ExecuteAuth(authLoginRequest); if (CheckIfLoginNeeded(response)) { var parser = new HtmlParser(); var dom = parser.ParseDocument(response.Content); var errorMessage = dom.QuerySelector("h5")?.TextContent; if (response.Content.Contains("Wrong Captcha!")) { errorMessage = "Captcha required due to a failed login attempt. Login via a browser to whitelist your IP and then reconfigure Prowlarr."; } throw new IndexerAuthException(errorMessage); } var cookies = response.GetCookies(); UpdateCookies(cookies, DateTime.Now + TimeSpan.FromDays(30)); _logger.Debug("SpeedCD authentication succeeded."); }
private HttpRequestBuilder BuildChannelRequest(string channelTag) { var requestBuilder = new HttpRequestBuilder(PUSH_URL).Post(); if (channelTag.IsNotNullOrWhiteSpace()) { requestBuilder.AddFormParameter("channel_tag", channelTag); } return(requestBuilder); }
protected override async Task DoLogin() { var requestBuilder = new HttpRequestBuilder(LoginUrl) { LogResponseContent = true, AllowAutoRedirect = true }; requestBuilder.Method = HttpMethod.Post; requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); var cookies = Cookies; Cookies = null; var authLoginRequest = requestBuilder .AddFormParameter("username", Settings.Username) .AddFormParameter("password", Settings.Password) .AddFormParameter("keeplogged", "1") .AddFormParameter("login", "Log+In!") .SetHeader("Content-Type", "multipart/form-data") .Build(); var headers = new NameValueCollection { { "Referer", LoginUrl } }; authLoginRequest.Headers.Add(headers); var response = await ExecuteAuth(authLoginRequest); if (CheckIfLoginNeeded(response)) { var parser = new HtmlParser(); var dom = parser.ParseDocument(response.Content); var messageEl = dom.QuerySelectorAll("#loginform"); var messages = new List <string>(); for (var i = 0; i < 13; i++) { var child = messageEl[0].ChildNodes[i]; messages.Add(child.Text().Trim()); } var message = string.Join(" ", messages); throw new IndexerAuthException(message); } cookies = response.GetCookies(); UpdateCookies(cookies, DateTime.Now + TimeSpan.FromDays(30)); _logger.Debug("BB authentication succeeded."); }
private HttpRequestBuilder BuildRequest(MailgunSettings settings, string resource, HttpMethod method, string messageSubject, string messageBody) { var loginCredentials = new NetworkCredential("api", settings.ApiKey); var url = settings.UseEuEndpoint ? BaseUrlEu : BaseUrlUs; var requestBuilder = new HttpRequestBuilder(url).Resource(resource); requestBuilder.Method = method; requestBuilder.NetworkCredential = loginCredentials; requestBuilder.AddFormParameter("from", $"{settings.From}"); foreach (var recipient in settings.Recipients) { requestBuilder.AddFormParameter("to", $"{recipient}"); } requestBuilder.AddFormParameter("subject", $"{messageSubject}"); requestBuilder.AddFormParameter("text", $"{messageBody}"); return(requestBuilder); }
private HttpRequestBuilder BuildDeviceRequest(string deviceId) { var requestBuilder = new HttpRequestBuilder(PUSH_URL).Post(); long integerId; if (deviceId.IsNullOrWhiteSpace()) { return(requestBuilder); } if (long.TryParse(deviceId, out integerId)) { requestBuilder.AddFormParameter("device_id", integerId); } else { requestBuilder.AddFormParameter("device_iden", deviceId); } return(requestBuilder); }
private void ProcessNotification(StringDictionary message, NotifiarrSettings settings) { try { var url = settings.Environment == (int)NotifiarrEnvironment.Development ? "https://dev.notifiarr.com" : "https://notifiarr.com"; var requestBuilder = new HttpRequestBuilder(url + "/notifier.php").Post(); requestBuilder.AddFormParameter("api", settings.APIKey).Build(); requestBuilder.AddFormParameter("instanceName", settings.InstanceName).Build(); foreach (string key in message.Keys) { requestBuilder.AddFormParameter(key, message[key]); } var request = requestBuilder.Build(); _httpClient.Post(request); } catch (HttpException ex) { switch ((int)ex.Response.StatusCode) { case 401: _logger.Error(ex, "API key is invalid"); throw; case 400: case 520: case 521: case 522: case 523: case 524: _logger.Error(ex, "Unable to send notification"); throw; } throw new NotifiarrException("Unable to send notification", ex); } }
public void SendNotification(string title, string message, SimplepushSettings settings) { var requestBuilder = new HttpRequestBuilder(URL).Post(); requestBuilder.AddFormParameter("key", settings.Key) .AddFormParameter("event", settings.Event) .AddFormParameter("title", title) .AddFormParameter("msg", message); var request = requestBuilder.Build(); _httpClient.Post(request); }
private HttpRequest BuildRequest(DownloadStationSettings settings, DiskStationApi api, Dictionary <string, object> arguments, HttpMethod method) { if (!Resources.ContainsKey(api)) { GetApiVersion(settings, api); } var requestBuilder = new HttpRequestBuilder(settings.UseSsl, settings.Host, settings.Port).Resource($"webapi/{Resources[api]}"); requestBuilder.Method = method; requestBuilder.LogResponseContent = true; requestBuilder.SuppressHttpError = true; requestBuilder.AllowAutoRedirect = false; if (requestBuilder.Method == HttpMethod.POST) { if (api == DiskStationApi.DownloadStationTask && arguments.ContainsKey("file")) { requestBuilder.Headers.ContentType = "multipart/form-data"; foreach (var arg in arguments) { if (arg.Key == "file") { Dictionary <string, object> file = (Dictionary <string, object>)arg.Value; requestBuilder.AddFormUpload(arg.Key, file["name"].ToString(), (byte[])file["data"]); } else { requestBuilder.AddFormParameter(arg.Key, arg.Value); } } } else { requestBuilder.Headers.ContentType = "application/json"; } } else { foreach (var arg in arguments) { requestBuilder.AddQueryParam(arg.Key, arg.Value); } } return(requestBuilder.Build()); }
private void Authenticate() { var requestBuilder = new HttpRequestBuilder($"{Settings.BaseUrl.Trim().TrimEnd('/')}") { LogResponseContent = true }; requestBuilder.Method = HttpMethod.POST; requestBuilder.Resource("ajax.php?action=login"); requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); var authKey = Settings.BaseUrl.Trim().TrimEnd('/'); var cookies = AuthCookieCache.Find(authKey); if (cookies == null) { AuthCookieCache.Remove(authKey); var authLoginRequest = requestBuilder .AddFormParameter("username", Settings.Username) .AddFormParameter("password", Settings.Password) .AddFormParameter("passkey", Settings.Passkey) .AddFormParameter("keeplogged", "1") .AddFormParameter("login", "Log In!") .SetHeader("Content-Type", "multipart/form-data") .Accept(HttpAccept.Json) .Build(); var response = HttpClient.Execute(authLoginRequest); var result = Json.Deserialize <PassThePopcornAuthResponse>(response.Content); if (result.Result != "Ok" || string.IsNullOrWhiteSpace(result.Result)) { Logger.Debug("PassThePopcorn authentication failed."); throw new Exception("Failed to authenticate with PassThePopcorn."); } Logger.Debug("PassThePopcorn authentication succeeded."); cookies = response.GetCookies(); AuthCookieCache.Set(authKey, cookies, new TimeSpan(7, 0, 0, 0, 0)); // re-auth every 7 days requestBuilder.SetCookies(cookies); } else { requestBuilder.SetCookies(cookies); } }
private void Authenticate() { var requestBuilder = new HttpRequestBuilder($"{Settings.BaseUrl.Trim().TrimEnd('/')}") { LogResponseContent = true }; requestBuilder.Method = HttpMethod.POST; requestBuilder.Resource("login.php"); requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); var authKey = Settings.BaseUrl.Trim().TrimEnd('/'); var cookies = AuthCookieCache.Find(authKey); if (cookies == null) { AuthCookieCache.Remove(authKey); var authLoginRequest = requestBuilder .AddFormParameter("username", Settings.Username) .AddFormParameter("password", Settings.Password) .AddFormParameter("keeplogged", "1") .SetHeader("Content-Type", "multipart/form-data") .Accept(HttpAccept.Json) .Build(); var response = HttpClient.Execute(authLoginRequest); cookies = response.GetCookies(); AuthCookieCache.Set(authKey, cookies); } var index = GetIndex(cookies); if (index == null || index.Status.IsNullOrWhiteSpace() || index.Status != "success") { Logger.Debug("Gazelle authentication failed."); AuthCookieCache.Remove(authKey); throw new Exception("Failed to authenticate with Gazelle."); } Logger.Debug("Gazelle authentication succeeded."); Settings.AuthKey = index.Response.Authkey; Settings.PassKey = index.Response.Passkey; }
protected override async Task DoLogin() { var requestBuilder = new HttpRequestBuilder(LoginUrl) { LogResponseContent = true, AllowAutoRedirect = true }; requestBuilder.Method = HttpMethod.Post; var cookies = Cookies; Cookies = null; var authLoginRequest = requestBuilder .AddFormParameter("username", Settings.Username) .AddFormParameter("password", Settings.Password) .AddFormParameter("keeplogged", "1") .AddFormParameter("login", "Log+In!") .SetHeader("Content-Type", "multipart/form-data") .Build(); var headers = new NameValueCollection { { "Referer", LoginUrl } }; authLoginRequest.Headers.Add(headers); var response = await ExecuteAuth(authLoginRequest); if (CheckIfLoginNeeded(response)) { var parser = new HtmlParser(); var dom = parser.ParseDocument(response.Content); var errorMessage = dom.QuerySelector("form#loginform").TextContent.Trim(); throw new IndexerAuthException(errorMessage); } cookies = response.GetCookies(); UpdateCookies(cookies, DateTime.Now + TimeSpan.FromDays(30)); _logger.Debug("TVVault authentication succeeded."); }
private void Authenticate() { if (Cookies == null) { var requestBuilder = new HttpRequestBuilder($"{Settings.BaseUrl.Trim().TrimEnd('/')}") { LogResponseContent = true }; requestBuilder.Method = HttpMethod.POST; requestBuilder.Resource("ajax.php?action=login"); requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); var authLoginRequest = requestBuilder .AddFormParameter("username", Settings.Username) .AddFormParameter("password", Settings.Password) .AddFormParameter("passkey", Settings.Passkey) .AddFormParameter("keeplogged", "1") .SetHeader("Content-Type", "multipart/form-data") .Accept(HttpAccept.Json) .Build(); authLoginRequest.AllowAutoRedirect = true; // We want clean cookies for the auth request. authLoginRequest.StoreRequestCookie = false; authLoginRequest.StoreResponseCookie = false; authLoginRequest.Cookies.Clear(); authLoginRequest.IgnorePersistentCookies = true; var response = HttpClient.Execute(authLoginRequest); var result = Json.Deserialize <PassThePopcornAuthResponse>(response.Content); if (result?.Result != "Ok" || string.IsNullOrWhiteSpace(result.Result)) { Logger.Debug("PassThePopcorn authentication failed."); throw new Exception("Failed to authenticate with PassThePopcorn."); } Logger.Debug("PassThePopcorn authentication succeeded."); Cookies = response.GetCookies(); requestBuilder.SetCookies(Cookies); } }
protected override async Task DoLogin() { var loginPage = await ExecuteAuth(new HttpRequest(LoginUrl)); var requestBuilder = new HttpRequestBuilder(LoginUrl) { LogResponseContent = true, AllowAutoRedirect = true }; requestBuilder.Method = HttpMethod.Post; requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); var cookies = Cookies; Cookies = null; var authLoginRequest = requestBuilder .AddFormParameter("uid", Settings.Username) .AddFormParameter("pwd", Settings.Password) .SetCookies(loginPage.GetCookies()) .SetHeader("Content-Type", "multipart/form-data") .SetHeader("Referer", LoginUrl) .Build(); var response = await ExecuteAuth(authLoginRequest); if (CheckIfLoginNeeded(response)) { var errorStr = "Login Failed: You have {0} remaining login attempts"; var remainingAttemptSpan = new Regex(string.Format(errorStr, "(.*?)")) .Match(loginPage.Content).Groups[1].ToString(); var attempts = Regex.Replace(remainingAttemptSpan, "<.*?>", string.Empty); var errorMessage = string.Format(errorStr, attempts); throw new IndexerAuthException(errorMessage); } cookies = response.GetCookies(); UpdateCookies(cookies, DateTime.Now + TimeSpan.FromDays(30)); _logger.Debug("HDSpace authentication succeeded."); }
protected override async Task DoLogin() { UpdateCookies(null, null); var requestBuilder = new HttpRequestBuilder(Settings.BaseUrl + "index.php") { LogResponseContent = true, AllowAutoRedirect = true }; var mainPage = await ExecuteAuth(new HttpRequest(Settings.BaseUrl)); requestBuilder.Method = HttpMethod.Post; requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); requestBuilder.SetCookies(mainPage.GetCookies()); var authLoginRequest = requestBuilder .AddFormParameter("login_name", Settings.Username) .AddFormParameter("login_password", Settings.Password) .AddFormParameter("login", "submit") .SetHeader("Content-Type", "application/x-www-form-urlencoded") .Build(); var response = await ExecuteAuth(authLoginRequest); if (response.Content != null && !CheckIfLoginNeeded(response)) { UpdateCookies(response.GetCookies(), DateTime.Now + TimeSpan.FromDays(30)); _logger.Debug("Anidub authentication succeeded"); } else { const string ErrorSelector = "#content .berror .berror_c"; var parser = new HtmlParser(); var document = await parser.ParseDocumentAsync(response.Content); var errorMessage = document.QuerySelector(ErrorSelector).TextContent.Trim(); throw new IndexerAuthException("Anidub authentication failed. Error: " + errorMessage); } }
protected override async Task DoLogin() { var requestBuilder = new HttpRequestBuilder(LoginUrl) { LogResponseContent = true }; Cookies = null; var loginPage = await ExecuteAuth(new HttpRequest(CaptchaUrl)); var json1 = JObject.Parse(loginPage.Content); var captchaSelection = json1["images"][0]["hash"]; requestBuilder.Method = HttpMethod.Post; requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); requestBuilder.SetCookies(loginPage.GetCookies()); var authLoginRequest = requestBuilder .AddFormParameter("username", Settings.Username) .AddFormParameter("password", Settings.Password) .AddFormParameter("submitme", "X") .AddFormParameter("captchaSelection", (string)captchaSelection) .SetHeader("Content-Type", "multipart/form-data") .Build(); var response = await ExecuteAuth(authLoginRequest); if (CheckIfLoginNeeded(response)) { throw new IndexerAuthException("TorrentSeeds Login Failed"); } var cookies = response.GetCookies(); UpdateCookies(cookies, DateTime.Now + TimeSpan.FromDays(30)); _logger.Debug("TorrentSeeds authentication succeeded."); }
private async Task <string> GetToken() { var requestBuilder = new HttpRequestBuilder(LoginUrl) { LogResponseContent = true }; requestBuilder.Method = HttpMethod.Post; requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); var authLoginRequest = requestBuilder .AddFormParameter("username", Settings.Username) .AddFormParameter("password", Settings.Password) .AddFormParameter("pid", Settings.Pid.Trim()) .SetHeader("Content-Type", "application/json") .Accept(HttpAccept.Json) .Build(); var response = await _httpClient.PostAsync <AvistazAuthResponse>(authLoginRequest); var token = response.Resource.Token; return(token); }
protected override async Task DoLogin() { var requestBuilder = new HttpRequestBuilder(LoginUrl) { LogResponseContent = true, AllowAutoRedirect = true, Method = HttpMethod.Post }; var authLoginRequest = requestBuilder .AddFormParameter("login_username", Settings.Username) .AddFormParameter("login_password", Settings.Password) .AddFormParameter("login", "Login") .SetHeader("Content-Type", "multipart/form-data") .Build(); var response = await ExecuteAuth(authLoginRequest); if (CheckIfLoginNeeded(response)) { var errorMessage = "Unknown error message, please report"; var loginResultParser = new HtmlParser(); var loginResultDocument = loginResultParser.ParseDocument(response.Content); var errormsg = loginResultDocument.QuerySelector("h4[class=\"warnColor1 tCenter mrg_16\"]"); if (errormsg != null) { errorMessage = errormsg.TextContent; } throw new IndexerAuthException(errorMessage); } UpdateCookies(response.GetCookies(), DateTime.Now + TimeSpan.FromDays(30)); _logger.Debug("PornoLab authentication succeeded"); }
protected override async Task DoLogin() { _logger.Debug("ZonaQ authentication succeeded."); // The first page set the cookies and the session_id var loginPage = await ExecuteAuth(new HttpRequest(Login1Url)); var parser = new HtmlParser(); var dom = parser.ParseDocument(loginPage.Content); var sessionId = dom.QuerySelector("input#session_id")?.GetAttribute("value"); if (string.IsNullOrWhiteSpace(sessionId)) { throw new IndexerAuthException("Error getting the ZonaQ Session ID"); } // The second page send the login with the hash // The hash is reverse engineering from https://www.zonaq.pw/retorno/2/smf/Themes/smf_ZQ/scripts/script.js // doForm.hash_passwrd.value = hex_sha1(hex_sha1(doForm.user.value.php_to8bit().php_strtolower() + doForm.passwrd.value.php_to8bit()) + cur_session_id); Thread.Sleep(3000); var hashPassword = Sha1Hash(Sha1Hash(Settings.Username.ToLower() + Settings.Password) + sessionId); var requestBuilder = new HttpRequestBuilder(Login2Url) { LogResponseContent = true }; requestBuilder.Method = HttpMethod.Post; requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); requestBuilder.SetCookies(loginPage.GetCookies()); var authLoginRequest = requestBuilder .AddFormParameter("user", Settings.Username) .AddFormParameter("passwrd", Settings.Password) .AddFormParameter("hash_passwrd", hashPassword) .SetHeader("X-Requested-With", "XMLHttpRequest") .Build(); var response = await ExecuteAuth(authLoginRequest); var message = JObject.Parse(response.Content)["msg"]?.ToString(); if (message == "puerta_2") { // The third page sets the cookie duration Thread.Sleep(3000); var requestBuilder2 = new HttpRequestBuilder(Login3Url) { LogResponseContent = true }; requestBuilder2.Method = HttpMethod.Post; requestBuilder2.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); requestBuilder2.SetCookies(response.GetCookies()); var authLoginRequest2 = requestBuilder2 .AddFormParameter("passwd", "") .AddFormParameter("cookielength", "43200") .AddFormParameter("respuesta", "") .SetHeader("X-Requested-With", "XMLHttpRequest") .Build(); response = await ExecuteAuth(authLoginRequest2); message = JObject.Parse(response.Content)["msg"]?.ToString(); } if (message != "last_door") { throw new IndexerAuthException($"Login error: {message}"); } // The forth page sets the last cookie Thread.Sleep(3000); var requestBuilder4 = new HttpRequestBuilder(Login4Url) { LogResponseContent = true }; requestBuilder4.SetCookies(response.GetCookies()); var authLoginRequest3 = requestBuilder4.Build(); response = await ExecuteAuth(authLoginRequest3); UpdateCookies(response.GetCookies(), DateTime.Now + TimeSpan.FromDays(30)); }