def generate(self) -> None: super().generate() from json import dumps with self._context.store().db as db: issues = [] for no, row in enumerate( db.execute( 'select distinct detector, summary, synopsis, description, seealso, solution, cvss3_score, cvss3_vector from analysis_issues order by cvss3_score desc' )): instances: List[Dict[str, Any]] = [] issues.append( dict(no=no, detector=row[0], summary=row[1].title(), synopsis=row[2], description=row[3], seealso=row[4], solution=row[5], cvss3_score=row[6], cvss3_vector=row[7], severity=CVSS3Scoring.severity_of(row[6]).title(), instances=instances)) for m in db.execute( 'select * from analysis_issues where detector=:detector and summary=:summary and cvss3_score=:cvss3_score', { v: row[k] for k, v in { 0: 'detector', 1: 'summary', 6: 'cvss3_score' }.items() }): issue = Issue.from_analysis_issues_row(m) instances.append( dict(info=issue.brief_info(), source=issue.source, row=issue.row, col=issue.col)) app = dict(package=self._context.parsed_manifest().getroot().xpath( '/manifest/@package', namespaces=dict( android='http://schemas.android.com/apk/res/android'))[0], issues=len(issues)) self._write(dumps({"app": app, "issues": issues}, indent=2))
def generate(self): super().generate() with self._context.store().db as db: issues = [] for row, no in zip( db.execute( 'select distinct detector, summary, synopsis, description, seealso, solution, cvss3_score, cvss3_vector from analysis_issues order by cvss3_score desc' ), range(1, 2**32)): instances = [] issues.append( dict(no=no, detector=row[0], summary=row[1].title(), synopsis=row[2], description=row[3], seealso=row[4], solution=row[5], cvss3_score=row[6], cvss3_vector=row[7], severity=CVSS3Scoring.severity_of(row[6]).title(), instances=instances, severity_panel_style={ 'critical': 'panel-danger', 'high': 'panel-warning', 'medium': 'panel-warning', 'low': 'panel-success', 'info': 'panel-info' }[CVSS3Scoring.severity_of(row[6])])) for m in db.execute( 'select * from analysis_issues where detector=:detector and summary=:summary and cvss3_score=:cvss3_score', { v: row[k] for k, v in { 0: 'detector', 1: 'summary', 6: 'cvss3_score' }.items() }): issue = Issue.from_analysis_issues_row(m) instances.append( dict(info=issue.brief_info(), source=issue.source, row=issue.row, col=issue.col)) app = dict(package=self._context.parsed_manifest().getroot().xpath( '/manifest/@package', namespaces=dict( android='http://schemas.android.com/apk/res/android'))[0], issues=len(issues), issues_critical=len( [_ for _ in issues if _['severity'] == 'Critical']), issues_high=len( [_ for _ in issues if _['severity'] == 'High']), issues_medium=len( [_ for _ in issues if _['severity'] == 'Medium']), issues_low=len( [_ for _ in issues if _['severity'] == 'Low']), issues_info=len( [_ for _ in issues if _['severity'] == 'Info'])) self._write(self._template.render(app=app, issues=issues))