示例#1
0
        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);
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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);
            }
        }
示例#4
0
        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);
        }
示例#6
0
        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);
            }
        }
示例#7
0
        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);
            }
        }
示例#8
0
        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.");
        }
示例#9
0
        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");
            }
        }
示例#10
0
        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.");
        }
示例#11
0
        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");
            }
        }
示例#12
0
        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.");
        }
示例#13
0
        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.");
        }
示例#14
0
        private HttpRequestBuilder BuildChannelRequest(string channelTag)
        {
            var requestBuilder = new HttpRequestBuilder(PUSH_URL).Post();

            if (channelTag.IsNotNullOrWhiteSpace())
            {
                requestBuilder.AddFormParameter("channel_tag", channelTag);
            }

            return(requestBuilder);
        }
示例#15
0
        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.");
        }
示例#16
0
        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);
        }
示例#17
0
        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);
        }
示例#18
0
        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);
            }
        }
示例#19
0
        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);
        }
示例#20
0
        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());
        }
示例#21
0
        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);
            }
        }
示例#22
0
        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;
        }
示例#23
0
        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);
            }
        }
示例#25
0
        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.");
        }
示例#26
0
        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);
            }
        }
示例#27
0
        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.");
        }
示例#28
0
        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);
        }
示例#29
0
        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");
        }
示例#30
0
        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));
        }