in src/services/report_convertors.py [0:0]
def convert(self, collection: 'ShardsCollection') -> Findings:
findings = []
meta = collection.meta
for part in collection.iter_parts():
if not part.resources:
continue
pm = meta.get(part.policy) or {} # part meta
p = part.policy
pm2 = self.meta.rule(
p, comment=pm.get('comment'), resource=pm.get('resource')
)
# tags
tags = [part.location, pm.get('resource')]
if service_section := pm2.service_section:
tags.append(service_section)
match self._attachment:
case 'xlsx':
extra = {
'description': pm2.article,
'files': [
{
'title': f'{p}.xlsx',
'data': self._make_xlsx_file(part.resources),
}
],
}
case 'json':
extra = {
'description': pm2.article,
'files': [
{
'title': f'{p}.json',
'data': self._make_json_file(part.resources),
}
],
}
case 'csv':
extra = {
'description': pm2.article,
'files': [
{
'title': f'{p}.csv',
'data': self._make_csv_file(part.resources),
}
],
}
case _: # None or some unexpected
table = self._make_table(part.resources)
extra = {'description': f'{pm2.article}\n{table}'}
findings.append(
{
'title': pm['description'] if 'description' in pm else p,
'date': datetime.fromtimestamp(
part.timestamp, tz=timezone.utc
).isoformat(),
'severity': pm2.severity.value,
'mitigation': pm2.remediation,
'impact': pm2.impact,
'references': self._make_references(pm2.standard),
'tags': tags,
'vuln_id_from_tool': p,
'service': pm2.service,
**extra,
}
)
return {'findings': findings}