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) })); }
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)); } }