using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Net.Http; using System.Net.Http.Headers; namespace Neo.LegitimateLicences.Helpers { public enum APIVersion { V1_PRD, V1_QA, V1_DEV } public class Common { private const string Version = "1.0"; private const string APIURL_V1_Production = "http://n-nltis-qaapi.legiti-mate.net/1.0"; private const string APIURL_V1_QA = "http://n-nltis-qaapi.legiti-mate.net/1.0/"; private const string APIURL_V1_Dev = "http://nltisdevapi.legiti-mate.net/1.0/"; private const string CDNURL_V1_Production = "http://nltiscdn.legiti-mate.net/ClientSetup/"; private const string CDNURL_V1_QA = "http://nltisqacdn.legiti-mate.net/ClientSetup/"; private const string CDNURL_V1_Dev = "http://nltisdevcdn.legiti-mate.net/ClientSetup/"; public string ApiKey { get; set; } public string ApiUserEmail { get; set; } public APIVersion ApiVersion { get; set; } public void SetApiVersion(string environment) { if (environment == "DEV") { ApiVersion = APIVersion.V1_DEV; } else if (environment == "QA") { ApiVersion = APIVersion.V1_QA; } else if (environment == "PRD") { ApiVersion = APIVersion.V1_PRD; } } public string ApiUrl { get { switch (ApiVersion) { case APIVersion.V1_PRD: return APIURL_V1_Production; case APIVersion.V1_QA: return APIURL_V1_QA; case APIVersion.V1_DEV: return APIURL_V1_Dev; default: return APIURL_V1_Dev; } } } public string CdnUrl { get { switch (ApiVersion) { case APIVersion.V1_PRD: return CDNURL_V1_Production; case APIVersion.V1_QA: return CDNURL_V1_QA; case APIVersion.V1_DEV: return CDNURL_V1_Dev; default: return CDNURL_V1_Dev; } } } public ApiRequestResult ApiRequestGET(string apiUrl) { var apiResult = new ApiRequestResult(); try { using (var client = new HttpClient()) { client.DefaultRequestHeaders.Add("api_Key", ApiKey); client.DefaultRequestHeaders.Add("api_User", ApiUserEmail); client.Timeout = new TimeSpan(0, 5, 0); //5 minute timeout using (var response = client.GetAsync(apiUrl).Result) { if (response.IsSuccessStatusCode) { var r = response.Content.ReadAsStringAsync().Result; apiResult = JsonConvert.DeserializeObject(r); } else { throw new Exception(response.ReasonPhrase); } } } } catch (Exception ex) { apiResult.Error = ex.Message; } return apiResult; } public ApiRequestResult ApiRequestPOST(string apiUrl, dynamic jsonObject) { var apiResult = new ApiRequestResult(); try { using (var client = new HttpClient()) { client.Timeout = new TimeSpan(0, 5, 0); //5 minute timeout client.DefaultRequestHeaders.Add("api_Key", ApiKey); client.DefaultRequestHeaders.Add("api_User", ApiUserEmail); var json = JsonConvert.SerializeObject(jsonObject); var stringContent = new StringContent(json, UnicodeEncoding.UTF8, "application/json"); using (var response = client.PostAsync(apiUrl, stringContent).Result) { if (response.IsSuccessStatusCode) { var r = response.Content.ReadAsStringAsync().Result; apiResult = JsonConvert.DeserializeObject(r); } else { throw new Exception(response.ReasonPhrase); } } } } catch (Exception ex) { apiResult.Error = ex.Message; } return apiResult; } public ApiRequestResult_ByteArray ApiRequestDOWNLOAD(string documentUrl) { var apiResult = new ApiRequestResult_ByteArray(); HttpWebResponse response = null; Stream remoteStream = null; MemoryStream localStream = null; int bytesProcessed = 0; try { HttpWebRequest request = (HttpWebRequest) WebRequest.Create(documentUrl); request.Timeout = 300000; //5 minutes request.KeepAlive = false; request.ProtocolVersion = HttpVersion.Version10; request.Method = "GET"; request.Headers.Add("api_Key", ApiKey); request.Headers.Add("api_User", ApiUserEmail); response = (HttpWebResponse)request.GetResponse(); remoteStream = response.GetResponseStream(); localStream = new MemoryStream(); byte[] buffer = new byte[1024]; int bytesRead; do { bytesRead = remoteStream.Read(buffer, 0, buffer.Length); localStream.Write(buffer, 0, bytesRead); bytesProcessed += bytesRead; } while (bytesRead > 0); apiResult.Success = true; apiResult.Result = localStream.ToArray(); apiResult.ResultContentType = response.ContentType; } catch (Exception ex) { apiResult.Error = ex.Message; } finally { if (response != null) response.Close(); if (remoteStream != null) remoteStream.Close(); if (localStream != null) localStream.Close(); } return apiResult; } } public class ApiRequestResult { public bool Success { get; set; } public dynamic Result { get; set; } public string ResultString { get; set; } public string ErrorCode { get; set; } public string Error { get; set; } } public class ApiRequestResult_ByteArray { public bool Success { get; set; } public byte[] Result { get; set; } public string ResultContentType { get; set; } public string Error { get; set; } } }