main
py 123 lines 3.04 KB
Raw
1 from datetime import datetime
2 from enum import Enum
3 from typing import List
4 from typing import Optional
5
6 from pydantic import BaseModel
7 from pydantic import ConfigDict
8 from pydantic import Field
9
10
11 class VulnSeverity(Enum):
12 Low = "Low"
13 Medium = "Medium"
14 High = "High"
15 Critical = "Critical"
16 All = "All"
17
18
19 class WazuhAgent(BaseModel):
20 agent_id: str = Field(..., alias="agent_id")
21 agent_name: str = Field(..., alias="hostname")
22 agent_ip: str = Field(..., alias="ip_address")
23 agent_os: str = Field(..., alias="os")
24 agent_label: str = Field(..., alias="label")
25 agent_last_seen: str = Field(..., alias="wazuh_last_seen")
26 wazuh_agent_version: str = Field(..., alias="wazuh_agent_version")
27 wazuh_agent_status: Optional[str] = Field(None, alias="wazuh_agent_status")
28
29 @property
30 def agent_last_seen_as_datetime(self):
31 dt = datetime.strptime(self.agent_last_seen, "%Y-%m-%dT%H:%M:%S%z")
32 return dt.replace(tzinfo=None)
33
34 model_config = ConfigDict(populate_by_name=True)
35
36
37 class WazuhAgentsList(BaseModel):
38 agents: List[WazuhAgent]
39 success: bool
40 message: str
41 model_config = ConfigDict(populate_by_name=True)
42
43
44 class WazuhAgentVulnerabilities(BaseModel):
45 severity: Optional[str] = None
46 version: Optional[str] = None
47 type: Optional[str] = None
48 name: Optional[str] = None
49 external_references: Optional[List[str]] = None
50 detection_time: Optional[str] = None
51 cvss3_score: Optional[float] = None
52 published: Optional[str] = None
53 architecture: Optional[str] = None
54 cve: Optional[str] = None
55 status: Optional[str] = None
56 title: Optional[str] = None
57
58
59 class WazuhAgentVulnerabilitiesResponse(BaseModel):
60 vulnerabilities: Optional[List[WazuhAgentVulnerabilities]] = None
61 success: bool
62 message: str
63
64
65 class WazuhAgentScaResults(BaseModel):
66 description: str
67 fail: int
68 start_scan: str
69 references: str
70 name: str
71 pass_count: int = Field(..., alias="pass")
72 score: int
73 end_scan: str
74 policy_id: str
75 total_checks: int
76 hash_file: str
77 invalid: int
78
79
80 class WazuhAgentScaResponse(BaseModel):
81 sca: Optional[List[WazuhAgentScaResults]] = None
82 success: bool
83 message: str
84
85
86 class Compliance(BaseModel):
87 value: str
88 key: str
89
90
91 class Rules(BaseModel):
92 type: str
93 rule: str
94
95
96 class WazuhAgentScaPolicyResults(BaseModel):
97 description: Optional[str] = Field(
98 "Description not found",
99 description="Description of the issue",
100 )
101 id: int
102 reason: Optional[str] = Field(
103 "Reason not found",
104 description="Reason for the issue",
105 )
106 command: Optional[str] = Field(
107 "Command not found",
108 description="Command to run to fix the issue",
109 )
110 rationale: str
111 condition: str
112 title: str
113 result: str
114 policy_id: str
115 remediation: str
116 compliance: List[Compliance]
117 rules: List[Rules]
118
119
120 class WazuhAgentScaPolicyResultsResponse(BaseModel):
121 sca_policy_results: Optional[List[WazuhAgentScaPolicyResults]] = None
122 success: bool
123 message: str