This repository has been archived on 2026-04-27. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
website/src/nercone_website/tools/tls_test/schemas.py
T
2026-04-19 11:33:11 +09:00

87 lines
2.1 KiB
Python

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,
}