--
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
from __future__ import annotations
|
||||
from dataclasses import dataclass, field, asdict
|
||||
from typing import Any
|
||||
|
||||
SEVERITIES = ("good", "normal", "notgood", "bad", "serious", "info")
|
||||
SEVERITY_LABELS = {
|
||||
"good": "Good",
|
||||
"normal": "Normal",
|
||||
"notgood": "Not Good",
|
||||
"bad": "Bad",
|
||||
"serious": "Serious",
|
||||
"info": "Info",
|
||||
}
|
||||
SEVERITY_COLORS = {
|
||||
"good": "bright-green",
|
||||
"normal": "bright-yellow",
|
||||
"notgood": "bright-orange",
|
||||
"bad": "bright-red",
|
||||
"serious": "magenta",
|
||||
"info": "tx-alt",
|
||||
}
|
||||
|
||||
|
||||
@dataclass
|
||||
class Finding:
|
||||
category: str
|
||||
title: str
|
||||
detail: str = ""
|
||||
severity: str = "info"
|
||||
weight: int = 0
|
||||
|
||||
def to_dict(self) -> dict[str, Any]:
|
||||
d = asdict(self)
|
||||
d["severity_label"] = SEVERITY_LABELS.get(self.severity, self.severity)
|
||||
d["color"] = SEVERITY_COLORS.get(self.severity, "tx")
|
||||
return d
|
||||
|
||||
|
||||
@dataclass
|
||||
class ScanResult:
|
||||
target: str
|
||||
host: str
|
||||
port: int
|
||||
started_at: float
|
||||
finished_at: float = 0.0
|
||||
findings: list[Finding] = field(default_factory=list)
|
||||
data: dict[str, Any] = field(default_factory=dict)
|
||||
rank: str = ""
|
||||
score: float = 0.0
|
||||
error: str | None = None
|
||||
|
||||
def add(self, f: Finding) -> None:
|
||||
self.findings.append(f)
|
||||
|
||||
def to_dict(self) -> dict[str, Any]:
|
||||
return {
|
||||
"target": self.target,
|
||||
"host": self.host,
|
||||
"port": self.port,
|
||||
"started_at": self.started_at,
|
||||
"finished_at": self.finished_at,
|
||||
"duration": max(0.0, self.finished_at - self.started_at),
|
||||
"findings": [f.to_dict() for f in self.findings],
|
||||
"data": self.data,
|
||||
"rank": self.rank,
|
||||
"score": self.score,
|
||||
"error": self.error,
|
||||
}
|
||||
|
||||
|
||||
@dataclass
|
||||
class ProgressMessage:
|
||||
phase: str
|
||||
detail: str
|
||||
progress: float
|
||||
severity: str = "info"
|
||||
finding: dict[str, Any] | None = None
|
||||
|
||||
def to_dict(self) -> dict[str, Any]:
|
||||
return {
|
||||
"phase": self.phase,
|
||||
"detail": self.detail,
|
||||
"progress": self.progress,
|
||||
"severity": self.severity,
|
||||
"finding": self.finding,
|
||||
}
|
||||
Reference in New Issue
Block a user