Ejemplo n.º 1
0
    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))
Ejemplo n.º 2
0
    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))