示例#1
0
文件: Get.cs 项目: okamilab/etherdata
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "mythxl/v0.1/contracts")] HttpRequest req,
            [Table("%Storage:ContractTable%", Connection = "Storage:Connection")] CloudTable table,
            ILogger log,
            ExecutionContext context)
        {
            IConfigurationRoot config = new ConfigurationBuilder()
                                        .SetBasePath(context.FunctionAppDirectory)
                                        .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
                                        .AddEnvironmentVariables()
                                        .Build();

            TableContinuationToken token = null;
            var tokenParam = (string)req.Query["t"];

            if (!string.IsNullOrEmpty(tokenParam))
            {
                token = ContinuationToken.Unzip(tokenParam);
            }

            var filter     = "";
            var queryParam = (string)req.Query["q"];

            if (!string.IsNullOrEmpty(queryParam))
            {
                filter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, queryParam);
            }

            var severityParam = (string)req.Query["s"];

            if (!string.IsNullOrEmpty(severityParam))
            {
                var severityFilter = TableQuery.GenerateFilterCondition("Severity", QueryComparisons.Equal, severityParam);
                filter = string.IsNullOrEmpty(filter) ? severityFilter : TableQuery.CombineFilters(filter, TableOperators.And, severityFilter);
            }

            var analysisParam = (string)req.Query["a"];

            if (!string.IsNullOrEmpty(analysisParam))
            {
                var analysisFilter = TableQuery.GenerateFilterCondition("AnalysisStatus", QueryComparisons.Equal, analysisParam);
                filter = string.IsNullOrEmpty(filter) ? analysisFilter : TableQuery.CombineFilters(filter, TableOperators.And, analysisFilter);
            }

            var query = new TableQuery <ContractEntity> {
                TakeCount = 10, FilterString = filter
            };
            var queryResult = await table.ExecuteQuerySegmentedAsync(query, token);

            // TODO use view model instead of entity from storage
            return(new OkObjectResult(new
            {
                data = queryResult.Results,
                next = ContinuationToken.Zip(queryResult.ContinuationToken)
            }));
        }
示例#2
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "mythxl/v0.1/analyses")] HttpRequest req,
            [Table("%Storage:AnalysisTable%", Connection = "Storage:Connection")] CloudTable table,
            ILogger log,
            ExecutionContext context)
        {
            IConfigurationRoot config = new ConfigurationBuilder()
                                        .SetBasePath(context.FunctionAppDirectory)
                                        .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
                                        .AddEnvironmentVariables()
                                        .Build();

            try
            {
                var segment = await GetAsync(req, table);

                var list = new List <AnalysisModel>(10);
                foreach (var entry in segment.Results)
                {
                    list.Add(new AnalysisModel
                    {
                        Id             = $"{entry.PartitionKey}|{entry.RowKey}",
                        ApiVersion     = entry.ApiVersion,
                        Error          = entry.Error,
                        HarveyVersion  = entry.HarveyVersion,
                        MaestroVersion = entry.MaestroVersion,
                        MaruVersion    = entry.MaruVersion,
                        MythrilVersion = entry.MythrilVersion,
                        Status         = entry.Status,
                        SubmittedAt    = entry.SubmittedAt,
                        Version        = entry.Version,
                        Issues         = await Blob.ReadAsync(
                            config.GetValue <string>("Storage:Connection"),
                            config.GetValue <string>("Storage:AnalysisIssuesContainer"),
                            entry.RowKey)
                    });
                }

                return(new OkObjectResult(new
                {
                    data = list,
                    next = ContinuationToken.Zip(segment.ContinuationToken)
                }));
            }
            catch (Exception ex)
            {
                return(new BadRequestObjectResult(ex.Message));
            }
        }