main
py 152 lines 4.1 KB
Raw
1 from typing import Dict
2 from typing import List
3 from typing import Optional
4
5 from pydantic import BaseModel
6 from pydantic import ConfigDict
7 from pydantic import Field
8
9
10 class AnalysisResult(BaseModel):
11 method: str
12 engine_name: str
13 category: str
14 result: Optional[str] = Field(default=None)
15 model_config = ConfigDict(extra="allow")
16
17
18 class TotalVotes(BaseModel):
19 harmless: int
20 malicious: int
21 model_config = ConfigDict(extra="allow")
22
23
24 class Attributes(BaseModel):
25 total_votes: TotalVotes
26 last_analysis_results: Optional[Dict[str, AnalysisResult]] = Field(default=None)
27 regional_internet_registry: Optional[str] = Field(default=None)
28 continent: Optional[str] = Field(default=None)
29 last_modification_date: Optional[int] = Field(default=None)
30 crowdsourced_context: Optional[List[Dict[str, str]]] = Field(default=None)
31 tags: Optional[List[str]] = Field(default=None)
32 asn: Optional[int] = Field(default=None)
33 whois: Optional[str] = Field(default=None)
34 whois_date: Optional[int] = Field(default=None)
35 reputation: Optional[int] = Field(default=None)
36 last_analysis_date: Optional[int] = Field(default=None)
37 jarm: Optional[str] = Field(default=None)
38 country: Optional[str] = Field(default=None)
39 as_owner: Optional[str] = Field(default=None)
40 last_analysis_stats: Optional[Dict[str, int]] = Field(default=None)
41 last_https_certificate_date: Optional[int] = Field(default=None)
42 network: Optional[str] = Field(default=None)
43 model_config = ConfigDict(extra="allow")
44
45
46 class Links(BaseModel):
47 self: str
48 model_config = ConfigDict(extra="allow")
49
50
51 class Data(BaseModel):
52 id: str
53 type: str
54 links: Links
55 attributes: Attributes
56 model_config = ConfigDict(extra="allow")
57
58
59 class VirusTotalResponse(BaseModel):
60 data: Data
61 model_config = ConfigDict(extra="allow")
62
63
64 class VirusTotalRouteResponse(BaseModel):
65 data: VirusTotalResponse
66 success: bool
67 message: str
68
69
70 # New schemas for file submission
71 class FileSubmissionRequest(BaseModel):
72 password: Optional[str] = Field(default=None, description="Password for encrypted files")
73 model_config = ConfigDict(extra="allow")
74
75
76 class FileSubmissionData(BaseModel):
77 type: str
78 id: str
79 model_config = ConfigDict(extra="allow")
80
81
82 class FileSubmissionResponse(BaseModel):
83 data: FileSubmissionData
84 success: bool
85 message: str
86 model_config = ConfigDict(extra="allow")
87
88
89 class FileAnalysisStats(BaseModel):
90 harmless: int = 0
91 malicious: int = 0
92 suspicious: int = 0
93 undetected: int = 0
94 timeout: int = 0
95 confirmed_timeout: int = 0
96 failure: int = 0
97 type_unsupported: int = 0
98 model_config = ConfigDict(extra="allow")
99
100
101 class FileAnalysisAttributes(BaseModel):
102 date: int
103 status: str
104 stats: FileAnalysisStats
105 model_config = ConfigDict(extra="allow")
106
107
108 class FileAnalysisData(BaseModel):
109 type: str
110 id: str
111 attributes: FileAnalysisAttributes
112 model_config = ConfigDict(extra="allow")
113
114
115 class FileAnalysisResponse(BaseModel):
116 data: FileAnalysisData
117 success: bool
118 message: str
119 model_config = ConfigDict(extra="allow")
120
121
122 class FileReportAttributes(BaseModel):
123 md5: Optional[str] = None
124 sha1: Optional[str] = None
125 sha256: Optional[str] = None
126 size: Optional[int] = None
127 type_description: Optional[str] = None
128 type_tag: Optional[str] = None
129 creation_date: Optional[int] = None
130 first_submission_date: Optional[int] = None
131 last_submission_date: Optional[int] = None
132 last_analysis_date: Optional[int] = None
133 last_analysis_stats: Optional[FileAnalysisStats] = None
134 last_analysis_results: Optional[Dict[str, AnalysisResult]] = None
135 reputation: Optional[int] = None
136 times_submitted: Optional[int] = None
137 total_votes: Optional[TotalVotes] = None
138 model_config = ConfigDict(extra="allow")
139
140
141 class FileReportData(BaseModel):
142 type: str
143 id: str
144 attributes: FileReportAttributes
145 model_config = ConfigDict(extra="allow")
146
147
148 class FileReportResponse(BaseModel):
149 data: FileReportData
150 success: bool
151 message: str
152 model_config = ConfigDict(extra="allow")