public static async Task <List <PortfolioItem> > GetAllListings(this StockXAccount login) { List <PortfolioItem> OutputItems = new List <PortfolioItem>(); StockXApiResult <GetPagedPortfolioItemsResponse> GetListings; try { GetListings = await login.GetCurrentListings(login.CustomerID.ToString(), 1); } catch (Exception ex) { AuditExtensions.CreateAudit(login.Id, "StockXApi", "GetAllListings", "Error", ex.Message, ex.StackTrace); return(null); } if ((int)GetListings.Code > 399 && (int)GetListings.Code < 500) { throw new NeedsVerificaitonException(login); } GetPagedPortfolioItemsResponse Items = GetListings.RO; if (Items.PortfolioItems.Count == 0) { return(OutputItems); } if (Items.PortfolioItems == null) { return(null); } OutputItems.AddRange(Items.PortfolioItems); var i = 2; while (Items.Pagination != null && Items.Pagination.NextPage != null) { GetListings = await login.GetCurrentListings(login.CustomerID.ToString(), i ++); if ((int)GetListings.Code > 399 && (int)GetListings.Code < 500) { throw new NeedsVerificaitonException(login); } Items = GetListings.RO; if (Items.PortfolioItems == null || Items.PortfolioItems.Count == 0) { break; } OutputItems.AddRange(Items.PortfolioItems); } return(OutputItems); }
public static async Task <StockXApiResult <LoginCookieToken> > GetLogin(this StockXAccount stockAuth) { var tmpdr = Path.GetTempFileName(); var Json = Base64Encode(JsonConvert.SerializeObject(stockAuth)); ProcessStartInfo Processstartinfo; if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { Processstartinfo = new ProcessStartInfo("/usr/bin/xvfb-run", $" /usr/bin/node --require ts-node/register StockLoginator.ts --BaseJson={Json} --JobID={tmpdr} ") { UseShellExecute = false, WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory + "NodeStuff" }; } else { string arguments = $"--require ts-node/register StockLoginator.ts --BaseJson={Json} --JobID={tmpdr} "; Processstartinfo = new ProcessStartInfo("node", arguments) { UseShellExecute = true, WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory + Path.DirectorySeparatorChar + "NodeStuff" }; } string jsontxt = ""; string outputtxt = ""; try { var Proc = new Process { StartInfo = Processstartinfo }; Proc.Start(); //Error = Proc.StandardError.ReadToEnd(); // Output = Proc.StandardOutput.ReadToEnd(); var MaxWait = 40; while (!Proc.WaitForExit(5000) && MaxWait-- > 0) { await Task.Delay(500); } if (MaxWait == 0) { try { Proc.Kill(); AuditExtensions.CreateAudit(stockAuth.Id, "StockXApi", "GetLogin", "Killed Process"); } catch (Exception ex) { AuditExtensions.CreateAudit(stockAuth.Id, "StockXApi", "GetLogin", "Error Killing Process", ex.Message, ex.StackTrace); } } if (File.Exists(tmpdr + ".txt")) { outputtxt = File.ReadAllText(tmpdr + ".txt"); File.Delete(tmpdr + ".txt"); } if (File.Exists(tmpdr)) { jsontxt = File.ReadAllText(tmpdr); File.Delete(tmpdr); var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, MissingMemberHandling = MissingMemberHandling.Ignore }; var JsonObj = JsonConvert.DeserializeObject <LoginCookieToken>(jsontxt, settings); if (JsonObj != null && JsonObj.error == null) { return new StockXApiResult <LoginCookieToken>() { Code = HttpStatusCode.OK, ResultText = jsontxt + outputtxt, RO = JsonObj } } ; } else { using (var Db = HostContext.Resolve <IDbConnectionFactory>().Open()) { AuditExtensions.CreateAudit(Db, stockAuth.Id, "FunBoy/GetLogin", "Login Attempt", "Login Failed: " + jsontxt + outputtxt); } } return(new StockXApiResult <LoginCookieToken>() { Code = HttpStatusCode.Ambiguous, ResultText = jsontxt + outputtxt + tmpdr, }); } catch (Exception ex) { using (var Db = HostContext.Resolve <IDbConnectionFactory>().Open()) { AuditExtensions.CreateAudit(Db, stockAuth.Id, "FunBoy/GetLogin", "Login Attempt", "Login Failed: " + jsontxt + outputtxt, ex.Message, ex.StackTrace); } return(new StockXApiResult <LoginCookieToken>() { Code = HttpStatusCode.InternalServerError, ResultText = AppDomain.CurrentDomain.BaseDirectory + "NodeStuff" + ex.Message + ex.StackTrace + outputtxt + jsontxt + tmpdr, }); } }