/// <summary> /// This will take a dump analysis uri from the json_payload, serialize the analysis and store /// it in our SQL database. /// </summary> /// <param name="triage_payload"></param> /// <returns></returns> public static async Task SqlIndexTarget(int dumplingId, string triage_payload) { try { var triageData = JsonConvert.DeserializeObject <Dictionary <string, string> >(triage_payload); await TriageDb.UpdateDumpTriageInfo(dumplingId, triageData); } catch (Exception e) { Trace.WriteLine($"Handler 'SqlIndexTargetHandler' failed: {e}"); } }
public static async Task RegisterAsync(string clientid, string thumbprint) { var clientAssertionCertPfx = FindCertificateByThumbprint(thumbprint); _cert = new ClientAssertionCertificate(clientid, clientAssertionCertPfx); var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(DumplingKeyVaultAuthConfig.GetAccessToken)); var storage = (await kv.GetSecretAsync("https://dumplingvault.vault.azure.net:443/secrets/dumplingstorage")).Value; var servicebus = (await kv.GetSecretAsync("https://dumplingvault.vault.azure.net:443/secrets/dumplingservicebus")).Value; var eventhub = (await kv.GetSecretAsync("https://dumplingvault.vault.azure.net:443/secrets/dumplingeventhub")).Value; var dbconnectionstring = (await kv.GetSecretAsync(@"https://dumplingvault.vault.azure.net:443/secrets/dumplingdbconnectionstring")).Value; NearbyConfig.Settings.Add("dumpling-service storage account connection string", storage); NearbyConfig.Settings.Add("dumpling-service bus connection string", servicebus); NearbyConfig.Settings.Add("dumpling-service eventhub connection string", eventhub); TriageDb.Init(dbconnectionstring); }
private static void Main(string[] args) { TriageDb.Init("TriageDbContext"); List <Dump> dumps = new List <Dump>(); foreach (var triagePath in Directory.EnumerateFiles(@"h:\temp\triagedata")) { Dump d = new Dump() { DisplayName = Path.GetFileNameWithoutExtension(triagePath), DumpPath = triagePath, Origin = "TestData", DumpTime = DateTime.Now }; dumps.Add(d); d.DumpId = TriageDb.AddDumpAsync(d).GetAwaiter().GetResult(); } foreach (var d in dumps) { try { Dictionary <string, string> dict = DeserializeTriageJson(d.DumpPath); var triageData = TriageData.FromDictionary(dict); TriageDb.UpdateDumpTriageInfo(d.DumpId, triageData).GetAwaiter().GetResult(); } catch (Exception e) { Console.WriteLine($"Dump {d.DisplayName} failed to update triage info."); Console.WriteLine(e); } } }
public async Task <ActionResult> Index(DateTime start, DateTime end) { end += TimeSpan.FromDays(1); var buckets = await TriageDb.GetBucketDataAsync(start, end); foreach (var bucket in buckets) { var dumps = await TriageDb.GetBucketDataDumpsAsync(bucket); ViewData[bucket.Name] = dumps; foreach (var dump in dumps) { ViewData["dumpid." + dump.DumpId.ToString()] = TriageDb.GetPropertiesAsJsonAsync(dump); } } ViewBag.Title = "dumpling"; ViewData["Buckets"] = buckets; return(View()); }
public async Task <string> PostDumpChunk(string owner, string targetos, int index, ulong filesize, string displayName = "") { if (index > 0 || filesize > int.MaxValue) { throw new NotSupportedException("We do not support chunked files yet, and the file must be <= 2GB or more specifically, int.MaxValue"); } if (!Request.Content.IsMimeMultipartContent("form-data")) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } owner = owner.ToLowerInvariant(); targetos = targetos.ToLowerInvariant(); await DumplingEventHub.FireEvent(new WebAPIStartUploadChunkEvent()); /* Handle Upload */ // Get or create the blob container var container = DumpStorageController.GetContainerForOwner(owner); await container.CreateIfNotExistsAsync(); // Create a AzureBlobStorageMultipartProvider and process the request var path = Path.GetTempPath(); AzureBlobStorageMultipartProvider streamProvider = new AzureBlobStorageMultipartProvider(container, path); await Request.Content.ReadAsMultipartAsync <AzureBlobStorageMultipartProvider>(streamProvider); await DumplingEventHub.FireEvent(new WebAPIFinishedUploadChunkEvent()); /* Meta data handling */ var dump_uri = streamProvider.AzureBlobs.First().Location; if (displayName == string.Empty) { displayName = Path.GetFileNameWithoutExtension(Path.GetRandomFileName()); } int dumplingid = await TriageDb.AddDumpAsync(new Dump() { DumpTime = DateTime.Now, DumpPath = dump_uri, DisplayName = displayName, Origin = owner }); StateTableIdentifier id = new StateTableIdentifier() { Owner = owner, DumplingId = dumplingid.ToString(), }; await AnalysisTopicController.EnqueueAnalysisWork(owner, dumplingid.ToString(), targetos, dump_uri); // let the dumpling services know about our dumpling await StateTableController.AddOrUpdateStateEntry(new StateTableEntity(id) { DumpRelics_uri = dump_uri, OriginatingOS = targetos, State = "enqueued" }); // Return result from storing content in the blob container return(dumplingid.ToString()); }
public async Task <IHttpActionResult> Download(int dumplingid) { var dump = await TriageDb.GetDumpAsync(dumplingid); return((!string.IsNullOrEmpty(dump?.DumpPath)) ? (IHttpActionResult)this.Redirect(dump.DumpPath) : ResponseMessage(Request.CreateResponse(HttpStatusCode.NotFound))); }
public async Task AddTriageInfo(int dumplingid, [FromBody] JToken jsonTriageInfo) { var kvData = JsonConvert.DeserializeObject <Dictionary <string, string> >(jsonTriageInfo.ToString()); await TriageDb.UpdateDumpTriageInfo(dumplingid, kvData); }