from dataclasses import dataclass, field from enum import Enum from typing import Optional import httpx class Severity(str, Enum): CRITICAL = "critical" HIGH = "high" MEDIUM = "medium" LOW = "low" INFO = "info" @dataclass class Finding: plugin: str title: str severity: Severity description: str evidence: dict owasp: str cwe: str remediation: str endpoint: Optional[str] = None cvss_estimate: Optional[float] = None tags: list[str] = field(default_factory=list) def to_dict(self) -> dict: return { "plugin": self.plugin, "title": self.title, "severity": self.severity.value, "description": self.description, "evidence": self.evidence, "owasp": self.owasp, "cwe": self.cwe, "remediation": self.remediation, "endpoint": self.endpoint, "cvss_estimate": self.cvss_estimate, "tags": self.tags, } class VulnerabilityPlugin: name: str = "base" description: str = "" def __init__(self, client: httpx.AsyncClient): self.client = client async def run(self, target: str) -> list[Finding]: raise NotImplementedError