string SendViaAPIUploadOneReport(WebClient client, string filename, string xml) { byte[] answer = null; Version version = Assembly.GetExecutingAssembly().GetName().Version; client.Headers.Add(HttpRequestHeader.ContentType, "application/json"); client.Headers.Add(HttpRequestHeader.UserAgent, "PingCastle " + version.ToString(4)); try { var request = "{\"xmlReport\": \"" + HealthCheckReportMapBuilder.EscapeJsonString(xml) + "\",\"filename\":\"" + HealthCheckReportMapBuilder.EscapeJsonString(filename) + "\"}"; byte[] data = Encoding.ASCII.GetBytes(request); answer = client.UploadData(apiEndpoint + "api/Agent/SendReport", "POST", data); return(Encoding.Default.GetString(answer)); } catch (WebException ex) { if (ex.Response != null) { var responseStream = ex.Response.GetResponseStream(); if (responseStream != null) { using (var reader = new StreamReader(responseStream)) { string responseText = reader.ReadToEnd(); throw new ApplicationException(responseText); } } } throw; } }
public bool ConsolidationTask() { return(StartTask("Healthcheck consolidation", () => { HealthcheckAnalyzer hc = new HealthcheckAnalyzer(); if (String.IsNullOrEmpty(FileOrDirectory)) { FileOrDirectory = Directory.GetCurrentDirectory(); } if (!Directory.Exists(FileOrDirectory)) { WriteInRed("The directory " + FileOrDirectory + " doesn't exist"); return; } HealthcheckDataCollection consolidation = HealthcheckDataHelper.LoadXmls(FileOrDirectory, FilterReportDate); if (consolidation.Count == 0) { WriteInRed("No report has been found. The program will stop"); return; } HealthCheckReportConsolidation report = new HealthCheckReportConsolidation(consolidation); report.GenerateReportFile("ad_hc_summary.html"); HealthCheckReportMapBuilder nodeAnalyzer = new HealthCheckReportMapBuilder(consolidation); nodeAnalyzer.Log = Console.WriteLine; nodeAnalyzer.GenerateReportFile("ad_hc_summary_full_node_map.html"); nodeAnalyzer.FullNodeMap = false; nodeAnalyzer.CenterDomainForSimpliedGraph = CenterDomainForSimpliedGraph; nodeAnalyzer.GenerateReportFile("ad_hc_summary_simple_node_map.html"); } )); }
// return JWT token void SendViaAPIGetJwtToken(WebClient client) { ServicePointManager.Expect100Continue = false; client.UseDefaultCredentials = true; client.Proxy = WebRequest.DefaultWebProxy; Version version = Assembly.GetExecutingAssembly().GetName().Version; client.Headers.Add(HttpRequestHeader.ContentType, "application/json"); client.Headers.Add(HttpRequestHeader.UserAgent, "PingCastle " + version.ToString(4)); //client.Headers.Add("Authorization", token); string token; byte[] answer = null; try { string location = Dns.GetHostEntry(Environment.MachineName).HostName; byte[] data = Encoding.Default.GetBytes("{\"apikey\": \"" + HealthCheckReportMapBuilder.EscapeJsonString(apiKey) + "\",\"location\": \"" + HealthCheckReportMapBuilder.EscapeJsonString(location) + "\"}"); answer = client.UploadData(apiEndpoint + "api/Agent/Login", "POST", data); token = Encoding.Default.GetString(answer); client.Headers.Add(HttpRequestHeader.Authorization, token); } catch (WebException ex) { if (ex.Response != null) { var responseStream = ex.Response.GetResponseStream(); if (responseStream != null) { using (var reader = new StreamReader(responseStream)) { string responseText = reader.ReadToEnd(); throw new UnauthorizedAccessException(responseText); } } } throw new UnauthorizedAccessException(ex.Message); } }
public bool CartoTask(bool PerformHealthCheckGenerateDemoReports) { List <HealthcheckAnalyzer.ReachableDomainInfo> domains = null; StartTask("Exploration", () => { HealthcheckAnalyzer hcroot = new HealthcheckAnalyzer(); domains = hcroot.GetAllReachableDomains(ADWSPort, Credential); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("List of domains that will be queried"); Console.ResetColor(); foreach (var domain in domains) { Console.WriteLine(domain.domain); } }); HealthcheckDataCollection consolidation = new HealthcheckDataCollection(); StartTask("Examining all domains in parallele (this can take a few minutes)", () => { BlockingQueue <string> queue = new BlockingQueue <string>(30); int numberOfThread = 100; Thread[] threads = new Thread[numberOfThread]; try { ThreadStart threadFunction = () => { for (; ;) { string domain = null; if (!queue.Dequeue(out domain)) { break; } try { Console.WriteLine("[" + DateTime.Now.ToLongTimeString() + "] " + "Starting the analysis of " + domain); HealthcheckAnalyzer hc = new HealthcheckAnalyzer(); hc.NumberOfDepthForSplit = NumberOfDepthForSplit; hc.AnalyzeReachableDomains = AnalyzeReachableDomains; hc.GenerateCartoReport(domain, ADWSPort, Credential); consolidation.Add(hc.healthcheckData); Console.WriteLine("[" + DateTime.Now.ToLongTimeString() + "] " + "Analysis of " + domain + " completed with success"); } catch (Exception ex) { Console.WriteLine("[" + DateTime.Now.ToLongTimeString() + "] " + "Analysis of " + domain + " failed"); Trace.WriteLine("Exception while analysing domain " + domain + " : " + ex.Message); Trace.WriteLine(ex.StackTrace); } } }; // Consumers for (int i = 0; i < numberOfThread; i++) { threads[i] = new Thread(threadFunction); threads[i].Start(); } foreach (var domain in domains) { queue.Enqueue(domain.domain); } queue.Quit(); Trace.WriteLine("examining domains file completed. Waiting for worker thread to complete"); for (int i = 0; i < numberOfThread; i++) { threads[i].Join(); } Trace.WriteLine("Done examining domains"); } catch (Exception ex) { Trace.WriteLine("Exception while analysing domain in carto: " + ex.Message); Trace.WriteLine(ex.StackTrace); } finally { queue.Quit(); for (int i = 0; i < numberOfThread; i++) { if (threads[i] != null) { if (threads[i].ThreadState == System.Threading.ThreadState.Running) { threads[i].Abort(); } } } } }); if (PerformHealthCheckGenerateDemoReports) { Console.WriteLine("Performing demo report transformation"); Trace.WriteLine("Performing demo report transformation"); consolidation = HealthcheckDataHelper.TransformReportsToDemo(consolidation); } if (!StartTask("Healthcheck consolidation", () => { HealthcheckAnalyzer hc = new HealthcheckAnalyzer(); HealthCheckReportMapBuilder nodeAnalyzer = new HealthCheckReportMapBuilder(consolidation); nodeAnalyzer.Log = Console.WriteLine; nodeAnalyzer.CenterDomainForSimpliedGraph = CenterDomainForSimpliedGraph; nodeAnalyzer.GenerateReportFile("ad_carto_full_node_map.html"); nodeAnalyzer.FullNodeMap = false; nodeAnalyzer.CenterDomainForSimpliedGraph = CenterDomainForSimpliedGraph; nodeAnalyzer.GenerateReportFile("ad_carto_simple_node_map.html"); } )) { return(false); } return(true); }