-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.py
More file actions
64 lines (52 loc) · 1.63 KB
/
models.py
File metadata and controls
64 lines (52 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
"""Modelos de datos del proyecto."""
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class BreachDetail:
"""Detalle de una brecha de seguridad."""
source_api: str
breach_name: str
date: str = "Desconocida"
exposed_data: list[str] = field(default_factory=list)
risk_level: str = "medio"
description: str = ""
industry: str = ""
logo_url: str = ""
@dataclass
class InfostealerDetail:
"""Detalle de una infeccion por infostealer (Hudson Rock)."""
computer_name: str = ""
operating_system: str = ""
malware_path: str = ""
date_compromised: str = "Desconocida"
antiviruses: str = ""
@dataclass
class PasswordResult:
"""Resultado de verificacion de password."""
hibp_count: int = 0
xon_count: int = 0
is_compromised: bool = False
@dataclass
class CheckReport:
"""Reporte completo de verificacion."""
query: str
query_type: str # "email", "username", "phone"
breaches: list[BreachDetail] = field(default_factory=list)
infostealers: list[InfostealerDetail] = field(default_factory=list)
password_result: Optional[PasswordResult] = None
errors: list[str] = field(default_factory=list)
@property
def total_breaches(self) -> int:
return len(self.breaches)
@property
def has_infostealers(self) -> bool:
return len(self.infostealers) > 0
@property
def overall_risk(self) -> str:
if self.has_infostealers:
return "critico"
if self.total_breaches >= 5:
return "alto"
if self.total_breaches >= 1:
return "medio"
return "limpio"