Пример #1
0
        protected string AddFacetToUrl(object dataItem)
        {
            Tuple<FacetValue, Item, string> tuple = dataItem as Tuple<FacetValue, Item, string>;

            Url url = new Url(Request.RawUrl);

            url.RemoveQueryParam(SearchResultsManager.PageQueryString);

            List<Guid> allFacets = SearchResultsManager.ExtractFacetsFromQueryString(QueryStringParameter);

            if (allFacets.Contains(tuple.Item2.ID.Guid))
            {
                allFacets.Remove(tuple.Item2.ID.Guid);
            }
            else
            {
                allFacets.Add(tuple.Item2.ID.Guid);
            }

            string fullQueryString = String.Join("|", allFacets.Distinct());

            url.QueryParams[QueryStringParameter] = fullQueryString;

            return url;
        }
Пример #2
0
        protected string AddFacetToUrl(object dataItem)
        {
            Tuple <FacetValue, Item, string> tuple = dataItem as Tuple <FacetValue, Item, string>;

            Url url = new Url(Request.RawUrl);

            url.RemoveQueryParam(SearchResultsManager.PageQueryString);

            List <Guid> allFacets = SearchResultsManager.ExtractFacetsFromQueryString(QueryStringParameter);

            if (allFacets.Contains(tuple.Item2.ID.Guid))
            {
                allFacets.Remove(tuple.Item2.ID.Guid);
            }
            else
            {
                allFacets.Add(tuple.Item2.ID.Guid);
            }

            string fullQueryString = String.Join("|", allFacets.Distinct());

            url.QueryParams[QueryStringParameter] = fullQueryString;

            return(url);
        }
Пример #3
0
 public void Flurl()
 {
     //for (int i = 0; i < 1_000_000; i++)
     {
         _ = new Flurl.Url(_uri);
     }
 }
Пример #4
0
        /// <summary>
        /// request url that specified by yourself with get method.
        /// according the package Flurl.Http.GeneratedExtensions to rewrite it in order to debug, develop.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="url"></param>
        /// <param name="cancellationToken"></param>
        /// <param name="completionOption"></param>
        /// <returns></returns>
        public static Task <T> GetJsonAsync <T>(this Flurl.Url url, CancellationToken cancellationToken = default(CancellationToken), HttpCompletionOption completionOption = HttpCompletionOption.ResponseContentRead)
        {
            var request = new FlurlRequest(url);
            var result  = request.GetJsonAsync <T>(cancellationToken, completionOption);

            return(result);
        }
Пример #5
0
        public async Task <IDictionary <string, BatchResponse> > GetQuotesAsync(IEnumerable <string> symbols, CancellationToken cancellationToken)
        {
            if (!symbols.Any())
            {
                return(new Dictionary <string, BatchResponse>());
            }

            var url = new Flurl.Url(BaseUrl)
                      .AppendPathSegment("/stock/market/batch")
                      .SetQueryParams(new
            {
                types   = "quote",
                symbols = string.Join(',', symbols),
                token   = this.options.Token
            });
            var httpClient = this.httpClientFactory.CreateClient();
            var response   = await httpClient.GetAsync(url, cancellationToken);

            response.EnsureSuccessStatusCode();

            var content = await response.Content.ReadAsStringAsync();

            var quotes = JsonConvert.DeserializeObject <Dictionary <string, BatchResponse> >(content);

            return(quotes);
        }
Пример #6
0
 public async Task ExecuteRoutine(string id)
 {
     Flurl.Url url = new Flurl.Url(_apiUrl);
     await url.AppendPathSegments("routines", id)
     .WithHeader("Authorization", string.Format("Bearer " + _apiToken))
     .PostAsync(new StringContent(""));
 }
