Ejemplo n.º 1
0
 /// <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}");
     }
 }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
                }
            }
        }
Ejemplo n.º 4
0
        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)));
        }
Ejemplo n.º 7
0
        public async Task AddTriageInfo(int dumplingid, [FromBody] JToken jsonTriageInfo)
        {
            var kvData = JsonConvert.DeserializeObject <Dictionary <string, string> >(jsonTriageInfo.ToString());

            await TriageDb.UpdateDumpTriageInfo(dumplingid, kvData);
        }