def printAndWriteResult(self, flawMap, baseDir, scannerList, title): mainResult = ComparisonResultHolder() scannerResults = OrderedDict() securityModelResultMap = OrderedDict() scannerResults['JULIET'] = ComparisonResultHolder() securityModelResultMap['JULIET'] = SecurityModelComparision(self.securityModel,'JULIET') root = ET.Element("analyzereport") details = ET.SubElement(root, "details") for sc in scannerList: scannerResults[sc.name] = ComparisonResultHolder() securityModelResultMap[sc.name] = SecurityModelComparision(self.securityModel,sc.name) for key, issueComparison in flawMap.items(): issueComparison.compareIssues() #print(key) if(len(issueComparison.existingIssues) >0): totalIssues = 1 else: totalIssues = 0 #print("totalIssues="+str(totalIssues)) mainResult.issueCnt+=totalIssues fileIssue = ET.SubElement(details, 'file', {'totalIssues' : str(totalIssues), 'name' : issueComparison.fileName}) for scanner, issueHolder in issueComparison.foundIssues.items(): #print("\tSecurity-Scanner: "+scanner) #print("\t\tfound issues="+str(len(issueHolder.foundIssues))) #print("\t\tcorrectMath="+str(issueHolder.correctMatchCnt)) secModelResult = securityModelResultMap[scanner] comparisonResult = scannerResults.get(scanner) comparisonResult.addIssue(issueComparison,issueHolder) secModelResult.addIssueComparision(issueComparison) if(scanner!='JULIET'): scannerXMLResult = ET.SubElement(fileIssue, 'scanner', {'name' : scanner, 'foundIssues': str(len(issueHolder.foundIssues)),'realIssues': str(len(issueComparison.existingIssues)), 'correctLineMatches' : str(issueHolder.correctMatchCnt), 'differentLineMatches' : str(issueHolder.differentLineMatches), 'differentTypeMatches' : str(issueHolder.rangeMatch), 'differentTypeMatches' : str(issueHolder.rangeMatch), 'noneMatching' : str(issueComparison.noneMatching)}) print("=============================") print("========"+title+" SUMMARY========") print("=============================") print("Total Issues: "+str(mainResult.issueCnt)) print("Scanners: ") summary = ET.SubElement(root, 'summary', {'totalIssues' : str(mainResult.issueCnt)}) chartData = OrderedDict() chartData['Total Issues'] = mainResult.issueCnt for key, value in scannerResults.items(): if(scanner!='JULIET'): summaryDetail = value.getXMLSubelement(summary, 'scanner', key) print(key+" found "+str(value.issueCnt)+" of "+str(value.realIssues)) value.printDetailData() #print("\t"+str(value.withoutCWE)+" CWE") chartData[key] = value.issueCnt self.printPieChart(key, value, baseDir) secModelXML = ET.SubElement(root, 'securityModel') for key, value in securityModelResultMap.items(): compareResultMap = value.compare() if(scanner!='JULIET'): scannerXML = ET.SubElement(secModelXML, 'scanner', {'name' : key}) print(key) for weaknessClass, resultHolder in compareResultMap.items(): resultHolder.getXMLSubelement(scannerXML, 'weaknessClass', weaknessClass) print(weaknessClass) resultHolder.printDetailData() #write xml with open(baseDir+'report.xml', 'w') as f: f.write(parseString(ET.tostring(root)).toprettyxml()) self.printChart(chartData, baseDir, title) htmlReport = HTMLReport(mainResult, scannerResults, securityModelResultMap, baseDir+"report.html") htmlReport.buildReport()
def printAndWriteResult(self, flawMap, baseDir, scannerList, title): mainResult = ComparisonResultHolder() scannerResults = OrderedDict() securityModelResultMap = OrderedDict() scannerResults['JULIET'] = ComparisonResultHolder() securityModelResultMap['JULIET'] = SecurityModelComparision( self.securityModel, 'JULIET') root = ET.Element("analyzereport") details = ET.SubElement(root, "details") for sc in scannerList: scannerResults[sc.name] = ComparisonResultHolder() securityModelResultMap[sc.name] = SecurityModelComparision( self.securityModel, sc.name) for key, issueComparison in flawMap.items(): issueComparison.compareIssues() #print(key) if (len(issueComparison.existingIssues) > 0): totalIssues = 1 else: totalIssues = 0 #print("totalIssues="+str(totalIssues)) mainResult.issueCnt += totalIssues fileIssue = ET.SubElement(details, 'file', { 'totalIssues': str(totalIssues), 'name': issueComparison.fileName }) for scanner, issueHolder in issueComparison.foundIssues.items(): #print("\tSecurity-Scanner: "+scanner) #print("\t\tfound issues="+str(len(issueHolder.foundIssues))) #print("\t\tcorrectMath="+str(issueHolder.correctMatchCnt)) secModelResult = securityModelResultMap[scanner] comparisonResult = scannerResults.get(scanner) comparisonResult.addIssue(issueComparison, issueHolder) secModelResult.addIssueComparision(issueComparison) if (scanner != 'JULIET'): scannerXMLResult = ET.SubElement( fileIssue, 'scanner', { 'name': scanner, 'foundIssues': str(len(issueHolder.foundIssues)), 'realIssues': str(len(issueComparison.existingIssues)), 'correctLineMatches': str(issueHolder.correctMatchCnt), 'differentLineMatches': str(issueHolder.differentLineMatches), 'differentTypeMatches': str(issueHolder.rangeMatch), 'differentTypeMatches': str(issueHolder.rangeMatch), 'noneMatching': str(issueComparison.noneMatching) }) print("=============================") print("========" + title + " SUMMARY========") print("=============================") print("Total Issues: " + str(mainResult.issueCnt)) print("Scanners: ") summary = ET.SubElement(root, 'summary', {'totalIssues': str(mainResult.issueCnt)}) chartData = OrderedDict() chartData['Total Issues'] = mainResult.issueCnt for key, value in scannerResults.items(): if (scanner != 'JULIET'): summaryDetail = value.getXMLSubelement(summary, 'scanner', key) print(key + " found " + str(value.issueCnt) + " of " + str(value.realIssues)) value.printDetailData() #print("\t"+str(value.withoutCWE)+" CWE") chartData[key] = value.issueCnt self.printPieChart(key, value, baseDir) secModelXML = ET.SubElement(root, 'securityModel') for key, value in securityModelResultMap.items(): compareResultMap = value.compare() if (scanner != 'JULIET'): scannerXML = ET.SubElement(secModelXML, 'scanner', {'name': key}) print(key) for weaknessClass, resultHolder in compareResultMap.items(): resultHolder.getXMLSubelement(scannerXML, 'weaknessClass', weaknessClass) print(weaknessClass) resultHolder.printDetailData() #write xml with open(baseDir + 'report.xml', 'w') as f: f.write(parseString(ET.tostring(root)).toprettyxml()) self.printChart(chartData, baseDir, title) htmlReport = HTMLReport(mainResult, scannerResults, securityModelResultMap, baseDir + "report.html") htmlReport.buildReport()