using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using SimpleHttp; using System.Xml.Linq; namespace BodyshopPartner.Utils { public static class HTTPServer { private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); public static void InitHttpServer() { Route.Add("/qb/receivables", (req, res, props) => { res.WithCORS(); //res.AddHeader("Access-Control-Allow-Origin", "http://localhost:3000 https://localhost:3000 http://localhost:5000 https://localhost:5000 https://*.imex.online,imex.online"); res.Close(); }, "OPTIONS"); Route.Add("/qb/receivables", (req, res, props) => { HandleQbReceivables(req, res); } , "POST"); logger.Trace("Starting HTTP server..."); //TODO As a part of the installer, add netsh http add urlacl url=http://+:1337/ user="Everyone HttpServer.ListenAsync(1337, System.Threading.CancellationToken.None, Route.OnHttpRequestAsync).Wait(); } private static void HandleQbReceivables(System.Net.HttpListenerRequest req, System.Net.HttpListenerResponse res) { logger.Debug("/qb/receivables - POST"); string requestXMLstring = ParseBodyToString(req); XDocument requestXMLdoc = ParseStringToXml(requestXMLstring); string CustomerId = QuickBooksInterop.CreateCustomerIfNotExist(requestXMLdoc); string InvoiceAddResponse = QuickBooksInterop.ProcessQBXmlRequest(requestXMLstring); string[] status = new string[3]; if (InvoiceAddResponse != null) status = QuickBooksInterop.parseInvoiceAddRs(InvoiceAddResponse); if (InvoiceAddResponse != null && status[0] == "0") { logger.Debug("Invoice added successfully."); } else { logger.Error("Error adding Invoice.\nStatus Code: {0} \nSeverity: {1} \nMessage {2}", status[0], status[1], status[2]); } res.WithCORS().AsText("Hello."); } public static string ParseBodyToString(System.Net.HttpListenerRequest req) { System.IO.Stream body = req.InputStream; System.Text.Encoding encoding = req.ContentEncoding; System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding); //if (req.ContentType != null) //{ // Console.WriteLine("Client data content type {0}", req.ContentType); //} //Console.WriteLine("Client data content length {0}", req.ContentLength64); //Console.WriteLine("Start of client data:"); // Convert the data to a string and display it on the console. string s = reader.ReadToEnd(); //Console.WriteLine(s); //Console.WriteLine("End of client data:"); body.Close(); return s; } public static XDocument ParseStringToXml(string input) { return XDocument.Parse(input); } } }