diff --git a/valkyrie/core/formatters/__init__.py b/valkyrie/core/formatters/__init__.py index d850010..e60cbbc 100644 --- a/valkyrie/core/formatters/__init__.py +++ b/valkyrie/core/formatters/__init__.py @@ -1,7 +1,11 @@ from .base import ResultFormatter from .sarif import SARIFFormatter +from .html import HTMLFormatter +from .json import JSONFormatter __all__ = [ ResultFormatter, - SARIFFormatter + SARIFFormatter, + HTMLFormatter, + JSONFormatter ] \ No newline at end of file diff --git a/valkyrie/core/formatters/json.py b/valkyrie/core/formatters/json.py new file mode 100644 index 0000000..0516d64 --- /dev/null +++ b/valkyrie/core/formatters/json.py @@ -0,0 +1,34 @@ +""" +Valkyrie - HTML Scan Result Formatter +""" + +import json +from valkyrie.core.types import ( + ScanResult, +) + +from .base import ResultFormatter + + +#### +## HTML SCAN RESUT FORMATTER +##### +class JSONFormatter(ResultFormatter): + """JSON result formatter""" + + def format(self, result: ScanResult) -> str: + return json.dumps({ + "scan_id": result.scan_id, + "status": result.status.value, + "timestamp": result.timestamp.isoformat(), + "scan_duration": result.scan_duration, + "summary": { + "total_findings": len(result.findings), + "critical": result.critical_count, + "high": result.high_count, + "has_blocking_issues": result.has_blocking_issues + }, + "findings": [finding.to_dict() for finding in result.findings], + "scanned_files": [str(path) for path in result.scanned_files], + "errors": result.errors + }, indent=2) \ No newline at end of file