using DevExpress.Data.Filtering; using DevExpress.ExpressApp.Xpo; using DevExpress.Persistent.Base; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace Nuvolar.Module.StaticClass { /// /// Laravel RestAPI kezelő osztály /// public static class RestAPI { private static string _UriBase; private static Dictionary _LoginInfo; private static int _StatusCode; private static string _StatusMessage; private static string _ResponseMessage; private static string _API_Token; private static string _GeocodeAPIKey; public static int StatusCode { get { return _StatusCode; } } public static string StatusMessage { get { return _StatusMessage; } } public static string ResponseMessage { get { return _ResponseMessage; } } public static void Init(XPObjectSpace _onew) { _ResponseMessage = ""; _UriBase = ConfigurationManager.AppSettings["Uri"]; _GeocodeAPIKey = ConfigurationManager.AppSettings["GeocodeAPIKey"]; Laravel.Users _Users = _onew.FindObject(CriteriaOperator.Parse("email='sysadmin@emango.com'")); if (_Users != null) { if (String.IsNullOrEmpty(_Users.api_token)) { _LoginInfo = new Dictionary { { "email", "sysadmin@emango.com" }, { "password", "SysAdmin" }}; var json = ExecuteRootePOST("login", false, JsonConvert.SerializeObject(_LoginInfo)); if (_StatusCode == 200) { var dd = JsonConvert.DeserializeObject(json); var dict = JObject.Parse(json).SelectToken("data").ToObject>(); _API_Token = dict["api_token"]; } } else { _API_Token = _Users.api_token; } } } public static string ExecuteRootePOST(string _RooteString, bool _NeedAuthentication, string _postData) { _StatusCode = 500; _StatusMessage = "Not respond"; string json = ""; Tracing.Tracer.LogText(_UriBase + _RooteString); var _Uri = new Uri(_UriBase + _RooteString, UriKind.Absolute); var _WebRequest = WebRequest.Create(_Uri); HttpWebRequest _HttpWebRequest = (HttpWebRequest)_WebRequest; _HttpWebRequest.Method = "POST"; byte[] byteArray = Encoding.UTF8.GetBytes(_postData); if (_NeedAuthentication) { _HttpWebRequest.PreAuthenticate = true; _HttpWebRequest.Headers.Add("Authorization", "Bearer " + _API_Token); _HttpWebRequest.Headers.Add("cdb", GeneralFunction.GLOBAL_SQLDatabase); } _HttpWebRequest.ContentType = "application/json"; _HttpWebRequest.Accept = "application/json"; _HttpWebRequest.ContentLength = byteArray.Length; Stream _dataStream = _HttpWebRequest.GetRequestStream(); _dataStream.Write(byteArray, 0, byteArray.Length); _dataStream.Close(); try { WebResponse _WebResponse = _WebRequest.GetResponse(); _StatusCode = (int)((HttpWebResponse)_WebResponse).StatusCode; _StatusMessage = ((HttpWebResponse)_WebResponse).StatusDescription; var _responseStream = _WebResponse.GetResponseStream(); if (_responseStream == null) return json; var _StreamReader = new StreamReader(_responseStream, Encoding.Default); json = _StreamReader.ReadToEnd(); try { _StatusMessage = JsonConvert.DeserializeObject(json).ToString(); } catch (Exception) { } _responseStream.Close(); _WebResponse.Close(); } catch (WebException ex) { if (ex.Status == WebExceptionStatus.ProtocolError) { var _WebResponse = (HttpWebResponse)ex.Response; _StatusCode = (int)_WebResponse.StatusCode; _StatusMessage = ((HttpWebResponse)_WebResponse).StatusDescription; } } return json; } public static string ExecuteRooteGET(string _RooteString, bool _NeedAuthentication) { string json = ""; Tracing.Tracer.LogText(_UriBase + _RooteString); var _Uri = new Uri(_UriBase + _RooteString, UriKind.Absolute); var _WebRequest = WebRequest.Create(_Uri); _WebRequest.Method = "GET"; HttpWebRequest _HttpWebRequest = (HttpWebRequest)_WebRequest; if (_NeedAuthentication) { _HttpWebRequest.PreAuthenticate = true; _HttpWebRequest.Headers.Add("Authorization", "Bearer " + _API_Token); _HttpWebRequest.Headers.Add("cdb", GeneralFunction.GLOBAL_SQLDatabase); } _HttpWebRequest.Accept = "application/json"; _HttpWebRequest.ContentType = "application/json"; try { WebResponse _WebResponse = _WebRequest.GetResponse(); _StatusCode = (int)((HttpWebResponse)_WebResponse).StatusCode; Stream _responseStream = _WebResponse.GetResponseStream(); if (_responseStream == null) return json; StreamReader _StreamReader = new StreamReader(_responseStream, Encoding.Default); json = _StreamReader.ReadToEnd(); _responseStream.Close(); _WebResponse.Close(); } catch (WebException ex) { if (ex.Status == WebExceptionStatus.ProtocolError) { var _WebResponse = (HttpWebResponse)ex.Response; _StatusCode = (int)_WebResponse.StatusCode; } } return json; } public static string ExecuteGOOGLEMAPSGET(string _RouteString) { string json = ""; Tracing.Tracer.LogText(_UriBase + _RouteString); var _Uri = new Uri("https://maps.googleapis.com/maps/api/geocode/json?address=" + _RouteString + "&key=" + _GeocodeAPIKey, UriKind.Absolute); var _WebRequest = WebRequest.Create(_Uri); _WebRequest.Method = "GET"; HttpWebRequest _HttpWebRequest = (HttpWebRequest)_WebRequest; _HttpWebRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"; _HttpWebRequest.ContentType = "application/json"; _HttpWebRequest.Headers.Add("accept-language", "hu-HU,hu;q=0.9,en-US;q=0.8,en;q=0.7,pt;q=0.6"); try { WebResponse _WebResponse = _WebRequest.GetResponse(); _StatusCode = (int)((HttpWebResponse)_WebResponse).StatusCode; Stream _responseStream = _WebResponse.GetResponseStream(); if (_responseStream == null) return json; StreamReader _StreamReader = new StreamReader(_responseStream, Encoding.Default); json = _StreamReader.ReadToEnd(); _responseStream.Close(); _WebResponse.Close(); } catch (WebException ex) { if (ex.Status == WebExceptionStatus.ProtocolError) { var _WebResponse = (HttpWebResponse)ex.Response; _StatusCode = (int)_WebResponse.StatusCode; } } return json; } } }