Пример #7
0
        protected string RemoveFacets()
        {
            Url url = new Url(Request.RawUrl);

            url.RemoveQueryParam(QueryStringParameter);

            return(url);
        }
        public ActionResult Redirect(string url, IDictionary <string, string> parameters)
        {
            var matches = _placeHolderMatcher.Matches(url);

            if (matches.Count > 0)
            {
                var values = new List <string>();
                foreach (Match match in matches)
                {
                    if (!values.Contains(match.Value))
                    {
                        values.Add(match.Value);
                    }
                }

                var names = new List <string>();
                foreach (var value in values)
                {
                    var left = value.Split(':')[0];
                    if (left.ToCharArray().All(c => c >= '0' && c <= '9'))
                    {
                        continue;
                    }
                    if (!names.Contains(left))
                    {
                        names.Add(left);
                    }
                }

                var count = 0;
                var args  = new List <object>();
                foreach (var name in names)
                {
                    if (parameters.ContainsKey(name))
                    {
                        args.Add(parameters[name]);
                        url = url.Replace("{" + name, "{" + count);
                        count++;
                    }
                    else
                    {
                        _orchardServices.Notifier.Error(T("Can not find parameter {0} for BatchRedirect url.", name));
                        return(null);
                    }
                }
                url = string.Format(url, args.ToArray());
            }

            url = url.StartsWith("http", StringComparison.OrdinalIgnoreCase) ? url : VirtualPathUtility.ToAbsolute(url);

            var flurl = new Flurl.Url(url);

            foreach (var p in parameters)
            {
                flurl.QueryParams.Add(p.Key, p.Value);
            }
            return(new RedirectResult(flurl.ToString()));
        }
Пример #9
0
        /// <summary>
        /// request url that specified by yourself with post method.
        /// according the package Flurl.Http.GeneratedExtensions to rewrite it in order to debug, develop.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="url"></param>
        /// <param name="data"></param>
        /// <param name="cancellationToken"></param>
        /// <param name="completionOption"></param>
        /// <returns></returns>
        public static Task <T> PostJsonAsync <T>(this Flurl.Url url, object data, CancellationToken cancellationToken = default(CancellationToken), HttpCompletionOption completionOption = HttpCompletionOption.ResponseContentRead)
        {
            var request = new FlurlRequest(url);
            CapturedJsonContent content = new CapturedJsonContent(request.Settings.JsonSerializer.Serialize(data));
            var response = request.SendAsync(HttpMethod.Post, content, cancellationToken, completionOption);
            var result   = response.ReceiveJson <T>();

            return(result);
        }
Пример #10
0
        /// <summary>
        /// Makes the HTTP request to the IATAHttpService.
        /// </summary>
        /// <param name="airportIATACode">The airport iata code.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">airportIATACode</exception>
        /// <exception cref="HttpRequestException"></exception>
        public async Task <IATAHttpServiceResponse> MakeHttpRequest(string airportIATACode)
        {
            if (string.IsNullOrWhiteSpace(airportIATACode))
            {
                throw new ArgumentNullException(nameof(airportIATACode));
            }

            //Todo: Move url, timeout and number of retries in settings object.
            string url     = Url.Combine("https://places-dev.cteleport.com/airports/", airportIATACode);
            int    retries = 5;
            double timeout = Math.Pow(2, 5);

            CachePolicy <HttpResponseMessage> cachePolicy        = CreateCachePolicy(MemoryCacheProvider);
            RetryPolicy <HttpResponseMessage> waitAndRetryPolicy = CreateWaitAndRetryPolicy(retries);

            HttpClientHandler handler = new HttpClientHandler()
            {
                AutomaticDecompression = DecompressionMethods.GZip
            };

            using (HttpClient client = new HttpClient(handler))
            {
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
                client.Timeout = TimeSpan.FromSeconds(timeout);

                Context context = new Context(url);

                HttpResponseMessage response = await cachePolicy.ExecuteAsync(
                    async() =>
                {
                    return(await waitAndRetryPolicy.ExecuteAsync(
                               async() =>
                    {
                        HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, url);

                        return await client.SendAsync(requestMessage, HttpCompletionOption.ResponseContentRead);
                    }
                               ));
                },
                    context
                    );

                await response.Content.LoadIntoBufferAsync();

                string responseContent = await response.Content.ReadAsStringAsync();

                if (!response.IsSuccessStatusCode)
                {
                    throw new HttpRequestException($"An unexpected errpr occured while trying to call \"{url}\". Status: {response.StatusCode}. Content: {responseContent}.");
                }

                return(ExtractResponse(responseContent));
            }
        }
