Ejemplo n.º 1
0
        private static Client GetClient(IConfigurationRoot config, AnalysisMessage message)
        {
            var accounts = new AccountManager(config);
            var password = accounts.GetPassword(message.Account);

            return(new Client(config.GetValue <string>("MythX:BaseUrl"), message.Account, password));
        }
Ejemplo n.º 2
0
        public static async Task Run(
            [QueueTrigger("%Storage:AnalysisQueue%", Connection = "Storage:Connection")] AnalysisMessage message,
            [Queue("%Storage:AnalysisQueue%", Connection = "Storage:Connection")] CloudQueue analysisQueue,
            [Table("%Storage:ContractTable%", Connection = "Storage:Connection")] CloudTable contractTable,
            [Table("%Storage:AnalysisTable%", Connection = "Storage:Connection")] CloudTable analysisTable,
            ILogger log,
            ExecutionContext context)
        {
            IConfigurationRoot config = new ConfigurationBuilder()
                                        .SetBasePath(context.FunctionAppDirectory)
                                        .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
                                        .AddEnvironmentVariables()
                                        .Build();

            var client   = GetClient(config, message);
            var response = await client.GetAnalysisAsync(message.AnalysisId);

            var analysis = JsonConvert.DeserializeObject <Models.Analysis>(response);

            if (analysis.Status != "Error" && analysis.Status != "Finished")
            {
                string msg             = JsonConvert.SerializeObject(message);
                var    visibilityDelay = TimeSpan.FromMinutes(4);
                await analysisQueue.AddMessageAsync(new CloudQueueMessage(msg), null, visibilityDelay, null, null);

                return;
            }

            string issues   = null;
            string severity = null;

            if (analysis.Status == "Finished")
            {
                issues = await client.GetIssuesAsync(analysis.UUID);

                var list = JsonConvert.DeserializeObject <List <AnalysisResult> >(issues);
                if (list.Count > 0 && list[0] != null && list[0].Issues != null && list[0].Issues.Count > 0)
                {
                    severity = list[0].Issues[0].Severity;
                }

                await Blob.WriteAsync(
                    config.GetValue <string>("Storage:Connection"),
                    config.GetValue <string>("Storage:AnalysisIssuesContainer"),
                    analysis.UUID,
                    issues);
            }

            await Blob.WriteAsync(
                config.GetValue <string>("Storage:Connection"),
                config.GetValue <string>("Storage:AnalysisContainer"),
                message.Address,
                response);

            await InsertAnalysis(analysisTable, message.Address, analysis);
            await InsertContract(contractTable, message, analysis, severity);
        }
Ejemplo n.º 3
0
 public static async Task Run(
     [QueueTrigger("%Storage:AnalysisPoisonQueue%", Connection = "Storage:Connection")] AnalysisMessage message,
     [Queue("%Storage:AnalysisQueue%", Connection = "Storage:Connection")] CloudQueue contractQueue,
     ILogger log)
 {
     string msg             = JsonConvert.SerializeObject(message);
     var    visibilityDelay = TimeSpan.FromHours(1);
     await contractQueue.AddMessageAsync(new CloudQueueMessage(msg), null, visibilityDelay, null, null);
 }
Ejemplo n.º 4
0
        public static void getUnfinishedRequirements(AnalysisContext analysisContext)
        {
            //Get the rule settings
            RuleConfiguration ruleConfiguration = analysisContext.GetRuleConfiguration(cRuleId_getUnfinishedRequirements);

            //Only run if the rule is enabled
            if (ruleConfiguration.Enabled)
            {
                //Get the configuration data for this rule
                PropertyObject ruleData = analysisContext.GetRuleAnalysisData(cRuleId_getUnfinishedRequirements, RuleAnalysisDataScope.RuleAnalysisDataScope_File, GetRuleAnalysisDataOptions.GetRuleAnalysisDataOption_NoOptions);

                //Only run the analysis if the object we are analyzing contains a Requirements field

                PropertyObject requirements = getRequirementsObject(analysisContext);

                if (requirements != null)
                {
                    if (requirements.GetNumElements() > 0) //Only do something if the object has requirements entered
                    {
                        int    numberofRequirements = requirements.GetNumElements();
                        string currentRequirement;

                        for (int idx = 0; idx < numberofRequirements; idx++)
                        {
                            currentRequirement = requirements.GetValStringByOffset(idx, 0);

                            string[] requirementparts = currentRequirement.Split(',');

                            if (requirementparts.Length != 3)
                            {
                                //Malformed Requirement Do nothing this should be handled as an error in the getMalformedRequirement Rule
                            }
                            else
                            {
                                if (requirementparts[2].Trim(' ') == "Done")
                                {
                                    //Do nothing we only want the outstanding requirements
                                }
                                else
                                {
                                    AnalysisMessage message = analysisContext.NewMessage(cRuleId_getUnfinishedRequirements, "Unfinished Requirement " + currentRequirement, analysisContext.Object);
                                    analysisContext.ReportMessage(message);
                                }
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 5
0
 private static async Task InsertContract(CloudTable table, AnalysisMessage message, Models.Analysis analysis, string severity)
 {
     var entry = new ContractEntity()
     {
         PartitionKey   = message.Address,
         RowKey         = "",
         TxHash         = message.TxHash,
         AnalysisId     = analysis.UUID,
         AnalysisStatus = analysis.Status,
         Severity       = severity,
         Version        = 1
     };
     TableOperation insertOperation = TableOperation.InsertOrReplace(entry);
     await table.ExecuteAsync(insertOperation);
 }
Ejemplo n.º 6
0
        public static void getMalformedRequirements(AnalysisContext analysisContext)
        {
            //Get the rule settings
            RuleConfiguration ruleConfiguration = analysisContext.GetRuleConfiguration(cRuleId_getMalformedRequirements);

            //Only run if the rule is enabled
            if (ruleConfiguration.Enabled)
            {
                //Get the configuration data for this rule
                PropertyObject ruleData = analysisContext.GetRuleAnalysisData(cRuleId_getMalformedRequirements, RuleAnalysisDataScope.RuleAnalysisDataScope_File, GetRuleAnalysisDataOptions.GetRuleAnalysisDataOption_NoOptions);


                //Only run the analysis if the object we are analyzing contains a Requirements field
                PropertyObject requirements = getRequirementsObject(analysisContext);

                if (requirements != null)
                {
                    if (requirements.GetNumElements() > 0) //Only do something if the object has requirements entered
                    {
                        int    numberofRequirements = requirements.GetNumElements();
                        string currentRequirement;

                        for (int idx = 0; idx < numberofRequirements; idx++)
                        {
                            currentRequirement = requirements.GetValStringByOffset(idx, 0);

                            string[] requirementparts = currentRequirement.Split(',');

                            if (requirementparts.Length != 3)
                            {
                                AnalysisMessage message = analysisContext.NewMessage(cRuleId_getMalformedRequirements, "Requirement [" + currentRequirement + "] is not formated in Rule,Summary,Status format", analysisContext.Object);
                                analysisContext.ReportMessage(message);
                            }
                        }
                    }
                }
            }
        }