示例#1
0
        public async Task <string> Login(Credentials credentials)
        {
            var data = new Dictionary <string, string> {
                { "UserName", credentials.userName },
                { "Password", credentials.password },
                { "CompanyDB", credentials.database }
            };

            var content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");

            _logger.LogInformation($"Login: {credentials.userName}@{credentials.database}");

            HttpResponseMessage response = await httpClient.PostAsync("Login", content);

            string token = string.Empty;

            if (!response.IsSuccessStatusCode)
            {
                string body = await response.Content.ReadAsStringAsync();

                string message = string.Empty;

                if (response.StatusCode == HttpStatusCode.BadRequest)
                {
                    ServiceLayerError error = parseError(body);
                    message = $"Error Connecting to Service Layer: {error.code} {error.message}";
                }
                else
                {
                    message = $"Error Connecting to Service Layer: {response.StatusCode} {response.ReasonPhrase}";
                }

                _logger.LogError(message);
            }
            else
            {
                var responseString = await response.Content.ReadAsStringAsync();

                dynamic finalResult = JsonConvert.DeserializeObject(responseString);

                if (finalResult != null)
                {
                    _SessionId = finalResult.SessionId;

                    var responseCookies = cookies.GetCookies(_SLServer).Cast <Cookie>();

                    var ck = responseCookies.FirstOrDefault(m => m.Name == "ROUTEID");

                    _RouteId = ck.Value;
                }

                _logger.LogInformation("Login succeded");

                token = toToken(_SessionId, _RouteId);
            }

            return(token);
        }
示例#2
0
        private ServiceLayerError parseError(string error)
        {
            ServiceLayerError result = null;

            using (System.IO.StringReader sreader = new System.IO.StringReader(error))
                using (JsonTextReader jsonTextReader = new JsonTextReader(sreader))
                {
                    JToken j = JToken.ReadFrom(jsonTextReader);

                    string response = j.SelectToken("error").ToString();

                    result = JsonConvert.DeserializeObject <ServiceLayerError>(response);
                }

            return(result);
        }
示例#3
0
        public async Task <string> getQueryResult(string query, bool noRoute = false)
        {
            addSecurityCookies(noRoute);

            _logger.LogInformation($"GET {_SLServer}{query}");

            HttpResponseMessage response = await httpClient.GetAsync(query);

            string responseString = string.Empty;

            if (!response.IsSuccessStatusCode)
            {
                string body = await response.Content.ReadAsStringAsync();

                string message = string.Empty;

                if (response.StatusCode == HttpStatusCode.BadRequest)
                {
                    ServiceLayerError error = parseError(body);
                    message = $"Error running query {_SLServer}{query}: {error.code} {error.message}";
                }
                else
                {
                    message = $"Error running query {_SLServer}{query}: {response.StatusCode} {response.ReasonPhrase}";
                }

                _logger.LogError(message);
            }
            else
            {
                _logger.LogInformation($"Success: {_SLServer}{query}");
                responseString = await response.Content.ReadAsStringAsync();
            }

            return(responseString);
        }
示例#4
0
        async public Task <List <ServiceLayerResponse> > parseMultiPartResponse(HttpResponseMessage response)
        {
            List <ServiceLayerResponse> responseList = new List <ServiceLayerResponse>();

            var qp = from p in response.Content.Headers.ContentType.Parameters
                     where p.Name == "boundary"
                     select p;

            var parameter = qp.FirstOrDefault();

            string boundary = parameter == null ? "" : parameter.Value;

            using (Stream responseMessage = await response.Content.ReadAsStreamAsync())
                using (StreamReader reader = new StreamReader(responseMessage))
                {
                    int           statusCode    = 0;
                    bool          beginData     = false;
                    string        statusMessage = string.Empty;
                    StringBuilder submessage    = new StringBuilder(512);

                    while (!reader.EndOfStream)
                    {
                        string line = reader.ReadLine();

                        if (line.StartsWith($"--{boundary}"))
                        {
                            if (submessage.Length > 0)
                            {
                                ServiceLayerResponse slResponse = new ServiceLayerResponse();

                                if (statusCode == (int)HttpStatusCode.BadRequest)
                                {
                                    ServiceLayerError error = parseError(submessage.ToString());
                                    slResponse.success      = false;
                                    slResponse.errorCode    = error.code;
                                    slResponse.errorMessage = error.message.value;
                                }
                                else if (statusCode >= 300)
                                {
                                    slResponse.success      = false;
                                    slResponse.errorCode    = statusCode.ToString();
                                    slResponse.errorMessage = statusMessage;
                                }
                                else
                                {
                                    slResponse.success      = true;
                                    slResponse.errorCode    = "";
                                    slResponse.errorMessage = "";
                                    slResponse.data         = submessage.ToString();
                                }

                                responseList.Add(slResponse);

                                submessage.Clear();
                                statusCode    = 0;
                                statusMessage = string.Empty;
                                beginData     = false;
                            }
                        }
                        else if (line.StartsWith("HTTP"))
                        {
                            string[] httpResponse = line.Split(' ');
                            statusCode    = int.Parse(httpResponse[1]);
                            statusMessage = string.Join(' ', httpResponse, 2, httpResponse.Length - 2);
                        }
                        else if (statusCode != 0 && line == string.Empty)
                        {
                            beginData = true;
                        }
                        else if (beginData)
                        {
                            submessage.Append(line);
                        }
                    }
                }

            return(responseList);
        }
示例#5
0
        public async Task <ServiceLayerResponse> Send(HttpMethod method, string query, HttpContent payload, bool noRoute = false, bool returnContent = false)
        {
            ServiceLayerResponse slResponse = new ServiceLayerResponse();

            addSecurityCookies(noRoute);

            HttpRequestMessage message = new HttpRequestMessage(method, query);

            message.Content = payload;
            if (!returnContent)
            {
                message.Headers.Add("Prefer", "return-no-content");
            }
            HttpResponseMessage response = new HttpResponseMessage();

            DateTime inicio = DateTime.Now;

            try
            {
                response = await httpClient.SendAsync(message);
            }
            catch (Exception e)
            {
            }

            var fim = DateTime.Now - inicio;

            if (response.StatusCode == HttpStatusCode.BadRequest)
            {
                string responseContent = await response.Content.ReadAsStringAsync();

                ServiceLayerError error = parseError(responseContent);

                slResponse.success      = false;
                slResponse.errorCode    = error.code;
                slResponse.errorMessage = error.message.value;

                _logger.LogError($"{method.Method.ToUpper()} {query}: {error.code} {error.message.value}");
            }
            else if (!response.IsSuccessStatusCode)
            {
                slResponse.success      = false;
                slResponse.errorCode    = response.StatusCode.ToString();
                slResponse.errorMessage = response.ReasonPhrase;

                _logger.LogError($"{method.Method.ToUpper()} {query}: {slResponse.errorCode} {slResponse.errorMessage}");
            }
            else
            {
                slResponse.success      = true;
                slResponse.errorCode    = "";
                slResponse.errorMessage = "";

                _logger.LogInformation($"{method.Method.ToUpper()} {query}: Success");

                if (payload is MultipartContent)
                {
                    slResponse.internalResponses = await parseMultiPartResponse(response);

                    if (slResponse.internalResponses != null)
                    {
                        foreach (var r in slResponse.internalResponses)
                        {
                            if (!r.success)
                            {
                                _logger.LogError($"{method.Method.ToUpper()} {query}: {r.errorCode} {r.errorMessage}");
                            }
                        }
                    }
                }
                else
                {
                    slResponse.data = await response.Content.ReadAsStringAsync();
                }
            }

            return(slResponse);
        }