Пример #11
0
        public static Flurl.Url WithPagination(this Flurl.Url url, PaginationOptions opts)
        {
            if (opts is null)
            {
                return(url);
            }

            return(url.SetQueryParam("limit", opts.Limit)
                   .SetQueryParam("order", opts.Order)
                   .SetQueryParam("starting_after", opts.StartingAfter)
                   .SetQueryParam("ending_before", opts.EndingBefore));
        }
Пример #12
0
        public async Task <List <SymbolDescription> > GetSymbolsAsync(CancellationToken cancellationToken)
        {
            var url        = new Flurl.Url(BaseUrl).AppendPathSegment("/ref-data/symbols").SetQueryParam("token", this.options.Token);
            var httpClient = this.httpClientFactory.CreateClient();
            var response   = await httpClient.GetAsync(url, cancellationToken);

            response.EnsureSuccessStatusCode();

            var content = await response.Content.ReadAsStringAsync();

            var symbolDescriptions = JsonConvert.DeserializeObject <List <SymbolDescription> >(content);

            return(symbolDescriptions);
        }
Пример #13
0
        public async Task <string> GetCurrentMode()
        {
            Flurl.Url url     = new Flurl.Url(_apiUrl);
            string    content = await url.AppendPathSegment("locations")
                                .WithHeader("Authorization", string.Format("Bearer " + _apiToken))
                                .GetStringAsync();

            Console.WriteLine(content);

            var json = JObject.Parse(content);

            string currentMode = json["currentMode"]["name"].Value <string>();

            return(currentMode);
        }
Пример #14
0
        protected async Task <IDocument> GetDocument(
            Url url,
            CancellationToken cancellationToken)
        {
            var delta = DateTime.Now - _lastRequestTime;

            if (delta < RequestInterval)
            {
                await Task.Delay(delta, cancellationToken);
            }

            var document = await Context.OpenAsync(url, cancellation : cancellationToken);

            _lastRequestTime = DateTime.Now;

            return(document);
        }
Пример #15
0
        public void AppendPathSegments_ValidMultiplePath_ReturnCorrectUrl()
        {
            var uriBuildler = new UriBuilder()
            {
                Scheme = "https",
                Host   = "https://www.abc.com"
            };

            var path1 = "xx";
            var path2 = "yy";

            // https://www.hanselman.com/blog/UsingFlurlToEasilyBuildURLsAndMakeTestableHttpClientCallsInNET.aspx
            var url = new UrlHelper(uriBuildler.Uri);

            url.AppendPathSegments(path1, path2);

            Assert.Equal("https://www.abc.com/xx/yy", url);
        }
Пример #16
0
        public async Task <Company> GetCompanyAsync(string symbol, CancellationToken cancellationToken)
        {
            if (string.IsNullOrWhiteSpace(symbol))
            {
                throw new ArgumentException("Invalid symbol", nameof(symbol));
            }

            var url        = new Flurl.Url(BaseUrl).AppendPathSegments("stock", symbol, "company").SetQueryParam("token", this.options.Token);
            var httpClient = this.httpClientFactory.CreateClient();
            var response   = await httpClient.GetAsync(url, cancellationToken);

            response.EnsureSuccessStatusCode();

            var content = await response.Content.ReadAsStringAsync();

            var companyInfo = JsonConvert.DeserializeObject <Company>(content);

            return(companyInfo);
        }
Пример #17
0
        protected async Task <IDocument> GetDocument(
            Url url,
            CancellationToken cancellationToken)
        {
            var delta = DateTime.Now - _lastRequestTime;

            if (delta < RequestInterval)
            {
                await Task.Delay(delta, cancellationToken);
            }

            var response = await url.GetStreamAsync(cancellationToken);

            var document = await Context.OpenAsync(
                req => req.Content(response),
                cancellationToken);

            _lastRequestTime = DateTime.Now;

            return(document);
        }
Пример #18
0
        public async Task <IEnumerable <Routine> > ListRoutines()
        {
            Flurl.Url url     = new Flurl.Url(_apiUrl);
            string    content = await url.AppendPathSegment("routines")
                                .WithHeader("Authorization", string.Format("Bearer " + _apiToken))
                                .GetStringAsync();

            Console.WriteLine(content);

            var array = JArray.Parse(content);

            List <Routine> items = new List <Routine>();

            foreach (var item in array)
            {
                items.Add(new Routine()
                {
                    Label = item["label"].Value <string>(),
                    Id    = item["id"].Value <string>(),
                });
            }

            return(items);
        }
