public static void WriteScanJson(int ResultType, string BaseId, string CompareId, bool ExportAll, string OutputPath) { List <RESULT_TYPE> ToExport = new List <RESULT_TYPE> { (RESULT_TYPE)ResultType }; Dictionary <RESULT_TYPE, int> actualExported = new Dictionary <RESULT_TYPE, int>(); JsonSerializer serializer = JsonSerializer.Create(new JsonSerializerSettings() { Formatting = Formatting.Indented, NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore, Converters = new List <JsonConverter>() { new StringEnumConverter() } }); if (ExportAll) { ToExport = new List <RESULT_TYPE> { RESULT_TYPE.FILE, RESULT_TYPE.CERTIFICATE, RESULT_TYPE.PORT, RESULT_TYPE.REGISTRY, RESULT_TYPE.SERVICE, RESULT_TYPE.USER }; } foreach (RESULT_TYPE ExportType in ToExport) { Log.Information("Exporting {0}", ExportType); List <CompareResult> records = DatabaseManager.GetComparisonResults(AsaHelpers.RunIdsToCompareId(BaseId, CompareId), ExportType); actualExported.Add(ExportType, records.Count); if (records.Count > 0) { serializer.Converters.Add(new StringEnumConverter()); var o = new Dictionary <string, Object>(); o["results"] = records; o["metadata"] = AsaHelpers.GenerateMetadata(); using (StreamWriter sw = new StreamWriter(Path.Combine(OutputPath, AsaHelpers.MakeValidFileName(BaseId + "_vs_" + CompareId + "_" + ExportType.ToString() + ".json.txt")))) //lgtm [cs/path-injection] { using (JsonWriter writer = new JsonTextWriter(sw)) { serializer.Serialize(writer, o); } } } } serializer.Converters.Add(new StringEnumConverter()); var output = new Dictionary <string, Object>(); output["results"] = actualExported; output["metadata"] = AsaHelpers.GenerateMetadata(); using (StreamWriter sw = new StreamWriter(Path.Combine(OutputPath, AsaHelpers.MakeValidFileName(BaseId + "_vs_" + CompareId + "_summary.json.txt")))) //lgtm [cs/path-injection] { using (JsonWriter writer = new JsonTextWriter(sw)) { serializer.Serialize(writer, output); } } }
public static void WriteMonitorJson(string RunId, int ResultType, string OutputPath) { List <FileMonitorEvent> records = DatabaseManager.GetSerializedMonitorResults(RunId); JsonSerializer serializer = JsonSerializer.Create(new JsonSerializerSettings() { Formatting = Formatting.Indented, NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore, Converters = new List <JsonConverter>() { new StringEnumConverter() } }); var output = new Dictionary <string, Object>(); output["results"] = records; output["metadata"] = AsaHelpers.GenerateMetadata(); string path = Path.Combine(OutputPath, AsaHelpers.MakeValidFileName(RunId + "_Monitoring_" + ((RESULT_TYPE)ResultType).ToString() + ".json.txt")); using (StreamWriter sw = new StreamWriter(path)) //lgtm [cs/path-injection] using (JsonWriter writer = new JsonTextWriter(sw)) { serializer.Serialize(writer, output); } Log.Information(Strings.Get("OutputWrittenTo"), (new FileInfo(path)).FullName); }
private static int RunExportCollectCommand(ExportCollectCommandOptions opts) { #if DEBUG Logger.Setup(true, opts.Verbose, opts.Quiet); #else Logger.Setup(opts.Debug, opts.Verbose, opts.Quiet); #endif if (opts.OutputPath != null && !Directory.Exists(opts.OutputPath)) { Log.Fatal(Strings.Get("Err_OutputPathNotExist"), opts.OutputPath); return(0); } SetupOrDie(opts.DatabaseFilename); CheckFirstRun(); AsaTelemetry.Setup(); if (opts.FirstRunId is null || opts.SecondRunId is null) { Log.Information("Provided null run Ids using latest two runs."); List <string> runIds = DatabaseManager.GetLatestRunIds(2, RUN_TYPE.COLLECT); if (runIds.Count < 2) { Log.Fatal(Strings.Get("Err_CouldntDetermineTwoRun")); System.Environment.Exit(-1); } else { opts.SecondRunId = runIds.First(); opts.FirstRunId = runIds.ElementAt(1); } } if (opts.FirstRunId is null || opts.SecondRunId is null) { return((int)ASA_ERROR.INVALID_ID); } Log.Information(Strings.Get("Comparing"), opts.FirstRunId, opts.SecondRunId); Dictionary <string, string> StartEvent = new Dictionary <string, string>(); StartEvent.Add("OutputPathSet", (opts.OutputPath != null).ToString(CultureInfo.InvariantCulture)); AsaTelemetry.TrackEvent("{0} Export Compare", StartEvent); CompareCommandOptions options = new CompareCommandOptions(opts.FirstRunId, opts.SecondRunId) { DatabaseFilename = opts.DatabaseFilename, AnalysesFile = opts.AnalysesFile, Analyze = opts.Analyze, SaveToDatabase = opts.SaveToDatabase }; var results = CompareRuns(options).Select(x => new KeyValuePair <string, object>($"{x.Key.Item1}_{x.Key.Item2}", x.Value)).ToDictionary(x => x.Key, x => x.Value); JsonSerializer serializer = JsonSerializer.Create(new JsonSerializerSettings() { Formatting = Formatting.Indented, NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore, Converters = new List <JsonConverter>() { new StringEnumConverter() }, ContractResolver = new AsaExportContractResolver() }); var outputPath = opts.OutputPath; if (outputPath is null) { outputPath = Directory.GetCurrentDirectory(); } if (opts.ExplodedOutput) { results.Add("metadata", AsaHelpers.GenerateMetadata()); string path = Path.Combine(outputPath, AsaHelpers.MakeValidFileName(opts.FirstRunId + "_vs_" + opts.SecondRunId)); Directory.CreateDirectory(path); foreach (var key in results.Keys) { string filePath = Path.Combine(path, AsaHelpers.MakeValidFileName(key)); using (StreamWriter sw = new StreamWriter(filePath)) //lgtm[cs/path-injection] { using (JsonWriter writer = new JsonTextWriter(sw)) { serializer.Serialize(writer, results[key]); } } } Log.Information(Strings.Get("OutputWrittenTo"), (new DirectoryInfo(path)).FullName); } else { string path = Path.Combine(outputPath, AsaHelpers.MakeValidFileName(opts.FirstRunId + "_vs_" + opts.SecondRunId + "_summary.json.txt")); var output = new Dictionary <string, object>(); output["results"] = results; output["metadata"] = AsaHelpers.GenerateMetadata(); using (StreamWriter sw = new StreamWriter(path)) //lgtm[cs/path-injection] { using (JsonWriter writer = new JsonTextWriter(sw)) { serializer.Serialize(writer, output); } } Log.Information(Strings.Get("OutputWrittenTo"), (new FileInfo(path)).FullName); } return(0); }