Newer
Older
import os
from typing import Any
from jinja2 import Template, FileSystemLoader, Environment
from contrib.descriptions import VulnDescriptionProvider
from contrib.report_builders import JsonReportBuilder
class ReportInfo:
def __init__(self, severity='SeverityNone', is_empty=False):
self.severity = severity
self.num_severity = 0
if severity == 'SeverityLow':
self.num_severity = 1
if severity == 'SeverityMedium':
self.num_severity = 2
if severity == 'SeverityHigh':
self.num_severity = 3
def toJSON(self):
return json.dumps(self, default=lambda o: o.__dict__,
sort_keys=True, indent=4)
def __lt__(self, other):
class JinjaHtmlReportBuilder(JsonReportBuilder):
def __init__(self, description_provider: VulnDescriptionProvider):
super().__init__(description_provider)
self.template_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'templates')
self.template_name = 'jinja2_report.html'
self._read_template() # type: Template
def build(self) -> Any:
report_info = ReportInfo()
if len(json_data['ips']) == 0:
report_info.empty = True
for vv in json_data['vulnerable'].values():
for v in vv['vulnerabilities']:
with open(f'{json_data["output_path"]}.info', 'w+') as info:
info.write(report_info.toJSON())
return self._template.render(data=json_data)