Пример #19
0
        public async Task <IEnumerable <Device> > ListDevices()
        {
            Flurl.Url url     = new Flurl.Url(_apiUrl);
            string    content = await url.AppendPathSegment("switches")
                                .WithHeader("Authorization", string.Format("Bearer " + _apiToken))
                                .GetStringAsync();

            Console.WriteLine(content);

            var array = JArray.Parse(content);

            List <Device> devices = new List <Device>();

            foreach (var item in array)
            {
                devices.Add(new Device()
                {
                    Name  = item["name"].Value <string>(),
                    State = string.Equals(item["value"].Value <string>(), "on", StringComparison.OrdinalIgnoreCase) ? DeviceState.On : DeviceState.Off
                });
            }

            return(devices);
        }
Пример #20
0
 /// <summary>
 /// request url that specified by yourself with get method.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="url"></param>
 /// <param name="cancellationToken"></param>
 /// <param name="completionOption"></param>
 /// <returns></returns>
 public static Task <T> GetJsonAsync <T>(this string url, CancellationToken cancellationToken = default(CancellationToken), HttpCompletionOption completionOption = HttpCompletionOption.ResponseContentRead)
 {
     Flurl.Url urlObj = url;
     return(urlObj.GetJsonAsync <T>(cancellationToken, completionOption));
 }
        private static Response ProxyRequest(NancyContext context)
        {
            string POSTContent = String.Empty;
            string GETContent  = String.Empty;
            var    serverUrl   = ServerProxy.Instance.GetServerUrl();

            if (string.IsNullOrEmpty(serverUrl))
            {
                return(new TextResponse(HttpStatusCode.BadGateway, "Not open for business"));
            }

            var fixedPath = context.Request.Path.Replace("/nfsw/Engine.svc", "");
            var fullUrl   = new Uri(serverUrl).Append(fixedPath);

            Console.WriteLine($@"{context.Request.Method} {fixedPath}");

            var queryParams = new Dictionary <string, object>();
            var headers     = new Dictionary <string, object>();

            foreach (var param in context.Request.Query)
            {
                var value = context.Request.Query[param];

                queryParams[param] = value;
            }

            GETContent = string.Join(";", queryParams.Select(x => x.Key + "=" + x.Value).ToArray());

            foreach (var header in context.Request.Headers)
            {
                headers[header.Key] = header.Value.First();
            }

            var url = new Flurl.Url(fullUrl.ToString())
                      .SetQueryParams(queryParams)
                      .WithHeaders(headers);

            HttpResponseMessage response;

            switch (context.Request.Method)
            {
            case "GET":
            {
                response = url.GetAsync().Result;
                //response = await url.GetAsync();
                break;
            }

            case "POST":
            {
                POSTContent = context.Request.Body.AsString();
                response    = url.PostAsync(
                    new CapturedStringContent(
                        POSTContent
                        )
                    ).Result;
                break;
            }

            case "PUT":
            {
                response = url.PutAsync(
                    new CapturedStringContent(
                        context.Request.Body.AsString()
                        )
                    ).Result;
                break;
            }

            case "DELETE":
            {
                response = url.DeleteAsync().Result;
                break;
            }

            default:
            {
                throw new Exception($"unsupported method: {context.Request.Method}");
            }
            }

            DiscordRPC.handleGameState(fixedPath, response.Content.ReadAsStringAsync().Result, POSTContent, GETContent);

            return(new TextResponse(
                       response.Content.ReadAsStringAsync().Result,
                       response.Content.Headers.ContentType.ToString()
                       )
            {
                StatusCode = (HttpStatusCode)(int)response.StatusCode
            });
        }
