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 Severity:
def __init__(self, severity):
self.level = severity
self.num_level = 0
if severity == 'Medium':
self.num_level = 1
if severity == 'High':
self.num_level = 2
def toJSON(self):
return json.dumps(self, default=lambda o: o.__dict__,
sort_keys=True, indent=4)
def __lt__(self, other):
return self.num_level < other.num_level
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:
json_data = self._buffer
max_severity = Severity('Low')
for vv in json_data['vulnerable'].values():
for v in vv['vulnerabilities']:
s = Severity(v['severity_str'])
if s > max_severity:
max_severity = s
with open(f'{json_data["output_path"]}.severity', 'w+') as severity:
severity.write(max_severity.toJSON())
return self._template.render(data=json_data)