文件
websafe-kb/scripts/intel/models.py

86 行
2.5 KiB
Python

from __future__ import annotations
from dataclasses import asdict, dataclass, field
from typing import Any, Dict, List, Optional
@dataclass
class Candidate:
system_id: str
display_name: str
category: str
advisory_mode: str
source_kind: str
source_name: str
source_confidence: str
source_url: str
title: str
published_at: Optional[str] = None
updated_at: Optional[str] = None
summary: str = ""
severity: str = "unknown"
cvss_score: Optional[float] = None
exploit_status: str = "unknown"
aliases: List[str] = field(default_factory=list)
cve_ids: List[str] = field(default_factory=list)
ghsa_ids: List[str] = field(default_factory=list)
osv_ids: List[str] = field(default_factory=list)
affected_versions: List[str] = field(default_factory=list)
fixed_versions: List[str] = field(default_factory=list)
package_name: Optional[str] = None
references: List[str] = field(default_factory=list)
raw: Dict[str, Any] = field(default_factory=dict)
def to_dict(self) -> Dict[str, Any]:
return asdict(self)
@dataclass
class AdvisoryRecord:
canonical_id: str
system_id: str
display_name: str
category: str
advisory_mode: str
title: str
summary: str
published_at: Optional[str]
updated_at: Optional[str]
severity: str
cvss_score: Optional[float]
exploit_status: str
source_confidence: str
official_source_url: Optional[str]
secondary_source_urls: List[str]
aliases: List[str]
cve_ids: List[str]
ghsa_ids: List[str]
osv_ids: List[str]
affected_versions: List[str]
fixed_versions: List[str]
package_name: Optional[str]
render_markdown: bool
case_path: Optional[str]
secure_code_topics: List[str]
status: str
triage_reasons: List[str] = field(default_factory=list)
verification_status: str = "triage-manual"
verification_mode: str = "synthetic"
last_verified_at: Optional[str] = None
last_run_id: Optional[str] = None
evidence_bundle: Optional[str] = None
browser_evidence: Dict[str, Any] = field(
default_factory=lambda: {
"required": False,
"present": False,
"refs": [],
}
)
repro_profile_id: Optional[str] = None
artifact_mode: Optional[str] = None
blocked_reason: Optional[str] = None
metadata: Dict[str, Any] = field(default_factory=dict)
def to_dict(self) -> Dict[str, Any]:
return asdict(self)