Пример #22
0
        private static Response ProxyRequest(NancyContext context)
        {
            //MessageBox.Show("ProxyRequest");
            string POSTContent = String.Empty;
            string GETContent  = String.Empty;

            Self.sendRequest = true;

            var serverUrl = ServerProxy.Instance.GetServerUrl();

            if (string.IsNullOrEmpty(serverUrl))
            {
                return(new TextResponse(HttpStatusCode.BadGateway, "Not open for business"));
            }

            var queryParams = new Dictionary <string, object>();
            var headers     = new Dictionary <string, object>();

            if (Self.sendRequest == true)
            {
                var fixedPath = context.Request.Path.Replace("/nfsw/Engine.svc", "");
                var fullUrl   = new Uri(serverUrl).Append(fixedPath);

                foreach (var param in context.Request.Query)
                {
                    var value = context.Request.Query[param];
                    queryParams[param] = value;
                }

                GETContent = string.Join(";", queryParams.Select(x => x.Key + "=" + x.Value).ToArray());

                foreach (var header in context.Request.Headers)
                {
                    headers[header.Key] = (header.Key == "Host") ? fullUrl.Host : header.Value.First();
                }

                var url = new Flurl.Url(fullUrl.ToString()).SetQueryParams(queryParams).WithHeaders(headers);
                HttpResponseMessage response;

                switch (context.Request.Method)
                {
                case "GET":
                {
                    response = url.GetAsync().Result;
                    break;
                }

                case "POST":
                {
                    POSTContent = context.Request.Body.AsString();
                    response    = url.PostAsync(
                        new CapturedStringContent(
                            POSTContent
                            )
                        ).Result;
                    break;
                }

                case "PUT":
                {
                    response = url.PutAsync(
                        new CapturedStringContent(
                            context.Request.Body.AsString()
                            )
                        ).Result;
                    break;
                }

                case "DELETE":
                {
                    response = url.DeleteAsync().Result;
                    break;
                }

                default:
                {
                    throw new Exception($"unsupported method: {context.Request.Method}");
                }
                }

                String replyToServer = response.Content.ReadAsStringAsync().Result;

                /*if (fixedPath == "/getrebroadcasters"){
                 *  replyToServer = Regex.Replace(replyToServer, @"<Host>(.*?)<\/Host>", "<Host>37.233.101.12</Host>");
                 *  replyToServer = Regex.Replace(replyToServer, @"<Port>(.*?)<\/Port>", "<Port>9999</Port>");
                 * }*/

                if (fixedPath == "/User/GetPermanentSession")
                {
                    replyToServer = Self.CleanFromUnknownChars(replyToServer);

                    var SBRW_XML = new XmlDocument();
                    SBRW_XML.LoadXml(replyToServer);
                    XmlNode     UserInfo = SBRW_XML.SelectSingleNode("UserInfo");
                    XmlNodeList personas = UserInfo.SelectNodes("personas/ProfileData");

                    if (personas.Count == 0)
                    {
                        replyToServer = replyToServer.Replace("false", "true");
                    }
                }

                if (fixedPath == "")
                {
                }

                if (checkOnline)
                {
                    DiscordGamePresence.handleGameState(fixedPath, replyToServer, POSTContent, GETContent);
                }

                return(new TextResponse(replyToServer, response.Content.Headers.ContentType.ToString())
                {
                    StatusCode = (HttpStatusCode)(int)response.StatusCode
                });
            }
            else
            {
                var fullUrl = new Uri(Self.internetcheckurl);

                foreach (var param in context.Request.Query)
                {
                    var value = context.Request.Query[param];
                    queryParams[param] = value;
                }

                foreach (var header in context.Request.Headers)
                {
                    headers[header.Key] = (header.Key == "Host") ? fullUrl.Host : header.Value.First();
                }

                var url = new Flurl.Url(fullUrl.ToString()).SetQueryParams().WithHeaders(headers);

                HttpResponseMessage response;
                switch (context.Request.Method)
                {
                case "GET": { response = url.GetAsync().Result; break; }

                case "POST": { POSTContent = context.Request.Body.AsString(); response = url.PostAsync(new CapturedStringContent(POSTContent)).Result; break; }

                default: { throw new Exception($"unsupported method: {context.Request.Method}"); }
                }

                Self.sendRequest = true;
                return(new TextResponse(String.Empty, response.Content.Headers.ContentType.ToString())
                {
                    StatusCode = (HttpStatusCode)(int)response.StatusCode
                });
            }
        }
Пример #23
0
        protected string RemoveFacets()
        {
            Url url = new Url(Request.RawUrl);

            url.RemoveQueryParam(QueryStringParameter);

            return url;
        }
Пример #24
0
 private static string SanitizeRelativeSrcUrl(string url, int idx) => url != null?Url.Combine($"https://{Domain}/", url.Substring(idx)) : null;
