Example #1
0
        private string GetTargetUrl(ApiRequestTarget reqTarget)
        {
            var url = reqTarget == ApiRequestTarget.Auth ? settings.ApiAuthEndpoint : settings.ApiEndpoint;

            if (!url.EndsWith("/"))
            {
                url += "/";
            }
            url += reqTarget + "/";
            if (!string.IsNullOrEmpty(identifier))
            {
                url += $"{identifier}/";
            }
            if (!string.IsNullOrEmpty(method))
            {
                url += $"{method}/";
            }
            if (parameters == null)
            {
                return(url);
            }
            var parameterString = string.Join("/", parameters.Where(x => string.IsNullOrEmpty(x.Key)).Select(x => x.Value));

            if (!string.IsNullOrEmpty(parameterString))
            {
                url += $"{parameterString}";
            }
            return(url);
        }
Example #2
0
        private string GetTargetUrl(ApiRequestTarget reqTarget)
        {
            // http(s)://server:1111/api/
            var url = settings.ApiEndpoint;

            if (!url.EndsWith("/"))
            {
                url += "/";
            }
            url += reqTarget + "/";
            if (!string.IsNullOrEmpty(identifier))
            {
                url += $"{identifier}/";
            }
            if (!string.IsNullOrEmpty(method))
            {
                url += $"{method}/";
            }
            if (parameters == null)
            {
                return(url);
            }
            var parameterString = string.Join("/", parameters.Where(x => string.IsNullOrEmpty(x.Key)));

            if (!string.IsNullOrEmpty(parameterString))
            {
                url += $"/{parameterString}";
            }
            return(url);
        }
Example #3
0
        public async Task <TResult> SendAsync <TResult, TModel>(ApiRequestTarget reqTarget, ApiRequestType type, TModel model)
        {
            if (IntegrityCheck.IsCompromised)
            {
                return(default(TResult));
            }

            // string target, string method,
            var target      = GetTargetUrl(reqTarget);
            var request     = (HttpWebRequest)WebRequest.CreateDefault(new Uri(target, UriKind.Absolute));
            var requestData = "";

            //request.Accept = "application/json";

            if (reqTarget == ApiRequestTarget.Game || reqTarget == ApiRequestTarget.Players)
            {
                request.Timeout = 25000;
            }

            request.UserAgent       = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36";
            request.Method          = GetMethod(type);
            request.CookieContainer = cookieContainer;
            request.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true;

            if (authToken != null)
            {
                request.Headers["auth-token"] = JsonConvert.SerializeObject(authToken).Base64Encode();
            }

            if (sessionToken != null)
            {
                request.Headers["session-token"] = JsonConvert.SerializeObject(sessionToken).Base64Encode();
            }

            if (parameters != null)
            {
                var named = parameters.Where(x => !string.IsNullOrEmpty(x.Key)).ToList();
                if (model != null)
                {
                    foreach (var param in named)
                    {
                        request.Headers[param.Key] = param.Value;
                    }
                }
                else if (named.Count > 0)
                {
                    requestData = "{" + string.Join(",", named.Select(x => "\"" + x.Key + "\": " + x.Value)) + "}";
                }
            }

            if (model != null)
            {
                requestData = JsonConvert.SerializeObject(model);
            }


            if (!string.IsNullOrEmpty(requestData))
            {
                request.ContentType   = "application/json";
                request.ContentLength = Encoding.UTF8.GetByteCount(requestData);
                using (var reqStream = await request.GetRequestStreamAsync())
                    using (var writer = new StreamWriter(reqStream))
                    {
                        await writer.WriteAsync(requestData);

                        await writer.FlushAsync();
                    }
            }

            try
            {
                using (var response = await request.GetResponseAsync())
                    using (var resStream = response.GetResponseStream())
                        using (var reader = new StreamReader(resStream))
                        {
                            if (((HttpWebResponse)response).StatusCode == HttpStatusCode.Forbidden)
                            {
                                return(default(TResult));
                            }

                            if (typeof(TResult) == typeof(object))
                            {
                                return(default(TResult));
                            }

                            var responseData = await reader.ReadToEndAsync();

                            return(JsonConvert.DeserializeObject <TResult>(responseData));
                        }
            }
            catch (Exception exc)
            {
                return(default(TResult));
            }
        }
Example #4
0
 public Task SendAsync(ApiRequestTarget target, ApiRequestType type)
 {
     return(SendAsync <object>(target, type));
 }
Example #5
0
 public Task <TResult> SendAsync <TResult>(ApiRequestTarget reqTarget, ApiRequestType type)
 {
     return(SendAsync <TResult, object>(reqTarget, type, null));
 }
Example #6
0
        public async Task <TResult> SendAsync <TResult, TModel>(ApiRequestTarget reqTarget, ApiRequestType type, TModel model)
        {
            // string target, string method,
            var target      = GetTargetUrl(reqTarget);
            var request     = (HttpWebRequest)WebRequest.CreateDefault(new Uri(target, UriKind.Absolute));
            var requestData = "";

            request.Method          = GetMethod(type);
            request.CookieContainer = cookieContainer;
            request.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true;

            if (authToken != null)
            {
                request.Headers["auth-token"] = Base64Encode(JSON.Stringify(authToken));
            }

            if (sessionToken != null)
            {
                request.Headers["session-token"] = Base64Encode(JSON.Stringify(sessionToken));
            }

            if (parameters != null)
            {
                var named = this.parameters.Where(x => !string.IsNullOrEmpty(x.Key)).ToList();
                if (model != null)
                {
                    foreach (var param in named)
                    {
                        request.Headers[param.Key] = param.Value;
                    }
                }
                else if (named.Count > 0)
                {
                    requestData = "{" + string.Join(",", named.Select(x => "\"" + x.Key + "\": " + x.Value)) + "}";
                }
            }

            if (model != null)
            {
                requestData = JSON.Stringify(model);
            }

            if (!string.IsNullOrEmpty(requestData))
            {
                request.ContentType   = "application/json";
                request.ContentLength = Encoding.UTF8.GetByteCount(requestData);
                using (var reqStream = await request.GetRequestStreamAsync())
                    using (var writer = new StreamWriter(reqStream))
                    {
                        await writer.WriteAsync(requestData);

                        await writer.FlushAsync();
                    }
            }

            using (var response = await request.GetResponseAsync())
                using (var resStream = response.GetResponseStream())
                    using (var reader = new StreamReader(resStream))
                    {
                        if (typeof(TResult) == typeof(object))
                        {
                            return(default(TResult));
                        }

                        var responseData = await reader.ReadToEndAsync();

                        return(JSON.Parse <TResult>(responseData));
                    }
        }