Пример #25
0
 protected Task <JsonDocument> GetJson(
     Url url,
     CancellationToken cancellationToken)
 {
     return(GetJson(new FlurlRequest(url), cancellationToken));
 }
Пример #26
0
        private static Response ProxyRequest(NancyContext context)
        {
            string POSTContent = String.Empty;
            string GETContent  = String.Empty;

            Self.sendRequest = true;

            Dictionary <string, string> powerups = new Dictionary <string, string>();

            powerups.Add("-1681514783", "NITROUS");
            powerups.Add("-537557654", "RUN FLATS");
            powerups.Add("-1692359144", "INSTANT COOLDOWN");
            powerups.Add("-364944936", "SHIELD");
            powerups.Add("2236629", "SLINGSHOT");
            powerups.Add("957701799", "READY");
            powerups.Add("1805681994", "JUGGERNAUT");
            powerups.Add("-611661916", "EMERGENCY EVADE");
            powerups.Add("-1564932069", "TEAM EMERGENCY EVADE");
            powerups.Add("1627606782", "ONE MORE LAP");
            powerups.Add("1113720384", "TEAM SLINGSHOT");
            powerups.Add("125509666", "TRAFFIC MAGNET");

            if (Regex.Match(context.Request.Path, "/powerups/activated/", RegexOptions.IgnoreCase).Success)
            {
                String activatedHash = context.Request.Path.Split('/').Last();

                try {
                    Console.WriteLine("--- CHECK ACTIVATED POWERUPS ---");
                    foreach (KeyValuePair <string, bool> entry in executedPowerups)
                    {
                        Console.WriteLine(powerups[entry.Key] + ": " + entry.Value);
                    }
                } catch {
                    Console.WriteLine("No activated powerups were found!");
                }

                executedPowerups.TryGetValue(activatedHash, out activated);

                if (activated)
                {
                    var notification = new NotifyIcon()
                    {
                        Visible         = true,
                        Icon            = System.Drawing.SystemIcons.Information,
                        BalloonTipIcon  = ToolTipIcon.Info,
                        BalloonTipTitle = "Powerup Spam Detected",
                        BalloonTipText  = "Hey! You can't use " + powerups[activatedHash] + " right now. Therefore, this powerup has been disabled till next event/freeroam session.",
                    };

                    notification.ShowBalloonTip(5000);
                    System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainScreen));
                    notification.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
                    notification.Dispose();

                    Self.sendRequest = false;
                }
                else
                {
                    executedPowerupsRemainingSecs[activatedHash] = 14;

                    System.Timers.Timer poweruptimer = new System.Timers.Timer();
                    poweruptimer.Elapsed += (x, y) => {
                        if (activatedHash == "957701799")
                        {
                            foreach (KeyValuePair <string, bool> allpowerups in executedPowerups)
                            {
                                executedPowerups[allpowerups.Key] = false;
                                executedPowerupsRemainingSecs[allpowerups.Key] = 0;

                                executedPowerups.Remove(allpowerups.Key);
                                executedPowerupsRemainingSecs.Remove(allpowerups.Key);
                            }

                            executedPowerups[activatedHash] = false;
                            executedPowerupsRemainingSecs[activatedHash] = 0;

                            poweruptimer.Close();
                        }
                        else
                        {
                            if (executedPowerupsRemainingSecs[activatedHash] == 0)
                            {
                                executedPowerups[activatedHash] = false;
                                executedPowerupsRemainingSecs[activatedHash] = 0;
                                poweruptimer.Close();
                            }
                            else
                            {
                                executedPowerups[activatedHash] = true;
                                executedPowerupsRemainingSecs[activatedHash] -= 1;
                            }
                        }
                    };

                    poweruptimer.Interval = 1000;
                    poweruptimer.Enabled  = true;
                }
            }

            var serverUrl = ServerProxy.Instance.GetServerUrl();

            if (string.IsNullOrEmpty(serverUrl))
            {
                return(new TextResponse(HttpStatusCode.BadGateway, "Not open for business"));
            }

            var queryParams = new Dictionary <string, object>();
            var headers     = new Dictionary <string, object>();

            if (Self.sendRequest == true)
            {
                var fixedPath = context.Request.Path.Replace("/nfsw/Engine.svc", "");
                var fullUrl   = new Uri(serverUrl).Append(fixedPath);

                foreach (var param in context.Request.Query)
                {
                    var value = context.Request.Query[param];
                    queryParams[param] = value;
                }

                GETContent = string.Join(";", queryParams.Select(x => x.Key + "=" + x.Value).ToArray());

                foreach (var header in context.Request.Headers)
                {
                    headers[header.Key] = (header.Key == "Host") ? fullUrl.Host : header.Value.First();
                }

                var url = new Flurl.Url(fullUrl.ToString()).SetQueryParams(queryParams).WithHeaders(headers);
                HttpResponseMessage response;

                switch (context.Request.Method)
                {
                case "GET": {
                    response = url.GetAsync().Result;
                    break;
                }

                case "POST":  {
                    POSTContent = context.Request.Body.AsString();
                    response    = url.PostAsync(
                        new CapturedStringContent(
                            POSTContent
                            )
                        ).Result;
                    break;
                }

                case "PUT":  {
                    response = url.PutAsync(
                        new CapturedStringContent(
                            context.Request.Body.AsString()
                            )
                        ).Result;
                    break;
                }

                case "DELETE": {
                    response = url.DeleteAsync().Result;
                    break;
                }

                default: {
                    throw new Exception($"unsupported method: {context.Request.Method}");
                }
                }

                String replyToServer = response.Content.ReadAsStringAsync().Result;

                /*if (fixedPath == "/getrebroadcasters"){
                 *  replyToServer = Regex.Replace(replyToServer, @"<Host>(.*?)<\/Host>", "<Host>37.233.101.12</Host>");
                 *  replyToServer = Regex.Replace(replyToServer, @"<Port>(.*?)<\/Port>", "<Port>9999</Port>");
                 * }*/

                if (fixedPath == "/User/GetPermanentSession")
                {
                    replyToServer = Self.CleanFromUnknownChars(replyToServer);

                    var SBRW_XML = new XmlDocument();
                    SBRW_XML.LoadXml(replyToServer);
                    XmlNode     UserInfo = SBRW_XML.SelectSingleNode("UserInfo");
                    XmlNodeList personas = UserInfo.SelectNodes("personas/ProfileData");

                    if (personas.Count == 0)
                    {
                        replyToServer = replyToServer.Replace("false", "true");
                    }
                }

                if (fixedPath == "")
                {
                }

                Log.Debug($@"{context.Request.Method} {fixedPath} -> {POSTContent} -> {GETContent} -> {replyToServer}");

                DiscordGamePresence.handleGameState(fixedPath, replyToServer, POSTContent, GETContent);

                return(new TextResponse(replyToServer, response.Content.Headers.ContentType.ToString())
                {
                    StatusCode = (HttpStatusCode)(int)response.StatusCode
                });
            }
            else
            {
                var fullUrl = new Uri(Self.internetcheckurl);
                Log.Debug($@"{context.Request.Method} -> {fullUrl}");

                foreach (var param in context.Request.Query)
                {
                    var value = context.Request.Query[param];
                    queryParams[param] = value;
                }

                foreach (var header in context.Request.Headers)
                {
                    headers[header.Key] = (header.Key == "Host") ? fullUrl.Host : header.Value.First();
                }

                var url = new Flurl.Url(fullUrl.ToString()).SetQueryParams().WithHeaders(headers);

                HttpResponseMessage response;
                switch (context.Request.Method)
                {
                case "GET": { response = url.GetAsync().Result; break; }

                case "POST": { POSTContent = context.Request.Body.AsString(); response = url.PostAsync(new CapturedStringContent(POSTContent)).Result; break; }

                default: { throw new Exception($"unsupported method: {context.Request.Method}"); }
                }

                Self.sendRequest = true;
                return(new TextResponse(String.Empty, response.Content.Headers.ContentType.ToString())
                {
                    StatusCode = (HttpStatusCode)(int)response.StatusCode
                });
            }
        }
Пример #27
0
 public static AbstractForm CreateOpenInBrowserForm(string formId, string formBody, Flurl.Url url, INavigationService navService)
 {
     return(CreateSingleButtonForm(formId, formBody, "Open in browser",
                                   async(sender, e) => await navService.OpenInBrowser(url)));
 }