@cryptotaxi247 / CoPilot / commits / 34cef750

mkdocs site

Taylor committed Jul 11, 2023 at 16:00 UTC 34cef750eb4bd61a3d9b5a9d7d59da8d6939fe7f
15 files changed +17258 -4650
backend/site/404.html
+47 -20
@@ -189,8 +189,8 @@
189
190
191 <li class="md-tabs__item">
192 - <a href="/alerts/" class="md-tabs__link">
193 - Alerts
192 + <a href="/wazuhindexer/" class="md-tabs__link">
193 + Wazuh-Indexer
194 </a>
195 </li>
196
@@ -201,8 +201,8 @@
201
202
203 <li class="md-tabs__item">
204 - <a href="/artifacts/" class="md-tabs__link">
205 - Artifacts
204 + <a href="/dfiriris/" class="md-tabs__link">
205 + Dfir-Iris
206 </a>
207 </li>
208
@@ -213,8 +213,8 @@
213
214
215 <li class="md-tabs__item">
216 - <a href="/cases/" class="md-tabs__link">
217 - Cases
216 + <a href="/graylog/" class="md-tabs__link">
217 + Graylog
218 </a>
219 </li>
220
@@ -225,8 +225,8 @@
225
226
227 <li class="md-tabs__item">
228 - <a href="/graylog/" class="md-tabs__link">
229 - Graylog
228 + <a href="/wazuhmanager/" class="md-tabs__link">
229 + Wazuh-Manager
230 </a>
231 </li>
232
@@ -237,8 +237,20 @@
237
238
239 <li class="md-tabs__item">
240 - <a href="/wazuhmanager/" class="md-tabs__link">
241 - Wazuh-Manager
240 + <a href="/velociraptor/" class="md-tabs__link">
241 + Velociraptor
242 + </a>
243 + </li>
244 +
245 +
246 +
247 +
248 +
249 +
250 +
251 + <li class="md-tabs__item">
252 + <a href="/shuffle/" class="md-tabs__link">
253 + Shuffle
254 </a>
255 </li>
256
@@ -330,8 +342,8 @@
342
343
344 <li class="md-nav__item">
333 - <a href="/alerts/" class="md-nav__link">
334 - Alerts
345 + <a href="/wazuhindexer/" class="md-nav__link">
346 + Wazuh-Indexer
347 </a>
348 </li>
349
@@ -345,8 +357,8 @@
357
358
359 <li class="md-nav__item">
348 - <a href="/artifacts/" class="md-nav__link">
349 - Artifacts
360 + <a href="/dfiriris/" class="md-nav__link">
361 + Dfir-Iris
362 </a>
363 </li>
364
@@ -360,8 +372,8 @@
372
373
374 <li class="md-nav__item">
363 - <a href="/cases/" class="md-nav__link">
364 - Cases
375 + <a href="/graylog/" class="md-nav__link">
376 + Graylog
377 </a>
378 </li>
379
@@ -375,8 +387,8 @@
387
388
389 <li class="md-nav__item">
378 - <a href="/graylog/" class="md-nav__link">
379 - Graylog
390 + <a href="/wazuhmanager/" class="md-nav__link">
391 + Wazuh-Manager
392 </a>
393 </li>
394
@@ -390,8 +402,23 @@
402
403
404 <li class="md-nav__item">
393 - <a href="/wazuhmanager/" class="md-nav__link">
394 - Wazuh-Manager
405 + <a href="/velociraptor/" class="md-nav__link">
406 + Velociraptor
407 + </a>
408 + </li>
409 +
410 +
411 +
412 +
413 +
414 +
415 +
416 +
417 +
418 +
419 + <li class="md-nav__item">
420 + <a href="/shuffle/" class="md-nav__link">
421 + Shuffle
422 </a>
423 </li>
424
backend/site/agents/index.html
+48 -21
@@ -12,7 +12,7 @@
12 <link rel="prev" href="../connectors/">
13
14
15 - <link rel="next" href="../alerts/">
15 + <link rel="next" href="../wazuhindexer/">
16
17 <link rel="icon" href="../assets/images/favicon.png">
18 <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
@@ -200,8 +200,8 @@
200
201
202 <li class="md-tabs__item">
203 - <a href="../alerts/" class="md-tabs__link">
204 - Alerts
203 + <a href="../wazuhindexer/" class="md-tabs__link">
204 + Wazuh-Indexer
205 </a>
206 </li>
207
@@ -212,8 +212,8 @@
212
213
214 <li class="md-tabs__item">
215 - <a href="../artifacts/" class="md-tabs__link">
216 - Artifacts
215 + <a href="../dfiriris/" class="md-tabs__link">
216 + Dfir-Iris
217 </a>
218 </li>
219
@@ -224,8 +224,8 @@
224
225
226 <li class="md-tabs__item">
227 - <a href="../cases/" class="md-tabs__link">
228 - Cases
227 + <a href="../graylog/" class="md-tabs__link">
228 + Graylog
229 </a>
230 </li>
231
@@ -236,8 +236,8 @@
236
237
238 <li class="md-tabs__item">
239 - <a href="../graylog/" class="md-tabs__link">
240 - Graylog
239 + <a href="../wazuhmanager/" class="md-tabs__link">
240 + Wazuh-Manager
241 </a>
242 </li>
243
@@ -248,8 +248,20 @@
248
249
250 <li class="md-tabs__item">
251 - <a href="../wazuhmanager/" class="md-tabs__link">
252 - Wazuh-Manager
251 + <a href="../velociraptor/" class="md-tabs__link">
252 + Velociraptor
253 + </a>
254 + </li>
255 +
256 +
257 +
258 +
259 +
260 +
261 +
262 + <li class="md-tabs__item">
263 + <a href="../shuffle/" class="md-tabs__link">
264 + Shuffle
265 </a>
266 </li>
267
@@ -631,8 +643,8 @@
643
644
645 <li class="md-nav__item">
634 - <a href="../alerts/" class="md-nav__link">
635 - Alerts
646 + <a href="../wazuhindexer/" class="md-nav__link">
647 + Wazuh-Indexer
648 </a>
649 </li>
650
@@ -646,8 +658,8 @@
658
659
660 <li class="md-nav__item">
649 - <a href="../artifacts/" class="md-nav__link">
650 - Artifacts
661 + <a href="../dfiriris/" class="md-nav__link">
662 + Dfir-Iris
663 </a>
664 </li>
665
@@ -661,8 +673,8 @@
673
674
675 <li class="md-nav__item">
664 - <a href="../cases/" class="md-nav__link">
665 - Cases
676 + <a href="../graylog/" class="md-nav__link">
677 + Graylog
678 </a>
679 </li>
680
@@ -676,8 +688,8 @@
688
689
690 <li class="md-nav__item">
679 - <a href="../graylog/" class="md-nav__link">
680 - Graylog
691 + <a href="../wazuhmanager/" class="md-nav__link">
692 + Wazuh-Manager
693 </a>
694 </li>
695
@@ -691,8 +703,23 @@
703
704
705 <li class="md-nav__item">
694 - <a href="../wazuhmanager/" class="md-nav__link">
695 - Wazuh-Manager
706 + <a href="../velociraptor/" class="md-nav__link">
707 + Velociraptor
708 + </a>
709 + </li>
710 +
711 +
712 +
713 +
714 +
715 +
716 +
717 +
718 +
719 +
720 + <li class="md-nav__item">
721 + <a href="../shuffle/" class="md-nav__link">
722 + Shuffle
723 </a>
724 </li>
725
backend/site/alerts/index.html deleted
-1398
@@ -1,1398 +0,0 @@
1 -
2 -<!doctype html>
3 -<html lang="en" class="no-js">
4 - <head>
5 -
6 - <meta charset="utf-8">
7 - <meta name="viewport" content="width=device-width,initial-scale=1">
8 -
9 -
10 -
11 -
12 - <link rel="prev" href="../agents/">
13 -
14 -
15 - <link rel="next" href="../artifacts/">
16 -
17 - <link rel="icon" href="../assets/images/favicon.png">
18 - <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
19 -
20 -
21 -
22 - <title>Alerts - SOCFortress CoPilot</title>
23 -
24 -
25 -
26 - <link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
27 -
28 -
29 - <link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
30 -
31 -
32 -
33 -
34 -
35 -
36 -
37 -
38 -
39 - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
40 - <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
41 - <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
42 -
43 -
44 -
45 - <link rel="stylesheet" href="../assets/_mkdocstrings.css">
46 -
47 - <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
48 -
49 -
50 -
51 -
52 -
53 -
54 - </head>
55 -
56 -
57 -
58 -
59 -
60 -
61 -
62 -
63 -
64 - <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple">
65 -
66 -
67 -
68 - <script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
69 -
70 - <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
71 - <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
72 - <label class="md-overlay" for="__drawer"></label>
73 - <div data-md-component="skip">
74 -
75 -
76 - <a href="#alerts-overview" class="md-skip">
77 - Skip to content
78 - </a>
79 -
80 - </div>
81 - <div data-md-component="announce">
82 -
83 - </div>
84 -
85 -
86 -
87 -
88 -<header class="md-header" data-md-component="header">
89 - <nav class="md-header__inner md-grid" aria-label="Header">
90 - <a href=".." title="SOCFortress CoPilot" class="md-header__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
91 -
92 -
93 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
94 -
95 - </a>
96 - <label class="md-header__button md-icon" for="__drawer">
97 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
98 - </label>
99 - <div class="md-header__title" data-md-component="header-title">
100 - <div class="md-header__ellipsis">
101 - <div class="md-header__topic">
102 - <span class="md-ellipsis">
103 - SOCFortress CoPilot
104 - </span>
105 - </div>
106 - <div class="md-header__topic" data-md-component="header-topic">
107 - <span class="md-ellipsis">
108 -
109 - Alerts
110 -
111 - </span>
112 - </div>
113 - </div>
114 - </div>
115 -
116 -
117 - <form class="md-header__option" data-md-component="palette">
118 -
119 -
120 -
121 -
122 - <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
123 -
124 - <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
125 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
126 - </label>
127 -
128 -
129 -
130 -
131 -
132 - <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="teal" data-md-color-accent="lime" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
133 -
134 - <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
135 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
136 - </label>
137 -
138 -
139 - </form>
140 -
141 -
142 -
143 -
144 -
145 - </nav>
146 -
147 -</header>
148 -
149 - <div class="md-container" data-md-component="container">
150 -
151 -
152 -
153 -
154 -
155 -<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
156 - <div class="md-grid">
157 - <ul class="md-tabs__list">
158 -
159 -
160 -
161 -
162 -
163 -
164 - <li class="md-tabs__item">
165 - <a href=".." class="md-tabs__link">
166 - Home
167 - </a>
168 - </li>
169 -
170 -
171 -
172 -
173 -
174 -
175 -
176 - <li class="md-tabs__item">
177 - <a href="../connectors/" class="md-tabs__link">
178 - Connectors
179 - </a>
180 - </li>
181 -
182 -
183 -
184 -
185 -
186 -
187 -
188 - <li class="md-tabs__item">
189 - <a href="../agents/" class="md-tabs__link">
190 - Agents
191 - </a>
192 - </li>
193 -
194 -
195 -
196 -
197 -
198 -
199 -
200 -
201 -
202 - <li class="md-tabs__item">
203 - <a href="./" class="md-tabs__link md-tabs__link--active">
204 - Alerts
205 - </a>
206 - </li>
207 -
208 -
209 -
210 -
211 -
212 -
213 -
214 - <li class="md-tabs__item">
215 - <a href="../artifacts/" class="md-tabs__link">
216 - Artifacts
217 - </a>
218 - </li>
219 -
220 -
221 -
222 -
223 -
224 -
225 -
226 - <li class="md-tabs__item">
227 - <a href="../cases/" class="md-tabs__link">
228 - Cases
229 - </a>
230 - </li>
231 -
232 -
233 -
234 -
235 -
236 -
237 -
238 - <li class="md-tabs__item">
239 - <a href="../graylog/" class="md-tabs__link">
240 - Graylog
241 - </a>
242 - </li>
243 -
244 -
245 -
246 -
247 -
248 -
249 -
250 - <li class="md-tabs__item">
251 - <a href="../wazuhmanager/" class="md-tabs__link">
252 - Wazuh-Manager
253 - </a>
254 - </li>
255 -
256 -
257 - </ul>
258 - </div>
259 -</nav>
260 -
261 -
262 -
263 - <main class="md-main" data-md-component="main">
264 - <div class="md-main__inner md-grid">
265 -
266 -
267 -
268 - <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
269 - <div class="md-sidebar__scrollwrap">
270 - <div class="md-sidebar__inner">
271 -
272 -
273 -
274 -
275 -
276 -
277 -
278 -<nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0">
279 - <label class="md-nav__title" for="__drawer">
280 - <a href=".." title="SOCFortress CoPilot" class="md-nav__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
281 -
282 -
283 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
284 -
285 - </a>
286 - SOCFortress CoPilot
287 - </label>
288 -
289 - <ul class="md-nav__list" data-md-scrollfix>
290 -
291 -
292 -
293 -
294 -
295 -
296 -
297 -
298 - <li class="md-nav__item">
299 - <a href=".." class="md-nav__link">
300 - Home
301 - </a>
302 - </li>
303 -
304 -
305 -
306 -
307 -
308 -
309 -
310 -
311 -
312 -
313 - <li class="md-nav__item">
314 - <a href="../connectors/" class="md-nav__link">
315 - Connectors
316 - </a>
317 - </li>
318 -
319 -
320 -
321 -
322 -
323 -
324 -
325 -
326 -
327 -
328 - <li class="md-nav__item">
329 - <a href="../agents/" class="md-nav__link">
330 - Agents
331 - </a>
332 - </li>
333 -
334 -
335 -
336 -
337 -
338 -
339 -
340 -
341 -
342 -
343 -
344 -
345 - <li class="md-nav__item md-nav__item--active">
346 -
347 - <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
348 -
349 -
350 -
351 - <label class="md-nav__link md-nav__link--active" for="__toc">
352 - Alerts
353 - <span class="md-nav__icon md-icon"></span>
354 - </label>
355 -
356 - <a href="./" class="md-nav__link md-nav__link--active">
357 - Alerts
358 - </a>
359 -
360 -
361 -
362 -<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
363 -
364 -
365 -
366 -
367 - <label class="md-nav__title" for="__toc">
368 - <span class="md-nav__icon md-icon"></span>
369 - Table of contents
370 - </label>
371 - <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
372 -
373 - <li class="md-nav__item">
374 - <a href="#alerts-overview" class="md-nav__link">
375 - Alerts Overview
376 - </a>
377 -
378 - <nav class="md-nav" aria-label="Alerts Overview">
379 - <ul class="md-nav__list">
380 -
381 - <li class="md-nav__item">
382 - <a href="#alert-routes" class="md-nav__link">
383 - Alert Routes
384 - </a>
385 -
386 -</li>
387 -
388 - </ul>
389 - </nav>
390 -
391 -</li>
392 -
393 - <li class="md-nav__item">
394 - <a href="#app.routes.alerts" class="md-nav__link">
395 - app.routes.alerts
396 - </a>
397 -
398 -</li>
399 -
400 - <li class="md-nav__item">
401 - <a href="#app.routes.alerts.get_alerts" class="md-nav__link">
402 - get_alerts()
403 - </a>
404 -
405 - <nav class="md-nav" aria-label="get_alerts()">
406 - <ul class="md-nav__list">
407 -
408 - <li class="md-nav__item">
409 - <a href="#alert-services" class="md-nav__link">
410 - Alert Services
411 - </a>
412 -
413 -</li>
414 -
415 - </ul>
416 - </nav>
417 -
418 -</li>
419 -
420 - <li class="md-nav__item">
421 - <a href="#app.services.WazuhIndexer.alerts" class="md-nav__link">
422 - app.services.WazuhIndexer.alerts
423 - </a>
424 -
425 -</li>
426 -
427 - <li class="md-nav__item">
428 - <a href="#app.services.WazuhIndexer.alerts.AlertsService" class="md-nav__link">
429 - AlertsService
430 - </a>
431 -
432 - <nav class="md-nav" aria-label="AlertsService">
433 - <ul class="md-nav__list">
434 -
435 - <li class="md-nav__item">
436 - <a href="#app.services.WazuhIndexer.alerts.AlertsService.__init__" class="md-nav__link">
437 - __init__()
438 - </a>
439 -
440 -</li>
441 -
442 - <li class="md-nav__item">
443 - <a href="#app.services.WazuhIndexer.alerts.AlertsService.collect_alerts" class="md-nav__link">
444 - collect_alerts()
445 - </a>
446 -
447 -</li>
448 -
449 - <li class="md-nav__item">
450 - <a href="#app.services.WazuhIndexer.alerts.AlertsService.is_index_skipped" class="md-nav__link">
451 - is_index_skipped()
452 - </a>
453 -
454 -</li>
455 -
456 - </ul>
457 - </nav>
458 -
459 -</li>
460 -
461 - </ul>
462 -
463 -</nav>
464 -
465 - </li>
466 -
467 -
468 -
469 -
470 -
471 -
472 -
473 -
474 -
475 -
476 - <li class="md-nav__item">
477 - <a href="../artifacts/" class="md-nav__link">
478 - Artifacts
479 - </a>
480 - </li>
481 -
482 -
483 -
484 -
485 -
486 -
487 -
488 -
489 -
490 -
491 - <li class="md-nav__item">
492 - <a href="../cases/" class="md-nav__link">
493 - Cases
494 - </a>
495 - </li>
496 -
497 -
498 -
499 -
500 -
501 -
502 -
503 -
504 -
505 -
506 - <li class="md-nav__item">
507 - <a href="../graylog/" class="md-nav__link">
508 - Graylog
509 - </a>
510 - </li>
511 -
512 -
513 -
514 -
515 -
516 -
517 -
518 -
519 -
520 -
521 - <li class="md-nav__item">
522 - <a href="../wazuhmanager/" class="md-nav__link">
523 - Wazuh-Manager
524 - </a>
525 - </li>
526 -
527 -
528 -
529 - </ul>
530 -</nav>
531 - </div>
532 - </div>
533 - </div>
534 -
535 -
536 -
537 -
538 - <div class="md-content" data-md-component="content">
539 - <article class="md-content__inner md-typeset">
540 -
541 -
542 -
543 -
544 - <h1>Alerts</h1>
545 -
546 -<h2 id="alerts-overview">Alerts Overview</h2>
547 -<h3 id="alert-routes"><span style="color:green">Alert Routes</span></h3>
548 -
549 -
550 -<div class="doc doc-object doc-module">
551 -
552 -
553 -<a id="app.routes.alerts"></a>
554 - <div class="doc doc-contents first">
555 -
556 -
557 -
558 - <div class="doc doc-children">
559 -
560 -
561 -
562 -
563 -
564 -
565 -
566 -
567 -
568 -<div class="doc doc-object doc-function">
569 -
570 -
571 -
572 -<h2 id="app.routes.alerts.get_alerts" class="doc doc-heading">
573 -<code class="highlight language-python"><span class="n">get_alerts</span><span class="p">()</span></code>
574 -
575 -</h2>
576 -
577 -
578 - <div class="doc doc-contents ">
579 -
580 - <p>Retrieves all alerts from the AlertsService.</p>
581 -<p>This endpoint retrieves all available alerts from the AlertsService. It does this by creating an instance of
582 -the AlertsService class and calling its <code>collect_alerts</code> method. The result is a list of all alerts currently
583 -available.</p>
584 -
585 - <p><strong>Returns:</strong></p>
586 - <table>
587 - <thead>
588 - <tr>
589 -<th>Name</th> <th>Type</th>
590 - <th>Description</th>
591 - </tr>
592 - </thead>
593 - <tbody>
594 - <tr>
595 -<td><code>jsonify</code></td> <td>
596 - <code><span title="flask.jsonify">jsonify</span></code>
597 - </td>
598 - <td>
599 - <div class="doc-md-description">
600 - <p>A JSON response containing a list of alerts. Each item in the list is a dictionary representing an alert,</p>
601 - </div>
602 - </td>
603 - </tr>
604 - <tr>
605 -<td></td> <td>
606 - <code><span title="flask.jsonify">jsonify</span></code>
607 - </td>
608 - <td>
609 - <div class="doc-md-description">
610 - <p>containing all its associated data.</p>
611 - </div>
612 - </td>
613 - </tr>
614 - </tbody>
615 - </table>
616 -
617 - <details class="quote">
618 - <summary>Source code in <code>app\routes\alerts.py</code></summary>
619 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
620 -<span class="normal"><a href="#__codelineno-0-10">10</a></span>
621 -<span class="normal"><a href="#__codelineno-0-11">11</a></span>
622 -<span class="normal"><a href="#__codelineno-0-12">12</a></span>
623 -<span class="normal"><a href="#__codelineno-0-13">13</a></span>
624 -<span class="normal"><a href="#__codelineno-0-14">14</a></span>
625 -<span class="normal"><a href="#__codelineno-0-15">15</a></span>
626 -<span class="normal"><a href="#__codelineno-0-16">16</a></span>
627 -<span class="normal"><a href="#__codelineno-0-17">17</a></span>
628 -<span class="normal"><a href="#__codelineno-0-18">18</a></span>
629 -<span class="normal"><a href="#__codelineno-0-19">19</a></span>
630 -<span class="normal"><a href="#__codelineno-0-20">20</a></span>
631 -<span class="normal"><a href="#__codelineno-0-21">21</a></span>
632 -<span class="normal"><a href="#__codelineno-0-22">22</a></span>
633 -<span class="normal"><a href="#__codelineno-0-23">23</a></span>
634 -<span class="normal"><a href="#__codelineno-0-24">24</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/alerts&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
635 -<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="k">def</span> <span class="nf">get_alerts</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">jsonify</span><span class="p">:</span>
636 -<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
637 -<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> Retrieves all alerts from the AlertsService.</span>
638 -<a id="__codelineno-0-13" name="__codelineno-0-13"></a>
639 -<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> This endpoint retrieves all available alerts from the AlertsService. It does this by creating an instance of</span>
640 -<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> the AlertsService class and calling its `collect_alerts` method. The result is a list of all alerts currently</span>
641 -<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> available.</span>
642 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a>
643 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> Returns:</span>
644 -<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> jsonify: A JSON response containing a list of alerts. Each item in the list is a dictionary representing an alert,</span>
645 -<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> containing all its associated data.</span>
646 -<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> &quot;&quot;&quot;</span>
647 -<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AlertsService</span><span class="p">()</span>
648 -<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_alerts</span><span class="p">()</span>
649 -<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">alerts</span><span class="p">)</span>
650 -</code></pre></div></td></tr></table></div>
651 - </details>
652 - </div>
653 -
654 -</div>
655 -
656 -
657 -
658 - </div>
659 -
660 - </div>
661 -
662 -</div><p><br></p>
663 -<h3 id="alert-services"><span style="color:red">Alert Services</span></h3>
664 -
665 -
666 -<div class="doc doc-object doc-module">
667 -
668 -
669 -<a id="app.services.WazuhIndexer.alerts"></a>
670 - <div class="doc doc-contents first">
671 -
672 -
673 -
674 - <div class="doc doc-children">
675 -
676 -
677 -
678 -
679 -
680 -
681 -
682 -
683 -<div class="doc doc-object doc-class">
684 -
685 -
686 -
687 -<h2 id="app.services.WazuhIndexer.alerts.AlertsService" class="doc doc-heading">
688 - <code>AlertsService</code>
689 -
690 -
691 -</h2>
692 -
693 -
694 - <div class="doc doc-contents ">
695 -
696 -
697 - <p>A service class that encapsulates the logic for pulling alerts from the Wazuh-Indexer.</p>
698 -
699 - <p><strong>Attributes:</strong></p>
700 - <table>
701 - <thead>
702 - <tr>
703 - <th>Name</th>
704 - <th>Type</th>
705 - <th>Description</th>
706 - </tr>
707 - </thead>
708 - <tbody>
709 - <tr>
710 - <td><code>connector_url</code></td>
711 - <td>
712 - <code>str</code>
713 - </td>
714 - <td>
715 - <div class="doc-md-description">
716 - <p>The url to the Wazuh-Indexer.</p>
717 - </div>
718 - </td>
719 - </tr>
720 - <tr>
721 - <td><code>connector_username</code></td>
722 - <td>
723 - <code>str</code>
724 - </td>
725 - <td>
726 - <div class="doc-md-description">
727 - <p>The username for the Wazuh-Indexer.</p>
728 - </div>
729 - </td>
730 - </tr>
731 - <tr>
732 - <td><code>connector_password</code></td>
733 - <td>
734 - <code>str</code>
735 - </td>
736 - <td>
737 - <div class="doc-md-description">
738 - <p>The password for the Wazuh-Indexer.</p>
739 - </div>
740 - </td>
741 - </tr>
742 - <tr>
743 - <td><code>es</code></td>
744 - <td>
745 - <code><span title="elasticsearch7.Elasticsearch">Elasticsearch</span></code>
746 - </td>
747 - <td>
748 - <div class="doc-md-description">
749 - <p>The Elasticsearch client.</p>
750 - </div>
751 - </td>
752 - </tr>
753 - </tbody>
754 - </table>
755 -
756 -
757 - <details class="quote">
758 - <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
759 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
760 -<span class="normal"><a href="#__codelineno-0-10"> 10</a></span>
761 -<span class="normal"><a href="#__codelineno-0-11"> 11</a></span>
762 -<span class="normal"><a href="#__codelineno-0-12"> 12</a></span>
763 -<span class="normal"><a href="#__codelineno-0-13"> 13</a></span>
764 -<span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
765 -<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
766 -<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
767 -<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
768 -<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
769 -<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
770 -<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
771 -<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
772 -<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
773 -<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
774 -<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
775 -<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
776 -<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
777 -<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
778 -<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
779 -<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
780 -<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
781 -<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
782 -<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
783 -<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
784 -<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
785 -<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
786 -<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
787 -<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
788 -<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
789 -<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
790 -<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
791 -<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
792 -<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
793 -<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
794 -<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
795 -<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
796 -<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
797 -<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
798 -<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
799 -<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
800 -<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
801 -<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
802 -<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
803 -<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
804 -<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
805 -<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
806 -<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
807 -<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
808 -<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
809 -<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
810 -<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
811 -<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
812 -<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
813 -<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
814 -<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
815 -<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
816 -<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
817 -<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
818 -<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
819 -<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
820 -<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
821 -<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
822 -<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
823 -<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
824 -<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
825 -<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
826 -<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
827 -<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
828 -<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
829 -<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
830 -<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
831 -<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
832 -<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
833 -<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
834 -<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
835 -<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
836 -<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
837 -<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
838 -<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
839 -<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
840 -<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
841 -<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
842 -<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
843 -<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
844 -<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
845 -<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
846 -<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
847 -<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
848 -<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
849 -<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
850 -<span class="normal"><a href="#__codelineno-0-100">100</a></span>
851 -<span class="normal"><a href="#__codelineno-0-101">101</a></span>
852 -<span class="normal"><a href="#__codelineno-0-102">102</a></span>
853 -<span class="normal"><a href="#__codelineno-0-103">103</a></span>
854 -<span class="normal"><a href="#__codelineno-0-104">104</a></span>
855 -<span class="normal"><a href="#__codelineno-0-105">105</a></span>
856 -<span class="normal"><a href="#__codelineno-0-106">106</a></span>
857 -<span class="normal"><a href="#__codelineno-0-107">107</a></span>
858 -<span class="normal"><a href="#__codelineno-0-108">108</a></span>
859 -<span class="normal"><a href="#__codelineno-0-109">109</a></span>
860 -<span class="normal"><a href="#__codelineno-0-110">110</a></span>
861 -<span class="normal"><a href="#__codelineno-0-111">111</a></span>
862 -<span class="normal"><a href="#__codelineno-0-112">112</a></span>
863 -<span class="normal"><a href="#__codelineno-0-113">113</a></span>
864 -<span class="normal"><a href="#__codelineno-0-114">114</a></span>
865 -<span class="normal"><a href="#__codelineno-0-115">115</a></span>
866 -<span class="normal"><a href="#__codelineno-0-116">116</a></span>
867 -<span class="normal"><a href="#__codelineno-0-117">117</a></span>
868 -<span class="normal"><a href="#__codelineno-0-118">118</a></span>
869 -<span class="normal"><a href="#__codelineno-0-119">119</a></span>
870 -<span class="normal"><a href="#__codelineno-0-120">120</a></span>
871 -<span class="normal"><a href="#__codelineno-0-121">121</a></span>
872 -<span class="normal"><a href="#__codelineno-0-122">122</a></span>
873 -<span class="normal"><a href="#__codelineno-0-123">123</a></span>
874 -<span class="normal"><a href="#__codelineno-0-124">124</a></span>
875 -<span class="normal"><a href="#__codelineno-0-125">125</a></span>
876 -<span class="normal"><a href="#__codelineno-0-126">126</a></span>
877 -<span class="normal"><a href="#__codelineno-0-127">127</a></span>
878 -<span class="normal"><a href="#__codelineno-0-128">128</a></span>
879 -<span class="normal"><a href="#__codelineno-0-129">129</a></span>
880 -<span class="normal"><a href="#__codelineno-0-130">130</a></span>
881 -<span class="normal"><a href="#__codelineno-0-131">131</a></span>
882 -<span class="normal"><a href="#__codelineno-0-132">132</a></span>
883 -<span class="normal"><a href="#__codelineno-0-133">133</a></span>
884 -<span class="normal"><a href="#__codelineno-0-134">134</a></span>
885 -<span class="normal"><a href="#__codelineno-0-135">135</a></span>
886 -<span class="normal"><a href="#__codelineno-0-136">136</a></span>
887 -<span class="normal"><a href="#__codelineno-0-137">137</a></span>
888 -<span class="normal"><a href="#__codelineno-0-138">138</a></span>
889 -<span class="normal"><a href="#__codelineno-0-139">139</a></span>
890 -<span class="normal"><a href="#__codelineno-0-140">140</a></span>
891 -<span class="normal"><a href="#__codelineno-0-141">141</a></span>
892 -<span class="normal"><a href="#__codelineno-0-142">142</a></span>
893 -<span class="normal"><a href="#__codelineno-0-143">143</a></span>
894 -<span class="normal"><a href="#__codelineno-0-144">144</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="k">class</span> <span class="nc">AlertsService</span><span class="p">:</span>
895 -<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
896 -<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="sd"> A service class that encapsulates the logic for pulling alerts from the Wazuh-Indexer.</span>
897 -<a id="__codelineno-0-12" name="__codelineno-0-12"></a>
898 -<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> Attributes:</span>
899 -<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> connector_url (str): The url to the Wazuh-Indexer.</span>
900 -<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> connector_username (str): The username for the Wazuh-Indexer.</span>
901 -<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> connector_password (str): The password for the Wazuh-Indexer.</span>
902 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> es (Elasticsearch): The Elasticsearch client.</span>
903 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> &quot;&quot;&quot;</span>
904 -<a id="__codelineno-0-19" name="__codelineno-0-19"></a>
905 -<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="n">SKIP_INDEX_NAMES</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
906 -<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="s2">&quot;wazuh-statistics&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
907 -<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="s2">&quot;wazuh-monitoring&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
908 -<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="p">}</span>
909 -<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
910 -<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
911 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
912 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> Initializes the service by collecting Wazuh-Indexer details and creating an Elasticsearch client.</span>
913 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> &quot;&quot;&quot;</span>
914 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="p">(</span>
915 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
916 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
917 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
918 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="p">)</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">&quot;Wazuh-Indexer&quot;</span><span class="p">)</span>
919 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="n">Elasticsearch</span><span class="p">(</span>
920 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
921 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">http_auth</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">),</span>
922 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
923 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
924 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
925 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
926 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="p">)</span>
927 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a>
928 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">def</span> <span class="nf">is_index_skipped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
929 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
930 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Checks whether the given index name should be skipped.</span>
931 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
932 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Args:</span>
933 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> index_name (str): The name of the index.</span>
934 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a>
935 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Returns:</span>
936 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> bool: True if the index should be skipped, False otherwise.</span>
937 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> &quot;&quot;&quot;</span>
938 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="k">for</span> <span class="n">skipped</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SKIP_INDEX_NAMES</span><span class="p">:</span>
939 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">if</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">skipped</span><span class="p">):</span>
940 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="kc">True</span>
941 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="kc">False</span>
942 -<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
943 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">def</span> <span class="nf">collect_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
944 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
945 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Collects the alerts from the Wazuh-Indexer where the index name starts with &quot;wazuh_&quot;</span>
946 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> and is not in the SKIP_INDEX_NAMES list.</span>
947 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Returns the 10 previous alerts based on the `timestamp_utc` field.</span>
948 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
949 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Returns:</span>
950 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Dict[str, object]: A dictionary containing success status and alerts or an error message.</span>
951 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> &quot;&quot;&quot;</span>
952 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span>
953 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">],</span>
954 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="p">):</span>
955 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">return</span> <span class="p">{</span>
956 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
957 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
958 -<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="p">}</span>
959 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
960 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">indices_list</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_indices</span><span class="p">()</span>
961 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
962 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect indices&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
963 -<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
964 -<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">alerts_summary</span> <span class="o">=</span> <span class="p">[]</span>
965 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">for</span> <span class="n">index_name</span> <span class="ow">in</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">&quot;indices_list&quot;</span><span class="p">]:</span>
966 -<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;wazuh_&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_index_skipped</span><span class="p">(</span><span class="n">index_name</span><span class="p">):</span>
967 -<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">continue</span>
968 -<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
969 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_alerts</span><span class="p">(</span><span class="n">index_name</span><span class="p">)</span>
970 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">if</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">])</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
971 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="n">alerts_summary</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
972 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="p">{</span>
973 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="s2">&quot;index_name&quot;</span><span class="p">:</span> <span class="n">index_name</span><span class="p">,</span>
974 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">&quot;total_alerts&quot;</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">]),</span>
975 -<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">&quot;last_10_alerts&quot;</span><span class="p">:</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">],</span>
976 -<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="p">},</span>
977 -<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">)</span>
978 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
979 -<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">return</span> <span class="p">{</span>
980 -<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected alerts&quot;</span><span class="p">,</span>
981 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
982 -<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">&quot;alerts_summary&quot;</span><span class="p">:</span> <span class="n">alerts_summary</span><span class="p">,</span>
983 -<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="p">}</span>
984 -<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
985 -<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="k">def</span> <span class="nf">_collect_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
986 -<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
987 -<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> Elasticsearch query to get the 10 most recent alerts where the `rule_level` is 12 or higher or the</span>
988 -<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> `syslog_level` field is `ALERT` and return the results in descending order by the `timestamp_utc` field.</span>
989 -<a id="__codelineno-0-104" name="__codelineno-0-104"></a>
990 -<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> Args:</span>
991 -<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> index_name (str): The name of the index to query.</span>
992 -<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
993 -<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> Returns:</span>
994 -<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> Dict[str, object]: A dictionary containing success status and alerts or an error message.</span>
995 -<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> &quot;&quot;&quot;</span>
996 -<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Collecting alerts from </span><span class="si">{</span><span class="n">index_name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
997 -<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_query</span><span class="p">()</span>
998 -<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="k">try</span><span class="p">:</span>
999 -<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="n">index_name</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">query</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
1000 -<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="n">alerts_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">alert</span> <span class="k">for</span> <span class="n">alert</span> <span class="ow">in</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;hits&quot;</span><span class="p">][</span><span class="s2">&quot;hits&quot;</span><span class="p">]]</span>
1001 -<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="k">return</span> <span class="p">{</span>
1002 -<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected alerts&quot;</span><span class="p">,</span>
1003 -<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1004 -<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="s2">&quot;alerts&quot;</span><span class="p">:</span> <span class="n">alerts_list</span><span class="p">,</span>
1005 -<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="p">}</span>
1006 -<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
1007 -<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to collect alerts: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
1008 -<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect alerts&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
1009 -<a id="__codelineno-0-124" name="__codelineno-0-124"></a>
1010 -<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="nd">@staticmethod</span>
1011 -<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="k">def</span> <span class="nf">_build_query</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1012 -<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1013 -<a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="sd"> Builds the Elasticsearch query to get the 10 most recent alerts where the `rule_level` is 12 or higher or</span>
1014 -<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> the `syslog_level` field is `ALERT`.</span>
1015 -<a id="__codelineno-0-130" name="__codelineno-0-130"></a>
1016 -<a id="__codelineno-0-131" name="__codelineno-0-131"></a><span class="sd"> Returns:</span>
1017 -<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd"> Dict[str, object]: A dictionary representing the Elasticsearch query.</span>
1018 -<a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="sd"> &quot;&quot;&quot;</span>
1019 -<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="k">return</span> <span class="p">{</span>
1020 -<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="s2">&quot;query&quot;</span><span class="p">:</span> <span class="p">{</span>
1021 -<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="s2">&quot;bool&quot;</span><span class="p">:</span> <span class="p">{</span>
1022 -<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="s2">&quot;should&quot;</span><span class="p">:</span> <span class="p">[</span>
1023 -<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="p">{</span><span class="s2">&quot;range&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;rule_level&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;gte&quot;</span><span class="p">:</span> <span class="mi">12</span><span class="p">}}},</span>
1024 -<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="p">{</span><span class="s2">&quot;match&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;syslog_level&quot;</span><span class="p">:</span> <span class="s2">&quot;ALERT&quot;</span><span class="p">}},</span>
1025 -<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="p">],</span>
1026 -<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="p">},</span>
1027 -<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="p">},</span>
1028 -<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="s2">&quot;sort&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;timestamp_utc&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="s2">&quot;desc&quot;</span><span class="p">}}],</span>
1029 -<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="p">}</span>
1030 -</code></pre></div></td></tr></table></div>
1031 - </details>
1032 -
1033 -
1034 -
1035 - <div class="doc doc-children">
1036 -
1037 -
1038 -
1039 -
1040 -
1041 -
1042 -
1043 -
1044 -
1045 -<div class="doc doc-object doc-function">
1046 -
1047 -
1048 -
1049 -<h3 id="app.services.WazuhIndexer.alerts.AlertsService.__init__" class="doc doc-heading">
1050 -<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
1051 -
1052 -</h3>
1053 -
1054 -
1055 - <div class="doc doc-contents ">
1056 -
1057 - <p>Initializes the service by collecting Wazuh-Indexer details and creating an Elasticsearch client.</p>
1058 -
1059 - <details class="quote">
1060 - <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1061 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-25">25</a></span>
1062 -<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1063 -<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1064 -<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1065 -<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1066 -<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1067 -<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1068 -<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1069 -<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1070 -<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1071 -<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1072 -<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1073 -<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1074 -<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1075 -<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1076 -<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1077 -<span class="normal"><a href="#__codelineno-0-41">41</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1078 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1079 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> Initializes the service by collecting Wazuh-Indexer details and creating an Elasticsearch client.</span>
1080 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> &quot;&quot;&quot;</span>
1081 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="p">(</span>
1082 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
1083 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
1084 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
1085 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="p">)</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">&quot;Wazuh-Indexer&quot;</span><span class="p">)</span>
1086 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="n">Elasticsearch</span><span class="p">(</span>
1087 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
1088 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">http_auth</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">),</span>
1089 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1090 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
1091 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
1092 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1093 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="p">)</span>
1094 -</code></pre></div></td></tr></table></div>
1095 - </details>
1096 - </div>
1097 -
1098 -</div>
1099 -
1100 -<div class="doc doc-object doc-function">
1101 -
1102 -
1103 -
1104 -<h3 id="app.services.WazuhIndexer.alerts.AlertsService.collect_alerts" class="doc doc-heading">
1105 -<code class="highlight language-python"><span class="n">collect_alerts</span><span class="p">()</span></code>
1106 -
1107 -</h3>
1108 -
1109 -
1110 - <div class="doc doc-contents ">
1111 -
1112 - <p>Collects the alerts from the Wazuh-Indexer where the index name starts with "wazuh_"
1113 -and is not in the SKIP_INDEX_NAMES list.
1114 -Returns the 10 previous alerts based on the <code>timestamp_utc</code> field.</p>
1115 -
1116 - <p><strong>Returns:</strong></p>
1117 - <table>
1118 - <thead>
1119 - <tr>
1120 - <th>Type</th>
1121 - <th>Description</th>
1122 - </tr>
1123 - </thead>
1124 - <tbody>
1125 - <tr>
1126 - <td>
1127 - <code><span title="typing.Dict">Dict</span>[str, object]</code>
1128 - </td>
1129 - <td>
1130 - <div class="doc-md-description">
1131 - <p>Dict[str, object]: A dictionary containing success status and alerts or an error message.</p>
1132 - </div>
1133 - </td>
1134 - </tr>
1135 - </tbody>
1136 - </table>
1137 -
1138 - <details class="quote">
1139 - <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1140 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-58">58</a></span>
1141 -<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1142 -<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1143 -<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1144 -<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1145 -<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1146 -<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1147 -<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1148 -<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1149 -<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1150 -<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1151 -<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1152 -<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1153 -<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1154 -<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1155 -<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1156 -<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1157 -<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1158 -<span class="normal"><a href="#__codelineno-0-76">76</a></span>
1159 -<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1160 -<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1161 -<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1162 -<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1163 -<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1164 -<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1165 -<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1166 -<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1167 -<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1168 -<span class="normal"><a href="#__codelineno-0-86">86</a></span>
1169 -<span class="normal"><a href="#__codelineno-0-87">87</a></span>
1170 -<span class="normal"><a href="#__codelineno-0-88">88</a></span>
1171 -<span class="normal"><a href="#__codelineno-0-89">89</a></span>
1172 -<span class="normal"><a href="#__codelineno-0-90">90</a></span>
1173 -<span class="normal"><a href="#__codelineno-0-91">91</a></span>
1174 -<span class="normal"><a href="#__codelineno-0-92">92</a></span>
1175 -<span class="normal"><a href="#__codelineno-0-93">93</a></span>
1176 -<span class="normal"><a href="#__codelineno-0-94">94</a></span>
1177 -<span class="normal"><a href="#__codelineno-0-95">95</a></span>
1178 -<span class="normal"><a href="#__codelineno-0-96">96</a></span>
1179 -<span class="normal"><a href="#__codelineno-0-97">97</a></span>
1180 -<span class="normal"><a href="#__codelineno-0-98">98</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="k">def</span> <span class="nf">collect_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1181 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1182 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Collects the alerts from the Wazuh-Indexer where the index name starts with &quot;wazuh_&quot;</span>
1183 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> and is not in the SKIP_INDEX_NAMES list.</span>
1184 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Returns the 10 previous alerts based on the `timestamp_utc` field.</span>
1185 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
1186 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Returns:</span>
1187 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Dict[str, object]: A dictionary containing success status and alerts or an error message.</span>
1188 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> &quot;&quot;&quot;</span>
1189 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span>
1190 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">],</span>
1191 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="p">):</span>
1192 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">return</span> <span class="p">{</span>
1193 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
1194 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1195 -<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="p">}</span>
1196 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
1197 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">indices_list</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_indices</span><span class="p">()</span>
1198 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1199 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect indices&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
1200 -<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
1201 -<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">alerts_summary</span> <span class="o">=</span> <span class="p">[]</span>
1202 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">for</span> <span class="n">index_name</span> <span class="ow">in</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">&quot;indices_list&quot;</span><span class="p">]:</span>
1203 -<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;wazuh_&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_index_skipped</span><span class="p">(</span><span class="n">index_name</span><span class="p">):</span>
1204 -<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">continue</span>
1205 -<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
1206 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_alerts</span><span class="p">(</span><span class="n">index_name</span><span class="p">)</span>
1207 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">if</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">])</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
1208 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="n">alerts_summary</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
1209 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="p">{</span>
1210 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="s2">&quot;index_name&quot;</span><span class="p">:</span> <span class="n">index_name</span><span class="p">,</span>
1211 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">&quot;total_alerts&quot;</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">]),</span>
1212 -<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">&quot;last_10_alerts&quot;</span><span class="p">:</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">],</span>
1213 -<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="p">},</span>
1214 -<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">)</span>
1215 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
1216 -<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">return</span> <span class="p">{</span>
1217 -<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected alerts&quot;</span><span class="p">,</span>
1218 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1219 -<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">&quot;alerts_summary&quot;</span><span class="p">:</span> <span class="n">alerts_summary</span><span class="p">,</span>
1220 -<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="p">}</span>
1221 -</code></pre></div></td></tr></table></div>
1222 - </details>
1223 - </div>
1224 -
1225 -</div>
1226 -
1227 -<div class="doc doc-object doc-function">
1228 -
1229 -
1230 -
1231 -<h3 id="app.services.WazuhIndexer.alerts.AlertsService.is_index_skipped" class="doc doc-heading">
1232 -<code class="highlight language-python"><span class="n">is_index_skipped</span><span class="p">(</span><span class="n">index_name</span><span class="p">)</span></code>
1233 -
1234 -</h3>
1235 -
1236 -
1237 - <div class="doc doc-contents ">
1238 -
1239 - <p>Checks whether the given index name should be skipped.</p>
1240 -
1241 - <p><strong>Parameters:</strong></p>
1242 - <table>
1243 - <thead>
1244 - <tr>
1245 - <th>Name</th>
1246 - <th>Type</th>
1247 - <th>Description</th>
1248 - <th>Default</th>
1249 - </tr>
1250 - </thead>
1251 - <tbody>
1252 - <tr>
1253 - <td><code>index_name</code></td>
1254 - <td>
1255 - <code>str</code>
1256 - </td>
1257 - <td>
1258 - <div class="doc-md-description">
1259 - <p>The name of the index.</p>
1260 - </div>
1261 - </td>
1262 - <td>
1263 - <em>required</em>
1264 - </td>
1265 - </tr>
1266 - </tbody>
1267 - </table>
1268 -
1269 - <p><strong>Returns:</strong></p>
1270 - <table>
1271 - <thead>
1272 - <tr>
1273 -<th>Name</th> <th>Type</th>
1274 - <th>Description</th>
1275 - </tr>
1276 - </thead>
1277 - <tbody>
1278 - <tr>
1279 -<td><code>bool</code></td> <td>
1280 - <code>bool</code>
1281 - </td>
1282 - <td>
1283 - <div class="doc-md-description">
1284 - <p>True if the index should be skipped, False otherwise.</p>
1285 - </div>
1286 - </td>
1287 - </tr>
1288 - </tbody>
1289 - </table>
1290 -
1291 - <details class="quote">
1292 - <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1293 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-43">43</a></span>
1294 -<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1295 -<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1296 -<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1297 -<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1298 -<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1299 -<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1300 -<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1301 -<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1302 -<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1303 -<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1304 -<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1305 -<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1306 -<span class="normal"><a href="#__codelineno-0-56">56</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="k">def</span> <span class="nf">is_index_skipped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
1307 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1308 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Checks whether the given index name should be skipped.</span>
1309 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
1310 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Args:</span>
1311 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> index_name (str): The name of the index.</span>
1312 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a>
1313 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Returns:</span>
1314 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> bool: True if the index should be skipped, False otherwise.</span>
1315 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> &quot;&quot;&quot;</span>
1316 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="k">for</span> <span class="n">skipped</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SKIP_INDEX_NAMES</span><span class="p">:</span>
1317 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">if</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">skipped</span><span class="p">):</span>
1318 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="kc">True</span>
1319 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="kc">False</span>
1320 -</code></pre></div></td></tr></table></div>
1321 - </details>
1322 - </div>
1323 -
1324 -</div>
1325 -
1326 -
1327 -
1328 - </div>
1329 -
1330 - </div>
1331 -
1332 -</div>
1333 -
1334 -
1335 -
1336 -
1337 - </div>
1338 -
1339 - </div>
1340 -
1341 -</div>
1342 -
1343 -
1344 -
1345 -
1346 -
1347 -
1348 - </article>
1349 - </div>
1350 -
1351 -
1352 - <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
1353 -
1354 - </div>
1355 -
1356 - <button type="button" class="md-top md-icon" data-md-component="top" hidden>
1357 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
1358 - Back to top
1359 - </button>
1360 -
1361 - </main>
1362 -
1363 - <footer class="md-footer">
1364 -
1365 - <div class="md-footer-meta md-typeset">
1366 - <div class="md-footer-meta__inner md-grid">
1367 - <div class="md-copyright">
1368 -
1369 - <div class="md-copyright__highlight">
1370 - &copy; 2023 <a href="https://github.com/socfortress/CoPilot" target="_blank" rel="noopener">SOCFortress CoPilot</a>
1371 -
1372 - </div>
1373 -
1374 -
1375 - Made with
1376 - <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
1377 - Material for MkDocs
1378 - </a>
1379 -
1380 -</div>
1381 -
1382 - </div>
1383 - </div>
1384 -</footer>
1385 -
1386 - </div>
1387 - <div class="md-dialog" data-md-component="dialog">
1388 - <div class="md-dialog__inner md-typeset"></div>
1389 - </div>
1390 -
1391 - <script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.sections", "toc.integrate", "navigation.top", "search.suggest", "search.highlight", "content.tabs.link", "content.code.annotation", "content.code.copy"], "search": "../assets/javascripts/workers/search.74e28a9f.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
1392 -
1393 -
1394 - <script src="../assets/javascripts/bundle.220ee61c.min.js"></script>
1395 -
1396 -
1397 - </body>
1398 -</html>
\ No newline at end of file
backend/site/cases/index.html deleted
-2127
@@ -1,2127 +0,0 @@
1 -
2 -<!doctype html>
3 -<html lang="en" class="no-js">
4 - <head>
5 -
6 - <meta charset="utf-8">
7 - <meta name="viewport" content="width=device-width,initial-scale=1">
8 -
9 -
10 -
11 -
12 - <link rel="prev" href="../artifacts/">
13 -
14 -
15 - <link rel="next" href="../graylog/">
16 -
17 - <link rel="icon" href="../assets/images/favicon.png">
18 - <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
19 -
20 -
21 -
22 - <title>Cases - SOCFortress CoPilot</title>
23 -
24 -
25 -
26 - <link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
27 -
28 -
29 - <link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
30 -
31 -
32 -
33 -
34 -
35 -
36 -
37 -
38 -
39 - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
40 - <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
41 - <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
42 -
43 -
44 -
45 - <link rel="stylesheet" href="../assets/_mkdocstrings.css">
46 -
47 - <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
48 -
49 -
50 -
51 -
52 -
53 -
54 - </head>
55 -
56 -
57 -
58 -
59 -
60 -
61 -
62 -
63 -
64 - <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple">
65 -
66 -
67 -
68 - <script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
69 -
70 - <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
71 - <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
72 - <label class="md-overlay" for="__drawer"></label>
73 - <div data-md-component="skip">
74 -
75 -
76 - <a href="#cases-overview" class="md-skip">
77 - Skip to content
78 - </a>
79 -
80 - </div>
81 - <div data-md-component="announce">
82 -
83 - </div>
84 -
85 -
86 -
87 -
88 -<header class="md-header" data-md-component="header">
89 - <nav class="md-header__inner md-grid" aria-label="Header">
90 - <a href=".." title="SOCFortress CoPilot" class="md-header__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
91 -
92 -
93 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
94 -
95 - </a>
96 - <label class="md-header__button md-icon" for="__drawer">
97 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
98 - </label>
99 - <div class="md-header__title" data-md-component="header-title">
100 - <div class="md-header__ellipsis">
101 - <div class="md-header__topic">
102 - <span class="md-ellipsis">
103 - SOCFortress CoPilot
104 - </span>
105 - </div>
106 - <div class="md-header__topic" data-md-component="header-topic">
107 - <span class="md-ellipsis">
108 -
109 - Cases
110 -
111 - </span>
112 - </div>
113 - </div>
114 - </div>
115 -
116 -
117 - <form class="md-header__option" data-md-component="palette">
118 -
119 -
120 -
121 -
122 - <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
123 -
124 - <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
125 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
126 - </label>
127 -
128 -
129 -
130 -
131 -
132 - <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="teal" data-md-color-accent="lime" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
133 -
134 - <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
135 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
136 - </label>
137 -
138 -
139 - </form>
140 -
141 -
142 -
143 -
144 -
145 - </nav>
146 -
147 -</header>
148 -
149 - <div class="md-container" data-md-component="container">
150 -
151 -
152 -
153 -
154 -
155 -<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
156 - <div class="md-grid">
157 - <ul class="md-tabs__list">
158 -
159 -
160 -
161 -
162 -
163 -
164 - <li class="md-tabs__item">
165 - <a href=".." class="md-tabs__link">
166 - Home
167 - </a>
168 - </li>
169 -
170 -
171 -
172 -
173 -
174 -
175 -
176 - <li class="md-tabs__item">
177 - <a href="../connectors/" class="md-tabs__link">
178 - Connectors
179 - </a>
180 - </li>
181 -
182 -
183 -
184 -
185 -
186 -
187 -
188 - <li class="md-tabs__item">
189 - <a href="../agents/" class="md-tabs__link">
190 - Agents
191 - </a>
192 - </li>
193 -
194 -
195 -
196 -
197 -
198 -
199 -
200 - <li class="md-tabs__item">
201 - <a href="../alerts/" class="md-tabs__link">
202 - Alerts
203 - </a>
204 - </li>
205 -
206 -
207 -
208 -
209 -
210 -
211 -
212 - <li class="md-tabs__item">
213 - <a href="../artifacts/" class="md-tabs__link">
214 - Artifacts
215 - </a>
216 - </li>
217 -
218 -
219 -
220 -
221 -
222 -
223 -
224 -
225 -
226 - <li class="md-tabs__item">
227 - <a href="./" class="md-tabs__link md-tabs__link--active">
228 - Cases
229 - </a>
230 - </li>
231 -
232 -
233 -
234 -
235 -
236 -
237 -
238 - <li class="md-tabs__item">
239 - <a href="../graylog/" class="md-tabs__link">
240 - Graylog
241 - </a>
242 - </li>
243 -
244 -
245 -
246 -
247 -
248 -
249 -
250 - <li class="md-tabs__item">
251 - <a href="../wazuhmanager/" class="md-tabs__link">
252 - Wazuh-Manager
253 - </a>
254 - </li>
255 -
256 -
257 - </ul>
258 - </div>
259 -</nav>
260 -
261 -
262 -
263 - <main class="md-main" data-md-component="main">
264 - <div class="md-main__inner md-grid">
265 -
266 -
267 -
268 - <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
269 - <div class="md-sidebar__scrollwrap">
270 - <div class="md-sidebar__inner">
271 -
272 -
273 -
274 -
275 -
276 -
277 -
278 -<nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0">
279 - <label class="md-nav__title" for="__drawer">
280 - <a href=".." title="SOCFortress CoPilot" class="md-nav__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
281 -
282 -
283 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
284 -
285 - </a>
286 - SOCFortress CoPilot
287 - </label>
288 -
289 - <ul class="md-nav__list" data-md-scrollfix>
290 -
291 -
292 -
293 -
294 -
295 -
296 -
297 -
298 - <li class="md-nav__item">
299 - <a href=".." class="md-nav__link">
300 - Home
301 - </a>
302 - </li>
303 -
304 -
305 -
306 -
307 -
308 -
309 -
310 -
311 -
312 -
313 - <li class="md-nav__item">
314 - <a href="../connectors/" class="md-nav__link">
315 - Connectors
316 - </a>
317 - </li>
318 -
319 -
320 -
321 -
322 -
323 -
324 -
325 -
326 -
327 -
328 - <li class="md-nav__item">
329 - <a href="../agents/" class="md-nav__link">
330 - Agents
331 - </a>
332 - </li>
333 -
334 -
335 -
336 -
337 -
338 -
339 -
340 -
341 -
342 -
343 - <li class="md-nav__item">
344 - <a href="../alerts/" class="md-nav__link">
345 - Alerts
346 - </a>
347 - </li>
348 -
349 -
350 -
351 -
352 -
353 -
354 -
355 -
356 -
357 -
358 - <li class="md-nav__item">
359 - <a href="../artifacts/" class="md-nav__link">
360 - Artifacts
361 - </a>
362 - </li>
363 -
364 -
365 -
366 -
367 -
368 -
369 -
370 -
371 -
372 -
373 -
374 -
375 - <li class="md-nav__item md-nav__item--active">
376 -
377 - <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
378 -
379 -
380 -
381 - <label class="md-nav__link md-nav__link--active" for="__toc">
382 - Cases
383 - <span class="md-nav__icon md-icon"></span>
384 - </label>
385 -
386 - <a href="./" class="md-nav__link md-nav__link--active">
387 - Cases
388 - </a>
389 -
390 -
391 -
392 -<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
393 -
394 -
395 -
396 -
397 - <label class="md-nav__title" for="__toc">
398 - <span class="md-nav__icon md-icon"></span>
399 - Table of contents
400 - </label>
401 - <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
402 -
403 - <li class="md-nav__item">
404 - <a href="#cases-overview" class="md-nav__link">
405 - Cases Overview
406 - </a>
407 -
408 - <nav class="md-nav" aria-label="Cases Overview">
409 - <ul class="md-nav__list">
410 -
411 - <li class="md-nav__item">
412 - <a href="#cases-model" class="md-nav__link">
413 - Cases Model
414 - </a>
415 -
416 -</li>
417 -
418 - </ul>
419 - </nav>
420 -
421 -</li>
422 -
423 - <li class="md-nav__item">
424 - <a href="#app.models.cases" class="md-nav__link">
425 - app.models.cases
426 - </a>
427 -
428 -</li>
429 -
430 - <li class="md-nav__item">
431 - <a href="#app.models.cases.Case" class="md-nav__link">
432 - Case
433 - </a>
434 -
435 - <nav class="md-nav" aria-label="Case">
436 - <ul class="md-nav__list">
437 -
438 - <li class="md-nav__item">
439 - <a href="#app.models.cases.Case.__init__" class="md-nav__link">
440 - __init__()
441 - </a>
442 -
443 -</li>
444 -
445 - <li class="md-nav__item">
446 - <a href="#app.models.cases.Case.__repr__" class="md-nav__link">
447 - __repr__()
448 - </a>
449 -
450 -</li>
451 -
452 - </ul>
453 - </nav>
454 -
455 -</li>
456 -
457 - <li class="md-nav__item">
458 - <a href="#app.models.cases.CaseSchema" class="md-nav__link">
459 - CaseSchema
460 - </a>
461 -
462 - <nav class="md-nav" aria-label="CaseSchema">
463 - <ul class="md-nav__list">
464 -
465 - <li class="md-nav__item">
466 - <a href="#app.models.cases.CaseSchema.Meta" class="md-nav__link">
467 - Meta
468 - </a>
469 -
470 -</li>
471 -
472 - <li class="md-nav__item">
473 - <a href="#cases-routes" class="md-nav__link">
474 - Cases Routes
475 - </a>
476 -
477 -</li>
478 -
479 - </ul>
480 - </nav>
481 -
482 -</li>
483 -
484 - <li class="md-nav__item">
485 - <a href="#app.routes.dfir_iris" class="md-nav__link">
486 - app.routes.dfir_iris
487 - </a>
488 -
489 -</li>
490 -
491 - <li class="md-nav__item">
492 - <a href="#app.routes.dfir_iris.create_case_note" class="md-nav__link">
493 - create_case_note()
494 - </a>
495 -
496 -</li>
497 -
498 - <li class="md-nav__item">
499 - <a href="#app.routes.dfir_iris.get_alerts" class="md-nav__link">
500 - get_alerts()
501 - </a>
502 -
503 -</li>
504 -
505 - <li class="md-nav__item">
506 - <a href="#app.routes.dfir_iris.get_case" class="md-nav__link">
507 - get_case()
508 - </a>
509 -
510 -</li>
511 -
512 - <li class="md-nav__item">
513 - <a href="#app.routes.dfir_iris.get_case_assets" class="md-nav__link">
514 - get_case_assets()
515 - </a>
516 -
517 -</li>
518 -
519 - <li class="md-nav__item">
520 - <a href="#app.routes.dfir_iris.get_case_notes" class="md-nav__link">
521 - get_case_notes()
522 - </a>
523 -
524 -</li>
525 -
526 - <li class="md-nav__item">
527 - <a href="#app.routes.dfir_iris.get_cases" class="md-nav__link">
528 - get_cases()
529 - </a>
530 -
531 - <nav class="md-nav" aria-label="get_cases()">
532 - <ul class="md-nav__list">
533 -
534 - <li class="md-nav__item">
535 - <a href="#cases-services" class="md-nav__link">
536 - Cases Services
537 - </a>
538 -
539 -</li>
540 -
541 - </ul>
542 - </nav>
543 -
544 -</li>
545 -
546 - <li class="md-nav__item">
547 - <a href="#app.services.DFIR_IRIS.cases" class="md-nav__link">
548 - app.services.DFIR_IRIS.cases
549 - </a>
550 -
551 -</li>
552 -
553 - <li class="md-nav__item">
554 - <a href="#app.services.DFIR_IRIS.cases.CasesService" class="md-nav__link">
555 - CasesService
556 - </a>
557 -
558 - <nav class="md-nav" aria-label="CasesService">
559 - <ul class="md-nav__list">
560 -
561 - <li class="md-nav__item">
562 - <a href="#app.services.DFIR_IRIS.cases.CasesService.check_case_id" class="md-nav__link">
563 - check_case_id()
564 - </a>
565 -
566 -</li>
567 -
568 - <li class="md-nav__item">
569 - <a href="#app.services.DFIR_IRIS.cases.CasesService.get_case" class="md-nav__link">
570 - get_case()
571 - </a>
572 -
573 -</li>
574 -
575 - <li class="md-nav__item">
576 - <a href="#app.services.DFIR_IRIS.cases.CasesService.list_cases" class="md-nav__link">
577 - list_cases()
578 - </a>
579 -
580 -</li>
581 -
582 - </ul>
583 - </nav>
584 -
585 -</li>
586 -
587 - </ul>
588 -
589 -</nav>
590 -
591 - </li>
592 -
593 -
594 -
595 -
596 -
597 -
598 -
599 -
600 -
601 -
602 - <li class="md-nav__item">
603 - <a href="../graylog/" class="md-nav__link">
604 - Graylog
605 - </a>
606 - </li>
607 -
608 -
609 -
610 -
611 -
612 -
613 -
614 -
615 -
616 -
617 - <li class="md-nav__item">
618 - <a href="../wazuhmanager/" class="md-nav__link">
619 - Wazuh-Manager
620 - </a>
621 - </li>
622 -
623 -
624 -
625 - </ul>
626 -</nav>
627 - </div>
628 - </div>
629 - </div>
630 -
631 -
632 -
633 -
634 - <div class="md-content" data-md-component="content">
635 - <article class="md-content__inner md-typeset">
636 -
637 -
638 -
639 -
640 - <h1>Cases</h1>
641 -
642 -<h2 id="cases-overview">Cases Overview</h2>
643 -<h3 id="cases-model"><span style="color:blue">Cases Model</span></h3>
644 -
645 -
646 -<div class="doc doc-object doc-module">
647 -
648 -
649 -<a id="app.models.cases"></a>
650 - <div class="doc doc-contents first">
651 -
652 -
653 -
654 - <div class="doc doc-children">
655 -
656 -
657 -
658 -
659 -
660 -
661 -
662 -
663 -<div class="doc doc-object doc-class">
664 -
665 -
666 -
667 -<h2 id="app.models.cases.Case" class="doc doc-heading">
668 - <code>Case</code>
669 -
670 -
671 -</h2>
672 -
673 -
674 - <div class="doc doc-contents ">
675 - <p class="doc doc-class-bases">
676 - Bases: <code><span title="app.db">db</span>.<span title="app.db.Model">Model</span></code></p>
677 -
678 -
679 - <p>Class for cases which stores the case ID, case name, and a list of agents.
680 -This class inherits from SQLAlchemy's Model class.</p>
681 -
682 -
683 - <details class="quote">
684 - <summary>Source code in <code>app\models\cases.py</code></summary>
685 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-10">10</a></span>
686 -<span class="normal"><a href="#__codelineno-0-11">11</a></span>
687 -<span class="normal"><a href="#__codelineno-0-12">12</a></span>
688 -<span class="normal"><a href="#__codelineno-0-13">13</a></span>
689 -<span class="normal"><a href="#__codelineno-0-14">14</a></span>
690 -<span class="normal"><a href="#__codelineno-0-15">15</a></span>
691 -<span class="normal"><a href="#__codelineno-0-16">16</a></span>
692 -<span class="normal"><a href="#__codelineno-0-17">17</a></span>
693 -<span class="normal"><a href="#__codelineno-0-18">18</a></span>
694 -<span class="normal"><a href="#__codelineno-0-19">19</a></span>
695 -<span class="normal"><a href="#__codelineno-0-20">20</a></span>
696 -<span class="normal"><a href="#__codelineno-0-21">21</a></span>
697 -<span class="normal"><a href="#__codelineno-0-22">22</a></span>
698 -<span class="normal"><a href="#__codelineno-0-23">23</a></span>
699 -<span class="normal"><a href="#__codelineno-0-24">24</a></span>
700 -<span class="normal"><a href="#__codelineno-0-25">25</a></span>
701 -<span class="normal"><a href="#__codelineno-0-26">26</a></span>
702 -<span class="normal"><a href="#__codelineno-0-27">27</a></span>
703 -<span class="normal"><a href="#__codelineno-0-28">28</a></span>
704 -<span class="normal"><a href="#__codelineno-0-29">29</a></span>
705 -<span class="normal"><a href="#__codelineno-0-30">30</a></span>
706 -<span class="normal"><a href="#__codelineno-0-31">31</a></span>
707 -<span class="normal"><a href="#__codelineno-0-32">32</a></span>
708 -<span class="normal"><a href="#__codelineno-0-33">33</a></span>
709 -<span class="normal"><a href="#__codelineno-0-34">34</a></span>
710 -<span class="normal"><a href="#__codelineno-0-35">35</a></span>
711 -<span class="normal"><a href="#__codelineno-0-36">36</a></span>
712 -<span class="normal"><a href="#__codelineno-0-37">37</a></span>
713 -<span class="normal"><a href="#__codelineno-0-38">38</a></span>
714 -<span class="normal"><a href="#__codelineno-0-39">39</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="k">class</span> <span class="nc">Case</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
715 -<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
716 -<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> Class for cases which stores the case ID, case name, and a list of agents.</span>
717 -<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> This class inherits from SQLAlchemy&#39;s Model class.</span>
718 -<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> &quot;&quot;&quot;</span>
719 -<a id="__codelineno-0-15" name="__codelineno-0-15"></a>
720 -<a id="__codelineno-0-16" name="__codelineno-0-16"></a> <span class="nb">id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> <span class="n">primary_key</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
721 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a> <span class="n">case_id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">)</span>
722 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a> <span class="n">case_name</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
723 -<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="n">agents</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">1000</span><span class="p">))</span>
724 -<a id="__codelineno-0-20" name="__codelineno-0-20"></a>
725 -<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">case_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">agents</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
726 -<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
727 -<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> Initialize a new instance of the Case class.</span>
728 -<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
729 -<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> :param case_id: The ID of the case.</span>
730 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> :param case_name: The name of the case.</span>
731 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> :param agents: A comma-separated string of agents associated with the case.</span>
732 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> &quot;&quot;&quot;</span>
733 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_id</span> <span class="o">=</span> <span class="n">case_id</span>
734 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_name</span> <span class="o">=</span> <span class="n">case_name</span>
735 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agents</span> <span class="o">=</span> <span class="n">agents</span>
736 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
737 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
738 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
739 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> Returns a string representation of the Case instance.</span>
740 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
741 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> :return: A string representation of the case ID.</span>
742 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> &quot;&quot;&quot;</span>
743 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;Case </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">case_id</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
744 -</code></pre></div></td></tr></table></div>
745 - </details>
746 -
747 -
748 -
749 - <div class="doc doc-children">
750 -
751 -
752 -
753 -
754 -
755 -
756 -
757 -
758 -
759 -<div class="doc doc-object doc-function">
760 -
761 -
762 -
763 -<h3 id="app.models.cases.Case.__init__" class="doc doc-heading">
764 -<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">case_id</span><span class="p">,</span> <span class="n">case_name</span><span class="p">,</span> <span class="n">agents</span><span class="p">)</span></code>
765 -
766 -</h3>
767 -
768 -
769 - <div class="doc doc-contents ">
770 -
771 - <p>Initialize a new instance of the Case class.</p>
772 -<p>:param case_id: The ID of the case.
773 -:param case_name: The name of the case.
774 -:param agents: A comma-separated string of agents associated with the case.</p>
775 -
776 - <details class="quote">
777 - <summary>Source code in <code>app\models\cases.py</code></summary>
778 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-21">21</a></span>
779 -<span class="normal"><a href="#__codelineno-0-22">22</a></span>
780 -<span class="normal"><a href="#__codelineno-0-23">23</a></span>
781 -<span class="normal"><a href="#__codelineno-0-24">24</a></span>
782 -<span class="normal"><a href="#__codelineno-0-25">25</a></span>
783 -<span class="normal"><a href="#__codelineno-0-26">26</a></span>
784 -<span class="normal"><a href="#__codelineno-0-27">27</a></span>
785 -<span class="normal"><a href="#__codelineno-0-28">28</a></span>
786 -<span class="normal"><a href="#__codelineno-0-29">29</a></span>
787 -<span class="normal"><a href="#__codelineno-0-30">30</a></span>
788 -<span class="normal"><a href="#__codelineno-0-31">31</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">case_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">agents</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
789 -<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
790 -<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> Initialize a new instance of the Case class.</span>
791 -<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
792 -<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> :param case_id: The ID of the case.</span>
793 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> :param case_name: The name of the case.</span>
794 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> :param agents: A comma-separated string of agents associated with the case.</span>
795 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> &quot;&quot;&quot;</span>
796 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_id</span> <span class="o">=</span> <span class="n">case_id</span>
797 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_name</span> <span class="o">=</span> <span class="n">case_name</span>
798 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agents</span> <span class="o">=</span> <span class="n">agents</span>
799 -</code></pre></div></td></tr></table></div>
800 - </details>
801 - </div>
802 -
803 -</div>
804 -
805 -<div class="doc doc-object doc-function">
806 -
807 -
808 -
809 -<h3 id="app.models.cases.Case.__repr__" class="doc doc-heading">
810 -<code class="highlight language-python"><span class="fm">__repr__</span><span class="p">()</span></code>
811 -
812 -</h3>
813 -
814 -
815 - <div class="doc doc-contents ">
816 -
817 - <p>Returns a string representation of the Case instance.</p>
818 -<p>:return: A string representation of the case ID.</p>
819 -
820 - <details class="quote">
821 - <summary>Source code in <code>app\models\cases.py</code></summary>
822 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-33">33</a></span>
823 -<span class="normal"><a href="#__codelineno-0-34">34</a></span>
824 -<span class="normal"><a href="#__codelineno-0-35">35</a></span>
825 -<span class="normal"><a href="#__codelineno-0-36">36</a></span>
826 -<span class="normal"><a href="#__codelineno-0-37">37</a></span>
827 -<span class="normal"><a href="#__codelineno-0-38">38</a></span>
828 -<span class="normal"><a href="#__codelineno-0-39">39</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
829 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
830 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> Returns a string representation of the Case instance.</span>
831 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
832 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> :return: A string representation of the case ID.</span>
833 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> &quot;&quot;&quot;</span>
834 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;Case </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">case_id</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
835 -</code></pre></div></td></tr></table></div>
836 - </details>
837 - </div>
838 -
839 -</div>
840 -
841 -
842 -
843 - </div>
844 -
845 - </div>
846 -
847 -</div>
848 -
849 -<div class="doc doc-object doc-class">
850 -
851 -
852 -
853 -<h2 id="app.models.cases.CaseSchema" class="doc doc-heading">
854 - <code>CaseSchema</code>
855 -
856 -
857 -</h2>
858 -
859 -
860 - <div class="doc doc-contents ">
861 - <p class="doc doc-class-bases">
862 - Bases: <code><span title="app.ma">ma</span>.<span title="app.ma.Schema">Schema</span></code></p>
863 -
864 -
865 - <p>Schema for serializing and deserializing instances of the Case class.</p>
866 -
867 -
868 - <details class="quote">
869 - <summary>Source code in <code>app\models\cases.py</code></summary>
870 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-42">42</a></span>
871 -<span class="normal"><a href="#__codelineno-0-43">43</a></span>
872 -<span class="normal"><a href="#__codelineno-0-44">44</a></span>
873 -<span class="normal"><a href="#__codelineno-0-45">45</a></span>
874 -<span class="normal"><a href="#__codelineno-0-46">46</a></span>
875 -<span class="normal"><a href="#__codelineno-0-47">47</a></span>
876 -<span class="normal"><a href="#__codelineno-0-48">48</a></span>
877 -<span class="normal"><a href="#__codelineno-0-49">49</a></span>
878 -<span class="normal"><a href="#__codelineno-0-50">50</a></span>
879 -<span class="normal"><a href="#__codelineno-0-51">51</a></span>
880 -<span class="normal"><a href="#__codelineno-0-52">52</a></span>
881 -<span class="normal"><a href="#__codelineno-0-53">53</a></span>
882 -<span class="normal"><a href="#__codelineno-0-54">54</a></span>
883 -<span class="normal"><a href="#__codelineno-0-55">55</a></span>
884 -<span class="normal"><a href="#__codelineno-0-56">56</a></span>
885 -<span class="normal"><a href="#__codelineno-0-57">57</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="k">class</span> <span class="nc">CaseSchema</span><span class="p">(</span><span class="n">ma</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
886 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
887 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Schema for serializing and deserializing instances of the Case class.</span>
888 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> &quot;&quot;&quot;</span>
889 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
890 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
891 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
892 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
893 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> &quot;&quot;&quot;</span>
894 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
895 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
896 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="s2">&quot;id&quot;</span><span class="p">,</span>
897 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="s2">&quot;case_id&quot;</span><span class="p">,</span>
898 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="s2">&quot;case_name&quot;</span><span class="p">,</span>
899 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">&quot;agents&quot;</span><span class="p">,</span>
900 -<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="p">)</span>
901 -</code></pre></div></td></tr></table></div>
902 - </details>
903 -
904 -
905 -
906 - <div class="doc doc-children">
907 -
908 -
909 -
910 -
911 -
912 -
913 -
914 -
915 -<div class="doc doc-object doc-class">
916 -
917 -
918 -
919 -<h3 id="app.models.cases.CaseSchema.Meta" class="doc doc-heading">
920 - <code>Meta</code>
921 -
922 -
923 -</h3>
924 -
925 -
926 - <div class="doc doc-contents ">
927 -
928 -
929 - <p>Meta class defines the fields to be serialized/deserialized.</p>
930 -
931 -
932 - <details class="quote">
933 - <summary>Source code in <code>app\models\cases.py</code></summary>
934 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-47">47</a></span>
935 -<span class="normal"><a href="#__codelineno-0-48">48</a></span>
936 -<span class="normal"><a href="#__codelineno-0-49">49</a></span>
937 -<span class="normal"><a href="#__codelineno-0-50">50</a></span>
938 -<span class="normal"><a href="#__codelineno-0-51">51</a></span>
939 -<span class="normal"><a href="#__codelineno-0-52">52</a></span>
940 -<span class="normal"><a href="#__codelineno-0-53">53</a></span>
941 -<span class="normal"><a href="#__codelineno-0-54">54</a></span>
942 -<span class="normal"><a href="#__codelineno-0-55">55</a></span>
943 -<span class="normal"><a href="#__codelineno-0-56">56</a></span>
944 -<span class="normal"><a href="#__codelineno-0-57">57</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
945 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
946 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
947 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> &quot;&quot;&quot;</span>
948 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
949 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
950 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="s2">&quot;id&quot;</span><span class="p">,</span>
951 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="s2">&quot;case_id&quot;</span><span class="p">,</span>
952 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="s2">&quot;case_name&quot;</span><span class="p">,</span>
953 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">&quot;agents&quot;</span><span class="p">,</span>
954 -<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="p">)</span>
955 -</code></pre></div></td></tr></table></div>
956 - </details>
957 -
958 -
959 -
960 - <div class="doc doc-children">
961 -
962 -
963 -
964 -
965 -
966 -
967 -
968 -
969 -
970 -
971 -
972 - </div>
973 -
974 - </div>
975 -
976 -</div>
977 -
978 -
979 -
980 -
981 - </div>
982 -
983 - </div>
984 -
985 -</div>
986 -
987 -
988 -
989 -
990 - </div>
991 -
992 - </div>
993 -
994 -</div><p><br></p>
995 -<h3 id="cases-routes"><span style="color:green">Cases Routes</span></h3>
996 -
997 -
998 -<div class="doc doc-object doc-module">
999 -
1000 -
1001 -<a id="app.routes.dfir_iris"></a>
1002 - <div class="doc doc-contents first">
1003 -
1004 -
1005 -
1006 - <div class="doc doc-children">
1007 -
1008 -
1009 -
1010 -
1011 -
1012 -
1013 -
1014 -
1015 -
1016 -<div class="doc doc-object doc-function">
1017 -
1018 -
1019 -
1020 -<h2 id="app.routes.dfir_iris.create_case_note" class="doc doc-heading">
1021 -<code class="highlight language-python"><span class="n">create_case_note</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
1022 -
1023 -</h2>
1024 -
1025 -
1026 - <div class="doc doc-contents ">
1027 -
1028 - <p>Endpoint to create a note for a specific case in DFIR IRIS.</p>
1029 -
1030 - <p><strong>Parameters:</strong></p>
1031 - <table>
1032 - <thead>
1033 - <tr>
1034 - <th>Name</th>
1035 - <th>Type</th>
1036 - <th>Description</th>
1037 - <th>Default</th>
1038 - </tr>
1039 - </thead>
1040 - <tbody>
1041 - <tr>
1042 - <td><code>case_id</code></td>
1043 - <td>
1044 - <code>str</code>
1045 - </td>
1046 - <td>
1047 - <div class="doc-md-description">
1048 - <p>The ID of the case to create a note for.</p>
1049 - </div>
1050 - </td>
1051 - <td>
1052 - <em>required</em>
1053 - </td>
1054 - </tr>
1055 - </tbody>
1056 - </table>
1057 -
1058 - <p><strong>Returns:</strong></p>
1059 - <table>
1060 - <thead>
1061 - <tr>
1062 -<th>Name</th> <th>Type</th>
1063 - <th>Description</th>
1064 - </tr>
1065 - </thead>
1066 - <tbody>
1067 - <tr>
1068 -<td><code>json</code></td> <td>
1069 - </td>
1070 - <td>
1071 - <div class="doc-md-description">
1072 - <p>A JSON response containing the result of the note creation operation.</p>
1073 - </div>
1074 - </td>
1075 - </tr>
1076 - </tbody>
1077 - </table>
1078 -
1079 - <details class="quote">
1080 - <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1081 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-57">57</a></span>
1082 -<span class="normal"><a href="#__codelineno-0-58">58</a></span>
1083 -<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1084 -<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1085 -<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1086 -<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1087 -<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1088 -<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1089 -<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1090 -<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1091 -<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1092 -<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1093 -<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1094 -<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1095 -<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1096 -<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1097 -<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1098 -<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1099 -<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1100 -<span class="normal"><a href="#__codelineno-0-76">76</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/cases/&lt;case_id&gt;/note&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
1101 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="k">def</span> <span class="nf">create_case_note</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1102 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1103 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Endpoint to create a note for a specific case in DFIR IRIS.</span>
1104 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
1105 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Args:</span>
1106 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> case_id (str): The ID of the case to create a note for.</span>
1107 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
1108 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
1109 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> json: A JSON response containing the result of the note creation operation.</span>
1110 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> &quot;&quot;&quot;</span>
1111 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="n">note_title</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span><span class="p">[</span><span class="s2">&quot;note_title&quot;</span><span class="p">]</span>
1112 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">note_content</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span><span class="p">[</span><span class="s2">&quot;note_content&quot;</span><span class="p">]</span>
1113 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">notes_service</span> <span class="o">=</span> <span class="n">NotesService</span><span class="p">()</span>
1114 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="n">created_note</span> <span class="o">=</span> <span class="n">notes_service</span><span class="o">.</span><span class="n">create_case_note</span><span class="p">(</span>
1115 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">cid</span><span class="o">=</span><span class="n">case_id</span><span class="p">,</span>
1116 -<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">note_title</span><span class="o">=</span><span class="n">note_title</span><span class="p">,</span>
1117 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">note_content</span><span class="o">=</span><span class="n">note_content</span><span class="p">,</span>
1118 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="p">)</span>
1119 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">return</span> <span class="n">created_note</span>
1120 -</code></pre></div></td></tr></table></div>
1121 - </details>
1122 - </div>
1123 -
1124 -</div>
1125 -
1126 -<div class="doc doc-object doc-function">
1127 -
1128 -
1129 -
1130 -<h2 id="app.routes.dfir_iris.get_alerts" class="doc doc-heading">
1131 -<code class="highlight language-python"><span class="n">get_alerts</span><span class="p">()</span></code>
1132 -
1133 -</h2>
1134 -
1135 -
1136 - <div class="doc doc-contents ">
1137 -
1138 - <p>Endpoint to retrieve all alerts from DFIR IRIS.</p>
1139 -
1140 - <p><strong>Returns:</strong></p>
1141 - <table>
1142 - <thead>
1143 - <tr>
1144 -<th>Name</th> <th>Type</th>
1145 - <th>Description</th>
1146 - </tr>
1147 - </thead>
1148 - <tbody>
1149 - <tr>
1150 -<td><code>json</code></td> <td>
1151 - </td>
1152 - <td>
1153 - <div class="doc-md-description">
1154 - <p>A JSON response containing the list of alerts.</p>
1155 - </div>
1156 - </td>
1157 - </tr>
1158 - </tbody>
1159 - </table>
1160 -
1161 - <details class="quote">
1162 - <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1163 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1164 -<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1165 -<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1166 -<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1167 -<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1168 -<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1169 -<span class="normal"><a href="#__codelineno-0-101">101</a></span>
1170 -<span class="normal"><a href="#__codelineno-0-102">102</a></span>
1171 -<span class="normal"><a href="#__codelineno-0-103">103</a></span>
1172 -<span class="normal"><a href="#__codelineno-0-104">104</a></span>
1173 -<span class="normal"><a href="#__codelineno-0-105">105</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/alerts&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1174 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="k">def</span> <span class="nf">get_alerts</span><span class="p">():</span>
1175 -<a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1176 -<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> Endpoint to retrieve all alerts from DFIR IRIS.</span>
1177 -<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
1178 -<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> Returns:</span>
1179 -<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> json: A JSON response containing the list of alerts.</span>
1180 -<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> &quot;&quot;&quot;</span>
1181 -<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AlertsService</span><span class="p">()</span>
1182 -<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">list_alerts</span><span class="p">()</span>
1183 -<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">return</span> <span class="n">alerts</span>
1184 -</code></pre></div></td></tr></table></div>
1185 - </details>
1186 - </div>
1187 -
1188 -</div>
1189 -
1190 -<div class="doc doc-object doc-function">
1191 -
1192 -
1193 -
1194 -<h2 id="app.routes.dfir_iris.get_case" class="doc doc-heading">
1195 -<code class="highlight language-python"><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
1196 -
1197 -</h2>
1198 -
1199 -
1200 - <div class="doc doc-contents ">
1201 -
1202 - <p>Endpoint to retrieve a specific case from DFIR IRIS.</p>
1203 -
1204 - <p><strong>Parameters:</strong></p>
1205 - <table>
1206 - <thead>
1207 - <tr>
1208 - <th>Name</th>
1209 - <th>Type</th>
1210 - <th>Description</th>
1211 - <th>Default</th>
1212 - </tr>
1213 - </thead>
1214 - <tbody>
1215 - <tr>
1216 - <td><code>case_id</code></td>
1217 - <td>
1218 - <code>str</code>
1219 - </td>
1220 - <td>
1221 - <div class="doc-md-description">
1222 - <p>The ID of the case to retrieve.</p>
1223 - </div>
1224 - </td>
1225 - <td>
1226 - <em>required</em>
1227 - </td>
1228 - </tr>
1229 - </tbody>
1230 - </table>
1231 -
1232 - <p><strong>Returns:</strong></p>
1233 - <table>
1234 - <thead>
1235 - <tr>
1236 -<th>Name</th> <th>Type</th>
1237 - <th>Description</th>
1238 - </tr>
1239 - </thead>
1240 - <tbody>
1241 - <tr>
1242 -<td><code>json</code></td> <td>
1243 - </td>
1244 - <td>
1245 - <div class="doc-md-description">
1246 - <p>A JSON response containing the case data.</p>
1247 - </div>
1248 - </td>
1249 - </tr>
1250 - </tbody>
1251 - </table>
1252 -
1253 - <details class="quote">
1254 - <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1255 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-25">25</a></span>
1256 -<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1257 -<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1258 -<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1259 -<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1260 -<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1261 -<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1262 -<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1263 -<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1264 -<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1265 -<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1266 -<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1267 -<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1268 -<span class="normal"><a href="#__codelineno-0-38">38</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/cases/&lt;case_id&gt;&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1269 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="k">def</span> <span class="nf">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1270 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1271 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> Endpoint to retrieve a specific case from DFIR IRIS.</span>
1272 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a>
1273 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> Args:</span>
1274 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> case_id (str): The ID of the case to retrieve.</span>
1275 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
1276 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Returns:</span>
1277 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> json: A JSON response containing the case data.</span>
1278 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> &quot;&quot;&quot;</span>
1279 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">CasesService</span><span class="p">()</span>
1280 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="o">=</span><span class="n">case_id</span><span class="p">)</span>
1281 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="k">return</span> <span class="n">case</span>
1282 -</code></pre></div></td></tr></table></div>
1283 - </details>
1284 - </div>
1285 -
1286 -</div>
1287 -
1288 -<div class="doc doc-object doc-function">
1289 -
1290 -
1291 -
1292 -<h2 id="app.routes.dfir_iris.get_case_assets" class="doc doc-heading">
1293 -<code class="highlight language-python"><span class="n">get_case_assets</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
1294 -
1295 -</h2>
1296 -
1297 -
1298 - <div class="doc doc-contents ">
1299 -
1300 - <p>Endpoint to retrieve assets of a specific case from DFIR IRIS.</p>
1301 -
1302 - <p><strong>Parameters:</strong></p>
1303 - <table>
1304 - <thead>
1305 - <tr>
1306 - <th>Name</th>
1307 - <th>Type</th>
1308 - <th>Description</th>
1309 - <th>Default</th>
1310 - </tr>
1311 - </thead>
1312 - <tbody>
1313 - <tr>
1314 - <td><code>case_id</code></td>
1315 - <td>
1316 - <code>str</code>
1317 - </td>
1318 - <td>
1319 - <div class="doc-md-description">
1320 - <p>The ID of the case to retrieve assets from.</p>
1321 - </div>
1322 - </td>
1323 - <td>
1324 - <em>required</em>
1325 - </td>
1326 - </tr>
1327 - </tbody>
1328 - </table>
1329 -
1330 - <p><strong>Returns:</strong></p>
1331 - <table>
1332 - <thead>
1333 - <tr>
1334 -<th>Name</th> <th>Type</th>
1335 - <th>Description</th>
1336 - </tr>
1337 - </thead>
1338 - <tbody>
1339 - <tr>
1340 -<td><code>json</code></td> <td>
1341 - </td>
1342 - <td>
1343 - <div class="doc-md-description">
1344 - <p>A JSON response containing the list of assets for the case.</p>
1345 - </div>
1346 - </td>
1347 - </tr>
1348 - </tbody>
1349 - </table>
1350 -
1351 - <details class="quote">
1352 - <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1353 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-79">79</a></span>
1354 -<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1355 -<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1356 -<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1357 -<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1358 -<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1359 -<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1360 -<span class="normal"><a href="#__codelineno-0-86">86</a></span>
1361 -<span class="normal"><a href="#__codelineno-0-87">87</a></span>
1362 -<span class="normal"><a href="#__codelineno-0-88">88</a></span>
1363 -<span class="normal"><a href="#__codelineno-0-89">89</a></span>
1364 -<span class="normal"><a href="#__codelineno-0-90">90</a></span>
1365 -<span class="normal"><a href="#__codelineno-0-91">91</a></span>
1366 -<span class="normal"><a href="#__codelineno-0-92">92</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/cases/&lt;case_id&gt;/assets&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1367 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="k">def</span> <span class="nf">get_case_assets</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1368 -<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1369 -<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="sd"> Endpoint to retrieve assets of a specific case from DFIR IRIS.</span>
1370 -<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
1371 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> Args:</span>
1372 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> case_id (str): The ID of the case to retrieve assets from.</span>
1373 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
1374 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> Returns:</span>
1375 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> json: A JSON response containing the list of assets for the case.</span>
1376 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> &quot;&quot;&quot;</span>
1377 -<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="n">asset_service</span> <span class="o">=</span> <span class="n">AssetsService</span><span class="p">()</span>
1378 -<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="n">assets</span> <span class="o">=</span> <span class="n">asset_service</span><span class="o">.</span><span class="n">get_case_assets</span><span class="p">(</span><span class="n">cid</span><span class="o">=</span><span class="n">case_id</span><span class="p">)</span>
1379 -<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="k">return</span> <span class="n">assets</span>
1380 -</code></pre></div></td></tr></table></div>
1381 - </details>
1382 - </div>
1383 -
1384 -</div>
1385 -
1386 -<div class="doc doc-object doc-function">
1387 -
1388 -
1389 -
1390 -<h2 id="app.routes.dfir_iris.get_case_notes" class="doc doc-heading">
1391 -<code class="highlight language-python"><span class="n">get_case_notes</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
1392 -
1393 -</h2>
1394 -
1395 -
1396 - <div class="doc doc-contents ">
1397 -
1398 - <p>Endpoint to retrieve notes of a specific case from DFIR IRIS.</p>
1399 -
1400 - <p><strong>Parameters:</strong></p>
1401 - <table>
1402 - <thead>
1403 - <tr>
1404 - <th>Name</th>
1405 - <th>Type</th>
1406 - <th>Description</th>
1407 - <th>Default</th>
1408 - </tr>
1409 - </thead>
1410 - <tbody>
1411 - <tr>
1412 - <td><code>case_id</code></td>
1413 - <td>
1414 - <code>str</code>
1415 - </td>
1416 - <td>
1417 - <div class="doc-md-description">
1418 - <p>The ID of the case to retrieve notes from.</p>
1419 - </div>
1420 - </td>
1421 - <td>
1422 - <em>required</em>
1423 - </td>
1424 - </tr>
1425 - </tbody>
1426 - </table>
1427 -
1428 - <p><strong>Returns:</strong></p>
1429 - <table>
1430 - <thead>
1431 - <tr>
1432 -<th>Name</th> <th>Type</th>
1433 - <th>Description</th>
1434 - </tr>
1435 - </thead>
1436 - <tbody>
1437 - <tr>
1438 -<td><code>json</code></td> <td>
1439 - </td>
1440 - <td>
1441 - <div class="doc-md-description">
1442 - <p>A JSON response containing the list of notes for the case.</p>
1443 - </div>
1444 - </td>
1445 - </tr>
1446 - </tbody>
1447 - </table>
1448 -
1449 - <details class="quote">
1450 - <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1451 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-41">41</a></span>
1452 -<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1453 -<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1454 -<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1455 -<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1456 -<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1457 -<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1458 -<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1459 -<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1460 -<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1461 -<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1462 -<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1463 -<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1464 -<span class="normal"><a href="#__codelineno-0-54">54</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/cases/&lt;case_id&gt;/notes&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1465 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="k">def</span> <span class="nf">get_case_notes</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
1466 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1467 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Endpoint to retrieve notes of a specific case from DFIR IRIS.</span>
1468 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a>
1469 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> Args:</span>
1470 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> case_id (str): The ID of the case to retrieve notes from.</span>
1471 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
1472 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Returns:</span>
1473 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> json: A JSON response containing the list of notes for the case.</span>
1474 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> &quot;&quot;&quot;</span>
1475 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">notes_service</span> <span class="o">=</span> <span class="n">NotesService</span><span class="p">()</span>
1476 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">notes</span> <span class="o">=</span> <span class="n">notes_service</span><span class="o">.</span><span class="n">get_case_notes</span><span class="p">(</span><span class="n">search_term</span><span class="o">=</span><span class="s2">&quot;%&quot;</span><span class="p">,</span> <span class="n">cid</span><span class="o">=</span><span class="n">case_id</span><span class="p">)</span>
1477 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">return</span> <span class="n">notes</span>
1478 -</code></pre></div></td></tr></table></div>
1479 - </details>
1480 - </div>
1481 -
1482 -</div>
1483 -
1484 -<div class="doc doc-object doc-function">
1485 -
1486 -
1487 -
1488 -<h2 id="app.routes.dfir_iris.get_cases" class="doc doc-heading">
1489 -<code class="highlight language-python"><span class="n">get_cases</span><span class="p">()</span></code>
1490 -
1491 -</h2>
1492 -
1493 -
1494 - <div class="doc doc-contents ">
1495 -
1496 - <p>Endpoint to retrieve all the cases from DFIR IRIS.</p>
1497 -
1498 - <p><strong>Returns:</strong></p>
1499 - <table>
1500 - <thead>
1501 - <tr>
1502 -<th>Name</th> <th>Type</th>
1503 - <th>Description</th>
1504 - </tr>
1505 - </thead>
1506 - <tbody>
1507 - <tr>
1508 -<td><code>json</code></td> <td>
1509 - </td>
1510 - <td>
1511 - <div class="doc-md-description">
1512 - <p>A JSON response containing the list of cases.</p>
1513 - </div>
1514 - </td>
1515 - </tr>
1516 - </tbody>
1517 - </table>
1518 -
1519 - <details class="quote">
1520 - <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1521 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-12">12</a></span>
1522 -<span class="normal"><a href="#__codelineno-0-13">13</a></span>
1523 -<span class="normal"><a href="#__codelineno-0-14">14</a></span>
1524 -<span class="normal"><a href="#__codelineno-0-15">15</a></span>
1525 -<span class="normal"><a href="#__codelineno-0-16">16</a></span>
1526 -<span class="normal"><a href="#__codelineno-0-17">17</a></span>
1527 -<span class="normal"><a href="#__codelineno-0-18">18</a></span>
1528 -<span class="normal"><a href="#__codelineno-0-19">19</a></span>
1529 -<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1530 -<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1531 -<span class="normal"><a href="#__codelineno-0-22">22</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/cases&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1532 -<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="k">def</span> <span class="nf">get_cases</span><span class="p">():</span>
1533 -<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1534 -<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> Endpoint to retrieve all the cases from DFIR IRIS.</span>
1535 -<a id="__codelineno-0-16" name="__codelineno-0-16"></a>
1536 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Returns:</span>
1537 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> json: A JSON response containing the list of cases.</span>
1538 -<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> &quot;&quot;&quot;</span>
1539 -<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">CasesService</span><span class="p">()</span>
1540 -<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="n">cases</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">list_cases</span><span class="p">()</span>
1541 -<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">return</span> <span class="n">cases</span>
1542 -</code></pre></div></td></tr></table></div>
1543 - </details>
1544 - </div>
1545 -
1546 -</div>
1547 -
1548 -
1549 -
1550 - </div>
1551 -
1552 - </div>
1553 -
1554 -</div><p><br></p>
1555 -<h3 id="cases-services"><span style="color:red">Cases Services</span></h3>
1556 -
1557 -
1558 -<div class="doc doc-object doc-module">
1559 -
1560 -
1561 -<a id="app.services.DFIR_IRIS.cases"></a>
1562 - <div class="doc doc-contents first">
1563 -
1564 -
1565 -
1566 - <div class="doc doc-children">
1567 -
1568 -
1569 -
1570 -
1571 -
1572 -
1573 -
1574 -
1575 -<div class="doc doc-object doc-class">
1576 -
1577 -
1578 -
1579 -<h2 id="app.services.DFIR_IRIS.cases.CasesService" class="doc doc-heading">
1580 - <code>CasesService</code>
1581 -
1582 -
1583 -</h2>
1584 -
1585 -
1586 - <div class="doc doc-contents ">
1587 -
1588 -
1589 - <p>A service class that encapsulates the logic for pulling cases from DFIR-IRIS.</p>
1590 -
1591 -
1592 - <details class="quote">
1593 - <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
1594 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
1595 -<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
1596 -<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
1597 -<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
1598 -<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
1599 -<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
1600 -<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
1601 -<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
1602 -<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
1603 -<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
1604 -<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
1605 -<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
1606 -<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
1607 -<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
1608 -<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
1609 -<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
1610 -<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
1611 -<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
1612 -<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
1613 -<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
1614 -<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
1615 -<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
1616 -<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
1617 -<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
1618 -<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
1619 -<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
1620 -<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
1621 -<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
1622 -<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
1623 -<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
1624 -<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
1625 -<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
1626 -<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
1627 -<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
1628 -<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
1629 -<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
1630 -<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
1631 -<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
1632 -<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
1633 -<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
1634 -<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
1635 -<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
1636 -<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
1637 -<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
1638 -<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
1639 -<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
1640 -<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
1641 -<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
1642 -<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
1643 -<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
1644 -<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
1645 -<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
1646 -<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
1647 -<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
1648 -<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
1649 -<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
1650 -<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
1651 -<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
1652 -<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
1653 -<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
1654 -<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
1655 -<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
1656 -<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
1657 -<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
1658 -<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
1659 -<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
1660 -<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
1661 -<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
1662 -<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
1663 -<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
1664 -<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
1665 -<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
1666 -<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
1667 -<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
1668 -<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
1669 -<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
1670 -<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
1671 -<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
1672 -<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
1673 -<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
1674 -<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
1675 -<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1676 -<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1677 -<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1678 -<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1679 -<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1680 -<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1681 -<span class="normal"><a href="#__codelineno-0-101">101</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="k">class</span> <span class="nc">CasesService</span><span class="p">:</span>
1682 -<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1683 -<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> A service class that encapsulates the logic for pulling cases from DFIR-IRIS.</span>
1684 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> &quot;&quot;&quot;</span>
1685 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a>
1686 -<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1687 -<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">&quot;DFIR-IRIS&quot;</span><span class="p">)</span>
1688 -<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
1689 -<a id="__codelineno-0-22" name="__codelineno-0-22"></a>
1690 -<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1691 -<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">])</span>
1692 -<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
1693 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="k">else</span><span class="p">:</span>
1694 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;session&quot;</span><span class="p">]</span>
1695 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a>
1696 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="k">def</span> <span class="nf">list_cases</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1697 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1698 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> Lists all cases from DFIR-IRIS</span>
1699 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
1700 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Returns:</span>
1701 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the cases.</span>
1702 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> &quot;&quot;&quot;</span>
1703 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1704 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">return</span> <span class="p">{</span>
1705 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1706 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
1707 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="p">}</span>
1708 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a>
1709 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting cases from DFIR-IRIS&quot;</span><span class="p">)</span>
1710 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
1711 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
1712 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
1713 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">case</span><span class="o">.</span><span class="n">list_cases</span><span class="p">,</span>
1714 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="p">)</span>
1715 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
1716 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1717 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="p">{</span>
1718 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1719 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect cases from DFIR-IRIS&quot;</span><span class="p">,</span>
1720 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">}</span>
1721 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a>
1722 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="p">{</span>
1723 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1724 -<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected cases from DFIR-IRIS&quot;</span><span class="p">,</span>
1725 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="s2">&quot;cases&quot;</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">],</span>
1726 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="p">}</span>
1727 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a>
1728 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">def</span> <span class="nf">get_case</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
1729 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1730 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> Gets a case from DFIR-IRIS and returns all the details</span>
1731 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
1732 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
1733 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
1734 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> &quot;&quot;&quot;</span>
1735 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1736 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">return</span> <span class="p">{</span>
1737 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1738 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
1739 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="p">}</span>
1740 -<a id="__codelineno-0-73" name="__codelineno-0-73"></a>
1741 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Collecting case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS&quot;</span><span class="p">)</span>
1742 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
1743 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
1744 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
1745 -<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="k">case</span><span class="o">.</span><span class="n">get_case</span><span class="p">,</span>
1746 -<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">case_id</span><span class="p">,</span>
1747 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="p">)</span>
1748 -<a id="__codelineno-0-81" name="__codelineno-0-81"></a>
1749 -<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1750 -<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="p">{</span>
1751 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1752 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Failed to collect case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS&quot;</span><span class="p">,</span>
1753 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">}</span>
1754 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a>
1755 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="k">return</span> <span class="p">{</span>
1756 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1757 -<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Successfully collected case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS&quot;</span><span class="p">,</span>
1758 -<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="s2">&quot;case&quot;</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">],</span>
1759 -<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">}</span>
1760 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
1761 -<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">def</span> <span class="nf">check_case_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
1762 -<a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1763 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> Checks if a case exists in DFIR-IRIS</span>
1764 -<a id="__codelineno-0-97" name="__codelineno-0-97"></a>
1765 -<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> Returns:</span>
1766 -<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
1767 -<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> &quot;&quot;&quot;</span>
1768 -<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span>
1769 -</code></pre></div></td></tr></table></div>
1770 - </details>
1771 -
1772 -
1773 -
1774 - <div class="doc doc-children">
1775 -
1776 -
1777 -
1778 -
1779 -
1780 -
1781 -
1782 -
1783 -
1784 -<div class="doc doc-object doc-function">
1785 -
1786 -
1787 -
1788 -<h3 id="app.services.DFIR_IRIS.cases.CasesService.check_case_id" class="doc doc-heading">
1789 -<code class="highlight language-python"><span class="n">check_case_id</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
1790 -
1791 -</h3>
1792 -
1793 -
1794 - <div class="doc doc-contents ">
1795 -
1796 - <p>Checks if a case exists in DFIR-IRIS</p>
1797 -
1798 - <p><strong>Returns:</strong></p>
1799 - <table>
1800 - <thead>
1801 - <tr>
1802 -<th>Name</th> <th>Type</th>
1803 - <th>Description</th>
1804 - </tr>
1805 - </thead>
1806 - <tbody>
1807 - <tr>
1808 -<td><code>dict</code></td> <td>
1809 - <code>bool</code>
1810 - </td>
1811 - <td>
1812 - <div class="doc-md-description">
1813 - <p>A dictionary containing the success status, a message and potentially the case.</p>
1814 - </div>
1815 - </td>
1816 - </tr>
1817 - </tbody>
1818 - </table>
1819 -
1820 - <details class="quote">
1821 - <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
1822 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
1823 -<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1824 -<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1825 -<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1826 -<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1827 -<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1828 -<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1829 -<span class="normal"><a href="#__codelineno-0-101">101</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="k">def</span> <span class="nf">check_case_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
1830 -<a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1831 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> Checks if a case exists in DFIR-IRIS</span>
1832 -<a id="__codelineno-0-97" name="__codelineno-0-97"></a>
1833 -<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> Returns:</span>
1834 -<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
1835 -<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> &quot;&quot;&quot;</span>
1836 -<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span>
1837 -</code></pre></div></td></tr></table></div>
1838 - </details>
1839 - </div>
1840 -
1841 -</div>
1842 -
1843 -<div class="doc doc-object doc-function">
1844 -
1845 -
1846 -
1847 -<h3 id="app.services.DFIR_IRIS.cases.CasesService.get_case" class="doc doc-heading">
1848 -<code class="highlight language-python"><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
1849 -
1850 -</h3>
1851 -
1852 -
1853 - <div class="doc doc-contents ">
1854 -
1855 - <p>Gets a case from DFIR-IRIS and returns all the details</p>
1856 -
1857 - <p><strong>Returns:</strong></p>
1858 - <table>
1859 - <thead>
1860 - <tr>
1861 -<th>Name</th> <th>Type</th>
1862 - <th>Description</th>
1863 - </tr>
1864 - </thead>
1865 - <tbody>
1866 - <tr>
1867 -<td><code>dict</code></td> <td>
1868 - <code>bool</code>
1869 - </td>
1870 - <td>
1871 - <div class="doc-md-description">
1872 - <p>A dictionary containing the success status, a message and potentially the case.</p>
1873 - </div>
1874 - </td>
1875 - </tr>
1876 - </tbody>
1877 - </table>
1878 -
1879 - <details class="quote">
1880 - <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
1881 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-61">61</a></span>
1882 -<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1883 -<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1884 -<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1885 -<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1886 -<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1887 -<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1888 -<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1889 -<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1890 -<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1891 -<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1892 -<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1893 -<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1894 -<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1895 -<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1896 -<span class="normal"><a href="#__codelineno-0-76">76</a></span>
1897 -<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1898 -<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1899 -<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1900 -<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1901 -<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1902 -<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1903 -<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1904 -<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1905 -<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1906 -<span class="normal"><a href="#__codelineno-0-86">86</a></span>
1907 -<span class="normal"><a href="#__codelineno-0-87">87</a></span>
1908 -<span class="normal"><a href="#__codelineno-0-88">88</a></span>
1909 -<span class="normal"><a href="#__codelineno-0-89">89</a></span>
1910 -<span class="normal"><a href="#__codelineno-0-90">90</a></span>
1911 -<span class="normal"><a href="#__codelineno-0-91">91</a></span>
1912 -<span class="normal"><a href="#__codelineno-0-92">92</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="k">def</span> <span class="nf">get_case</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
1913 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1914 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> Gets a case from DFIR-IRIS and returns all the details</span>
1915 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
1916 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
1917 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
1918 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> &quot;&quot;&quot;</span>
1919 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1920 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">return</span> <span class="p">{</span>
1921 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1922 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
1923 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="p">}</span>
1924 -<a id="__codelineno-0-73" name="__codelineno-0-73"></a>
1925 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Collecting case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS&quot;</span><span class="p">)</span>
1926 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
1927 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
1928 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
1929 -<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="k">case</span><span class="o">.</span><span class="n">get_case</span><span class="p">,</span>
1930 -<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">case_id</span><span class="p">,</span>
1931 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="p">)</span>
1932 -<a id="__codelineno-0-81" name="__codelineno-0-81"></a>
1933 -<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1934 -<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="p">{</span>
1935 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1936 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Failed to collect case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS&quot;</span><span class="p">,</span>
1937 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">}</span>
1938 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a>
1939 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="k">return</span> <span class="p">{</span>
1940 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1941 -<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Successfully collected case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS&quot;</span><span class="p">,</span>
1942 -<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="s2">&quot;case&quot;</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">],</span>
1943 -<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">}</span>
1944 -</code></pre></div></td></tr></table></div>
1945 - </details>
1946 - </div>
1947 -
1948 -</div>
1949 -
1950 -<div class="doc doc-object doc-function">
1951 -
1952 -
1953 -
1954 -<h3 id="app.services.DFIR_IRIS.cases.CasesService.list_cases" class="doc doc-heading">
1955 -<code class="highlight language-python"><span class="n">list_cases</span><span class="p">()</span></code>
1956 -
1957 -</h3>
1958 -
1959 -
1960 - <div class="doc doc-contents ">
1961 -
1962 - <p>Lists all cases from DFIR-IRIS</p>
1963 -
1964 - <p><strong>Returns:</strong></p>
1965 - <table>
1966 - <thead>
1967 - <tr>
1968 -<th>Name</th> <th>Type</th>
1969 - <th>Description</th>
1970 - </tr>
1971 - </thead>
1972 - <tbody>
1973 - <tr>
1974 -<td><code>dict</code></td> <td>
1975 - <code><span title="typing.Dict">Dict</span>[str, object]</code>
1976 - </td>
1977 - <td>
1978 - <div class="doc-md-description">
1979 - <p>A dictionary containing the success status, a message and potentially the cases.</p>
1980 - </div>
1981 - </td>
1982 - </tr>
1983 - </tbody>
1984 - </table>
1985 -
1986 - <details class="quote">
1987 - <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
1988 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-29">29</a></span>
1989 -<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1990 -<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1991 -<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1992 -<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1993 -<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1994 -<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1995 -<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1996 -<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1997 -<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1998 -<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1999 -<span class="normal"><a href="#__codelineno-0-40">40</a></span>
2000 -<span class="normal"><a href="#__codelineno-0-41">41</a></span>
2001 -<span class="normal"><a href="#__codelineno-0-42">42</a></span>
2002 -<span class="normal"><a href="#__codelineno-0-43">43</a></span>
2003 -<span class="normal"><a href="#__codelineno-0-44">44</a></span>
2004 -<span class="normal"><a href="#__codelineno-0-45">45</a></span>
2005 -<span class="normal"><a href="#__codelineno-0-46">46</a></span>
2006 -<span class="normal"><a href="#__codelineno-0-47">47</a></span>
2007 -<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2008 -<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2009 -<span class="normal"><a href="#__codelineno-0-50">50</a></span>
2010 -<span class="normal"><a href="#__codelineno-0-51">51</a></span>
2011 -<span class="normal"><a href="#__codelineno-0-52">52</a></span>
2012 -<span class="normal"><a href="#__codelineno-0-53">53</a></span>
2013 -<span class="normal"><a href="#__codelineno-0-54">54</a></span>
2014 -<span class="normal"><a href="#__codelineno-0-55">55</a></span>
2015 -<span class="normal"><a href="#__codelineno-0-56">56</a></span>
2016 -<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2017 -<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2018 -<span class="normal"><a href="#__codelineno-0-59">59</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="k">def</span> <span class="nf">list_cases</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2019 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2020 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> Lists all cases from DFIR-IRIS</span>
2021 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
2022 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Returns:</span>
2023 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the cases.</span>
2024 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> &quot;&quot;&quot;</span>
2025 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2026 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">return</span> <span class="p">{</span>
2027 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2028 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
2029 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="p">}</span>
2030 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a>
2031 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting cases from DFIR-IRIS&quot;</span><span class="p">)</span>
2032 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
2033 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
2034 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
2035 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">case</span><span class="o">.</span><span class="n">list_cases</span><span class="p">,</span>
2036 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="p">)</span>
2037 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
2038 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2039 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="p">{</span>
2040 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2041 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect cases from DFIR-IRIS&quot;</span><span class="p">,</span>
2042 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">}</span>
2043 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a>
2044 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="p">{</span>
2045 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2046 -<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected cases from DFIR-IRIS&quot;</span><span class="p">,</span>
2047 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="s2">&quot;cases&quot;</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">],</span>
2048 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="p">}</span>
2049 -</code></pre></div></td></tr></table></div>
2050 - </details>
2051 - </div>
2052 -
2053 -</div>
2054 -
2055 -
2056 -
2057 - </div>
2058 -
2059 - </div>
2060 -
2061 -</div>
2062 -
2063 -
2064 -
2065 -
2066 - </div>
2067 -
2068 - </div>
2069 -
2070 -</div>
2071 -
2072 -
2073 -
2074 -
2075 -
2076 -
2077 - </article>
2078 - </div>
2079 -
2080 -
2081 - <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
2082 -
2083 - </div>
2084 -
2085 - <button type="button" class="md-top md-icon" data-md-component="top" hidden>
2086 - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
2087 - Back to top
2088 - </button>
2089 -
2090 - </main>
2091 -
2092 - <footer class="md-footer">
2093 -
2094 - <div class="md-footer-meta md-typeset">
2095 - <div class="md-footer-meta__inner md-grid">
2096 - <div class="md-copyright">
2097 -
2098 - <div class="md-copyright__highlight">
2099 - &copy; 2023 <a href="https://github.com/socfortress/CoPilot" target="_blank" rel="noopener">SOCFortress CoPilot</a>
2100 -
2101 - </div>
2102 -
2103 -
2104 - Made with
2105 - <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2106 - Material for MkDocs
2107 - </a>
2108 -
2109 -</div>
2110 -
2111 - </div>
2112 - </div>
2113 -</footer>
2114 -
2115 - </div>
2116 - <div class="md-dialog" data-md-component="dialog">
2117 - <div class="md-dialog__inner md-typeset"></div>
2118 - </div>
2119 -
2120 - <script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.sections", "toc.integrate", "navigation.top", "search.suggest", "search.highlight", "content.tabs.link", "content.code.annotation", "content.code.copy"], "search": "../assets/javascripts/workers/search.74e28a9f.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
2121 -
2122 -
2123 - <script src="../assets/javascripts/bundle.220ee61c.min.js"></script>
2124 -
2125 -
2126 - </body>
2127 -</html>
\ No newline at end of file
backend/site/connectors/index.html
+47 -20
@@ -200,8 +200,8 @@
200
201
202 <li class="md-tabs__item">
203 - <a href="../alerts/" class="md-tabs__link">
204 - Alerts
203 + <a href="../wazuhindexer/" class="md-tabs__link">
204 + Wazuh-Indexer
205 </a>
206 </li>
207
@@ -212,8 +212,8 @@
212
213
214 <li class="md-tabs__item">
215 - <a href="../artifacts/" class="md-tabs__link">
216 - Artifacts
215 + <a href="../dfiriris/" class="md-tabs__link">
216 + Dfir-Iris
217 </a>
218 </li>
219
@@ -224,8 +224,8 @@
224
225
226 <li class="md-tabs__item">
227 - <a href="../cases/" class="md-tabs__link">
228 - Cases
227 + <a href="../graylog/" class="md-tabs__link">
228 + Graylog
229 </a>
230 </li>
231
@@ -236,8 +236,8 @@
236
237
238 <li class="md-tabs__item">
239 - <a href="../graylog/" class="md-tabs__link">
240 - Graylog
239 + <a href="../wazuhmanager/" class="md-tabs__link">
240 + Wazuh-Manager
241 </a>
242 </li>
243
@@ -248,8 +248,20 @@
248
249
250 <li class="md-tabs__item">
251 - <a href="../wazuhmanager/" class="md-tabs__link">
252 - Wazuh-Manager
251 + <a href="../velociraptor/" class="md-tabs__link">
252 + Velociraptor
253 + </a>
254 + </li>
255 +
256 +
257 +
258 +
259 +
260 +
261 +
262 + <li class="md-tabs__item">
263 + <a href="../shuffle/" class="md-tabs__link">
264 + Shuffle
265 </a>
266 </li>
267
@@ -743,8 +755,8 @@
755
756
757 <li class="md-nav__item">
746 - <a href="../alerts/" class="md-nav__link">
747 - Alerts
758 + <a href="../wazuhindexer/" class="md-nav__link">
759 + Wazuh-Indexer
760 </a>
761 </li>
762
@@ -758,8 +770,8 @@
770
771
772 <li class="md-nav__item">
761 - <a href="../artifacts/" class="md-nav__link">
762 - Artifacts
773 + <a href="../dfiriris/" class="md-nav__link">
774 + Dfir-Iris
775 </a>
776 </li>
777
@@ -773,8 +785,8 @@
785
786
787 <li class="md-nav__item">
776 - <a href="../cases/" class="md-nav__link">
777 - Cases
788 + <a href="../graylog/" class="md-nav__link">
789 + Graylog
790 </a>
791 </li>
792
@@ -788,8 +800,8 @@
800
801
802 <li class="md-nav__item">
791 - <a href="../graylog/" class="md-nav__link">
792 - Graylog
803 + <a href="../wazuhmanager/" class="md-nav__link">
804 + Wazuh-Manager
805 </a>
806 </li>
807
@@ -803,8 +815,23 @@
815
816
817 <li class="md-nav__item">
806 - <a href="../wazuhmanager/" class="md-nav__link">
807 - Wazuh-Manager
818 + <a href="../velociraptor/" class="md-nav__link">
819 + Velociraptor
820 + </a>
821 + </li>
822 +
823 +
824 +
825 +
826 +
827 +
828 +
829 +
830 +
831 +
832 + <li class="md-nav__item">
833 + <a href="../shuffle/" class="md-nav__link">
834 + Shuffle
835 </a>
836 </li>
837
backend/site/dfiriris/index.html new
+4716
@@ -0,0 +1,4716 @@
1 +
2 +<!doctype html>
3 +<html lang="en" class="no-js">
4 + <head>
5 +
6 + <meta charset="utf-8">
7 + <meta name="viewport" content="width=device-width,initial-scale=1">
8 +
9 +
10 +
11 +
12 + <link rel="prev" href="../wazuhindexer/">
13 +
14 +
15 + <link rel="next" href="../graylog/">
16 +
17 + <link rel="icon" href="../assets/images/favicon.png">
18 + <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
19 +
20 +
21 +
22 + <title>Dfir-Iris - SOCFortress CoPilot</title>
23 +
24 +
25 +
26 + <link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
27 +
28 +
29 + <link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
30 +
31 +
32 +
33 +
34 +
35 +
36 +
37 +
38 +
39 + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
40 + <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
41 + <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
42 +
43 +
44 +
45 + <link rel="stylesheet" href="../assets/_mkdocstrings.css">
46 +
47 + <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
48 +
49 +
50 +
51 +
52 +
53 +
54 + </head>
55 +
56 +
57 +
58 +
59 +
60 +
61 +
62 +
63 +
64 + <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple">
65 +
66 +
67 +
68 + <script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
69 +
70 + <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
71 + <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
72 + <label class="md-overlay" for="__drawer"></label>
73 + <div data-md-component="skip">
74 +
75 +
76 + <a href="#dfir-iris-overview" class="md-skip">
77 + Skip to content
78 + </a>
79 +
80 + </div>
81 + <div data-md-component="announce">
82 +
83 + </div>
84 +
85 +
86 +
87 +
88 +<header class="md-header" data-md-component="header">
89 + <nav class="md-header__inner md-grid" aria-label="Header">
90 + <a href=".." title="SOCFortress CoPilot" class="md-header__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
91 +
92 +
93 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
94 +
95 + </a>
96 + <label class="md-header__button md-icon" for="__drawer">
97 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
98 + </label>
99 + <div class="md-header__title" data-md-component="header-title">
100 + <div class="md-header__ellipsis">
101 + <div class="md-header__topic">
102 + <span class="md-ellipsis">
103 + SOCFortress CoPilot
104 + </span>
105 + </div>
106 + <div class="md-header__topic" data-md-component="header-topic">
107 + <span class="md-ellipsis">
108 +
109 + Dfir-Iris
110 +
111 + </span>
112 + </div>
113 + </div>
114 + </div>
115 +
116 +
117 + <form class="md-header__option" data-md-component="palette">
118 +
119 +
120 +
121 +
122 + <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
123 +
124 + <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
125 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
126 + </label>
127 +
128 +
129 +
130 +
131 +
132 + <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="teal" data-md-color-accent="lime" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
133 +
134 + <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
135 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
136 + </label>
137 +
138 +
139 + </form>
140 +
141 +
142 +
143 +
144 +
145 + </nav>
146 +
147 +</header>
148 +
149 + <div class="md-container" data-md-component="container">
150 +
151 +
152 +
153 +
154 +
155 +<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
156 + <div class="md-grid">
157 + <ul class="md-tabs__list">
158 +
159 +
160 +
161 +
162 +
163 +
164 + <li class="md-tabs__item">
165 + <a href=".." class="md-tabs__link">
166 + Home
167 + </a>
168 + </li>
169 +
170 +
171 +
172 +
173 +
174 +
175 +
176 + <li class="md-tabs__item">
177 + <a href="../connectors/" class="md-tabs__link">
178 + Connectors
179 + </a>
180 + </li>
181 +
182 +
183 +
184 +
185 +
186 +
187 +
188 + <li class="md-tabs__item">
189 + <a href="../agents/" class="md-tabs__link">
190 + Agents
191 + </a>
192 + </li>
193 +
194 +
195 +
196 +
197 +
198 +
199 +
200 + <li class="md-tabs__item">
201 + <a href="../wazuhindexer/" class="md-tabs__link">
202 + Wazuh-Indexer
203 + </a>
204 + </li>
205 +
206 +
207 +
208 +
209 +
210 +
211 +
212 +
213 +
214 + <li class="md-tabs__item">
215 + <a href="./" class="md-tabs__link md-tabs__link--active">
216 + Dfir-Iris
217 + </a>
218 + </li>
219 +
220 +
221 +
222 +
223 +
224 +
225 +
226 + <li class="md-tabs__item">
227 + <a href="../graylog/" class="md-tabs__link">
228 + Graylog
229 + </a>
230 + </li>
231 +
232 +
233 +
234 +
235 +
236 +
237 +
238 + <li class="md-tabs__item">
239 + <a href="../wazuhmanager/" class="md-tabs__link">
240 + Wazuh-Manager
241 + </a>
242 + </li>
243 +
244 +
245 +
246 +
247 +
248 +
249 +
250 + <li class="md-tabs__item">
251 + <a href="../velociraptor/" class="md-tabs__link">
252 + Velociraptor
253 + </a>
254 + </li>
255 +
256 +
257 +
258 +
259 +
260 +
261 +
262 + <li class="md-tabs__item">
263 + <a href="../shuffle/" class="md-tabs__link">
264 + Shuffle
265 + </a>
266 + </li>
267 +
268 +
269 + </ul>
270 + </div>
271 +</nav>
272 +
273 +
274 +
275 + <main class="md-main" data-md-component="main">
276 + <div class="md-main__inner md-grid">
277 +
278 +
279 +
280 + <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
281 + <div class="md-sidebar__scrollwrap">
282 + <div class="md-sidebar__inner">
283 +
284 +
285 +
286 +
287 +
288 +
289 +
290 +<nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0">
291 + <label class="md-nav__title" for="__drawer">
292 + <a href=".." title="SOCFortress CoPilot" class="md-nav__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
293 +
294 +
295 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
296 +
297 + </a>
298 + SOCFortress CoPilot
299 + </label>
300 +
301 + <ul class="md-nav__list" data-md-scrollfix>
302 +
303 +
304 +
305 +
306 +
307 +
308 +
309 +
310 + <li class="md-nav__item">
311 + <a href=".." class="md-nav__link">
312 + Home
313 + </a>
314 + </li>
315 +
316 +
317 +
318 +
319 +
320 +
321 +
322 +
323 +
324 +
325 + <li class="md-nav__item">
326 + <a href="../connectors/" class="md-nav__link">
327 + Connectors
328 + </a>
329 + </li>
330 +
331 +
332 +
333 +
334 +
335 +
336 +
337 +
338 +
339 +
340 + <li class="md-nav__item">
341 + <a href="../agents/" class="md-nav__link">
342 + Agents
343 + </a>
344 + </li>
345 +
346 +
347 +
348 +
349 +
350 +
351 +
352 +
353 +
354 +
355 + <li class="md-nav__item">
356 + <a href="../wazuhindexer/" class="md-nav__link">
357 + Wazuh-Indexer
358 + </a>
359 + </li>
360 +
361 +
362 +
363 +
364 +
365 +
366 +
367 +
368 +
369 +
370 +
371 +
372 + <li class="md-nav__item md-nav__item--active">
373 +
374 + <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
375 +
376 +
377 +
378 + <label class="md-nav__link md-nav__link--active" for="__toc">
379 + Dfir-Iris
380 + <span class="md-nav__icon md-icon"></span>
381 + </label>
382 +
383 + <a href="./" class="md-nav__link md-nav__link--active">
384 + Dfir-Iris
385 + </a>
386 +
387 +
388 +
389 +<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
390 +
391 +
392 +
393 +
394 + <label class="md-nav__title" for="__toc">
395 + <span class="md-nav__icon md-icon"></span>
396 + Table of contents
397 + </label>
398 + <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
399 +
400 + <li class="md-nav__item">
401 + <a href="#dfir-iris-overview" class="md-nav__link">
402 + Dfir-Iris Overview
403 + </a>
404 +
405 + <nav class="md-nav" aria-label="Dfir-Iris Overview">
406 + <ul class="md-nav__list">
407 +
408 + <li class="md-nav__item">
409 + <a href="#cases-model" class="md-nav__link">
410 + Cases Model
411 + </a>
412 +
413 +</li>
414 +
415 + </ul>
416 + </nav>
417 +
418 +</li>
419 +
420 + <li class="md-nav__item">
421 + <a href="#app.models.cases" class="md-nav__link">
422 + app.models.cases
423 + </a>
424 +
425 +</li>
426 +
427 + <li class="md-nav__item">
428 + <a href="#app.models.cases.Case" class="md-nav__link">
429 + Case
430 + </a>
431 +
432 + <nav class="md-nav" aria-label="Case">
433 + <ul class="md-nav__list">
434 +
435 + <li class="md-nav__item">
436 + <a href="#app.models.cases.Case.__init__" class="md-nav__link">
437 + __init__()
438 + </a>
439 +
440 +</li>
441 +
442 + <li class="md-nav__item">
443 + <a href="#app.models.cases.Case.__repr__" class="md-nav__link">
444 + __repr__()
445 + </a>
446 +
447 +</li>
448 +
449 + </ul>
450 + </nav>
451 +
452 +</li>
453 +
454 + <li class="md-nav__item">
455 + <a href="#app.models.cases.CaseSchema" class="md-nav__link">
456 + CaseSchema
457 + </a>
458 +
459 + <nav class="md-nav" aria-label="CaseSchema">
460 + <ul class="md-nav__list">
461 +
462 + <li class="md-nav__item">
463 + <a href="#app.models.cases.CaseSchema.Meta" class="md-nav__link">
464 + Meta
465 + </a>
466 +
467 +</li>
468 +
469 + <li class="md-nav__item">
470 + <a href="#cases-routes" class="md-nav__link">
471 + Cases Routes
472 + </a>
473 +
474 +</li>
475 +
476 + </ul>
477 + </nav>
478 +
479 +</li>
480 +
481 + <li class="md-nav__item">
482 + <a href="#app.routes.dfir_iris.get_cases" class="md-nav__link">
483 + app.routes.dfir_iris.get_cases
484 + </a>
485 +
486 +</li>
487 +
488 + <li class="md-nav__item">
489 + <a href="#app.routes.dfir_iris.get_case" class="md-nav__link">
490 + app.routes.dfir_iris.get_case
491 + </a>
492 +
493 + <nav class="md-nav" aria-label="app.routes.dfir_iris.get_case">
494 + <ul class="md-nav__list">
495 +
496 + <li class="md-nav__item">
497 + <a href="#notes-routes" class="md-nav__link">
498 + Notes Routes
499 + </a>
500 +
501 +</li>
502 +
503 + </ul>
504 + </nav>
505 +
506 +</li>
507 +
508 + <li class="md-nav__item">
509 + <a href="#app.routes.dfir_iris.get_case_notes" class="md-nav__link">
510 + app.routes.dfir_iris.get_case_notes
511 + </a>
512 +
513 +</li>
514 +
515 + <li class="md-nav__item">
516 + <a href="#app.routes.dfir_iris.create_case_note" class="md-nav__link">
517 + app.routes.dfir_iris.create_case_note
518 + </a>
519 +
520 + <nav class="md-nav" aria-label="app.routes.dfir_iris.create_case_note">
521 + <ul class="md-nav__list">
522 +
523 + <li class="md-nav__item">
524 + <a href="#assets-routes" class="md-nav__link">
525 + Assets Routes
526 + </a>
527 +
528 +</li>
529 +
530 + </ul>
531 + </nav>
532 +
533 +</li>
534 +
535 + <li class="md-nav__item">
536 + <a href="#app.routes.dfir_iris.get_case_assets" class="md-nav__link">
537 + app.routes.dfir_iris.get_case_assets
538 + </a>
539 +
540 + <nav class="md-nav" aria-label="app.routes.dfir_iris.get_case_assets">
541 + <ul class="md-nav__list">
542 +
543 + <li class="md-nav__item">
544 + <a href="#alerts-routes" class="md-nav__link">
545 + Alerts Routes
546 + </a>
547 +
548 +</li>
549 +
550 + </ul>
551 + </nav>
552 +
553 +</li>
554 +
555 + <li class="md-nav__item">
556 + <a href="#app.routes.dfir_iris.get_alerts" class="md-nav__link">
557 + app.routes.dfir_iris.get_alerts
558 + </a>
559 +
560 + <nav class="md-nav" aria-label="app.routes.dfir_iris.get_alerts">
561 + <ul class="md-nav__list">
562 +
563 + <li class="md-nav__item">
564 + <a href="#alerts-services" class="md-nav__link">
565 + Alerts Services
566 + </a>
567 +
568 +</li>
569 +
570 + </ul>
571 + </nav>
572 +
573 +</li>
574 +
575 + <li class="md-nav__item">
576 + <a href="#app.services.DFIR_IRIS.alerts" class="md-nav__link">
577 + app.services.DFIR_IRIS.alerts
578 + </a>
579 +
580 +</li>
581 +
582 + <li class="md-nav__item">
583 + <a href="#app.services.DFIR_IRIS.alerts.AlertsService" class="md-nav__link">
584 + AlertsService
585 + </a>
586 +
587 + <nav class="md-nav" aria-label="AlertsService">
588 + <ul class="md-nav__list">
589 +
590 + <li class="md-nav__item">
591 + <a href="#app.services.DFIR_IRIS.alerts.AlertsService.__init__" class="md-nav__link">
592 + __init__()
593 + </a>
594 +
595 +</li>
596 +
597 + <li class="md-nav__item">
598 + <a href="#app.services.DFIR_IRIS.alerts.AlertsService.list_alerts" class="md-nav__link">
599 + list_alerts()
600 + </a>
601 +
602 +</li>
603 +
604 + <li class="md-nav__item">
605 + <a href="#cases-services" class="md-nav__link">
606 + Cases Services
607 + </a>
608 +
609 +</li>
610 +
611 + </ul>
612 + </nav>
613 +
614 +</li>
615 +
616 + <li class="md-nav__item">
617 + <a href="#app.services.DFIR_IRIS.cases" class="md-nav__link">
618 + app.services.DFIR_IRIS.cases
619 + </a>
620 +
621 +</li>
622 +
623 + <li class="md-nav__item">
624 + <a href="#app.services.DFIR_IRIS.cases.CasesService" class="md-nav__link">
625 + CasesService
626 + </a>
627 +
628 + <nav class="md-nav" aria-label="CasesService">
629 + <ul class="md-nav__list">
630 +
631 + <li class="md-nav__item">
632 + <a href="#app.services.DFIR_IRIS.cases.CasesService.check_case_id" class="md-nav__link">
633 + check_case_id()
634 + </a>
635 +
636 +</li>
637 +
638 + <li class="md-nav__item">
639 + <a href="#app.services.DFIR_IRIS.cases.CasesService.get_case" class="md-nav__link">
640 + get_case()
641 + </a>
642 +
643 +</li>
644 +
645 + <li class="md-nav__item">
646 + <a href="#app.services.DFIR_IRIS.cases.CasesService.list_cases" class="md-nav__link">
647 + list_cases()
648 + </a>
649 +
650 +</li>
651 +
652 + <li class="md-nav__item">
653 + <a href="#assets-services" class="md-nav__link">
654 + Assets Services
655 + </a>
656 +
657 +</li>
658 +
659 + </ul>
660 + </nav>
661 +
662 +</li>
663 +
664 + <li class="md-nav__item">
665 + <a href="#app.services.DFIR_IRIS.assets" class="md-nav__link">
666 + app.services.DFIR_IRIS.assets
667 + </a>
668 +
669 +</li>
670 +
671 + <li class="md-nav__item">
672 + <a href="#app.services.DFIR_IRIS.assets.AssetsService" class="md-nav__link">
673 + AssetsService
674 + </a>
675 +
676 + <nav class="md-nav" aria-label="AssetsService">
677 + <ul class="md-nav__list">
678 +
679 + <li class="md-nav__item">
680 + <a href="#app.services.DFIR_IRIS.assets.AssetsService.__init__" class="md-nav__link">
681 + __init__()
682 + </a>
683 +
684 +</li>
685 +
686 + <li class="md-nav__item">
687 + <a href="#app.services.DFIR_IRIS.assets.AssetsService.get_case_assets" class="md-nav__link">
688 + get_case_assets()
689 + </a>
690 +
691 +</li>
692 +
693 + <li class="md-nav__item">
694 + <a href="#notes-services" class="md-nav__link">
695 + Notes Services
696 + </a>
697 +
698 +</li>
699 +
700 + </ul>
701 + </nav>
702 +
703 +</li>
704 +
705 + <li class="md-nav__item">
706 + <a href="#app.services.DFIR_IRIS.notes" class="md-nav__link">
707 + app.services.DFIR_IRIS.notes
708 + </a>
709 +
710 +</li>
711 +
712 + <li class="md-nav__item">
713 + <a href="#app.services.DFIR_IRIS.notes.NotesService" class="md-nav__link">
714 + NotesService
715 + </a>
716 +
717 + <nav class="md-nav" aria-label="NotesService">
718 + <ul class="md-nav__list">
719 +
720 + <li class="md-nav__item">
721 + <a href="#app.services.DFIR_IRIS.notes.NotesService.__init__" class="md-nav__link">
722 + __init__()
723 + </a>
724 +
725 +</li>
726 +
727 + <li class="md-nav__item">
728 + <a href="#app.services.DFIR_IRIS.notes.NotesService.create_case_note" class="md-nav__link">
729 + create_case_note()
730 + </a>
731 +
732 +</li>
733 +
734 + <li class="md-nav__item">
735 + <a href="#app.services.DFIR_IRIS.notes.NotesService.get_case_notes" class="md-nav__link">
736 + get_case_notes()
737 + </a>
738 +
739 +</li>
740 +
741 + <li class="md-nav__item">
742 + <a href="#universal-services" class="md-nav__link">
743 + Universal Services
744 + </a>
745 +
746 +</li>
747 +
748 + </ul>
749 + </nav>
750 +
751 +</li>
752 +
753 + <li class="md-nav__item">
754 + <a href="#app.services.DFIR_IRIS.universal" class="md-nav__link">
755 + app.services.DFIR_IRIS.universal
756 + </a>
757 +
758 +</li>
759 +
760 + <li class="md-nav__item">
761 + <a href="#app.services.DFIR_IRIS.universal.UniversalService" class="md-nav__link">
762 + UniversalService
763 + </a>
764 +
765 + <nav class="md-nav" aria-label="UniversalService">
766 + <ul class="md-nav__list">
767 +
768 + <li class="md-nav__item">
769 + <a href="#app.services.DFIR_IRIS.universal.UniversalService.__init__" class="md-nav__link">
770 + __init__()
771 + </a>
772 +
773 +</li>
774 +
775 + <li class="md-nav__item">
776 + <a href="#app.services.DFIR_IRIS.universal.UniversalService.collect_iris_details" class="md-nav__link">
777 + collect_iris_details()
778 + </a>
779 +
780 +</li>
781 +
782 + <li class="md-nav__item">
783 + <a href="#app.services.DFIR_IRIS.universal.UniversalService.create_session" class="md-nav__link">
784 + create_session()
785 + </a>
786 +
787 +</li>
788 +
789 + <li class="md-nav__item">
790 + <a href="#app.services.DFIR_IRIS.universal.UniversalService.fetch_and_parse_data" class="md-nav__link">
791 + fetch_and_parse_data()
792 + </a>
793 +
794 +</li>
795 +
796 + </ul>
797 + </nav>
798 +
799 +</li>
800 +
801 + </ul>
802 +
803 +</nav>
804 +
805 + </li>
806 +
807 +
808 +
809 +
810 +
811 +
812 +
813 +
814 +
815 +
816 + <li class="md-nav__item">
817 + <a href="../graylog/" class="md-nav__link">
818 + Graylog
819 + </a>
820 + </li>
821 +
822 +
823 +
824 +
825 +
826 +
827 +
828 +
829 +
830 +
831 + <li class="md-nav__item">
832 + <a href="../wazuhmanager/" class="md-nav__link">
833 + Wazuh-Manager
834 + </a>
835 + </li>
836 +
837 +
838 +
839 +
840 +
841 +
842 +
843 +
844 +
845 +
846 + <li class="md-nav__item">
847 + <a href="../velociraptor/" class="md-nav__link">
848 + Velociraptor
849 + </a>
850 + </li>
851 +
852 +
853 +
854 +
855 +
856 +
857 +
858 +
859 +
860 +
861 + <li class="md-nav__item">
862 + <a href="../shuffle/" class="md-nav__link">
863 + Shuffle
864 + </a>
865 + </li>
866 +
867 +
868 +
869 + </ul>
870 +</nav>
871 + </div>
872 + </div>
873 + </div>
874 +
875 +
876 +
877 +
878 + <div class="md-content" data-md-component="content">
879 + <article class="md-content__inner md-typeset">
880 +
881 +
882 +
883 +
884 + <h1>Dfir-Iris</h1>
885 +
886 +<h2 id="dfir-iris-overview">Dfir-Iris Overview</h2>
887 +<h3 id="cases-model"><span style="color:blue">Cases Model</span></h3>
888 +
889 +
890 +<div class="doc doc-object doc-module">
891 +
892 +
893 +<a id="app.models.cases"></a>
894 + <div class="doc doc-contents first">
895 +
896 +
897 +
898 + <div class="doc doc-children">
899 +
900 +
901 +
902 +
903 +
904 +
905 +
906 +
907 +<div class="doc doc-object doc-class">
908 +
909 +
910 +
911 +<h2 id="app.models.cases.Case" class="doc doc-heading">
912 + <code>Case</code>
913 +
914 +
915 +</h2>
916 +
917 +
918 + <div class="doc doc-contents ">
919 + <p class="doc doc-class-bases">
920 + Bases: <code><span title="app.db">db</span>.<span title="app.db.Model">Model</span></code></p>
921 +
922 +
923 + <p>Class for cases which stores the case ID, case name, and a list of agents.
924 +This class inherits from SQLAlchemy's Model class.</p>
925 +
926 +
927 + <details class="quote">
928 + <summary>Source code in <code>app\models\cases.py</code></summary>
929 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-10">10</a></span>
930 +<span class="normal"><a href="#__codelineno-0-11">11</a></span>
931 +<span class="normal"><a href="#__codelineno-0-12">12</a></span>
932 +<span class="normal"><a href="#__codelineno-0-13">13</a></span>
933 +<span class="normal"><a href="#__codelineno-0-14">14</a></span>
934 +<span class="normal"><a href="#__codelineno-0-15">15</a></span>
935 +<span class="normal"><a href="#__codelineno-0-16">16</a></span>
936 +<span class="normal"><a href="#__codelineno-0-17">17</a></span>
937 +<span class="normal"><a href="#__codelineno-0-18">18</a></span>
938 +<span class="normal"><a href="#__codelineno-0-19">19</a></span>
939 +<span class="normal"><a href="#__codelineno-0-20">20</a></span>
940 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
941 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
942 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
943 +<span class="normal"><a href="#__codelineno-0-24">24</a></span>
944 +<span class="normal"><a href="#__codelineno-0-25">25</a></span>
945 +<span class="normal"><a href="#__codelineno-0-26">26</a></span>
946 +<span class="normal"><a href="#__codelineno-0-27">27</a></span>
947 +<span class="normal"><a href="#__codelineno-0-28">28</a></span>
948 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
949 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
950 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
951 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
952 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
953 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
954 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
955 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
956 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
957 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
958 +<span class="normal"><a href="#__codelineno-0-39">39</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="k">class</span> <span class="nc">Case</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
959 +<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
960 +<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> Class for cases which stores the case ID, case name, and a list of agents.</span>
961 +<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> This class inherits from SQLAlchemy&#39;s Model class.</span>
962 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> &quot;&quot;&quot;</span>
963 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a>
964 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a> <span class="nb">id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> <span class="n">primary_key</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
965 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a> <span class="n">case_id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">)</span>
966 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a> <span class="n">case_name</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
967 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="n">agents</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">1000</span><span class="p">))</span>
968 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a>
969 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">case_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">agents</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
970 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
971 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> Initialize a new instance of the Case class.</span>
972 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
973 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> :param case_id: The ID of the case.</span>
974 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> :param case_name: The name of the case.</span>
975 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> :param agents: A comma-separated string of agents associated with the case.</span>
976 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> &quot;&quot;&quot;</span>
977 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_id</span> <span class="o">=</span> <span class="n">case_id</span>
978 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_name</span> <span class="o">=</span> <span class="n">case_name</span>
979 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agents</span> <span class="o">=</span> <span class="n">agents</span>
980 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
981 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
982 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
983 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> Returns a string representation of the Case instance.</span>
984 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
985 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> :return: A string representation of the case ID.</span>
986 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> &quot;&quot;&quot;</span>
987 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;Case </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">case_id</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
988 +</code></pre></div></td></tr></table></div>
989 + </details>
990 +
991 +
992 +
993 + <div class="doc doc-children">
994 +
995 +
996 +
997 +
998 +
999 +
1000 +
1001 +
1002 +
1003 +<div class="doc doc-object doc-function">
1004 +
1005 +
1006 +
1007 +<h3 id="app.models.cases.Case.__init__" class="doc doc-heading">
1008 +<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">case_id</span><span class="p">,</span> <span class="n">case_name</span><span class="p">,</span> <span class="n">agents</span><span class="p">)</span></code>
1009 +
1010 +</h3>
1011 +
1012 +
1013 + <div class="doc doc-contents ">
1014 +
1015 + <p>Initialize a new instance of the Case class.</p>
1016 +<p>:param case_id: The ID of the case.
1017 +:param case_name: The name of the case.
1018 +:param agents: A comma-separated string of agents associated with the case.</p>
1019 +
1020 + <details class="quote">
1021 + <summary>Source code in <code>app\models\cases.py</code></summary>
1022 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-21">21</a></span>
1023 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1024 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1025 +<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1026 +<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1027 +<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1028 +<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1029 +<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1030 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1031 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1032 +<span class="normal"><a href="#__codelineno-0-31">31</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">case_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">agents</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1033 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1034 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> Initialize a new instance of the Case class.</span>
1035 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
1036 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> :param case_id: The ID of the case.</span>
1037 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> :param case_name: The name of the case.</span>
1038 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> :param agents: A comma-separated string of agents associated with the case.</span>
1039 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> &quot;&quot;&quot;</span>
1040 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_id</span> <span class="o">=</span> <span class="n">case_id</span>
1041 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_name</span> <span class="o">=</span> <span class="n">case_name</span>
1042 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agents</span> <span class="o">=</span> <span class="n">agents</span>
1043 +</code></pre></div></td></tr></table></div>
1044 + </details>
1045 + </div>
1046 +
1047 +</div>
1048 +
1049 +<div class="doc doc-object doc-function">
1050 +
1051 +
1052 +
1053 +<h3 id="app.models.cases.Case.__repr__" class="doc doc-heading">
1054 +<code class="highlight language-python"><span class="fm">__repr__</span><span class="p">()</span></code>
1055 +
1056 +</h3>
1057 +
1058 +
1059 + <div class="doc doc-contents ">
1060 +
1061 + <p>Returns a string representation of the Case instance.</p>
1062 +<p>:return: A string representation of the case ID.</p>
1063 +
1064 + <details class="quote">
1065 + <summary>Source code in <code>app\models\cases.py</code></summary>
1066 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-33">33</a></span>
1067 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1068 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1069 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1070 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1071 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1072 +<span class="normal"><a href="#__codelineno-0-39">39</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
1073 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1074 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> Returns a string representation of the Case instance.</span>
1075 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
1076 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> :return: A string representation of the case ID.</span>
1077 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> &quot;&quot;&quot;</span>
1078 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;Case </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">case_id</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
1079 +</code></pre></div></td></tr></table></div>
1080 + </details>
1081 + </div>
1082 +
1083 +</div>
1084 +
1085 +
1086 +
1087 + </div>
1088 +
1089 + </div>
1090 +
1091 +</div>
1092 +
1093 +<div class="doc doc-object doc-class">
1094 +
1095 +
1096 +
1097 +<h2 id="app.models.cases.CaseSchema" class="doc doc-heading">
1098 + <code>CaseSchema</code>
1099 +
1100 +
1101 +</h2>
1102 +
1103 +
1104 + <div class="doc doc-contents ">
1105 + <p class="doc doc-class-bases">
1106 + Bases: <code><span title="app.ma">ma</span>.<span title="app.ma.Schema">Schema</span></code></p>
1107 +
1108 +
1109 + <p>Schema for serializing and deserializing instances of the Case class.</p>
1110 +
1111 +
1112 + <details class="quote">
1113 + <summary>Source code in <code>app\models\cases.py</code></summary>
1114 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-42">42</a></span>
1115 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1116 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1117 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1118 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1119 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1120 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1121 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1122 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1123 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1124 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1125 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1126 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1127 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1128 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1129 +<span class="normal"><a href="#__codelineno-0-57">57</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="k">class</span> <span class="nc">CaseSchema</span><span class="p">(</span><span class="n">ma</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
1130 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1131 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Schema for serializing and deserializing instances of the Case class.</span>
1132 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> &quot;&quot;&quot;</span>
1133 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
1134 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
1135 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1136 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
1137 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> &quot;&quot;&quot;</span>
1138 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
1139 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
1140 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="s2">&quot;id&quot;</span><span class="p">,</span>
1141 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="s2">&quot;case_id&quot;</span><span class="p">,</span>
1142 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="s2">&quot;case_name&quot;</span><span class="p">,</span>
1143 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">&quot;agents&quot;</span><span class="p">,</span>
1144 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="p">)</span>
1145 +</code></pre></div></td></tr></table></div>
1146 + </details>
1147 +
1148 +
1149 +
1150 + <div class="doc doc-children">
1151 +
1152 +
1153 +
1154 +
1155 +
1156 +
1157 +
1158 +
1159 +<div class="doc doc-object doc-class">
1160 +
1161 +
1162 +
1163 +<h3 id="app.models.cases.CaseSchema.Meta" class="doc doc-heading">
1164 + <code>Meta</code>
1165 +
1166 +
1167 +</h3>
1168 +
1169 +
1170 + <div class="doc doc-contents ">
1171 +
1172 +
1173 + <p>Meta class defines the fields to be serialized/deserialized.</p>
1174 +
1175 +
1176 + <details class="quote">
1177 + <summary>Source code in <code>app\models\cases.py</code></summary>
1178 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-47">47</a></span>
1179 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1180 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1181 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1182 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1183 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1184 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1185 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1186 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1187 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1188 +<span class="normal"><a href="#__codelineno-0-57">57</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
1189 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1190 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
1191 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> &quot;&quot;&quot;</span>
1192 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
1193 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
1194 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="s2">&quot;id&quot;</span><span class="p">,</span>
1195 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="s2">&quot;case_id&quot;</span><span class="p">,</span>
1196 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="s2">&quot;case_name&quot;</span><span class="p">,</span>
1197 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">&quot;agents&quot;</span><span class="p">,</span>
1198 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="p">)</span>
1199 +</code></pre></div></td></tr></table></div>
1200 + </details>
1201 +
1202 +
1203 +
1204 + <div class="doc doc-children">
1205 +
1206 +
1207 +
1208 +
1209 +
1210 +
1211 +
1212 +
1213 +
1214 +
1215 +
1216 + </div>
1217 +
1218 + </div>
1219 +
1220 +</div>
1221 +
1222 +
1223 +
1224 +
1225 + </div>
1226 +
1227 + </div>
1228 +
1229 +</div>
1230 +
1231 +
1232 +
1233 +
1234 + </div>
1235 +
1236 + </div>
1237 +
1238 +</div><p><br></p>
1239 +<h3 id="cases-routes"><span style="color:green">Cases Routes</span></h3>
1240 +
1241 +
1242 +<div class="doc doc-object doc-function">
1243 +
1244 +
1245 +<a id="app.routes.dfir_iris.get_cases"></a>
1246 + <div class="doc doc-contents first">
1247 +
1248 + <p>Handle GET requests at the "/cases" endpoint. Retrieve all cases from DFIR IRIS.</p>
1249 +
1250 + <p><strong>Returns:</strong></p>
1251 + <table>
1252 + <thead>
1253 + <tr>
1254 +<th>Name</th> <th>Type</th>
1255 + <th>Description</th>
1256 + </tr>
1257 + </thead>
1258 + <tbody>
1259 + <tr>
1260 +<td><code>Response</code></td> <td>
1261 + </td>
1262 + <td>
1263 + <div class="doc-md-description">
1264 + <p>A Flask Response object carrying a JSON representation of the list of cases.</p>
1265 + </div>
1266 + </td>
1267 + </tr>
1268 + </tbody>
1269 + </table>
1270 +
1271 + <details class="quote">
1272 + <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1273 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-12">12</a></span>
1274 +<span class="normal"><a href="#__codelineno-0-13">13</a></span>
1275 +<span class="normal"><a href="#__codelineno-0-14">14</a></span>
1276 +<span class="normal"><a href="#__codelineno-0-15">15</a></span>
1277 +<span class="normal"><a href="#__codelineno-0-16">16</a></span>
1278 +<span class="normal"><a href="#__codelineno-0-17">17</a></span>
1279 +<span class="normal"><a href="#__codelineno-0-18">18</a></span>
1280 +<span class="normal"><a href="#__codelineno-0-19">19</a></span>
1281 +<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1282 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1283 +<span class="normal"><a href="#__codelineno-0-22">22</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/cases&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1284 +<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="k">def</span> <span class="nf">get_cases</span><span class="p">():</span>
1285 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1286 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> Handle GET requests at the &quot;/cases&quot; endpoint. Retrieve all cases from DFIR IRIS.</span>
1287 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a>
1288 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Returns:</span>
1289 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> Response: A Flask Response object carrying a JSON representation of the list of cases.</span>
1290 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> &quot;&quot;&quot;</span>
1291 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">CasesService</span><span class="p">()</span>
1292 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="n">cases</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">list_cases</span><span class="p">()</span>
1293 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">return</span> <span class="n">cases</span>
1294 +</code></pre></div></td></tr></table></div>
1295 + </details>
1296 + </div>
1297 +
1298 +</div>
1299 +
1300 +<div class="doc doc-object doc-function">
1301 +
1302 +
1303 +<a id="app.routes.dfir_iris.get_case"></a>
1304 + <div class="doc doc-contents first">
1305 +
1306 + <p>Handle GET requests at the "/cases/<case_id>" endpoint. Retrieve a specific case from DFIR IRIS.</p>
1307 +
1308 + <p><strong>Parameters:</strong></p>
1309 + <table>
1310 + <thead>
1311 + <tr>
1312 + <th>Name</th>
1313 + <th>Type</th>
1314 + <th>Description</th>
1315 + <th>Default</th>
1316 + </tr>
1317 + </thead>
1318 + <tbody>
1319 + <tr>
1320 + <td><code>case_id</code></td>
1321 + <td>
1322 + <code>str</code>
1323 + </td>
1324 + <td>
1325 + <div class="doc-md-description">
1326 + <p>The ID of the case to retrieve.</p>
1327 + </div>
1328 + </td>
1329 + <td>
1330 + <em>required</em>
1331 + </td>
1332 + </tr>
1333 + </tbody>
1334 + </table>
1335 +
1336 + <p><strong>Returns:</strong></p>
1337 + <table>
1338 + <thead>
1339 + <tr>
1340 +<th>Name</th> <th>Type</th>
1341 + <th>Description</th>
1342 + </tr>
1343 + </thead>
1344 + <tbody>
1345 + <tr>
1346 +<td><code>Response</code></td> <td>
1347 + </td>
1348 + <td>
1349 + <div class="doc-md-description">
1350 + <p>A Flask Response object carrying a JSON representation of the case data.</p>
1351 + </div>
1352 + </td>
1353 + </tr>
1354 + </tbody>
1355 + </table>
1356 +
1357 + <details class="quote">
1358 + <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1359 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-25">25</a></span>
1360 +<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1361 +<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1362 +<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1363 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1364 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1365 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1366 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1367 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1368 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1369 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1370 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1371 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1372 +<span class="normal"><a href="#__codelineno-0-38">38</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/cases/&lt;case_id&gt;&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1373 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="k">def</span> <span class="nf">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1374 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1375 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> Handle GET requests at the &quot;/cases/&lt;case_id&gt;&quot; endpoint. Retrieve a specific case from DFIR IRIS.</span>
1376 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a>
1377 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> Args:</span>
1378 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> case_id (str): The ID of the case to retrieve.</span>
1379 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
1380 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Returns:</span>
1381 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> Response: A Flask Response object carrying a JSON representation of the case data.</span>
1382 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> &quot;&quot;&quot;</span>
1383 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">CasesService</span><span class="p">()</span>
1384 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="o">=</span><span class="n">case_id</span><span class="p">)</span>
1385 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="k">return</span> <span class="n">case</span>
1386 +</code></pre></div></td></tr></table></div>
1387 + </details>
1388 + </div>
1389 +
1390 +</div><p><br></p>
1391 +<h3 id="notes-routes"><span style="color:green">Notes Routes</span></h3>
1392 +
1393 +
1394 +<div class="doc doc-object doc-function">
1395 +
1396 +
1397 +<a id="app.routes.dfir_iris.get_case_notes"></a>
1398 + <div class="doc doc-contents first">
1399 +
1400 + <p>Handle GET requests at the "/cases/<case_id>/notes" endpoint. Retrieve notes of a specific case from DFIR IRIS.</p>
1401 +
1402 + <p><strong>Parameters:</strong></p>
1403 + <table>
1404 + <thead>
1405 + <tr>
1406 + <th>Name</th>
1407 + <th>Type</th>
1408 + <th>Description</th>
1409 + <th>Default</th>
1410 + </tr>
1411 + </thead>
1412 + <tbody>
1413 + <tr>
1414 + <td><code>case_id</code></td>
1415 + <td>
1416 + <code>str</code>
1417 + </td>
1418 + <td>
1419 + <div class="doc-md-description">
1420 + <p>The ID of the case to retrieve notes from.</p>
1421 + </div>
1422 + </td>
1423 + <td>
1424 + <em>required</em>
1425 + </td>
1426 + </tr>
1427 + </tbody>
1428 + </table>
1429 +
1430 + <p><strong>Returns:</strong></p>
1431 + <table>
1432 + <thead>
1433 + <tr>
1434 +<th>Name</th> <th>Type</th>
1435 + <th>Description</th>
1436 + </tr>
1437 + </thead>
1438 + <tbody>
1439 + <tr>
1440 +<td><code>Response</code></td> <td>
1441 + </td>
1442 + <td>
1443 + <div class="doc-md-description">
1444 + <p>A Flask Response object carrying a JSON representation of the list of notes for the case.</p>
1445 + </div>
1446 + </td>
1447 + </tr>
1448 + </tbody>
1449 + </table>
1450 +
1451 + <details class="quote">
1452 + <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1453 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-41">41</a></span>
1454 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1455 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1456 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1457 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1458 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1459 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1460 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1461 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1462 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1463 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1464 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1465 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1466 +<span class="normal"><a href="#__codelineno-0-54">54</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/cases/&lt;case_id&gt;/notes&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1467 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="k">def</span> <span class="nf">get_case_notes</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
1468 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1469 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Handle GET requests at the &quot;/cases/&lt;case_id&gt;/notes&quot; endpoint. Retrieve notes of a specific case from DFIR IRIS.</span>
1470 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a>
1471 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> Args:</span>
1472 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> case_id (str): The ID of the case to retrieve notes from.</span>
1473 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
1474 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Returns:</span>
1475 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Response: A Flask Response object carrying a JSON representation of the list of notes for the case.</span>
1476 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> &quot;&quot;&quot;</span>
1477 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">notes_service</span> <span class="o">=</span> <span class="n">NotesService</span><span class="p">()</span>
1478 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">notes</span> <span class="o">=</span> <span class="n">notes_service</span><span class="o">.</span><span class="n">get_case_notes</span><span class="p">(</span><span class="n">search_term</span><span class="o">=</span><span class="s2">&quot;%&quot;</span><span class="p">,</span> <span class="n">cid</span><span class="o">=</span><span class="n">case_id</span><span class="p">)</span>
1479 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">return</span> <span class="n">notes</span>
1480 +</code></pre></div></td></tr></table></div>
1481 + </details>
1482 + </div>
1483 +
1484 +</div>
1485 +
1486 +<div class="doc doc-object doc-function">
1487 +
1488 +
1489 +<a id="app.routes.dfir_iris.create_case_note"></a>
1490 + <div class="doc doc-contents first">
1491 +
1492 + <p>Handle POST requests at the "/cases/<case_id>/note" endpoint. Create a note for a specific case in DFIR IRIS.</p>
1493 +
1494 + <p><strong>Parameters:</strong></p>
1495 + <table>
1496 + <thead>
1497 + <tr>
1498 + <th>Name</th>
1499 + <th>Type</th>
1500 + <th>Description</th>
1501 + <th>Default</th>
1502 + </tr>
1503 + </thead>
1504 + <tbody>
1505 + <tr>
1506 + <td><code>case_id</code></td>
1507 + <td>
1508 + <code>str</code>
1509 + </td>
1510 + <td>
1511 + <div class="doc-md-description">
1512 + <p>The ID of the case to create a note for.</p>
1513 + </div>
1514 + </td>
1515 + <td>
1516 + <em>required</em>
1517 + </td>
1518 + </tr>
1519 + </tbody>
1520 + </table>
1521 +
1522 + <p><strong>Returns:</strong></p>
1523 + <table>
1524 + <thead>
1525 + <tr>
1526 +<th>Name</th> <th>Type</th>
1527 + <th>Description</th>
1528 + </tr>
1529 + </thead>
1530 + <tbody>
1531 + <tr>
1532 +<td><code>Response</code></td> <td>
1533 + </td>
1534 + <td>
1535 + <div class="doc-md-description">
1536 + <p>A Flask Response object carrying a JSON representation of the result of the note creation operation.</p>
1537 + </div>
1538 + </td>
1539 + </tr>
1540 + </tbody>
1541 + </table>
1542 +
1543 + <details class="quote">
1544 + <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1545 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-57">57</a></span>
1546 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
1547 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1548 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1549 +<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1550 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1551 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1552 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1553 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1554 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1555 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1556 +<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1557 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1558 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1559 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1560 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1561 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1562 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1563 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1564 +<span class="normal"><a href="#__codelineno-0-76">76</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/cases/&lt;case_id&gt;/note&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
1565 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="k">def</span> <span class="nf">create_case_note</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1566 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1567 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Handle POST requests at the &quot;/cases/&lt;case_id&gt;/note&quot; endpoint. Create a note for a specific case in DFIR IRIS.</span>
1568 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
1569 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Args:</span>
1570 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> case_id (str): The ID of the case to create a note for.</span>
1571 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
1572 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
1573 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> Response: A Flask Response object carrying a JSON representation of the result of the note creation operation.</span>
1574 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> &quot;&quot;&quot;</span>
1575 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="n">note_title</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span><span class="p">[</span><span class="s2">&quot;note_title&quot;</span><span class="p">]</span>
1576 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">note_content</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span><span class="p">[</span><span class="s2">&quot;note_content&quot;</span><span class="p">]</span>
1577 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">notes_service</span> <span class="o">=</span> <span class="n">NotesService</span><span class="p">()</span>
1578 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="n">created_note</span> <span class="o">=</span> <span class="n">notes_service</span><span class="o">.</span><span class="n">create_case_note</span><span class="p">(</span>
1579 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">cid</span><span class="o">=</span><span class="n">case_id</span><span class="p">,</span>
1580 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">note_title</span><span class="o">=</span><span class="n">note_title</span><span class="p">,</span>
1581 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">note_content</span><span class="o">=</span><span class="n">note_content</span><span class="p">,</span>
1582 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="p">)</span>
1583 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">return</span> <span class="n">created_note</span>
1584 +</code></pre></div></td></tr></table></div>
1585 + </details>
1586 + </div>
1587 +
1588 +</div><p><br></p>
1589 +<h3 id="assets-routes"><span style="color:green">Assets Routes</span></h3>
1590 +
1591 +
1592 +<div class="doc doc-object doc-function">
1593 +
1594 +
1595 +<a id="app.routes.dfir_iris.get_case_assets"></a>
1596 + <div class="doc doc-contents first">
1597 +
1598 + <p>Handle GET requests at the "/cases/<case_id>/assets" endpoint. Retrieve assets of a specific case from DFIR IRIS.</p>
1599 +
1600 + <p><strong>Parameters:</strong></p>
1601 + <table>
1602 + <thead>
1603 + <tr>
1604 + <th>Name</th>
1605 + <th>Type</th>
1606 + <th>Description</th>
1607 + <th>Default</th>
1608 + </tr>
1609 + </thead>
1610 + <tbody>
1611 + <tr>
1612 + <td><code>case_id</code></td>
1613 + <td>
1614 + <code>str</code>
1615 + </td>
1616 + <td>
1617 + <div class="doc-md-description">
1618 + <p>The ID of the case to retrieve assets from.</p>
1619 + </div>
1620 + </td>
1621 + <td>
1622 + <em>required</em>
1623 + </td>
1624 + </tr>
1625 + </tbody>
1626 + </table>
1627 +
1628 + <p><strong>Returns:</strong></p>
1629 + <table>
1630 + <thead>
1631 + <tr>
1632 +<th>Name</th> <th>Type</th>
1633 + <th>Description</th>
1634 + </tr>
1635 + </thead>
1636 + <tbody>
1637 + <tr>
1638 +<td><code>Response</code></td> <td>
1639 + </td>
1640 + <td>
1641 + <div class="doc-md-description">
1642 + <p>A Flask Response object carrying a JSON representation of the list of assets for the case.</p>
1643 + </div>
1644 + </td>
1645 + </tr>
1646 + </tbody>
1647 + </table>
1648 +
1649 + <details class="quote">
1650 + <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1651 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-79">79</a></span>
1652 +<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1653 +<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1654 +<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1655 +<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1656 +<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1657 +<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1658 +<span class="normal"><a href="#__codelineno-0-86">86</a></span>
1659 +<span class="normal"><a href="#__codelineno-0-87">87</a></span>
1660 +<span class="normal"><a href="#__codelineno-0-88">88</a></span>
1661 +<span class="normal"><a href="#__codelineno-0-89">89</a></span>
1662 +<span class="normal"><a href="#__codelineno-0-90">90</a></span>
1663 +<span class="normal"><a href="#__codelineno-0-91">91</a></span>
1664 +<span class="normal"><a href="#__codelineno-0-92">92</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/cases/&lt;case_id&gt;/assets&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1665 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="k">def</span> <span class="nf">get_case_assets</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1666 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1667 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="sd"> Handle GET requests at the &quot;/cases/&lt;case_id&gt;/assets&quot; endpoint. Retrieve assets of a specific case from DFIR IRIS.</span>
1668 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
1669 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> Args:</span>
1670 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> case_id (str): The ID of the case to retrieve assets from.</span>
1671 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
1672 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> Returns:</span>
1673 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> Response: A Flask Response object carrying a JSON representation of the list of assets for the case.</span>
1674 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> &quot;&quot;&quot;</span>
1675 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="n">asset_service</span> <span class="o">=</span> <span class="n">AssetsService</span><span class="p">()</span>
1676 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="n">assets</span> <span class="o">=</span> <span class="n">asset_service</span><span class="o">.</span><span class="n">get_case_assets</span><span class="p">(</span><span class="n">cid</span><span class="o">=</span><span class="n">case_id</span><span class="p">)</span>
1677 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="k">return</span> <span class="n">assets</span>
1678 +</code></pre></div></td></tr></table></div>
1679 + </details>
1680 + </div>
1681 +
1682 +</div><p><br></p>
1683 +<h3 id="alerts-routes"><span style="color:green">Alerts Routes</span></h3>
1684 +
1685 +
1686 +<div class="doc doc-object doc-function">
1687 +
1688 +
1689 +<a id="app.routes.dfir_iris.get_alerts"></a>
1690 + <div class="doc doc-contents first">
1691 +
1692 + <p>Handle GET requests at the "/alerts" endpoint. Retrieve all alerts from DFIR IRIS.</p>
1693 +
1694 + <p><strong>Returns:</strong></p>
1695 + <table>
1696 + <thead>
1697 + <tr>
1698 +<th>Name</th> <th>Type</th>
1699 + <th>Description</th>
1700 + </tr>
1701 + </thead>
1702 + <tbody>
1703 + <tr>
1704 +<td><code>Response</code></td> <td>
1705 + </td>
1706 + <td>
1707 + <div class="doc-md-description">
1708 + <p>A Flask Response object carrying a JSON representation of the list of alerts.</p>
1709 + </div>
1710 + </td>
1711 + </tr>
1712 + </tbody>
1713 + </table>
1714 +
1715 + <details class="quote">
1716 + <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1717 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1718 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1719 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1720 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1721 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1722 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1723 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
1724 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
1725 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
1726 +<span class="normal"><a href="#__codelineno-0-104">104</a></span>
1727 +<span class="normal"><a href="#__codelineno-0-105">105</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/alerts&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1728 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="k">def</span> <span class="nf">get_alerts</span><span class="p">():</span>
1729 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1730 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> Handle GET requests at the &quot;/alerts&quot; endpoint. Retrieve all alerts from DFIR IRIS.</span>
1731 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
1732 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> Returns:</span>
1733 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> Response: A Flask Response object carrying a JSON representation of the list of alerts.</span>
1734 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> &quot;&quot;&quot;</span>
1735 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AlertsService</span><span class="p">()</span>
1736 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">list_alerts</span><span class="p">()</span>
1737 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">return</span> <span class="n">alerts</span>
1738 +</code></pre></div></td></tr></table></div>
1739 + </details>
1740 + </div>
1741 +
1742 +</div><p><br></p>
1743 +<h3 id="alerts-services"><span style="color:red">Alerts Services</span></h3>
1744 +
1745 +
1746 +<div class="doc doc-object doc-module">
1747 +
1748 +
1749 +<a id="app.services.DFIR_IRIS.alerts"></a>
1750 + <div class="doc doc-contents first">
1751 +
1752 +
1753 +
1754 + <div class="doc doc-children">
1755 +
1756 +
1757 +
1758 +
1759 +
1760 +
1761 +
1762 +
1763 +<div class="doc doc-object doc-class">
1764 +
1765 +
1766 +
1767 +<h2 id="app.services.DFIR_IRIS.alerts.AlertsService" class="doc doc-heading">
1768 + <code>AlertsService</code>
1769 +
1770 +
1771 +</h2>
1772 +
1773 +
1774 + <div class="doc doc-contents ">
1775 +
1776 +
1777 + <p>A service class that encapsulates the logic for pulling alerts from DFIR-IRIS. It creates a DFIR-IRIS session upon
1778 +initialization and uses it to fetch alerts.</p>
1779 +
1780 +
1781 + <details class="quote">
1782 + <summary>Source code in <code>app\services\DFIR_IRIS\alerts.py</code></summary>
1783 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-13">13</a></span>
1784 +<span class="normal"><a href="#__codelineno-0-14">14</a></span>
1785 +<span class="normal"><a href="#__codelineno-0-15">15</a></span>
1786 +<span class="normal"><a href="#__codelineno-0-16">16</a></span>
1787 +<span class="normal"><a href="#__codelineno-0-17">17</a></span>
1788 +<span class="normal"><a href="#__codelineno-0-18">18</a></span>
1789 +<span class="normal"><a href="#__codelineno-0-19">19</a></span>
1790 +<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1791 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1792 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1793 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1794 +<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1795 +<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1796 +<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1797 +<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1798 +<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1799 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1800 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1801 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1802 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1803 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1804 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1805 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1806 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1807 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1808 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1809 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1810 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1811 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1812 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1813 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1814 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1815 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1816 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1817 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1818 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1819 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1820 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1821 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1822 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1823 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1824 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1825 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1826 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1827 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
1828 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
1829 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1830 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1831 +<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1832 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1833 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1834 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1835 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1836 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1837 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1838 +<span class="normal"><a href="#__codelineno-0-68">68</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="k">class</span> <span class="nc">AlertsService</span><span class="p">:</span>
1839 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1840 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> A service class that encapsulates the logic for pulling alerts from DFIR-IRIS. It creates a DFIR-IRIS session upon</span>
1841 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> initialization and uses it to fetch alerts.</span>
1842 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> &quot;&quot;&quot;</span>
1843 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a>
1844 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1845 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1846 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> Initializes the AlertsService by creating a UniversalService object for &quot;DFIR-IRIS&quot; and establishing a session.</span>
1847 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</span>
1848 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> &quot;&quot;&quot;</span>
1849 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">&quot;DFIR-IRIS&quot;</span><span class="p">)</span>
1850 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
1851 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a>
1852 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1853 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">])</span>
1854 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
1855 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="k">else</span><span class="p">:</span>
1856 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;session&quot;</span><span class="p">]</span>
1857 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
1858 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="k">def</span> <span class="nf">list_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1859 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1860 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> List all alerts from DFIR-IRIS. If the iris_session attribute is None, this indicates that the session creation</span>
1861 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> was unsuccessful, and a dictionary with &quot;success&quot; set to False is returned. Otherwise, it attempts to fetch and</span>
1862 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> parse the alerts data.</span>
1863 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a>
1864 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> Returns:</span>
1865 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the fetched alerts. The</span>
1866 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> &quot;success&quot; key is a boolean indicating whether the operation was successful. The &quot;message&quot; key is a string</span>
1867 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> providing details about the operation. The &quot;results&quot; key, included when &quot;success&quot; is True, contains the</span>
1868 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> fetched alerts data.</span>
1869 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> &quot;&quot;&quot;</span>
1870 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1871 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">return</span> <span class="p">{</span>
1872 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1873 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
1874 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="p">}</span>
1875 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a>
1876 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting cases from DFIR-IRIS&quot;</span><span class="p">)</span>
1877 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">alert</span> <span class="o">=</span> <span class="n">Alert</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
1878 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
1879 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
1880 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="n">alert</span><span class="o">.</span><span class="n">filter_alerts</span><span class="p">,</span>
1881 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="p">)</span>
1882 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
1883 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1884 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">return</span> <span class="p">{</span>
1885 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1886 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect cases from DFIR-IRIS&quot;</span><span class="p">,</span>
1887 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="p">}</span>
1888 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
1889 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">return</span> <span class="p">{</span>
1890 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1891 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected cases from DFIR-IRIS&quot;</span><span class="p">,</span>
1892 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="s2">&quot;results&quot;</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">],</span>
1893 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">}</span>
1894 +</code></pre></div></td></tr></table></div>
1895 + </details>
1896 +
1897 +
1898 +
1899 + <div class="doc doc-children">
1900 +
1901 +
1902 +
1903 +
1904 +
1905 +
1906 +
1907 +
1908 +
1909 +<div class="doc doc-object doc-function">
1910 +
1911 +
1912 +
1913 +<h3 id="app.services.DFIR_IRIS.alerts.AlertsService.__init__" class="doc doc-heading">
1914 +<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
1915 +
1916 +</h3>
1917 +
1918 +
1919 + <div class="doc doc-contents ">
1920 +
1921 + <p>Initializes the AlertsService by creating a UniversalService object for "DFIR-IRIS" and establishing a session.
1922 +If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</p>
1923 +
1924 + <details class="quote">
1925 + <summary>Source code in <code>app\services\DFIR_IRIS\alerts.py</code></summary>
1926 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-19">19</a></span>
1927 +<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1928 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1929 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1930 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1931 +<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1932 +<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1933 +<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1934 +<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1935 +<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1936 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1937 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1938 +<span class="normal"><a href="#__codelineno-0-31">31</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1939 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1940 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> Initializes the AlertsService by creating a UniversalService object for &quot;DFIR-IRIS&quot; and establishing a session.</span>
1941 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</span>
1942 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> &quot;&quot;&quot;</span>
1943 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">&quot;DFIR-IRIS&quot;</span><span class="p">)</span>
1944 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
1945 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a>
1946 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1947 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">])</span>
1948 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
1949 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="k">else</span><span class="p">:</span>
1950 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;session&quot;</span><span class="p">]</span>
1951 +</code></pre></div></td></tr></table></div>
1952 + </details>
1953 + </div>
1954 +
1955 +</div>
1956 +
1957 +<div class="doc doc-object doc-function">
1958 +
1959 +
1960 +
1961 +<h3 id="app.services.DFIR_IRIS.alerts.AlertsService.list_alerts" class="doc doc-heading">
1962 +<code class="highlight language-python"><span class="n">list_alerts</span><span class="p">()</span></code>
1963 +
1964 +</h3>
1965 +
1966 +
1967 + <div class="doc doc-contents ">
1968 +
1969 + <p>List all alerts from DFIR-IRIS. If the iris_session attribute is None, this indicates that the session creation
1970 +was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise, it attempts to fetch and
1971 +parse the alerts data.</p>
1972 +
1973 + <p><strong>Returns:</strong></p>
1974 + <table>
1975 + <thead>
1976 + <tr>
1977 +<th>Name</th> <th>Type</th>
1978 + <th>Description</th>
1979 + </tr>
1980 + </thead>
1981 + <tbody>
1982 + <tr>
1983 +<td><code>dict</code></td> <td>
1984 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
1985 + </td>
1986 + <td>
1987 + <div class="doc-md-description">
1988 + <p>A dictionary containing the success status, a message, and potentially the fetched alerts. The</p>
1989 + </div>
1990 + </td>
1991 + </tr>
1992 + <tr>
1993 +<td></td> <td>
1994 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
1995 + </td>
1996 + <td>
1997 + <div class="doc-md-description">
1998 + <p>"success" key is a boolean indicating whether the operation was successful. The "message" key is a string</p>
1999 + </div>
2000 + </td>
2001 + </tr>
2002 + <tr>
2003 +<td></td> <td>
2004 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
2005 + </td>
2006 + <td>
2007 + <div class="doc-md-description">
2008 + <p>providing details about the operation. The "results" key, included when "success" is True, contains the</p>
2009 + </div>
2010 + </td>
2011 + </tr>
2012 + <tr>
2013 +<td></td> <td>
2014 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
2015 + </td>
2016 + <td>
2017 + <div class="doc-md-description">
2018 + <p>fetched alerts data.</p>
2019 + </div>
2020 + </td>
2021 + </tr>
2022 + </tbody>
2023 + </table>
2024 +
2025 + <details class="quote">
2026 + <summary>Source code in <code>app\services\DFIR_IRIS\alerts.py</code></summary>
2027 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-33">33</a></span>
2028 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
2029 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
2030 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
2031 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
2032 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
2033 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
2034 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
2035 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
2036 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
2037 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
2038 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
2039 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
2040 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
2041 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
2042 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2043 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2044 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
2045 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
2046 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
2047 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
2048 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
2049 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
2050 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
2051 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2052 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2053 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
2054 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
2055 +<span class="normal"><a href="#__codelineno-0-61">61</a></span>
2056 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
2057 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
2058 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
2059 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
2060 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
2061 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
2062 +<span class="normal"><a href="#__codelineno-0-68">68</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="k">def</span> <span class="nf">list_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2063 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2064 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> List all alerts from DFIR-IRIS. If the iris_session attribute is None, this indicates that the session creation</span>
2065 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> was unsuccessful, and a dictionary with &quot;success&quot; set to False is returned. Otherwise, it attempts to fetch and</span>
2066 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> parse the alerts data.</span>
2067 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a>
2068 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> Returns:</span>
2069 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the fetched alerts. The</span>
2070 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> &quot;success&quot; key is a boolean indicating whether the operation was successful. The &quot;message&quot; key is a string</span>
2071 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> providing details about the operation. The &quot;results&quot; key, included when &quot;success&quot; is True, contains the</span>
2072 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> fetched alerts data.</span>
2073 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> &quot;&quot;&quot;</span>
2074 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2075 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">return</span> <span class="p">{</span>
2076 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2077 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
2078 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="p">}</span>
2079 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a>
2080 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting cases from DFIR-IRIS&quot;</span><span class="p">)</span>
2081 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">alert</span> <span class="o">=</span> <span class="n">Alert</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
2082 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
2083 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
2084 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="n">alert</span><span class="o">.</span><span class="n">filter_alerts</span><span class="p">,</span>
2085 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="p">)</span>
2086 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
2087 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2088 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">return</span> <span class="p">{</span>
2089 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2090 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect cases from DFIR-IRIS&quot;</span><span class="p">,</span>
2091 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="p">}</span>
2092 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
2093 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">return</span> <span class="p">{</span>
2094 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2095 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected cases from DFIR-IRIS&quot;</span><span class="p">,</span>
2096 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="s2">&quot;results&quot;</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">],</span>
2097 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">}</span>
2098 +</code></pre></div></td></tr></table></div>
2099 + </details>
2100 + </div>
2101 +
2102 +</div>
2103 +
2104 +
2105 +
2106 + </div>
2107 +
2108 + </div>
2109 +
2110 +</div>
2111 +
2112 +
2113 +
2114 +
2115 + </div>
2116 +
2117 + </div>
2118 +
2119 +</div><p><br></p>
2120 +<h3 id="cases-services"><span style="color:red">Cases Services</span></h3>
2121 +
2122 +
2123 +<div class="doc doc-object doc-module">
2124 +
2125 +
2126 +<a id="app.services.DFIR_IRIS.cases"></a>
2127 + <div class="doc doc-contents first">
2128 +
2129 +
2130 +
2131 + <div class="doc doc-children">
2132 +
2133 +
2134 +
2135 +
2136 +
2137 +
2138 +
2139 +
2140 +<div class="doc doc-object doc-class">
2141 +
2142 +
2143 +
2144 +<h2 id="app.services.DFIR_IRIS.cases.CasesService" class="doc doc-heading">
2145 + <code>CasesService</code>
2146 +
2147 +
2148 +</h2>
2149 +
2150 +
2151 + <div class="doc doc-contents ">
2152 +
2153 +
2154 + <p>A service class that encapsulates the logic for pulling cases from DFIR-IRIS.</p>
2155 +
2156 +
2157 + <details class="quote">
2158 + <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
2159 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
2160 +<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
2161 +<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
2162 +<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
2163 +<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
2164 +<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
2165 +<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
2166 +<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
2167 +<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
2168 +<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
2169 +<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
2170 +<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
2171 +<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
2172 +<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
2173 +<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
2174 +<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
2175 +<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
2176 +<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
2177 +<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
2178 +<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
2179 +<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
2180 +<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
2181 +<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
2182 +<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
2183 +<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
2184 +<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
2185 +<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
2186 +<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
2187 +<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
2188 +<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
2189 +<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
2190 +<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
2191 +<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
2192 +<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
2193 +<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
2194 +<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
2195 +<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
2196 +<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
2197 +<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
2198 +<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
2199 +<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
2200 +<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
2201 +<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
2202 +<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
2203 +<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
2204 +<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
2205 +<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
2206 +<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
2207 +<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
2208 +<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
2209 +<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
2210 +<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
2211 +<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
2212 +<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
2213 +<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
2214 +<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
2215 +<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
2216 +<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
2217 +<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
2218 +<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
2219 +<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
2220 +<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
2221 +<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
2222 +<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
2223 +<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
2224 +<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
2225 +<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
2226 +<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
2227 +<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
2228 +<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
2229 +<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
2230 +<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
2231 +<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
2232 +<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
2233 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
2234 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
2235 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
2236 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
2237 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
2238 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
2239 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
2240 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
2241 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
2242 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
2243 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
2244 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
2245 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
2246 +<span class="normal"><a href="#__codelineno-0-101">101</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="k">class</span> <span class="nc">CasesService</span><span class="p">:</span>
2247 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2248 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> A service class that encapsulates the logic for pulling cases from DFIR-IRIS.</span>
2249 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> &quot;&quot;&quot;</span>
2250 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a>
2251 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2252 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">&quot;DFIR-IRIS&quot;</span><span class="p">)</span>
2253 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
2254 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a>
2255 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2256 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">])</span>
2257 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
2258 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="k">else</span><span class="p">:</span>
2259 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;session&quot;</span><span class="p">]</span>
2260 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a>
2261 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="k">def</span> <span class="nf">list_cases</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2262 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2263 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> Lists all cases from DFIR-IRIS</span>
2264 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
2265 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Returns:</span>
2266 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the cases.</span>
2267 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> &quot;&quot;&quot;</span>
2268 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2269 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">return</span> <span class="p">{</span>
2270 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2271 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
2272 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="p">}</span>
2273 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a>
2274 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting cases from DFIR-IRIS&quot;</span><span class="p">)</span>
2275 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
2276 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
2277 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
2278 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">case</span><span class="o">.</span><span class="n">list_cases</span><span class="p">,</span>
2279 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="p">)</span>
2280 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
2281 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2282 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="p">{</span>
2283 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2284 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect cases from DFIR-IRIS&quot;</span><span class="p">,</span>
2285 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">}</span>
2286 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a>
2287 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="p">{</span>
2288 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2289 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected cases from DFIR-IRIS&quot;</span><span class="p">,</span>
2290 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="s2">&quot;cases&quot;</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">],</span>
2291 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="p">}</span>
2292 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a>
2293 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">def</span> <span class="nf">get_case</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
2294 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2295 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> Gets a case from DFIR-IRIS and returns all the details</span>
2296 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
2297 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
2298 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
2299 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> &quot;&quot;&quot;</span>
2300 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2301 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">return</span> <span class="p">{</span>
2302 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2303 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
2304 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="p">}</span>
2305 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a>
2306 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Collecting case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS&quot;</span><span class="p">)</span>
2307 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
2308 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
2309 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
2310 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="k">case</span><span class="o">.</span><span class="n">get_case</span><span class="p">,</span>
2311 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">case_id</span><span class="p">,</span>
2312 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="p">)</span>
2313 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a>
2314 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2315 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="p">{</span>
2316 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2317 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Failed to collect case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS&quot;</span><span class="p">,</span>
2318 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">}</span>
2319 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a>
2320 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="k">return</span> <span class="p">{</span>
2321 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2322 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Successfully collected case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS&quot;</span><span class="p">,</span>
2323 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="s2">&quot;case&quot;</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">],</span>
2324 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">}</span>
2325 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
2326 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">def</span> <span class="nf">check_case_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
2327 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2328 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> Checks if a case exists in DFIR-IRIS</span>
2329 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a>
2330 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> Returns:</span>
2331 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
2332 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> &quot;&quot;&quot;</span>
2333 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span>
2334 +</code></pre></div></td></tr></table></div>
2335 + </details>
2336 +
2337 +
2338 +
2339 + <div class="doc doc-children">
2340 +
2341 +
2342 +
2343 +
2344 +
2345 +
2346 +
2347 +
2348 +
2349 +<div class="doc doc-object doc-function">
2350 +
2351 +
2352 +
2353 +<h3 id="app.services.DFIR_IRIS.cases.CasesService.check_case_id" class="doc doc-heading">
2354 +<code class="highlight language-python"><span class="n">check_case_id</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
2355 +
2356 +</h3>
2357 +
2358 +
2359 + <div class="doc doc-contents ">
2360 +
2361 + <p>Checks if a case exists in DFIR-IRIS</p>
2362 +
2363 + <p><strong>Returns:</strong></p>
2364 + <table>
2365 + <thead>
2366 + <tr>
2367 +<th>Name</th> <th>Type</th>
2368 + <th>Description</th>
2369 + </tr>
2370 + </thead>
2371 + <tbody>
2372 + <tr>
2373 +<td><code>dict</code></td> <td>
2374 + <code>bool</code>
2375 + </td>
2376 + <td>
2377 + <div class="doc-md-description">
2378 + <p>A dictionary containing the success status, a message and potentially the case.</p>
2379 + </div>
2380 + </td>
2381 + </tr>
2382 + </tbody>
2383 + </table>
2384 +
2385 + <details class="quote">
2386 + <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
2387 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
2388 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
2389 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
2390 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
2391 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
2392 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
2393 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
2394 +<span class="normal"><a href="#__codelineno-0-101">101</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="k">def</span> <span class="nf">check_case_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
2395 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2396 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> Checks if a case exists in DFIR-IRIS</span>
2397 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a>
2398 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> Returns:</span>
2399 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
2400 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> &quot;&quot;&quot;</span>
2401 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span>
2402 +</code></pre></div></td></tr></table></div>
2403 + </details>
2404 + </div>
2405 +
2406 +</div>
2407 +
2408 +<div class="doc doc-object doc-function">
2409 +
2410 +
2411 +
2412 +<h3 id="app.services.DFIR_IRIS.cases.CasesService.get_case" class="doc doc-heading">
2413 +<code class="highlight language-python"><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
2414 +
2415 +</h3>
2416 +
2417 +
2418 + <div class="doc doc-contents ">
2419 +
2420 + <p>Gets a case from DFIR-IRIS and returns all the details</p>
2421 +
2422 + <p><strong>Returns:</strong></p>
2423 + <table>
2424 + <thead>
2425 + <tr>
2426 +<th>Name</th> <th>Type</th>
2427 + <th>Description</th>
2428 + </tr>
2429 + </thead>
2430 + <tbody>
2431 + <tr>
2432 +<td><code>dict</code></td> <td>
2433 + <code>bool</code>
2434 + </td>
2435 + <td>
2436 + <div class="doc-md-description">
2437 + <p>A dictionary containing the success status, a message and potentially the case.</p>
2438 + </div>
2439 + </td>
2440 + </tr>
2441 + </tbody>
2442 + </table>
2443 +
2444 + <details class="quote">
2445 + <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
2446 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-61">61</a></span>
2447 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
2448 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
2449 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
2450 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
2451 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
2452 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
2453 +<span class="normal"><a href="#__codelineno-0-68">68</a></span>
2454 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
2455 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
2456 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
2457 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
2458 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
2459 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
2460 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
2461 +<span class="normal"><a href="#__codelineno-0-76">76</a></span>
2462 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
2463 +<span class="normal"><a href="#__codelineno-0-78">78</a></span>
2464 +<span class="normal"><a href="#__codelineno-0-79">79</a></span>
2465 +<span class="normal"><a href="#__codelineno-0-80">80</a></span>
2466 +<span class="normal"><a href="#__codelineno-0-81">81</a></span>
2467 +<span class="normal"><a href="#__codelineno-0-82">82</a></span>
2468 +<span class="normal"><a href="#__codelineno-0-83">83</a></span>
2469 +<span class="normal"><a href="#__codelineno-0-84">84</a></span>
2470 +<span class="normal"><a href="#__codelineno-0-85">85</a></span>
2471 +<span class="normal"><a href="#__codelineno-0-86">86</a></span>
2472 +<span class="normal"><a href="#__codelineno-0-87">87</a></span>
2473 +<span class="normal"><a href="#__codelineno-0-88">88</a></span>
2474 +<span class="normal"><a href="#__codelineno-0-89">89</a></span>
2475 +<span class="normal"><a href="#__codelineno-0-90">90</a></span>
2476 +<span class="normal"><a href="#__codelineno-0-91">91</a></span>
2477 +<span class="normal"><a href="#__codelineno-0-92">92</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="k">def</span> <span class="nf">get_case</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
2478 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2479 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> Gets a case from DFIR-IRIS and returns all the details</span>
2480 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
2481 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
2482 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
2483 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> &quot;&quot;&quot;</span>
2484 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2485 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">return</span> <span class="p">{</span>
2486 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2487 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
2488 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="p">}</span>
2489 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a>
2490 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Collecting case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS&quot;</span><span class="p">)</span>
2491 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
2492 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
2493 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
2494 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="k">case</span><span class="o">.</span><span class="n">get_case</span><span class="p">,</span>
2495 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">case_id</span><span class="p">,</span>
2496 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="p">)</span>
2497 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a>
2498 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2499 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="p">{</span>
2500 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2501 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Failed to collect case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS&quot;</span><span class="p">,</span>
2502 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">}</span>
2503 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a>
2504 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="k">return</span> <span class="p">{</span>
2505 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2506 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Successfully collected case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS&quot;</span><span class="p">,</span>
2507 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="s2">&quot;case&quot;</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">],</span>
2508 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">}</span>
2509 +</code></pre></div></td></tr></table></div>
2510 + </details>
2511 + </div>
2512 +
2513 +</div>
2514 +
2515 +<div class="doc doc-object doc-function">
2516 +
2517 +
2518 +
2519 +<h3 id="app.services.DFIR_IRIS.cases.CasesService.list_cases" class="doc doc-heading">
2520 +<code class="highlight language-python"><span class="n">list_cases</span><span class="p">()</span></code>
2521 +
2522 +</h3>
2523 +
2524 +
2525 + <div class="doc doc-contents ">
2526 +
2527 + <p>Lists all cases from DFIR-IRIS</p>
2528 +
2529 + <p><strong>Returns:</strong></p>
2530 + <table>
2531 + <thead>
2532 + <tr>
2533 +<th>Name</th> <th>Type</th>
2534 + <th>Description</th>
2535 + </tr>
2536 + </thead>
2537 + <tbody>
2538 + <tr>
2539 +<td><code>dict</code></td> <td>
2540 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
2541 + </td>
2542 + <td>
2543 + <div class="doc-md-description">
2544 + <p>A dictionary containing the success status, a message and potentially the cases.</p>
2545 + </div>
2546 + </td>
2547 + </tr>
2548 + </tbody>
2549 + </table>
2550 +
2551 + <details class="quote">
2552 + <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
2553 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-29">29</a></span>
2554 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
2555 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
2556 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
2557 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
2558 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
2559 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
2560 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
2561 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
2562 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
2563 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
2564 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
2565 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
2566 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
2567 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
2568 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
2569 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
2570 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
2571 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
2572 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2573 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2574 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
2575 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
2576 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
2577 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
2578 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
2579 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
2580 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
2581 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2582 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2583 +<span class="normal"><a href="#__codelineno-0-59">59</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="k">def</span> <span class="nf">list_cases</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2584 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2585 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> Lists all cases from DFIR-IRIS</span>
2586 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
2587 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Returns:</span>
2588 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the cases.</span>
2589 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> &quot;&quot;&quot;</span>
2590 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2591 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">return</span> <span class="p">{</span>
2592 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2593 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
2594 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="p">}</span>
2595 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a>
2596 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting cases from DFIR-IRIS&quot;</span><span class="p">)</span>
2597 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
2598 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
2599 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
2600 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">case</span><span class="o">.</span><span class="n">list_cases</span><span class="p">,</span>
2601 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="p">)</span>
2602 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
2603 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2604 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="p">{</span>
2605 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2606 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect cases from DFIR-IRIS&quot;</span><span class="p">,</span>
2607 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">}</span>
2608 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a>
2609 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="p">{</span>
2610 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2611 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected cases from DFIR-IRIS&quot;</span><span class="p">,</span>
2612 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="s2">&quot;cases&quot;</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">],</span>
2613 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="p">}</span>
2614 +</code></pre></div></td></tr></table></div>
2615 + </details>
2616 + </div>
2617 +
2618 +</div>
2619 +
2620 +
2621 +
2622 + </div>
2623 +
2624 + </div>
2625 +
2626 +</div>
2627 +
2628 +
2629 +
2630 +
2631 + </div>
2632 +
2633 + </div>
2634 +
2635 +</div><p><br></p>
2636 +<h3 id="assets-services"><span style="color:red">Assets Services</span></h3>
2637 +
2638 +
2639 +<div class="doc doc-object doc-module">
2640 +
2641 +
2642 +<a id="app.services.DFIR_IRIS.assets"></a>
2643 + <div class="doc doc-contents first">
2644 +
2645 +
2646 +
2647 + <div class="doc doc-children">
2648 +
2649 +
2650 +
2651 +
2652 +
2653 +
2654 +
2655 +
2656 +<div class="doc doc-object doc-class">
2657 +
2658 +
2659 +
2660 +<h2 id="app.services.DFIR_IRIS.assets.AssetsService" class="doc doc-heading">
2661 + <code>AssetsService</code>
2662 +
2663 +
2664 +</h2>
2665 +
2666 +
2667 + <div class="doc doc-contents ">
2668 +
2669 +
2670 + <p>A service class that encapsulates the logic for pulling case assets from DFIR-IRIS. It creates a DFIR-IRIS session upon
2671 +initialization and uses it to fetch case assets.</p>
2672 +
2673 +
2674 + <details class="quote">
2675 + <summary>Source code in <code>app\services\DFIR_IRIS\assets.py</code></summary>
2676 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-14">14</a></span>
2677 +<span class="normal"><a href="#__codelineno-0-15">15</a></span>
2678 +<span class="normal"><a href="#__codelineno-0-16">16</a></span>
2679 +<span class="normal"><a href="#__codelineno-0-17">17</a></span>
2680 +<span class="normal"><a href="#__codelineno-0-18">18</a></span>
2681 +<span class="normal"><a href="#__codelineno-0-19">19</a></span>
2682 +<span class="normal"><a href="#__codelineno-0-20">20</a></span>
2683 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
2684 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
2685 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
2686 +<span class="normal"><a href="#__codelineno-0-24">24</a></span>
2687 +<span class="normal"><a href="#__codelineno-0-25">25</a></span>
2688 +<span class="normal"><a href="#__codelineno-0-26">26</a></span>
2689 +<span class="normal"><a href="#__codelineno-0-27">27</a></span>
2690 +<span class="normal"><a href="#__codelineno-0-28">28</a></span>
2691 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
2692 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
2693 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
2694 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
2695 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
2696 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
2697 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
2698 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
2699 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
2700 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
2701 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
2702 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
2703 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
2704 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
2705 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
2706 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
2707 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
2708 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
2709 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
2710 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2711 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2712 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
2713 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
2714 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
2715 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
2716 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
2717 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
2718 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
2719 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2720 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2721 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
2722 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
2723 +<span class="normal"><a href="#__codelineno-0-61">61</a></span>
2724 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
2725 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
2726 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
2727 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
2728 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
2729 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
2730 +<span class="normal"><a href="#__codelineno-0-68">68</a></span>
2731 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
2732 +<span class="normal"><a href="#__codelineno-0-70">70</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="k">class</span> <span class="nc">AssetsService</span><span class="p">:</span>
2733 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2734 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> A service class that encapsulates the logic for pulling case assets from DFIR-IRIS. It creates a DFIR-IRIS session upon</span>
2735 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> initialization and uses it to fetch case assets.</span>
2736 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> &quot;&quot;&quot;</span>
2737 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a>
2738 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2739 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2740 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> Initializes the AssetsService by creating a UniversalService object for &quot;DFIR-IRIS&quot; and establishing a session.</span>
2741 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</span>
2742 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> &quot;&quot;&quot;</span>
2743 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">&quot;DFIR-IRIS&quot;</span><span class="p">)</span>
2744 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
2745 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a>
2746 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2747 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">])</span>
2748 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
2749 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="k">else</span><span class="p">:</span>
2750 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;session&quot;</span><span class="p">]</span>
2751 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a>
2752 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="k">def</span> <span class="nf">get_case_assets</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cid</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2753 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2754 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> Retrieves the assets of a specific case from DFIR-IRIS. If the iris_session attribute is None, this indicates</span>
2755 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> that the session creation was unsuccessful, and a dictionary with &quot;success&quot; set to False is returned. Otherwise,</span>
2756 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> it attempts to fetch and parse the assets data for the case specified by the `cid` parameter.</span>
2757 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a>
2758 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Args:</span>
2759 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> cid (int): The ID of the case for which to retrieve assets.</span>
2760 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a>
2761 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Returns:</span>
2762 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the fetched assets. The</span>
2763 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> &quot;success&quot; key is a boolean indicating whether the operation was successful. The &quot;message&quot; key is a string</span>
2764 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> providing details about the operation. If &quot;success&quot; is True, the dictionary also contains the &quot;data&quot; key</span>
2765 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> with the fetched assets.</span>
2766 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> &quot;&quot;&quot;</span>
2767 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2768 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="p">{</span>
2769 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2770 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
2771 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">}</span>
2772 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a>
2773 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Collecting case </span><span class="si">{</span><span class="n">cid</span><span class="si">}</span><span class="s2"> assets from DFIR-IRIS&quot;</span><span class="p">)</span>
2774 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
2775 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">cid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">cid</span><span class="p">)</span>
2776 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
2777 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
2778 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">case</span><span class="o">.</span><span class="n">list_assets</span><span class="p">,</span>
2779 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="n">cid</span><span class="p">,</span>
2780 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="p">)</span>
2781 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
2782 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2783 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">return</span> <span class="p">{</span>
2784 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2785 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect notes from DFIR-IRIS&quot;</span><span class="p">,</span>
2786 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">}</span>
2787 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a>
2788 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">return</span> <span class="n">result</span>
2789 +</code></pre></div></td></tr></table></div>
2790 + </details>
2791 +
2792 +
2793 +
2794 + <div class="doc doc-children">
2795 +
2796 +
2797 +
2798 +
2799 +
2800 +
2801 +
2802 +
2803 +
2804 +<div class="doc doc-object doc-function">
2805 +
2806 +
2807 +
2808 +<h3 id="app.services.DFIR_IRIS.assets.AssetsService.__init__" class="doc doc-heading">
2809 +<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
2810 +
2811 +</h3>
2812 +
2813 +
2814 + <div class="doc doc-contents ">
2815 +
2816 + <p>Initializes the AssetsService by creating a UniversalService object for "DFIR-IRIS" and establishing a session.
2817 +If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</p>
2818 +
2819 + <details class="quote">
2820 + <summary>Source code in <code>app\services\DFIR_IRIS\assets.py</code></summary>
2821 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-20">20</a></span>
2822 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
2823 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
2824 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
2825 +<span class="normal"><a href="#__codelineno-0-24">24</a></span>
2826 +<span class="normal"><a href="#__codelineno-0-25">25</a></span>
2827 +<span class="normal"><a href="#__codelineno-0-26">26</a></span>
2828 +<span class="normal"><a href="#__codelineno-0-27">27</a></span>
2829 +<span class="normal"><a href="#__codelineno-0-28">28</a></span>
2830 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
2831 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
2832 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
2833 +<span class="normal"><a href="#__codelineno-0-32">32</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2834 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2835 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> Initializes the AssetsService by creating a UniversalService object for &quot;DFIR-IRIS&quot; and establishing a session.</span>
2836 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</span>
2837 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> &quot;&quot;&quot;</span>
2838 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">&quot;DFIR-IRIS&quot;</span><span class="p">)</span>
2839 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
2840 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a>
2841 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2842 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">])</span>
2843 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
2844 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="k">else</span><span class="p">:</span>
2845 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;session&quot;</span><span class="p">]</span>
2846 +</code></pre></div></td></tr></table></div>
2847 + </details>
2848 + </div>
2849 +
2850 +</div>
2851 +
2852 +<div class="doc doc-object doc-function">
2853 +
2854 +
2855 +
2856 +<h3 id="app.services.DFIR_IRIS.assets.AssetsService.get_case_assets" class="doc doc-heading">
2857 +<code class="highlight language-python"><span class="n">get_case_assets</span><span class="p">(</span><span class="n">cid</span><span class="p">)</span></code>
2858 +
2859 +</h3>
2860 +
2861 +
2862 + <div class="doc doc-contents ">
2863 +
2864 + <p>Retrieves the assets of a specific case from DFIR-IRIS. If the iris_session attribute is None, this indicates
2865 +that the session creation was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise,
2866 +it attempts to fetch and parse the assets data for the case specified by the <code>cid</code> parameter.</p>
2867 +
2868 + <p><strong>Parameters:</strong></p>
2869 + <table>
2870 + <thead>
2871 + <tr>
2872 + <th>Name</th>
2873 + <th>Type</th>
2874 + <th>Description</th>
2875 + <th>Default</th>
2876 + </tr>
2877 + </thead>
2878 + <tbody>
2879 + <tr>
2880 + <td><code>cid</code></td>
2881 + <td>
2882 + <code>int</code>
2883 + </td>
2884 + <td>
2885 + <div class="doc-md-description">
2886 + <p>The ID of the case for which to retrieve assets.</p>
2887 + </div>
2888 + </td>
2889 + <td>
2890 + <em>required</em>
2891 + </td>
2892 + </tr>
2893 + </tbody>
2894 + </table>
2895 +
2896 + <p><strong>Returns:</strong></p>
2897 + <table>
2898 + <thead>
2899 + <tr>
2900 +<th>Name</th> <th>Type</th>
2901 + <th>Description</th>
2902 + </tr>
2903 + </thead>
2904 + <tbody>
2905 + <tr>
2906 +<td><code>dict</code></td> <td>
2907 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
2908 + </td>
2909 + <td>
2910 + <div class="doc-md-description">
2911 + <p>A dictionary containing the success status, a message, and potentially the fetched assets. The</p>
2912 + </div>
2913 + </td>
2914 + </tr>
2915 + <tr>
2916 +<td></td> <td>
2917 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
2918 + </td>
2919 + <td>
2920 + <div class="doc-md-description">
2921 + <p>"success" key is a boolean indicating whether the operation was successful. The "message" key is a string</p>
2922 + </div>
2923 + </td>
2924 + </tr>
2925 + <tr>
2926 +<td></td> <td>
2927 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
2928 + </td>
2929 + <td>
2930 + <div class="doc-md-description">
2931 + <p>providing details about the operation. If "success" is True, the dictionary also contains the "data" key</p>
2932 + </div>
2933 + </td>
2934 + </tr>
2935 + <tr>
2936 +<td></td> <td>
2937 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
2938 + </td>
2939 + <td>
2940 + <div class="doc-md-description">
2941 + <p>with the fetched assets.</p>
2942 + </div>
2943 + </td>
2944 + </tr>
2945 + </tbody>
2946 + </table>
2947 +
2948 + <details class="quote">
2949 + <summary>Source code in <code>app\services\DFIR_IRIS\assets.py</code></summary>
2950 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-34">34</a></span>
2951 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
2952 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
2953 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
2954 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
2955 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
2956 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
2957 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
2958 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
2959 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
2960 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
2961 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
2962 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
2963 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
2964 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2965 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2966 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
2967 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
2968 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
2969 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
2970 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
2971 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
2972 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
2973 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2974 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2975 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
2976 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
2977 +<span class="normal"><a href="#__codelineno-0-61">61</a></span>
2978 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
2979 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
2980 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
2981 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
2982 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
2983 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
2984 +<span class="normal"><a href="#__codelineno-0-68">68</a></span>
2985 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
2986 +<span class="normal"><a href="#__codelineno-0-70">70</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="k">def</span> <span class="nf">get_case_assets</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cid</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2987 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2988 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> Retrieves the assets of a specific case from DFIR-IRIS. If the iris_session attribute is None, this indicates</span>
2989 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> that the session creation was unsuccessful, and a dictionary with &quot;success&quot; set to False is returned. Otherwise,</span>
2990 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> it attempts to fetch and parse the assets data for the case specified by the `cid` parameter.</span>
2991 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a>
2992 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Args:</span>
2993 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> cid (int): The ID of the case for which to retrieve assets.</span>
2994 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a>
2995 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Returns:</span>
2996 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the fetched assets. The</span>
2997 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> &quot;success&quot; key is a boolean indicating whether the operation was successful. The &quot;message&quot; key is a string</span>
2998 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> providing details about the operation. If &quot;success&quot; is True, the dictionary also contains the &quot;data&quot; key</span>
2999 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> with the fetched assets.</span>
3000 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> &quot;&quot;&quot;</span>
3001 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3002 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="p">{</span>
3003 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3004 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
3005 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">}</span>
3006 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a>
3007 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Collecting case </span><span class="si">{</span><span class="n">cid</span><span class="si">}</span><span class="s2"> assets from DFIR-IRIS&quot;</span><span class="p">)</span>
3008 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
3009 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">cid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">cid</span><span class="p">)</span>
3010 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3011 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3012 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">case</span><span class="o">.</span><span class="n">list_assets</span><span class="p">,</span>
3013 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="n">cid</span><span class="p">,</span>
3014 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="p">)</span>
3015 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
3016 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3017 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">return</span> <span class="p">{</span>
3018 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3019 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect notes from DFIR-IRIS&quot;</span><span class="p">,</span>
3020 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">}</span>
3021 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a>
3022 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">return</span> <span class="n">result</span>
3023 +</code></pre></div></td></tr></table></div>
3024 + </details>
3025 + </div>
3026 +
3027 +</div>
3028 +
3029 +
3030 +
3031 + </div>
3032 +
3033 + </div>
3034 +
3035 +</div>
3036 +
3037 +
3038 +
3039 +
3040 + </div>
3041 +
3042 + </div>
3043 +
3044 +</div><p><br></p>
3045 +<h3 id="notes-services"><span style="color:red">Notes Services</span></h3>
3046 +
3047 +
3048 +<div class="doc doc-object doc-module">
3049 +
3050 +
3051 +<a id="app.services.DFIR_IRIS.notes"></a>
3052 + <div class="doc doc-contents first">
3053 +
3054 +
3055 +
3056 + <div class="doc doc-children">
3057 +
3058 +
3059 +
3060 +
3061 +
3062 +
3063 +
3064 +
3065 +<div class="doc doc-object doc-class">
3066 +
3067 +
3068 +
3069 +<h2 id="app.services.DFIR_IRIS.notes.NotesService" class="doc doc-heading">
3070 + <code>NotesService</code>
3071 +
3072 +
3073 +</h2>
3074 +
3075 +
3076 + <div class="doc doc-contents ">
3077 +
3078 +
3079 + <p>A service class that encapsulates the logic for pulling and managing case notes from DFIR-IRIS. This class handles
3080 +fetching and creating case notes. It creates a DFIR-IRIS session upon initialization and uses it to interact with
3081 +the DFIR-IRIS case notes.</p>
3082 +
3083 +
3084 + <details class="quote">
3085 + <summary>Source code in <code>app\services\DFIR_IRIS\notes.py</code></summary>
3086 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
3087 +<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
3088 +<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
3089 +<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
3090 +<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
3091 +<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
3092 +<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
3093 +<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
3094 +<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
3095 +<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
3096 +<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
3097 +<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
3098 +<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
3099 +<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
3100 +<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
3101 +<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
3102 +<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
3103 +<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
3104 +<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
3105 +<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
3106 +<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
3107 +<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
3108 +<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
3109 +<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
3110 +<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
3111 +<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
3112 +<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
3113 +<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
3114 +<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
3115 +<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
3116 +<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
3117 +<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
3118 +<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
3119 +<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
3120 +<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
3121 +<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
3122 +<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
3123 +<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
3124 +<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
3125 +<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
3126 +<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
3127 +<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
3128 +<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
3129 +<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
3130 +<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
3131 +<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
3132 +<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
3133 +<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
3134 +<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
3135 +<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
3136 +<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
3137 +<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
3138 +<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
3139 +<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
3140 +<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
3141 +<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
3142 +<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
3143 +<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
3144 +<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
3145 +<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
3146 +<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
3147 +<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
3148 +<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
3149 +<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
3150 +<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
3151 +<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
3152 +<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
3153 +<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
3154 +<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
3155 +<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
3156 +<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
3157 +<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
3158 +<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
3159 +<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
3160 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
3161 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
3162 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
3163 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
3164 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
3165 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
3166 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
3167 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
3168 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
3169 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
3170 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
3171 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
3172 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
3173 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
3174 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
3175 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
3176 +<span class="normal"><a href="#__codelineno-0-104">104</a></span>
3177 +<span class="normal"><a href="#__codelineno-0-105">105</a></span>
3178 +<span class="normal"><a href="#__codelineno-0-106">106</a></span>
3179 +<span class="normal"><a href="#__codelineno-0-107">107</a></span>
3180 +<span class="normal"><a href="#__codelineno-0-108">108</a></span>
3181 +<span class="normal"><a href="#__codelineno-0-109">109</a></span>
3182 +<span class="normal"><a href="#__codelineno-0-110">110</a></span>
3183 +<span class="normal"><a href="#__codelineno-0-111">111</a></span>
3184 +<span class="normal"><a href="#__codelineno-0-112">112</a></span>
3185 +<span class="normal"><a href="#__codelineno-0-113">113</a></span>
3186 +<span class="normal"><a href="#__codelineno-0-114">114</a></span>
3187 +<span class="normal"><a href="#__codelineno-0-115">115</a></span>
3188 +<span class="normal"><a href="#__codelineno-0-116">116</a></span>
3189 +<span class="normal"><a href="#__codelineno-0-117">117</a></span>
3190 +<span class="normal"><a href="#__codelineno-0-118">118</a></span>
3191 +<span class="normal"><a href="#__codelineno-0-119">119</a></span>
3192 +<span class="normal"><a href="#__codelineno-0-120">120</a></span>
3193 +<span class="normal"><a href="#__codelineno-0-121">121</a></span>
3194 +<span class="normal"><a href="#__codelineno-0-122">122</a></span>
3195 +<span class="normal"><a href="#__codelineno-0-123">123</a></span>
3196 +<span class="normal"><a href="#__codelineno-0-124">124</a></span>
3197 +<span class="normal"><a href="#__codelineno-0-125">125</a></span>
3198 +<span class="normal"><a href="#__codelineno-0-126">126</a></span>
3199 +<span class="normal"><a href="#__codelineno-0-127">127</a></span>
3200 +<span class="normal"><a href="#__codelineno-0-128">128</a></span>
3201 +<span class="normal"><a href="#__codelineno-0-129">129</a></span>
3202 +<span class="normal"><a href="#__codelineno-0-130">130</a></span>
3203 +<span class="normal"><a href="#__codelineno-0-131">131</a></span>
3204 +<span class="normal"><a href="#__codelineno-0-132">132</a></span>
3205 +<span class="normal"><a href="#__codelineno-0-133">133</a></span>
3206 +<span class="normal"><a href="#__codelineno-0-134">134</a></span>
3207 +<span class="normal"><a href="#__codelineno-0-135">135</a></span>
3208 +<span class="normal"><a href="#__codelineno-0-136">136</a></span>
3209 +<span class="normal"><a href="#__codelineno-0-137">137</a></span>
3210 +<span class="normal"><a href="#__codelineno-0-138">138</a></span>
3211 +<span class="normal"><a href="#__codelineno-0-139">139</a></span>
3212 +<span class="normal"><a href="#__codelineno-0-140">140</a></span>
3213 +<span class="normal"><a href="#__codelineno-0-141">141</a></span>
3214 +<span class="normal"><a href="#__codelineno-0-142">142</a></span>
3215 +<span class="normal"><a href="#__codelineno-0-143">143</a></span>
3216 +<span class="normal"><a href="#__codelineno-0-144">144</a></span>
3217 +<span class="normal"><a href="#__codelineno-0-145">145</a></span>
3218 +<span class="normal"><a href="#__codelineno-0-146">146</a></span>
3219 +<span class="normal"><a href="#__codelineno-0-147">147</a></span>
3220 +<span class="normal"><a href="#__codelineno-0-148">148</a></span>
3221 +<span class="normal"><a href="#__codelineno-0-149">149</a></span>
3222 +<span class="normal"><a href="#__codelineno-0-150">150</a></span>
3223 +<span class="normal"><a href="#__codelineno-0-151">151</a></span>
3224 +<span class="normal"><a href="#__codelineno-0-152">152</a></span>
3225 +<span class="normal"><a href="#__codelineno-0-153">153</a></span>
3226 +<span class="normal"><a href="#__codelineno-0-154">154</a></span>
3227 +<span class="normal"><a href="#__codelineno-0-155">155</a></span>
3228 +<span class="normal"><a href="#__codelineno-0-156">156</a></span>
3229 +<span class="normal"><a href="#__codelineno-0-157">157</a></span>
3230 +<span class="normal"><a href="#__codelineno-0-158">158</a></span>
3231 +<span class="normal"><a href="#__codelineno-0-159">159</a></span>
3232 +<span class="normal"><a href="#__codelineno-0-160">160</a></span>
3233 +<span class="normal"><a href="#__codelineno-0-161">161</a></span>
3234 +<span class="normal"><a href="#__codelineno-0-162">162</a></span>
3235 +<span class="normal"><a href="#__codelineno-0-163">163</a></span>
3236 +<span class="normal"><a href="#__codelineno-0-164">164</a></span>
3237 +<span class="normal"><a href="#__codelineno-0-165">165</a></span>
3238 +<span class="normal"><a href="#__codelineno-0-166">166</a></span>
3239 +<span class="normal"><a href="#__codelineno-0-167">167</a></span>
3240 +<span class="normal"><a href="#__codelineno-0-168">168</a></span>
3241 +<span class="normal"><a href="#__codelineno-0-169">169</a></span>
3242 +<span class="normal"><a href="#__codelineno-0-170">170</a></span>
3243 +<span class="normal"><a href="#__codelineno-0-171">171</a></span>
3244 +<span class="normal"><a href="#__codelineno-0-172">172</a></span>
3245 +<span class="normal"><a href="#__codelineno-0-173">173</a></span>
3246 +<span class="normal"><a href="#__codelineno-0-174">174</a></span>
3247 +<span class="normal"><a href="#__codelineno-0-175">175</a></span>
3248 +<span class="normal"><a href="#__codelineno-0-176">176</a></span>
3249 +<span class="normal"><a href="#__codelineno-0-177">177</a></span>
3250 +<span class="normal"><a href="#__codelineno-0-178">178</a></span>
3251 +<span class="normal"><a href="#__codelineno-0-179">179</a></span>
3252 +<span class="normal"><a href="#__codelineno-0-180">180</a></span>
3253 +<span class="normal"><a href="#__codelineno-0-181">181</a></span>
3254 +<span class="normal"><a href="#__codelineno-0-182">182</a></span>
3255 +<span class="normal"><a href="#__codelineno-0-183">183</a></span>
3256 +<span class="normal"><a href="#__codelineno-0-184">184</a></span>
3257 +<span class="normal"><a href="#__codelineno-0-185">185</a></span>
3258 +<span class="normal"><a href="#__codelineno-0-186">186</a></span>
3259 +<span class="normal"><a href="#__codelineno-0-187">187</a></span>
3260 +<span class="normal"><a href="#__codelineno-0-188">188</a></span>
3261 +<span class="normal"><a href="#__codelineno-0-189">189</a></span>
3262 +<span class="normal"><a href="#__codelineno-0-190">190</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="k">class</span> <span class="nc">NotesService</span><span class="p">:</span>
3263 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3264 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> A service class that encapsulates the logic for pulling and managing case notes from DFIR-IRIS. This class handles</span>
3265 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> fetching and creating case notes. It creates a DFIR-IRIS session upon initialization and uses it to interact with</span>
3266 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> the DFIR-IRIS case notes.</span>
3267 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> &quot;&quot;&quot;</span>
3268 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a>
3269 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3270 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3271 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> Initializes the NotesService by creating a UniversalService object for &quot;DFIR-IRIS&quot; and establishing a session.</span>
3272 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</span>
3273 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> &quot;&quot;&quot;</span>
3274 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">&quot;DFIR-IRIS&quot;</span><span class="p">)</span>
3275 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
3276 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a>
3277 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3278 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">])</span>
3279 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
3280 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">else</span><span class="p">:</span>
3281 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;session&quot;</span><span class="p">]</span>
3282 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a>
3283 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="k">def</span> <span class="nf">get_case_notes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">search_term</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">cid</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
3284 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3285 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> Retrieves the notes of a specific case from DFIR-IRIS. If the iris_session attribute is None, this indicates</span>
3286 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> that the session creation was unsuccessful, and a dictionary with &quot;success&quot; set to False is returned. Otherwise,</span>
3287 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> it attempts to fetch and parse the notes data for the case specified by the `cid` parameter.</span>
3288 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a>
3289 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Args:</span>
3290 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> search_term (str): The search term to use when fetching case notes.</span>
3291 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> cid (int): The ID of the case for which to retrieve notes.</span>
3292 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a>
3293 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Returns:</span>
3294 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the fetched notes. The</span>
3295 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> &quot;success&quot; key is a boolean indicating whether the operation was successful. The &quot;message&quot; key is a string</span>
3296 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> providing details about the operation. If &quot;success&quot; is True, the dictionary also contains the &quot;data&quot; key</span>
3297 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> with the fetched notes.</span>
3298 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> &quot;&quot;&quot;</span>
3299 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3300 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">return</span> <span class="p">{</span>
3301 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3302 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
3303 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="p">}</span>
3304 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a>
3305 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Collecting case </span><span class="si">{</span><span class="n">cid</span><span class="si">}</span><span class="s2"> from DFIR-IRIS&quot;</span><span class="p">)</span>
3306 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
3307 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="n">cid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">cid</span><span class="p">)</span>
3308 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3309 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3310 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="k">case</span><span class="o">.</span><span class="n">search_notes</span><span class="p">,</span>
3311 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="n">search_term</span><span class="p">,</span>
3312 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">cid</span><span class="p">,</span>
3313 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="p">)</span>
3314 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a>
3315 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3316 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">return</span> <span class="p">{</span>
3317 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3318 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect notes from DFIR-IRIS&quot;</span><span class="p">,</span>
3319 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="p">}</span>
3320 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
3321 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="c1"># Loop through the notes and get the details</span>
3322 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="k">for</span> <span class="n">note</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">]:</span>
3323 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">note_details</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_case_note_details</span><span class="p">(</span><span class="n">note</span><span class="p">[</span><span class="s2">&quot;note_id&quot;</span><span class="p">],</span> <span class="n">cid</span><span class="p">)</span>
3324 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">note_details</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3325 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">return</span> <span class="p">{</span>
3326 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3327 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect notes from DFIR-IRIS&quot;</span><span class="p">,</span>
3328 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="p">}</span>
3329 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">note</span><span class="p">[</span><span class="s2">&quot;note_details&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">note_details</span><span class="p">[</span><span class="s2">&quot;notes&quot;</span><span class="p">]</span>
3330 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a>
3331 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="n">result</span>
3332 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a>
3333 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">def</span> <span class="nf">_get_case_note_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">note_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">cid</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
3334 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3335 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> Retrieves the details of a specific note of a specific case from DFIR-IRIS. If the iris_session attribute is None,</span>
3336 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> this indicates that the session creation was unsuccessful, and a dictionary with &quot;success&quot; set to False is</span>
3337 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> returned. Otherwise, it attempts to fetch and parse the note data for the note specified by the `note_id`</span>
3338 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> parameter and the case specified by the `cid` parameter.</span>
3339 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a>
3340 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> Args:</span>
3341 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> note_id (int): The ID of the note for which to retrieve details.</span>
3342 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="sd"> cid (int): The ID of the case for which to retrieve the note details.</span>
3343 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a>
3344 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> Returns:</span>
3345 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the fetched note details. The</span>
3346 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> &quot;success&quot; key is a boolean indicating whether the operation was successful. The &quot;message&quot; key is a string</span>
3347 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd"> providing details about the operation. If &quot;success&quot; is True, the dictionary also contains the &quot;notes&quot; key</span>
3348 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> with the fetched note details.</span>
3349 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> &quot;&quot;&quot;</span>
3350 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3351 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="k">return</span> <span class="p">{</span>
3352 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3353 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
3354 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a> <span class="p">}</span>
3355 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
3356 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Collecting case </span><span class="si">{</span><span class="n">cid</span><span class="si">}</span><span class="s2"> from DFIR-IRIS&quot;</span><span class="p">)</span>
3357 +<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
3358 +<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3359 +<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3360 +<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="k">case</span><span class="o">.</span><span class="n">get_note</span><span class="p">,</span>
3361 +<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="n">note_id</span><span class="p">,</span>
3362 +<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">cid</span><span class="p">,</span>
3363 +<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="p">)</span>
3364 +<a id="__codelineno-0-116" name="__codelineno-0-116"></a>
3365 +<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3366 +<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="k">return</span> <span class="p">{</span>
3367 +<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3368 +<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect notes from DFIR-IRIS&quot;</span><span class="p">,</span>
3369 +<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="p">}</span>
3370 +<a id="__codelineno-0-122" name="__codelineno-0-122"></a>
3371 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="k">return</span> <span class="p">{</span>
3372 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3373 +<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected notes from DFIR-IRIS&quot;</span><span class="p">,</span>
3374 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="s2">&quot;notes&quot;</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">],</span>
3375 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="p">}</span>
3376 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a>
3377 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="k">def</span> <span class="nf">create_case_note</span><span class="p">(</span>
3378 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="bp">self</span><span class="p">,</span>
3379 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="n">cid</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
3380 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="n">note_title</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3381 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="n">note_content</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3382 +<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
3383 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3384 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="sd"> Creates a note for a specific case in DFIR-IRIS. If the iris_session attribute is None, this indicates that</span>
3385 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a><span class="sd"> the session creation was unsuccessful, and a dictionary with &quot;success&quot; set to False is returned. Otherwise,</span>
3386 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a><span class="sd"> it attempts to create a note with the specified `note_title` and `note_content` for the case specified by the</span>
3387 +<a id="__codelineno-0-139" name="__codelineno-0-139"></a><span class="sd"> `cid` parameter.</span>
3388 +<a id="__codelineno-0-140" name="__codelineno-0-140"></a>
3389 +<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="sd"> Args:</span>
3390 +<a id="__codelineno-0-142" name="__codelineno-0-142"></a><span class="sd"> cid (int): The ID of the case for which to create a note.</span>
3391 +<a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="sd"> note_title (str): The title of the note to create.</span>
3392 +<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> note_content (str): The content of the note to create.</span>
3393 +<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
3394 +<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Returns:</span>
3395 +<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the created note. The</span>
3396 +<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> &quot;success&quot; key is a boolean indicating whether the operation was successful. The &quot;message&quot; key is a string</span>
3397 +<a id="__codelineno-0-149" name="__codelineno-0-149"></a><span class="sd"> providing details about the operation. If &quot;success&quot; is True, the dictionary also contains the &quot;notes&quot; key</span>
3398 +<a id="__codelineno-0-150" name="__codelineno-0-150"></a><span class="sd"> with the created note.</span>
3399 +<a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="sd"> &quot;&quot;&quot;</span>
3400 +<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3401 +<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="k">return</span> <span class="p">{</span>
3402 +<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3403 +<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
3404 +<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="p">}</span>
3405 +<a id="__codelineno-0-157" name="__codelineno-0-157"></a>
3406 +<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Creating case </span><span class="si">{</span><span class="n">cid</span><span class="si">}</span><span class="s2"> note in DFIR-IRIS&quot;</span><span class="p">)</span>
3407 +<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
3408 +<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="n">cid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">cid</span><span class="p">)</span>
3409 +<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="c1"># Creating Group for New Note</span>
3410 +<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="n">note_group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3411 +<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3412 +<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="k">case</span><span class="o">.</span><span class="n">add_notes_group</span><span class="p">,</span>
3413 +<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="n">note_title</span><span class="p">,</span>
3414 +<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="n">cid</span><span class="p">,</span>
3415 +<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="p">)</span>
3416 +<a id="__codelineno-0-168" name="__codelineno-0-168"></a>
3417 +<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">note_group</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3418 +<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to create note in DFIR-IRIS&quot;</span><span class="p">}</span>
3419 +<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="n">note_group_id</span> <span class="o">=</span> <span class="n">note_group</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">][</span><span class="s2">&quot;group_id&quot;</span><span class="p">]</span>
3420 +<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="n">custom_attributes</span> <span class="o">=</span> <span class="p">{}</span>
3421 +<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3422 +<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3423 +<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="k">case</span><span class="o">.</span><span class="n">add_note</span><span class="p">,</span>
3424 +<a id="__codelineno-0-176" name="__codelineno-0-176"></a> <span class="n">note_title</span><span class="p">,</span>
3425 +<a id="__codelineno-0-177" name="__codelineno-0-177"></a> <span class="n">note_content</span><span class="p">,</span>
3426 +<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="n">note_group_id</span><span class="p">,</span>
3427 +<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="n">custom_attributes</span><span class="p">,</span>
3428 +<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="n">cid</span><span class="p">,</span>
3429 +<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="p">)</span>
3430 +<a id="__codelineno-0-182" name="__codelineno-0-182"></a>
3431 +<a id="__codelineno-0-183" name="__codelineno-0-183"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3432 +<a id="__codelineno-0-184" name="__codelineno-0-184"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to create note in DFIR-IRIS&quot;</span><span class="p">}</span>
3433 +<a id="__codelineno-0-185" name="__codelineno-0-185"></a>
3434 +<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="k">return</span> <span class="p">{</span>
3435 +<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3436 +<a id="__codelineno-0-188" name="__codelineno-0-188"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully created note in DFIR-IRIS&quot;</span><span class="p">,</span>
3437 +<a id="__codelineno-0-189" name="__codelineno-0-189"></a> <span class="s2">&quot;notes&quot;</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">],</span>
3438 +<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="p">}</span>
3439 +</code></pre></div></td></tr></table></div>
3440 + </details>
3441 +
3442 +
3443 +
3444 + <div class="doc doc-children">
3445 +
3446 +
3447 +
3448 +
3449 +
3450 +
3451 +
3452 +
3453 +
3454 +<div class="doc doc-object doc-function">
3455 +
3456 +
3457 +
3458 +<h3 id="app.services.DFIR_IRIS.notes.NotesService.__init__" class="doc doc-heading">
3459 +<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
3460 +
3461 +</h3>
3462 +
3463 +
3464 + <div class="doc doc-contents ">
3465 +
3466 + <p>Initializes the NotesService by creating a UniversalService object for "DFIR-IRIS" and establishing a session.
3467 +If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</p>
3468 +
3469 + <details class="quote">
3470 + <summary>Source code in <code>app\services\DFIR_IRIS\notes.py</code></summary>
3471 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-21">21</a></span>
3472 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
3473 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
3474 +<span class="normal"><a href="#__codelineno-0-24">24</a></span>
3475 +<span class="normal"><a href="#__codelineno-0-25">25</a></span>
3476 +<span class="normal"><a href="#__codelineno-0-26">26</a></span>
3477 +<span class="normal"><a href="#__codelineno-0-27">27</a></span>
3478 +<span class="normal"><a href="#__codelineno-0-28">28</a></span>
3479 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
3480 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
3481 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
3482 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
3483 +<span class="normal"><a href="#__codelineno-0-33">33</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3484 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3485 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> Initializes the NotesService by creating a UniversalService object for &quot;DFIR-IRIS&quot; and establishing a session.</span>
3486 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</span>
3487 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> &quot;&quot;&quot;</span>
3488 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">&quot;DFIR-IRIS&quot;</span><span class="p">)</span>
3489 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
3490 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a>
3491 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3492 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">])</span>
3493 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
3494 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">else</span><span class="p">:</span>
3495 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">&quot;session&quot;</span><span class="p">]</span>
3496 +</code></pre></div></td></tr></table></div>
3497 + </details>
3498 + </div>
3499 +
3500 +</div>
3501 +
3502 +<div class="doc doc-object doc-function">
3503 +
3504 +
3505 +
3506 +<h3 id="app.services.DFIR_IRIS.notes.NotesService.create_case_note" class="doc doc-heading">
3507 +<code class="highlight language-python"><span class="n">create_case_note</span><span class="p">(</span><span class="n">cid</span><span class="p">,</span> <span class="n">note_title</span><span class="p">,</span> <span class="n">note_content</span><span class="p">)</span></code>
3508 +
3509 +</h3>
3510 +
3511 +
3512 + <div class="doc doc-contents ">
3513 +
3514 + <p>Creates a note for a specific case in DFIR-IRIS. If the iris_session attribute is None, this indicates that
3515 +the session creation was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise,
3516 +it attempts to create a note with the specified <code>note_title</code> and <code>note_content</code> for the case specified by the
3517 +<code>cid</code> parameter.</p>
3518 +
3519 + <p><strong>Parameters:</strong></p>
3520 + <table>
3521 + <thead>
3522 + <tr>
3523 + <th>Name</th>
3524 + <th>Type</th>
3525 + <th>Description</th>
3526 + <th>Default</th>
3527 + </tr>
3528 + </thead>
3529 + <tbody>
3530 + <tr>
3531 + <td><code>cid</code></td>
3532 + <td>
3533 + <code>int</code>
3534 + </td>
3535 + <td>
3536 + <div class="doc-md-description">
3537 + <p>The ID of the case for which to create a note.</p>
3538 + </div>
3539 + </td>
3540 + <td>
3541 + <em>required</em>
3542 + </td>
3543 + </tr>
3544 + <tr>
3545 + <td><code>note_title</code></td>
3546 + <td>
3547 + <code>str</code>
3548 + </td>
3549 + <td>
3550 + <div class="doc-md-description">
3551 + <p>The title of the note to create.</p>
3552 + </div>
3553 + </td>
3554 + <td>
3555 + <em>required</em>
3556 + </td>
3557 + </tr>
3558 + <tr>
3559 + <td><code>note_content</code></td>
3560 + <td>
3561 + <code>str</code>
3562 + </td>
3563 + <td>
3564 + <div class="doc-md-description">
3565 + <p>The content of the note to create.</p>
3566 + </div>
3567 + </td>
3568 + <td>
3569 + <em>required</em>
3570 + </td>
3571 + </tr>
3572 + </tbody>
3573 + </table>
3574 +
3575 + <p><strong>Returns:</strong></p>
3576 + <table>
3577 + <thead>
3578 + <tr>
3579 +<th>Name</th> <th>Type</th>
3580 + <th>Description</th>
3581 + </tr>
3582 + </thead>
3583 + <tbody>
3584 + <tr>
3585 +<td><code>dict</code></td> <td>
3586 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
3587 + </td>
3588 + <td>
3589 + <div class="doc-md-description">
3590 + <p>A dictionary containing the success status, a message, and potentially the created note. The</p>
3591 + </div>
3592 + </td>
3593 + </tr>
3594 + <tr>
3595 +<td></td> <td>
3596 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
3597 + </td>
3598 + <td>
3599 + <div class="doc-md-description">
3600 + <p>"success" key is a boolean indicating whether the operation was successful. The "message" key is a string</p>
3601 + </div>
3602 + </td>
3603 + </tr>
3604 + <tr>
3605 +<td></td> <td>
3606 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
3607 + </td>
3608 + <td>
3609 + <div class="doc-md-description">
3610 + <p>providing details about the operation. If "success" is True, the dictionary also contains the "notes" key</p>
3611 + </div>
3612 + </td>
3613 + </tr>
3614 + <tr>
3615 +<td></td> <td>
3616 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
3617 + </td>
3618 + <td>
3619 + <div class="doc-md-description">
3620 + <p>with the created note.</p>
3621 + </div>
3622 + </td>
3623 + </tr>
3624 + </tbody>
3625 + </table>
3626 +
3627 + <details class="quote">
3628 + <summary>Source code in <code>app\services\DFIR_IRIS\notes.py</code></summary>
3629 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-129">129</a></span>
3630 +<span class="normal"><a href="#__codelineno-0-130">130</a></span>
3631 +<span class="normal"><a href="#__codelineno-0-131">131</a></span>
3632 +<span class="normal"><a href="#__codelineno-0-132">132</a></span>
3633 +<span class="normal"><a href="#__codelineno-0-133">133</a></span>
3634 +<span class="normal"><a href="#__codelineno-0-134">134</a></span>
3635 +<span class="normal"><a href="#__codelineno-0-135">135</a></span>
3636 +<span class="normal"><a href="#__codelineno-0-136">136</a></span>
3637 +<span class="normal"><a href="#__codelineno-0-137">137</a></span>
3638 +<span class="normal"><a href="#__codelineno-0-138">138</a></span>
3639 +<span class="normal"><a href="#__codelineno-0-139">139</a></span>
3640 +<span class="normal"><a href="#__codelineno-0-140">140</a></span>
3641 +<span class="normal"><a href="#__codelineno-0-141">141</a></span>
3642 +<span class="normal"><a href="#__codelineno-0-142">142</a></span>
3643 +<span class="normal"><a href="#__codelineno-0-143">143</a></span>
3644 +<span class="normal"><a href="#__codelineno-0-144">144</a></span>
3645 +<span class="normal"><a href="#__codelineno-0-145">145</a></span>
3646 +<span class="normal"><a href="#__codelineno-0-146">146</a></span>
3647 +<span class="normal"><a href="#__codelineno-0-147">147</a></span>
3648 +<span class="normal"><a href="#__codelineno-0-148">148</a></span>
3649 +<span class="normal"><a href="#__codelineno-0-149">149</a></span>
3650 +<span class="normal"><a href="#__codelineno-0-150">150</a></span>
3651 +<span class="normal"><a href="#__codelineno-0-151">151</a></span>
3652 +<span class="normal"><a href="#__codelineno-0-152">152</a></span>
3653 +<span class="normal"><a href="#__codelineno-0-153">153</a></span>
3654 +<span class="normal"><a href="#__codelineno-0-154">154</a></span>
3655 +<span class="normal"><a href="#__codelineno-0-155">155</a></span>
3656 +<span class="normal"><a href="#__codelineno-0-156">156</a></span>
3657 +<span class="normal"><a href="#__codelineno-0-157">157</a></span>
3658 +<span class="normal"><a href="#__codelineno-0-158">158</a></span>
3659 +<span class="normal"><a href="#__codelineno-0-159">159</a></span>
3660 +<span class="normal"><a href="#__codelineno-0-160">160</a></span>
3661 +<span class="normal"><a href="#__codelineno-0-161">161</a></span>
3662 +<span class="normal"><a href="#__codelineno-0-162">162</a></span>
3663 +<span class="normal"><a href="#__codelineno-0-163">163</a></span>
3664 +<span class="normal"><a href="#__codelineno-0-164">164</a></span>
3665 +<span class="normal"><a href="#__codelineno-0-165">165</a></span>
3666 +<span class="normal"><a href="#__codelineno-0-166">166</a></span>
3667 +<span class="normal"><a href="#__codelineno-0-167">167</a></span>
3668 +<span class="normal"><a href="#__codelineno-0-168">168</a></span>
3669 +<span class="normal"><a href="#__codelineno-0-169">169</a></span>
3670 +<span class="normal"><a href="#__codelineno-0-170">170</a></span>
3671 +<span class="normal"><a href="#__codelineno-0-171">171</a></span>
3672 +<span class="normal"><a href="#__codelineno-0-172">172</a></span>
3673 +<span class="normal"><a href="#__codelineno-0-173">173</a></span>
3674 +<span class="normal"><a href="#__codelineno-0-174">174</a></span>
3675 +<span class="normal"><a href="#__codelineno-0-175">175</a></span>
3676 +<span class="normal"><a href="#__codelineno-0-176">176</a></span>
3677 +<span class="normal"><a href="#__codelineno-0-177">177</a></span>
3678 +<span class="normal"><a href="#__codelineno-0-178">178</a></span>
3679 +<span class="normal"><a href="#__codelineno-0-179">179</a></span>
3680 +<span class="normal"><a href="#__codelineno-0-180">180</a></span>
3681 +<span class="normal"><a href="#__codelineno-0-181">181</a></span>
3682 +<span class="normal"><a href="#__codelineno-0-182">182</a></span>
3683 +<span class="normal"><a href="#__codelineno-0-183">183</a></span>
3684 +<span class="normal"><a href="#__codelineno-0-184">184</a></span>
3685 +<span class="normal"><a href="#__codelineno-0-185">185</a></span>
3686 +<span class="normal"><a href="#__codelineno-0-186">186</a></span>
3687 +<span class="normal"><a href="#__codelineno-0-187">187</a></span>
3688 +<span class="normal"><a href="#__codelineno-0-188">188</a></span>
3689 +<span class="normal"><a href="#__codelineno-0-189">189</a></span>
3690 +<span class="normal"><a href="#__codelineno-0-190">190</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="k">def</span> <span class="nf">create_case_note</span><span class="p">(</span>
3691 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="bp">self</span><span class="p">,</span>
3692 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="n">cid</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
3693 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="n">note_title</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3694 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="n">note_content</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3695 +<a id="__codelineno-0-134" name="__codelineno-0-134"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
3696 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3697 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="sd"> Creates a note for a specific case in DFIR-IRIS. If the iris_session attribute is None, this indicates that</span>
3698 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a><span class="sd"> the session creation was unsuccessful, and a dictionary with &quot;success&quot; set to False is returned. Otherwise,</span>
3699 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a><span class="sd"> it attempts to create a note with the specified `note_title` and `note_content` for the case specified by the</span>
3700 +<a id="__codelineno-0-139" name="__codelineno-0-139"></a><span class="sd"> `cid` parameter.</span>
3701 +<a id="__codelineno-0-140" name="__codelineno-0-140"></a>
3702 +<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="sd"> Args:</span>
3703 +<a id="__codelineno-0-142" name="__codelineno-0-142"></a><span class="sd"> cid (int): The ID of the case for which to create a note.</span>
3704 +<a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="sd"> note_title (str): The title of the note to create.</span>
3705 +<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> note_content (str): The content of the note to create.</span>
3706 +<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
3707 +<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Returns:</span>
3708 +<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the created note. The</span>
3709 +<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> &quot;success&quot; key is a boolean indicating whether the operation was successful. The &quot;message&quot; key is a string</span>
3710 +<a id="__codelineno-0-149" name="__codelineno-0-149"></a><span class="sd"> providing details about the operation. If &quot;success&quot; is True, the dictionary also contains the &quot;notes&quot; key</span>
3711 +<a id="__codelineno-0-150" name="__codelineno-0-150"></a><span class="sd"> with the created note.</span>
3712 +<a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="sd"> &quot;&quot;&quot;</span>
3713 +<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3714 +<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="k">return</span> <span class="p">{</span>
3715 +<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3716 +<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
3717 +<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="p">}</span>
3718 +<a id="__codelineno-0-157" name="__codelineno-0-157"></a>
3719 +<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Creating case </span><span class="si">{</span><span class="n">cid</span><span class="si">}</span><span class="s2"> note in DFIR-IRIS&quot;</span><span class="p">)</span>
3720 +<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
3721 +<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="n">cid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">cid</span><span class="p">)</span>
3722 +<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="c1"># Creating Group for New Note</span>
3723 +<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="n">note_group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3724 +<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3725 +<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="k">case</span><span class="o">.</span><span class="n">add_notes_group</span><span class="p">,</span>
3726 +<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="n">note_title</span><span class="p">,</span>
3727 +<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="n">cid</span><span class="p">,</span>
3728 +<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="p">)</span>
3729 +<a id="__codelineno-0-168" name="__codelineno-0-168"></a>
3730 +<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">note_group</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3731 +<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to create note in DFIR-IRIS&quot;</span><span class="p">}</span>
3732 +<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="n">note_group_id</span> <span class="o">=</span> <span class="n">note_group</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">][</span><span class="s2">&quot;group_id&quot;</span><span class="p">]</span>
3733 +<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="n">custom_attributes</span> <span class="o">=</span> <span class="p">{}</span>
3734 +<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3735 +<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3736 +<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="k">case</span><span class="o">.</span><span class="n">add_note</span><span class="p">,</span>
3737 +<a id="__codelineno-0-176" name="__codelineno-0-176"></a> <span class="n">note_title</span><span class="p">,</span>
3738 +<a id="__codelineno-0-177" name="__codelineno-0-177"></a> <span class="n">note_content</span><span class="p">,</span>
3739 +<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="n">note_group_id</span><span class="p">,</span>
3740 +<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="n">custom_attributes</span><span class="p">,</span>
3741 +<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="n">cid</span><span class="p">,</span>
3742 +<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="p">)</span>
3743 +<a id="__codelineno-0-182" name="__codelineno-0-182"></a>
3744 +<a id="__codelineno-0-183" name="__codelineno-0-183"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3745 +<a id="__codelineno-0-184" name="__codelineno-0-184"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to create note in DFIR-IRIS&quot;</span><span class="p">}</span>
3746 +<a id="__codelineno-0-185" name="__codelineno-0-185"></a>
3747 +<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="k">return</span> <span class="p">{</span>
3748 +<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3749 +<a id="__codelineno-0-188" name="__codelineno-0-188"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully created note in DFIR-IRIS&quot;</span><span class="p">,</span>
3750 +<a id="__codelineno-0-189" name="__codelineno-0-189"></a> <span class="s2">&quot;notes&quot;</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">],</span>
3751 +<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="p">}</span>
3752 +</code></pre></div></td></tr></table></div>
3753 + </details>
3754 + </div>
3755 +
3756 +</div>
3757 +
3758 +<div class="doc doc-object doc-function">
3759 +
3760 +
3761 +
3762 +<h3 id="app.services.DFIR_IRIS.notes.NotesService.get_case_notes" class="doc doc-heading">
3763 +<code class="highlight language-python"><span class="n">get_case_notes</span><span class="p">(</span><span class="n">search_term</span><span class="p">,</span> <span class="n">cid</span><span class="p">)</span></code>
3764 +
3765 +</h3>
3766 +
3767 +
3768 + <div class="doc doc-contents ">
3769 +
3770 + <p>Retrieves the notes of a specific case from DFIR-IRIS. If the iris_session attribute is None, this indicates
3771 +that the session creation was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise,
3772 +it attempts to fetch and parse the notes data for the case specified by the <code>cid</code> parameter.</p>
3773 +
3774 + <p><strong>Parameters:</strong></p>
3775 + <table>
3776 + <thead>
3777 + <tr>
3778 + <th>Name</th>
3779 + <th>Type</th>
3780 + <th>Description</th>
3781 + <th>Default</th>
3782 + </tr>
3783 + </thead>
3784 + <tbody>
3785 + <tr>
3786 + <td><code>search_term</code></td>
3787 + <td>
3788 + <code>str</code>
3789 + </td>
3790 + <td>
3791 + <div class="doc-md-description">
3792 + <p>The search term to use when fetching case notes.</p>
3793 + </div>
3794 + </td>
3795 + <td>
3796 + <em>required</em>
3797 + </td>
3798 + </tr>
3799 + <tr>
3800 + <td><code>cid</code></td>
3801 + <td>
3802 + <code>int</code>
3803 + </td>
3804 + <td>
3805 + <div class="doc-md-description">
3806 + <p>The ID of the case for which to retrieve notes.</p>
3807 + </div>
3808 + </td>
3809 + <td>
3810 + <em>required</em>
3811 + </td>
3812 + </tr>
3813 + </tbody>
3814 + </table>
3815 +
3816 + <p><strong>Returns:</strong></p>
3817 + <table>
3818 + <thead>
3819 + <tr>
3820 +<th>Name</th> <th>Type</th>
3821 + <th>Description</th>
3822 + </tr>
3823 + </thead>
3824 + <tbody>
3825 + <tr>
3826 +<td><code>dict</code></td> <td>
3827 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
3828 + </td>
3829 + <td>
3830 + <div class="doc-md-description">
3831 + <p>A dictionary containing the success status, a message, and potentially the fetched notes. The</p>
3832 + </div>
3833 + </td>
3834 + </tr>
3835 + <tr>
3836 +<td></td> <td>
3837 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
3838 + </td>
3839 + <td>
3840 + <div class="doc-md-description">
3841 + <p>"success" key is a boolean indicating whether the operation was successful. The "message" key is a string</p>
3842 + </div>
3843 + </td>
3844 + </tr>
3845 + <tr>
3846 +<td></td> <td>
3847 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
3848 + </td>
3849 + <td>
3850 + <div class="doc-md-description">
3851 + <p>providing details about the operation. If "success" is True, the dictionary also contains the "data" key</p>
3852 + </div>
3853 + </td>
3854 + </tr>
3855 + <tr>
3856 +<td></td> <td>
3857 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
3858 + </td>
3859 + <td>
3860 + <div class="doc-md-description">
3861 + <p>with the fetched notes.</p>
3862 + </div>
3863 + </td>
3864 + </tr>
3865 + </tbody>
3866 + </table>
3867 +
3868 + <details class="quote">
3869 + <summary>Source code in <code>app\services\DFIR_IRIS\notes.py</code></summary>
3870 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-35">35</a></span>
3871 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
3872 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
3873 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
3874 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
3875 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
3876 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
3877 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
3878 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
3879 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
3880 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
3881 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
3882 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
3883 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
3884 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
3885 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
3886 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
3887 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
3888 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
3889 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
3890 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
3891 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
3892 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
3893 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
3894 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
3895 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
3896 +<span class="normal"><a href="#__codelineno-0-61">61</a></span>
3897 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
3898 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
3899 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
3900 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
3901 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
3902 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
3903 +<span class="normal"><a href="#__codelineno-0-68">68</a></span>
3904 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
3905 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
3906 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
3907 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
3908 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
3909 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
3910 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
3911 +<span class="normal"><a href="#__codelineno-0-76">76</a></span>
3912 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
3913 +<span class="normal"><a href="#__codelineno-0-78">78</a></span>
3914 +<span class="normal"><a href="#__codelineno-0-79">79</a></span>
3915 +<span class="normal"><a href="#__codelineno-0-80">80</a></span>
3916 +<span class="normal"><a href="#__codelineno-0-81">81</a></span>
3917 +<span class="normal"><a href="#__codelineno-0-82">82</a></span>
3918 +<span class="normal"><a href="#__codelineno-0-83">83</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="k">def</span> <span class="nf">get_case_notes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">search_term</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">cid</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
3919 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3920 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> Retrieves the notes of a specific case from DFIR-IRIS. If the iris_session attribute is None, this indicates</span>
3921 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> that the session creation was unsuccessful, and a dictionary with &quot;success&quot; set to False is returned. Otherwise,</span>
3922 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> it attempts to fetch and parse the notes data for the case specified by the `cid` parameter.</span>
3923 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a>
3924 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Args:</span>
3925 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> search_term (str): The search term to use when fetching case notes.</span>
3926 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> cid (int): The ID of the case for which to retrieve notes.</span>
3927 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a>
3928 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Returns:</span>
3929 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the fetched notes. The</span>
3930 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> &quot;success&quot; key is a boolean indicating whether the operation was successful. The &quot;message&quot; key is a string</span>
3931 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> providing details about the operation. If &quot;success&quot; is True, the dictionary also contains the &quot;data&quot; key</span>
3932 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> with the fetched notes.</span>
3933 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> &quot;&quot;&quot;</span>
3934 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3935 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">return</span> <span class="p">{</span>
3936 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3937 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;DFIR-IRIS session was not successfully created.&quot;</span><span class="p">,</span>
3938 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="p">}</span>
3939 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a>
3940 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Collecting case </span><span class="si">{</span><span class="n">cid</span><span class="si">}</span><span class="s2"> from DFIR-IRIS&quot;</span><span class="p">)</span>
3941 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
3942 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="n">cid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">cid</span><span class="p">)</span>
3943 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3944 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3945 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="k">case</span><span class="o">.</span><span class="n">search_notes</span><span class="p">,</span>
3946 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="n">search_term</span><span class="p">,</span>
3947 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">cid</span><span class="p">,</span>
3948 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="p">)</span>
3949 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a>
3950 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3951 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">return</span> <span class="p">{</span>
3952 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3953 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect notes from DFIR-IRIS&quot;</span><span class="p">,</span>
3954 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="p">}</span>
3955 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
3956 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="c1"># Loop through the notes and get the details</span>
3957 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="k">for</span> <span class="n">note</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">]:</span>
3958 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">note_details</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_case_note_details</span><span class="p">(</span><span class="n">note</span><span class="p">[</span><span class="s2">&quot;note_id&quot;</span><span class="p">],</span> <span class="n">cid</span><span class="p">)</span>
3959 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">note_details</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3960 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">return</span> <span class="p">{</span>
3961 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3962 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect notes from DFIR-IRIS&quot;</span><span class="p">,</span>
3963 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="p">}</span>
3964 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">note</span><span class="p">[</span><span class="s2">&quot;note_details&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">note_details</span><span class="p">[</span><span class="s2">&quot;notes&quot;</span><span class="p">]</span>
3965 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a>
3966 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="n">result</span>
3967 +</code></pre></div></td></tr></table></div>
3968 + </details>
3969 + </div>
3970 +
3971 +</div>
3972 +
3973 +
3974 +
3975 + </div>
3976 +
3977 + </div>
3978 +
3979 +</div>
3980 +
3981 +
3982 +
3983 +
3984 + </div>
3985 +
3986 + </div>
3987 +
3988 +</div><p><br></p>
3989 +<h3 id="universal-services"><span style="color:red">Universal Services</span></h3>
3990 +
3991 +
3992 +<div class="doc doc-object doc-module">
3993 +
3994 +
3995 +<a id="app.services.DFIR_IRIS.universal"></a>
3996 + <div class="doc doc-contents first">
3997 +
3998 +
3999 +
4000 + <div class="doc doc-children">
4001 +
4002 +
4003 +
4004 +
4005 +
4006 +
4007 +
4008 +
4009 +<div class="doc doc-object doc-class">
4010 +
4011 +
4012 +
4013 +<h2 id="app.services.DFIR_IRIS.universal.UniversalService" class="doc doc-heading">
4014 + <code>UniversalService</code>
4015 +
4016 +
4017 +</h2>
4018 +
4019 +
4020 + <div class="doc doc-contents ">
4021 +
4022 +
4023 + <p>A service class that encapsulates the logic for interfacing with DFIR-IRIS. This class handles tasks like creating a session,
4024 +fetching and parsing data, and retrieving connector details.</p>
4025 +
4026 +
4027 + <details class="quote">
4028 + <summary>Source code in <code>app\services\DFIR_IRIS\universal.py</code></summary>
4029 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
4030 +<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
4031 +<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
4032 +<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
4033 +<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
4034 +<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
4035 +<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
4036 +<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
4037 +<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
4038 +<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
4039 +<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
4040 +<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
4041 +<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
4042 +<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
4043 +<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
4044 +<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
4045 +<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
4046 +<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
4047 +<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
4048 +<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
4049 +<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
4050 +<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
4051 +<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
4052 +<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
4053 +<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
4054 +<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
4055 +<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
4056 +<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
4057 +<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
4058 +<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
4059 +<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
4060 +<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
4061 +<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
4062 +<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
4063 +<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
4064 +<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
4065 +<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
4066 +<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
4067 +<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
4068 +<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
4069 +<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
4070 +<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
4071 +<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
4072 +<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
4073 +<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
4074 +<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
4075 +<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
4076 +<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
4077 +<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
4078 +<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
4079 +<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
4080 +<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
4081 +<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
4082 +<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
4083 +<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
4084 +<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
4085 +<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
4086 +<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
4087 +<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
4088 +<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
4089 +<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
4090 +<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
4091 +<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
4092 +<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
4093 +<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
4094 +<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
4095 +<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
4096 +<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
4097 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
4098 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
4099 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
4100 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
4101 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
4102 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
4103 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
4104 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
4105 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
4106 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
4107 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
4108 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
4109 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
4110 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
4111 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
4112 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
4113 +<span class="normal"><a href="#__codelineno-0-104">104</a></span>
4114 +<span class="normal"><a href="#__codelineno-0-105">105</a></span>
4115 +<span class="normal"><a href="#__codelineno-0-106">106</a></span>
4116 +<span class="normal"><a href="#__codelineno-0-107">107</a></span>
4117 +<span class="normal"><a href="#__codelineno-0-108">108</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="k">class</span> <span class="nc">UniversalService</span><span class="p">:</span>
4118 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4119 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> A service class that encapsulates the logic for interfacing with DFIR-IRIS. This class handles tasks like creating a session,</span>
4120 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> fetching and parsing data, and retrieving connector details.</span>
4121 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> &quot;&quot;&quot;</span>
4122 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a>
4123 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
4124 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4125 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> Initializes the UniversalService by collecting DFIR-IRIS details associated with the specified connector name.</span>
4126 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a>
4127 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> Args:</span>
4128 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> connector_name (str): The name of the DFIR-IRIS connector.</span>
4129 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="sd"> &quot;&quot;&quot;</span>
4130 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_iris_details</span><span class="p">(</span>
4131 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">connector_name</span><span class="p">,</span>
4132 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="p">)</span>
4133 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
4134 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">def</span> <span class="nf">collect_iris_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
4135 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4136 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> Collects the details of the DFIR-IRIS connector.</span>
4137 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a>
4138 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Args:</span>
4139 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> connector_name (str): The name of the DFIR-IRIS connector.</span>
4140 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
4141 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Returns:</span>
4142 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> tuple: A tuple containing the connection URL and API key. If the connection is not successful, both elements of the tuple are None.</span>
4143 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> &quot;&quot;&quot;</span>
4144 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">connector_instance</span> <span class="o">=</span> <span class="n">connector_factory</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">connector_name</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">)</span>
4145 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="n">connection_successful</span> <span class="o">=</span> <span class="n">connector_instance</span><span class="o">.</span><span class="n">verify_connection</span><span class="p">()</span>
4146 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
4147 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="n">connection_details</span> <span class="o">=</span> <span class="n">Connector</span><span class="o">.</span><span class="n">get_connector_info_from_db</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span>
4148 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="k">return</span> <span class="p">(</span>
4149 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_url&quot;</span><span class="p">),</span>
4150 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_api_key&quot;</span><span class="p">),</span>
4151 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="p">)</span>
4152 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">else</span><span class="p">:</span>
4153 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
4154 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
4155 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">def</span> <span class="nf">create_session</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ClientSession</span><span class="p">],</span> <span class="nb">str</span><span class="p">]]:</span>
4156 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4157 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Creates a session with DFIR-IRIS.</span>
4158 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
4159 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> This method creates a session with DFIR-IRIS and returns a dictionary with a success status and the session object.</span>
4160 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> If a session cannot be established, an error is logged and a dictionary with &quot;success&quot; set to False and an error message is returned.</span>
4161 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
4162 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
4163 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> dict: A dictionary containing the success status and either the session object or an error message.</span>
4164 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> &quot;&quot;&quot;</span>
4165 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">try</span><span class="p">:</span>
4166 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Creating session with DFIR-IRIS.&quot;</span><span class="p">)</span>
4167 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">session</span> <span class="o">=</span> <span class="n">ClientSession</span><span class="p">(</span>
4168 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="n">host</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
4169 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">apikey</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span><span class="p">,</span>
4170 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">agent</span><span class="o">=</span><span class="s2">&quot;iris-client&quot;</span><span class="p">,</span>
4171 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">ssl_verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
4172 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">120</span><span class="p">,</span>
4173 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">proxy</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
4174 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="p">)</span>
4175 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Session created.&quot;</span><span class="p">)</span>
4176 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;session&quot;</span><span class="p">:</span> <span class="n">session</span><span class="p">}</span>
4177 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
4178 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error creating session with DFIR-IRIS: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4179 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">return</span> <span class="p">{</span>
4180 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
4181 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Connection to DFIR-IRIS unsuccessful.&quot;</span><span class="p">,</span>
4182 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="p">}</span>
4183 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
4184 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="k">def</span> <span class="nf">fetch_and_parse_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">session</span><span class="p">:</span> <span class="n">ClientSession</span><span class="p">,</span> <span class="n">action</span><span class="p">:</span> <span class="n">Callable</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">]]]:</span>
4185 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4186 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> Fetches and parses data from DFIR-IRIS using a specified action.</span>
4187 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a>
4188 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Args:</span>
4189 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> session (ClientSession): The DFIR-IRIS session object.</span>
4190 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> action (Callable): The function to execute to fetch data from DFIR-IRIS. This function should accept *args.</span>
4191 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="sd"> args: The arguments to pass to the action function.</span>
4192 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a>
4193 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> Returns:</span>
4194 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="sd"> dict: A dictionary containing the success status and either the fetched data or None if the operation was unsuccessful.</span>
4195 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> &quot;&quot;&quot;</span>
4196 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="k">try</span><span class="p">:</span>
4197 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Executing </span><span class="si">{</span><span class="n">action</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">... on args: </span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4198 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="n">status</span> <span class="o">=</span> <span class="n">action</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
4199 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="n">assert_api_resp</span><span class="p">(</span><span class="n">status</span><span class="p">,</span> <span class="n">soft_fail</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
4200 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">data</span> <span class="o">=</span> <span class="n">get_data_from_resp</span><span class="p">(</span><span class="n">status</span><span class="p">)</span>
4201 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Successfully executed </span><span class="si">{</span><span class="n">action</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4202 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;data&quot;</span><span class="p">:</span> <span class="n">data</span><span class="p">}</span>
4203 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
4204 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to execute </span><span class="si">{</span><span class="n">action</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4205 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
4206 +</code></pre></div></td></tr></table></div>
4207 + </details>
4208 +
4209 +
4210 +
4211 + <div class="doc doc-children">
4212 +
4213 +
4214 +
4215 +
4216 +
4217 +
4218 +
4219 +
4220 +
4221 +<div class="doc doc-object doc-function">
4222 +
4223 +
4224 +
4225 +<h3 id="app.services.DFIR_IRIS.universal.UniversalService.__init__" class="doc doc-heading">
4226 +<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span></code>
4227 +
4228 +</h3>
4229 +
4230 +
4231 + <div class="doc doc-contents ">
4232 +
4233 + <p>Initializes the UniversalService by collecting DFIR-IRIS details associated with the specified connector name.</p>
4234 +
4235 + <p><strong>Parameters:</strong></p>
4236 + <table>
4237 + <thead>
4238 + <tr>
4239 + <th>Name</th>
4240 + <th>Type</th>
4241 + <th>Description</th>
4242 + <th>Default</th>
4243 + </tr>
4244 + </thead>
4245 + <tbody>
4246 + <tr>
4247 + <td><code>connector_name</code></td>
4248 + <td>
4249 + <code>str</code>
4250 + </td>
4251 + <td>
4252 + <div class="doc-md-description">
4253 + <p>The name of the DFIR-IRIS connector.</p>
4254 + </div>
4255 + </td>
4256 + <td>
4257 + <em>required</em>
4258 + </td>
4259 + </tr>
4260 + </tbody>
4261 + </table>
4262 +
4263 + <details class="quote">
4264 + <summary>Source code in <code>app\services\DFIR_IRIS\universal.py</code></summary>
4265 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-26">26</a></span>
4266 +<span class="normal"><a href="#__codelineno-0-27">27</a></span>
4267 +<span class="normal"><a href="#__codelineno-0-28">28</a></span>
4268 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
4269 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
4270 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
4271 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
4272 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
4273 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
4274 +<span class="normal"><a href="#__codelineno-0-35">35</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
4275 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4276 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> Initializes the UniversalService by collecting DFIR-IRIS details associated with the specified connector name.</span>
4277 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a>
4278 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> Args:</span>
4279 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> connector_name (str): The name of the DFIR-IRIS connector.</span>
4280 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="sd"> &quot;&quot;&quot;</span>
4281 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_iris_details</span><span class="p">(</span>
4282 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">connector_name</span><span class="p">,</span>
4283 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="p">)</span>
4284 +</code></pre></div></td></tr></table></div>
4285 + </details>
4286 + </div>
4287 +
4288 +</div>
4289 +
4290 +<div class="doc doc-object doc-function">
4291 +
4292 +
4293 +
4294 +<h3 id="app.services.DFIR_IRIS.universal.UniversalService.collect_iris_details" class="doc doc-heading">
4295 +<code class="highlight language-python"><span class="n">collect_iris_details</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span></code>
4296 +
4297 +</h3>
4298 +
4299 +
4300 + <div class="doc doc-contents ">
4301 +
4302 + <p>Collects the details of the DFIR-IRIS connector.</p>
4303 +
4304 + <p><strong>Parameters:</strong></p>
4305 + <table>
4306 + <thead>
4307 + <tr>
4308 + <th>Name</th>
4309 + <th>Type</th>
4310 + <th>Description</th>
4311 + <th>Default</th>
4312 + </tr>
4313 + </thead>
4314 + <tbody>
4315 + <tr>
4316 + <td><code>connector_name</code></td>
4317 + <td>
4318 + <code>str</code>
4319 + </td>
4320 + <td>
4321 + <div class="doc-md-description">
4322 + <p>The name of the DFIR-IRIS connector.</p>
4323 + </div>
4324 + </td>
4325 + <td>
4326 + <em>required</em>
4327 + </td>
4328 + </tr>
4329 + </tbody>
4330 + </table>
4331 +
4332 + <p><strong>Returns:</strong></p>
4333 + <table>
4334 + <thead>
4335 + <tr>
4336 +<th>Name</th> <th>Type</th>
4337 + <th>Description</th>
4338 + </tr>
4339 + </thead>
4340 + <tbody>
4341 + <tr>
4342 +<td><code>tuple</code></td> <td>
4343 + <code><span title="typing.Tuple">Tuple</span>[<span title="typing.Optional">Optional</span>[str], <span title="typing.Optional">Optional</span>[str]]</code>
4344 + </td>
4345 + <td>
4346 + <div class="doc-md-description">
4347 + <p>A tuple containing the connection URL and API key. If the connection is not successful, both elements of the tuple are None.</p>
4348 + </div>
4349 + </td>
4350 + </tr>
4351 + </tbody>
4352 + </table>
4353 +
4354 + <details class="quote">
4355 + <summary>Source code in <code>app\services\DFIR_IRIS\universal.py</code></summary>
4356 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-37">37</a></span>
4357 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
4358 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
4359 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
4360 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
4361 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
4362 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
4363 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
4364 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
4365 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
4366 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
4367 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
4368 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
4369 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
4370 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
4371 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
4372 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
4373 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
4374 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
4375 +<span class="normal"><a href="#__codelineno-0-56">56</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="k">def</span> <span class="nf">collect_iris_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
4376 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4377 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> Collects the details of the DFIR-IRIS connector.</span>
4378 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a>
4379 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Args:</span>
4380 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> connector_name (str): The name of the DFIR-IRIS connector.</span>
4381 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
4382 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Returns:</span>
4383 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> tuple: A tuple containing the connection URL and API key. If the connection is not successful, both elements of the tuple are None.</span>
4384 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> &quot;&quot;&quot;</span>
4385 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">connector_instance</span> <span class="o">=</span> <span class="n">connector_factory</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">connector_name</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">)</span>
4386 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="n">connection_successful</span> <span class="o">=</span> <span class="n">connector_instance</span><span class="o">.</span><span class="n">verify_connection</span><span class="p">()</span>
4387 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
4388 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="n">connection_details</span> <span class="o">=</span> <span class="n">Connector</span><span class="o">.</span><span class="n">get_connector_info_from_db</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span>
4389 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="k">return</span> <span class="p">(</span>
4390 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_url&quot;</span><span class="p">),</span>
4391 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_api_key&quot;</span><span class="p">),</span>
4392 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="p">)</span>
4393 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">else</span><span class="p">:</span>
4394 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
4395 +</code></pre></div></td></tr></table></div>
4396 + </details>
4397 + </div>
4398 +
4399 +</div>
4400 +
4401 +<div class="doc doc-object doc-function">
4402 +
4403 +
4404 +
4405 +<h3 id="app.services.DFIR_IRIS.universal.UniversalService.create_session" class="doc doc-heading">
4406 +<code class="highlight language-python"><span class="n">create_session</span><span class="p">()</span></code>
4407 +
4408 +</h3>
4409 +
4410 +
4411 + <div class="doc doc-contents ">
4412 +
4413 + <p>Creates a session with DFIR-IRIS.</p>
4414 +<p>This method creates a session with DFIR-IRIS and returns a dictionary with a success status and the session object.
4415 +If a session cannot be established, an error is logged and a dictionary with "success" set to False and an error message is returned.</p>
4416 +
4417 + <p><strong>Returns:</strong></p>
4418 + <table>
4419 + <thead>
4420 + <tr>
4421 +<th>Name</th> <th>Type</th>
4422 + <th>Description</th>
4423 + </tr>
4424 + </thead>
4425 + <tbody>
4426 + <tr>
4427 +<td><code>dict</code></td> <td>
4428 + <code><span title="typing.Dict">Dict</span>[str, <span title="typing.Union">Union</span>[bool, <span title="typing.Optional">Optional</span>[<span title="dfir_iris_client.session.ClientSession">ClientSession</span>], str]]</code>
4429 + </td>
4430 + <td>
4431 + <div class="doc-md-description">
4432 + <p>A dictionary containing the success status and either the session object or an error message.</p>
4433 + </div>
4434 + </td>
4435 + </tr>
4436 + </tbody>
4437 + </table>
4438 +
4439 + <details class="quote">
4440 + <summary>Source code in <code>app\services\DFIR_IRIS\universal.py</code></summary>
4441 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-58">58</a></span>
4442 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
4443 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
4444 +<span class="normal"><a href="#__codelineno-0-61">61</a></span>
4445 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
4446 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
4447 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
4448 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
4449 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
4450 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
4451 +<span class="normal"><a href="#__codelineno-0-68">68</a></span>
4452 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
4453 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
4454 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
4455 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
4456 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
4457 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
4458 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
4459 +<span class="normal"><a href="#__codelineno-0-76">76</a></span>
4460 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
4461 +<span class="normal"><a href="#__codelineno-0-78">78</a></span>
4462 +<span class="normal"><a href="#__codelineno-0-79">79</a></span>
4463 +<span class="normal"><a href="#__codelineno-0-80">80</a></span>
4464 +<span class="normal"><a href="#__codelineno-0-81">81</a></span>
4465 +<span class="normal"><a href="#__codelineno-0-82">82</a></span>
4466 +<span class="normal"><a href="#__codelineno-0-83">83</a></span>
4467 +<span class="normal"><a href="#__codelineno-0-84">84</a></span>
4468 +<span class="normal"><a href="#__codelineno-0-85">85</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="k">def</span> <span class="nf">create_session</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ClientSession</span><span class="p">],</span> <span class="nb">str</span><span class="p">]]:</span>
4469 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4470 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Creates a session with DFIR-IRIS.</span>
4471 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
4472 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> This method creates a session with DFIR-IRIS and returns a dictionary with a success status and the session object.</span>
4473 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> If a session cannot be established, an error is logged and a dictionary with &quot;success&quot; set to False and an error message is returned.</span>
4474 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
4475 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
4476 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> dict: A dictionary containing the success status and either the session object or an error message.</span>
4477 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> &quot;&quot;&quot;</span>
4478 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">try</span><span class="p">:</span>
4479 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Creating session with DFIR-IRIS.&quot;</span><span class="p">)</span>
4480 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">session</span> <span class="o">=</span> <span class="n">ClientSession</span><span class="p">(</span>
4481 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="n">host</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
4482 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">apikey</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span><span class="p">,</span>
4483 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">agent</span><span class="o">=</span><span class="s2">&quot;iris-client&quot;</span><span class="p">,</span>
4484 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">ssl_verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
4485 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">120</span><span class="p">,</span>
4486 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">proxy</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
4487 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="p">)</span>
4488 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Session created.&quot;</span><span class="p">)</span>
4489 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;session&quot;</span><span class="p">:</span> <span class="n">session</span><span class="p">}</span>
4490 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
4491 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error creating session with DFIR-IRIS: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4492 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">return</span> <span class="p">{</span>
4493 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
4494 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Connection to DFIR-IRIS unsuccessful.&quot;</span><span class="p">,</span>
4495 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="p">}</span>
4496 +</code></pre></div></td></tr></table></div>
4497 + </details>
4498 + </div>
4499 +
4500 +</div>
4501 +
4502 +<div class="doc doc-object doc-function">
4503 +
4504 +
4505 +
4506 +<h3 id="app.services.DFIR_IRIS.universal.UniversalService.fetch_and_parse_data" class="doc doc-heading">
4507 +<code class="highlight language-python"><span class="n">fetch_and_parse_data</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span></code>
4508 +
4509 +</h3>
4510 +
4511 +
4512 + <div class="doc doc-contents ">
4513 +
4514 + <p>Fetches and parses data from DFIR-IRIS using a specified action.</p>
4515 +
4516 + <p><strong>Parameters:</strong></p>
4517 + <table>
4518 + <thead>
4519 + <tr>
4520 + <th>Name</th>
4521 + <th>Type</th>
4522 + <th>Description</th>
4523 + <th>Default</th>
4524 + </tr>
4525 + </thead>
4526 + <tbody>
4527 + <tr>
4528 + <td><code>session</code></td>
4529 + <td>
4530 + <code><span title="dfir_iris_client.session.ClientSession">ClientSession</span></code>
4531 + </td>
4532 + <td>
4533 + <div class="doc-md-description">
4534 + <p>The DFIR-IRIS session object.</p>
4535 + </div>
4536 + </td>
4537 + <td>
4538 + <em>required</em>
4539 + </td>
4540 + </tr>
4541 + <tr>
4542 + <td><code>action</code></td>
4543 + <td>
4544 + <code><span title="typing.Callable">Callable</span></code>
4545 + </td>
4546 + <td>
4547 + <div class="doc-md-description">
4548 + <p>The function to execute to fetch data from DFIR-IRIS. This function should accept *args.</p>
4549 + </div>
4550 + </td>
4551 + <td>
4552 + <em>required</em>
4553 + </td>
4554 + </tr>
4555 + <tr>
4556 + <td><code>args</code></td>
4557 + <td>
4558 + </td>
4559 + <td>
4560 + <div class="doc-md-description">
4561 + <p>The arguments to pass to the action function.</p>
4562 + </div>
4563 + </td>
4564 + <td>
4565 + <code>()</code>
4566 + </td>
4567 + </tr>
4568 + </tbody>
4569 + </table>
4570 +
4571 + <p><strong>Returns:</strong></p>
4572 + <table>
4573 + <thead>
4574 + <tr>
4575 +<th>Name</th> <th>Type</th>
4576 + <th>Description</th>
4577 + </tr>
4578 + </thead>
4579 + <tbody>
4580 + <tr>
4581 +<td><code>dict</code></td> <td>
4582 + <code><span title="typing.Dict">Dict</span>[str, <span title="typing.Union">Union</span>[bool, <span title="typing.Optional">Optional</span>[<span title="typing.Dict">Dict</span>]]]</code>
4583 + </td>
4584 + <td>
4585 + <div class="doc-md-description">
4586 + <p>A dictionary containing the success status and either the fetched data or None if the operation was unsuccessful.</p>
4587 + </div>
4588 + </td>
4589 + </tr>
4590 + </tbody>
4591 + </table>
4592 +
4593 + <details class="quote">
4594 + <summary>Source code in <code>app\services\DFIR_IRIS\universal.py</code></summary>
4595 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
4596 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
4597 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
4598 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
4599 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
4600 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
4601 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
4602 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
4603 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
4604 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
4605 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
4606 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
4607 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
4608 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
4609 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
4610 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
4611 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
4612 +<span class="normal"><a href="#__codelineno-0-104">104</a></span>
4613 +<span class="normal"><a href="#__codelineno-0-105">105</a></span>
4614 +<span class="normal"><a href="#__codelineno-0-106">106</a></span>
4615 +<span class="normal"><a href="#__codelineno-0-107">107</a></span>
4616 +<span class="normal"><a href="#__codelineno-0-108">108</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="k">def</span> <span class="nf">fetch_and_parse_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">session</span><span class="p">:</span> <span class="n">ClientSession</span><span class="p">,</span> <span class="n">action</span><span class="p">:</span> <span class="n">Callable</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">]]]:</span>
4617 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4618 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> Fetches and parses data from DFIR-IRIS using a specified action.</span>
4619 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a>
4620 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Args:</span>
4621 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> session (ClientSession): The DFIR-IRIS session object.</span>
4622 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> action (Callable): The function to execute to fetch data from DFIR-IRIS. This function should accept *args.</span>
4623 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="sd"> args: The arguments to pass to the action function.</span>
4624 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a>
4625 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> Returns:</span>
4626 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="sd"> dict: A dictionary containing the success status and either the fetched data or None if the operation was unsuccessful.</span>
4627 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> &quot;&quot;&quot;</span>
4628 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="k">try</span><span class="p">:</span>
4629 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Executing </span><span class="si">{</span><span class="n">action</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">... on args: </span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4630 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="n">status</span> <span class="o">=</span> <span class="n">action</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
4631 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="n">assert_api_resp</span><span class="p">(</span><span class="n">status</span><span class="p">,</span> <span class="n">soft_fail</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
4632 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">data</span> <span class="o">=</span> <span class="n">get_data_from_resp</span><span class="p">(</span><span class="n">status</span><span class="p">)</span>
4633 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Successfully executed </span><span class="si">{</span><span class="n">action</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4634 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;data&quot;</span><span class="p">:</span> <span class="n">data</span><span class="p">}</span>
4635 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
4636 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to execute </span><span class="si">{</span><span class="n">action</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4637 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
4638 +</code></pre></div></td></tr></table></div>
4639 + </details>
4640 + </div>
4641 +
4642 +</div>
4643 +
4644 +
4645 +
4646 + </div>
4647 +
4648 + </div>
4649 +
4650 +</div>
4651 +
4652 +
4653 +
4654 +
4655 + </div>
4656 +
4657 + </div>
4658 +
4659 +</div><p><br></p>
4660 +
4661 +
4662 +
4663 +
4664 +
4665 +
4666 + </article>
4667 + </div>
4668 +
4669 +
4670 + <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
4671 +
4672 + </div>
4673 +
4674 + <button type="button" class="md-top md-icon" data-md-component="top" hidden>
4675 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
4676 + Back to top
4677 + </button>
4678 +
4679 + </main>
4680 +
4681 + <footer class="md-footer">
4682 +
4683 + <div class="md-footer-meta md-typeset">
4684 + <div class="md-footer-meta__inner md-grid">
4685 + <div class="md-copyright">
4686 +
4687 + <div class="md-copyright__highlight">
4688 + &copy; 2023 <a href="https://github.com/socfortress/CoPilot" target="_blank" rel="noopener">SOCFortress CoPilot</a>
4689 +
4690 + </div>
4691 +
4692 +
4693 + Made with
4694 + <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
4695 + Material for MkDocs
4696 + </a>
4697 +
4698 +</div>
4699 +
4700 + </div>
4701 + </div>
4702 +</footer>
4703 +
4704 + </div>
4705 + <div class="md-dialog" data-md-component="dialog">
4706 + <div class="md-dialog__inner md-typeset"></div>
4707 + </div>
4708 +
4709 + <script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.sections", "toc.integrate", "navigation.top", "search.suggest", "search.highlight", "content.tabs.link", "content.code.annotation", "content.code.copy"], "search": "../assets/javascripts/workers/search.74e28a9f.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
4710 +
4711 +
4712 + <script src="../assets/javascripts/bundle.220ee61c.min.js"></script>
4713 +
4714 +
4715 + </body>
4716 +</html>
\ No newline at end of file
backend/site/graylog/index.html
+58 -31
@@ -9,7 +9,7 @@
9
10
11
12 - <link rel="prev" href="../cases/">
12 + <link rel="prev" href="../dfiriris/">
13
14
15 <link rel="next" href="../wazuhmanager/">
@@ -198,8 +198,8 @@
198
199
200 <li class="md-tabs__item">
201 - <a href="../alerts/" class="md-tabs__link">
202 - Alerts
201 + <a href="../wazuhindexer/" class="md-tabs__link">
202 + Wazuh-Indexer
203 </a>
204 </li>
205
@@ -210,8 +210,8 @@
210
211
212 <li class="md-tabs__item">
213 - <a href="../artifacts/" class="md-tabs__link">
214 - Artifacts
213 + <a href="../dfiriris/" class="md-tabs__link">
214 + Dfir-Iris
215 </a>
216 </li>
217
@@ -219,11 +219,13 @@
219
220
221
222 +
223 +
224
225
226 <li class="md-tabs__item">
225 - <a href="../cases/" class="md-tabs__link">
226 - Cases
227 + <a href="./" class="md-tabs__link md-tabs__link--active">
228 + Graylog
229 </a>
230 </li>
231
@@ -231,13 +233,23 @@
233
234
235
234 -
236 +
237 +
238 + <li class="md-tabs__item">
239 + <a href="../wazuhmanager/" class="md-tabs__link">
240 + Wazuh-Manager
241 + </a>
242 + </li>
243 +
244 +
245 +
246 +
247
248
249
250 <li class="md-tabs__item">
239 - <a href="./" class="md-tabs__link md-tabs__link--active">
240 - Graylog
251 + <a href="../velociraptor/" class="md-tabs__link">
252 + Velociraptor
253 </a>
254 </li>
255
@@ -248,8 +260,8 @@
260
261
262 <li class="md-tabs__item">
251 - <a href="../wazuhmanager/" class="md-tabs__link">
252 - Wazuh-Manager
263 + <a href="../shuffle/" class="md-tabs__link">
264 + Shuffle
265 </a>
266 </li>
267
@@ -341,8 +353,8 @@
353
354
355 <li class="md-nav__item">
344 - <a href="../alerts/" class="md-nav__link">
345 - Alerts
356 + <a href="../wazuhindexer/" class="md-nav__link">
357 + Wazuh-Indexer
358 </a>
359 </li>
360
@@ -356,23 +368,8 @@
368
369
370 <li class="md-nav__item">
359 - <a href="../artifacts/" class="md-nav__link">
360 - Artifacts
361 - </a>
362 - </li>
363 -
364 -
365 -
366 -
367 -
368 -
369 -
370 -
371 -
372 -
373 - <li class="md-nav__item">
374 - <a href="../cases/" class="md-nav__link">
375 - Cases
371 + <a href="../dfiriris/" class="md-nav__link">
372 + Dfir-Iris
373 </a>
374 </li>
375
@@ -751,6 +748,36 @@
748
749
750
751 +
752 +
753 +
754 +
755 +
756 +
757 +
758 + <li class="md-nav__item">
759 + <a href="../velociraptor/" class="md-nav__link">
760 + Velociraptor
761 + </a>
762 + </li>
763 +
764 +
765 +
766 +
767 +
768 +
769 +
770 +
771 +
772 +
773 + <li class="md-nav__item">
774 + <a href="../shuffle/" class="md-nav__link">
775 + Shuffle
776 + </a>
777 + </li>
778 +
779 +
780 +
781 </ul>
782 </nav>
783 </div>
backend/site/index.html
+47 -20
@@ -198,8 +198,8 @@
198
199
200 <li class="md-tabs__item">
201 - <a href="alerts/" class="md-tabs__link">
202 - Alerts
201 + <a href="wazuhindexer/" class="md-tabs__link">
202 + Wazuh-Indexer
203 </a>
204 </li>
205
@@ -210,8 +210,8 @@
210
211
212 <li class="md-tabs__item">
213 - <a href="artifacts/" class="md-tabs__link">
214 - Artifacts
213 + <a href="dfiriris/" class="md-tabs__link">
214 + Dfir-Iris
215 </a>
216 </li>
217
@@ -222,8 +222,8 @@
222
223
224 <li class="md-tabs__item">
225 - <a href="cases/" class="md-tabs__link">
226 - Cases
225 + <a href="graylog/" class="md-tabs__link">
226 + Graylog
227 </a>
228 </li>
229
@@ -234,8 +234,8 @@
234
235
236 <li class="md-tabs__item">
237 - <a href="graylog/" class="md-tabs__link">
238 - Graylog
237 + <a href="wazuhmanager/" class="md-tabs__link">
238 + Wazuh-Manager
239 </a>
240 </li>
241
@@ -246,8 +246,20 @@
246
247
248 <li class="md-tabs__item">
249 - <a href="wazuhmanager/" class="md-tabs__link">
250 - Wazuh-Manager
249 + <a href="velociraptor/" class="md-tabs__link">
250 + Velociraptor
251 + </a>
252 + </li>
253 +
254 +
255 +
256 +
257 +
258 +
259 +
260 + <li class="md-tabs__item">
261 + <a href="shuffle/" class="md-tabs__link">
262 + Shuffle
263 </a>
264 </li>
265
@@ -451,8 +463,8 @@
463
464
465 <li class="md-nav__item">
454 - <a href="alerts/" class="md-nav__link">
455 - Alerts
466 + <a href="wazuhindexer/" class="md-nav__link">
467 + Wazuh-Indexer
468 </a>
469 </li>
470
@@ -466,8 +478,8 @@
478
479
480 <li class="md-nav__item">
469 - <a href="artifacts/" class="md-nav__link">
470 - Artifacts
481 + <a href="dfiriris/" class="md-nav__link">
482 + Dfir-Iris
483 </a>
484 </li>
485
@@ -481,8 +493,8 @@
493
494
495 <li class="md-nav__item">
484 - <a href="cases/" class="md-nav__link">
485 - Cases
496 + <a href="graylog/" class="md-nav__link">
497 + Graylog
498 </a>
499 </li>
500
@@ -496,8 +508,8 @@
508
509
510 <li class="md-nav__item">
499 - <a href="graylog/" class="md-nav__link">
500 - Graylog
511 + <a href="wazuhmanager/" class="md-nav__link">
512 + Wazuh-Manager
513 </a>
514 </li>
515
@@ -511,8 +523,23 @@
523
524
525 <li class="md-nav__item">
514 - <a href="wazuhmanager/" class="md-nav__link">
515 - Wazuh-Manager
526 + <a href="velociraptor/" class="md-nav__link">
527 + Velociraptor
528 + </a>
529 + </li>
530 +
531 +
532 +
533 +
534 +
535 +
536 +
537 +
538 +
539 +
540 + <li class="md-nav__item">
541 + <a href="shuffle/" class="md-nav__link">
542 + Shuffle
543 </a>
544 </li>
545
backend/site/mkdocs.yml deleted
-61
@@ -1,61 +0,0 @@
1 -site_name: SOCFortress CoPilot
2 -theme:
3 - name: material
4 - features:
5 - - navigation.tabs
6 - - navigation.sections
7 - - toc.integrate
8 - - navigation.top
9 - - search.suggest
10 - - search.highlight
11 - - content.tabs.link
12 - - content.code.annotation
13 - - content.code.copy
14 -
15 - language: en
16 - palette:
17 - - scheme: default
18 - toggle:
19 - icon: material/toggle-switch-off-outline
20 - name: Switch to dark mode
21 - primary: teal
22 - accent: purple
23 - - scheme: slate
24 - toggle:
25 - icon: material/toggle-switch
26 - name: Switch to light mode
27 - primary: teal
28 - accent: lime
29 -
30 -plugins:
31 - - mkdocstrings:
32 - - autorefs
33 -
34 -nav:
35 - - Home: index.md
36 - - Connectors: connectors.md
37 - - Agents: agents.md
38 - - Alerts: alerts.md
39 - - Artifacts: artifacts.md
40 - - Cases: cases.md
41 - - Graylog: graylog.md
42 -
43 -markdown_extensions:
44 - - pymdownx.highlight:
45 - anchor_linenums: true
46 - - pymdownx.inlinehilite
47 - - pymdownx.snippets
48 - - admonition
49 - - pymdownx.arithmatex:
50 - generic: true
51 - - footnotes
52 - - pymdownx.details
53 - - pymdownx.superfences
54 - - pymdownx.mark
55 - - attr_list
56 - - pymdownx.emoji:
57 - emoji_index: !!python/name:materialx.emoji.twemoji
58 - emoji_generator: !!python/name:materialx.emoji.to_svg
59 -
60 -copyright: |
61 - &copy; 2023 <a href="https://github.com/socfortress/CoPilot" target="_blank" rel="noopener">SOCFortress CoPilot</a>
backend/site/objects.inv
Binary files a/backend/site/objects.inv and b/backend/site/objects.inv differ
backend/site/shuffle/index.html new
+2047
@@ -0,0 +1,2047 @@
1 +
2 +<!doctype html>
3 +<html lang="en" class="no-js">
4 + <head>
5 +
6 + <meta charset="utf-8">
7 + <meta name="viewport" content="width=device-width,initial-scale=1">
8 +
9 +
10 +
11 +
12 + <link rel="prev" href="../velociraptor/">
13 +
14 +
15 + <link rel="icon" href="../assets/images/favicon.png">
16 + <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
17 +
18 +
19 +
20 + <title>Shuffle - SOCFortress CoPilot</title>
21 +
22 +
23 +
24 + <link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
25 +
26 +
27 + <link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
28 +
29 +
30 +
31 +
32 +
33 +
34 +
35 +
36 +
37 + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
38 + <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
39 + <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
40 +
41 +
42 +
43 + <link rel="stylesheet" href="../assets/_mkdocstrings.css">
44 +
45 + <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
46 +
47 +
48 +
49 +
50 +
51 +
52 + </head>
53 +
54 +
55 +
56 +
57 +
58 +
59 +
60 +
61 +
62 + <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple">
63 +
64 +
65 +
66 + <script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
67 +
68 + <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
69 + <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
70 + <label class="md-overlay" for="__drawer"></label>
71 + <div data-md-component="skip">
72 +
73 +
74 + <a href="#shuffle-overview" class="md-skip">
75 + Skip to content
76 + </a>
77 +
78 + </div>
79 + <div data-md-component="announce">
80 +
81 + </div>
82 +
83 +
84 +
85 +
86 +<header class="md-header" data-md-component="header">
87 + <nav class="md-header__inner md-grid" aria-label="Header">
88 + <a href=".." title="SOCFortress CoPilot" class="md-header__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
89 +
90 +
91 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
92 +
93 + </a>
94 + <label class="md-header__button md-icon" for="__drawer">
95 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
96 + </label>
97 + <div class="md-header__title" data-md-component="header-title">
98 + <div class="md-header__ellipsis">
99 + <div class="md-header__topic">
100 + <span class="md-ellipsis">
101 + SOCFortress CoPilot
102 + </span>
103 + </div>
104 + <div class="md-header__topic" data-md-component="header-topic">
105 + <span class="md-ellipsis">
106 +
107 + Shuffle
108 +
109 + </span>
110 + </div>
111 + </div>
112 + </div>
113 +
114 +
115 + <form class="md-header__option" data-md-component="palette">
116 +
117 +
118 +
119 +
120 + <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
121 +
122 + <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
123 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
124 + </label>
125 +
126 +
127 +
128 +
129 +
130 + <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="teal" data-md-color-accent="lime" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
131 +
132 + <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
133 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
134 + </label>
135 +
136 +
137 + </form>
138 +
139 +
140 +
141 +
142 +
143 + </nav>
144 +
145 +</header>
146 +
147 + <div class="md-container" data-md-component="container">
148 +
149 +
150 +
151 +
152 +
153 +<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
154 + <div class="md-grid">
155 + <ul class="md-tabs__list">
156 +
157 +
158 +
159 +
160 +
161 +
162 + <li class="md-tabs__item">
163 + <a href=".." class="md-tabs__link">
164 + Home
165 + </a>
166 + </li>
167 +
168 +
169 +
170 +
171 +
172 +
173 +
174 + <li class="md-tabs__item">
175 + <a href="../connectors/" class="md-tabs__link">
176 + Connectors
177 + </a>
178 + </li>
179 +
180 +
181 +
182 +
183 +
184 +
185 +
186 + <li class="md-tabs__item">
187 + <a href="../agents/" class="md-tabs__link">
188 + Agents
189 + </a>
190 + </li>
191 +
192 +
193 +
194 +
195 +
196 +
197 +
198 + <li class="md-tabs__item">
199 + <a href="../wazuhindexer/" class="md-tabs__link">
200 + Wazuh-Indexer
201 + </a>
202 + </li>
203 +
204 +
205 +
206 +
207 +
208 +
209 +
210 + <li class="md-tabs__item">
211 + <a href="../dfiriris/" class="md-tabs__link">
212 + Dfir-Iris
213 + </a>
214 + </li>
215 +
216 +
217 +
218 +
219 +
220 +
221 +
222 + <li class="md-tabs__item">
223 + <a href="../graylog/" class="md-tabs__link">
224 + Graylog
225 + </a>
226 + </li>
227 +
228 +
229 +
230 +
231 +
232 +
233 +
234 + <li class="md-tabs__item">
235 + <a href="../wazuhmanager/" class="md-tabs__link">
236 + Wazuh-Manager
237 + </a>
238 + </li>
239 +
240 +
241 +
242 +
243 +
244 +
245 +
246 + <li class="md-tabs__item">
247 + <a href="../velociraptor/" class="md-tabs__link">
248 + Velociraptor
249 + </a>
250 + </li>
251 +
252 +
253 +
254 +
255 +
256 +
257 +
258 +
259 +
260 + <li class="md-tabs__item">
261 + <a href="./" class="md-tabs__link md-tabs__link--active">
262 + Shuffle
263 + </a>
264 + </li>
265 +
266 +
267 + </ul>
268 + </div>
269 +</nav>
270 +
271 +
272 +
273 + <main class="md-main" data-md-component="main">
274 + <div class="md-main__inner md-grid">
275 +
276 +
277 +
278 + <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
279 + <div class="md-sidebar__scrollwrap">
280 + <div class="md-sidebar__inner">
281 +
282 +
283 +
284 +
285 +
286 +
287 +
288 +<nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0">
289 + <label class="md-nav__title" for="__drawer">
290 + <a href=".." title="SOCFortress CoPilot" class="md-nav__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
291 +
292 +
293 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
294 +
295 + </a>
296 + SOCFortress CoPilot
297 + </label>
298 +
299 + <ul class="md-nav__list" data-md-scrollfix>
300 +
301 +
302 +
303 +
304 +
305 +
306 +
307 +
308 + <li class="md-nav__item">
309 + <a href=".." class="md-nav__link">
310 + Home
311 + </a>
312 + </li>
313 +
314 +
315 +
316 +
317 +
318 +
319 +
320 +
321 +
322 +
323 + <li class="md-nav__item">
324 + <a href="../connectors/" class="md-nav__link">
325 + Connectors
326 + </a>
327 + </li>
328 +
329 +
330 +
331 +
332 +
333 +
334 +
335 +
336 +
337 +
338 + <li class="md-nav__item">
339 + <a href="../agents/" class="md-nav__link">
340 + Agents
341 + </a>
342 + </li>
343 +
344 +
345 +
346 +
347 +
348 +
349 +
350 +
351 +
352 +
353 + <li class="md-nav__item">
354 + <a href="../wazuhindexer/" class="md-nav__link">
355 + Wazuh-Indexer
356 + </a>
357 + </li>
358 +
359 +
360 +
361 +
362 +
363 +
364 +
365 +
366 +
367 +
368 + <li class="md-nav__item">
369 + <a href="../dfiriris/" class="md-nav__link">
370 + Dfir-Iris
371 + </a>
372 + </li>
373 +
374 +
375 +
376 +
377 +
378 +
379 +
380 +
381 +
382 +
383 + <li class="md-nav__item">
384 + <a href="../graylog/" class="md-nav__link">
385 + Graylog
386 + </a>
387 + </li>
388 +
389 +
390 +
391 +
392 +
393 +
394 +
395 +
396 +
397 +
398 + <li class="md-nav__item">
399 + <a href="../wazuhmanager/" class="md-nav__link">
400 + Wazuh-Manager
401 + </a>
402 + </li>
403 +
404 +
405 +
406 +
407 +
408 +
409 +
410 +
411 +
412 +
413 + <li class="md-nav__item">
414 + <a href="../velociraptor/" class="md-nav__link">
415 + Velociraptor
416 + </a>
417 + </li>
418 +
419 +
420 +
421 +
422 +
423 +
424 +
425 +
426 +
427 +
428 +
429 +
430 + <li class="md-nav__item md-nav__item--active">
431 +
432 + <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
433 +
434 +
435 +
436 + <label class="md-nav__link md-nav__link--active" for="__toc">
437 + Shuffle
438 + <span class="md-nav__icon md-icon"></span>
439 + </label>
440 +
441 + <a href="./" class="md-nav__link md-nav__link--active">
442 + Shuffle
443 + </a>
444 +
445 +
446 +
447 +<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
448 +
449 +
450 +
451 +
452 + <label class="md-nav__title" for="__toc">
453 + <span class="md-nav__icon md-icon"></span>
454 + Table of contents
455 + </label>
456 + <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
457 +
458 + <li class="md-nav__item">
459 + <a href="#shuffle-overview" class="md-nav__link">
460 + Shuffle Overview
461 + </a>
462 +
463 + <nav class="md-nav" aria-label="Shuffle Overview">
464 + <ul class="md-nav__list">
465 +
466 + <li class="md-nav__item">
467 + <a href="#shuffle-routes" class="md-nav__link">
468 + Shuffle Routes
469 + </a>
470 +
471 +</li>
472 +
473 + </ul>
474 + </nav>
475 +
476 +</li>
477 +
478 + <li class="md-nav__item">
479 + <a href="#app.routes.shuffle" class="md-nav__link">
480 + app.routes.shuffle
481 + </a>
482 +
483 +</li>
484 +
485 + <li class="md-nav__item">
486 + <a href="#app.routes.shuffle.get_workflow_executions" class="md-nav__link">
487 + get_workflow_executions()
488 + </a>
489 +
490 +</li>
491 +
492 + <li class="md-nav__item">
493 + <a href="#app.routes.shuffle.get_workflows" class="md-nav__link">
494 + get_workflows()
495 + </a>
496 +
497 +</li>
498 +
499 + <li class="md-nav__item">
500 + <a href="#app.routes.shuffle.get_workflows_executions" class="md-nav__link">
501 + get_workflows_executions()
502 + </a>
503 +
504 + <nav class="md-nav" aria-label="get_workflows_executions()">
505 + <ul class="md-nav__list">
506 +
507 + <li class="md-nav__item">
508 + <a href="#workflows-services" class="md-nav__link">
509 + Workflows Services
510 + </a>
511 +
512 +</li>
513 +
514 + </ul>
515 + </nav>
516 +
517 +</li>
518 +
519 + <li class="md-nav__item">
520 + <a href="#app.services.Shuffle.workflows" class="md-nav__link">
521 + app.services.Shuffle.workflows
522 + </a>
523 +
524 +</li>
525 +
526 + <li class="md-nav__item">
527 + <a href="#app.services.Shuffle.workflows.WorkflowsService" class="md-nav__link">
528 + WorkflowsService
529 + </a>
530 +
531 + <nav class="md-nav" aria-label="WorkflowsService">
532 + <ul class="md-nav__list">
533 +
534 + <li class="md-nav__item">
535 + <a href="#app.services.Shuffle.workflows.WorkflowsService.collect_workflow_details" class="md-nav__link">
536 + collect_workflow_details()
537 + </a>
538 +
539 +</li>
540 +
541 + <li class="md-nav__item">
542 + <a href="#app.services.Shuffle.workflows.WorkflowsService.collect_workflow_executions_status" class="md-nav__link">
543 + collect_workflow_executions_status()
544 + </a>
545 +
546 +</li>
547 +
548 + <li class="md-nav__item">
549 + <a href="#app.services.Shuffle.workflows.WorkflowsService.collect_workflows" class="md-nav__link">
550 + collect_workflows()
551 + </a>
552 +
553 +</li>
554 +
555 + <li class="md-nav__item">
556 + <a href="#universal-services" class="md-nav__link">
557 + Universal Services
558 + </a>
559 +
560 +</li>
561 +
562 + </ul>
563 + </nav>
564 +
565 +</li>
566 +
567 + <li class="md-nav__item">
568 + <a href="#app.services.Shuffle.universal" class="md-nav__link">
569 + app.services.Shuffle.universal
570 + </a>
571 +
572 +</li>
573 +
574 + <li class="md-nav__item">
575 + <a href="#app.services.Shuffle.universal.UniversalService" class="md-nav__link">
576 + UniversalService
577 + </a>
578 +
579 + <nav class="md-nav" aria-label="UniversalService">
580 + <ul class="md-nav__list">
581 +
582 + <li class="md-nav__item">
583 + <a href="#app.services.Shuffle.universal.UniversalService.collect_shuffle_details" class="md-nav__link">
584 + collect_shuffle_details()
585 + </a>
586 +
587 +</li>
588 +
589 + </ul>
590 + </nav>
591 +
592 +</li>
593 +
594 + </ul>
595 +
596 +</nav>
597 +
598 + </li>
599 +
600 +
601 +
602 + </ul>
603 +</nav>
604 + </div>
605 + </div>
606 + </div>
607 +
608 +
609 +
610 +
611 + <div class="md-content" data-md-component="content">
612 + <article class="md-content__inner md-typeset">
613 +
614 +
615 +
616 +
617 + <h1>Shuffle</h1>
618 +
619 +<h2 id="shuffle-overview">Shuffle Overview</h2>
620 +<h3 id="shuffle-routes"><span style="color:green">Shuffle Routes</span></h3>
621 +
622 +
623 +<div class="doc doc-object doc-module">
624 +
625 +
626 +<a id="app.routes.shuffle"></a>
627 + <div class="doc doc-contents first">
628 +
629 +
630 +
631 + <div class="doc doc-children">
632 +
633 +
634 +
635 +
636 +
637 +
638 +
639 +
640 +
641 +<div class="doc doc-object doc-function">
642 +
643 +
644 +
645 +<h2 id="app.routes.shuffle.get_workflow_executions" class="doc doc-heading">
646 +<code class="highlight language-python"><span class="n">get_workflow_executions</span><span class="p">(</span><span class="n">workflow_id</span><span class="p">)</span></code>
647 +
648 +</h2>
649 +
650 +
651 + <div class="doc doc-contents ">
652 +
653 + <p>Endpoint to list execution status of a specified Shuffle workflow.</p>
654 +<p>This endpoint retrieves the status of the most recent execution for a specific workflow in Shuffle.</p>
655 +
656 + <p><strong>Parameters:</strong></p>
657 + <table>
658 + <thead>
659 + <tr>
660 + <th>Name</th>
661 + <th>Type</th>
662 + <th>Description</th>
663 + <th>Default</th>
664 + </tr>
665 + </thead>
666 + <tbody>
667 + <tr>
668 + <td><code>workflow_id</code></td>
669 + <td>
670 + <code>str</code>
671 + </td>
672 + <td>
673 + <div class="doc-md-description">
674 + <p>The ID of the workflow to retrieve the execution status for.</p>
675 + </div>
676 + </td>
677 + <td>
678 + <em>required</em>
679 + </td>
680 + </tr>
681 + </tbody>
682 + </table>
683 +
684 + <p><strong>Returns:</strong></p>
685 + <table>
686 + <thead>
687 + <tr>
688 +<th>Name</th> <th>Type</th>
689 + <th>Description</th>
690 + </tr>
691 + </thead>
692 + <tbody>
693 + <tr>
694 +<td><code>jsonify</code></td> <td>
695 + <code><span title="flask.jsonify">jsonify</span></code>
696 + </td>
697 + <td>
698 + <div class="doc-md-description">
699 + <p>A JSON response containing the last execution status of the specified workflow.</p>
700 + </div>
701 + </td>
702 + </tr>
703 + </tbody>
704 + </table>
705 +
706 + <details class="quote">
707 + <summary>Source code in <code>app\routes\shuffle.py</code></summary>
708 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-52">52</a></span>
709 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
710 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
711 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
712 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
713 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
714 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
715 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
716 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
717 +<span class="normal"><a href="#__codelineno-0-61">61</a></span>
718 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
719 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
720 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
721 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
722 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
723 +<span class="normal"><a href="#__codelineno-0-67">67</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/shuffle/workflows/executions/&lt;workflow_id&gt;&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
724 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="k">def</span> <span class="nf">get_workflow_executions</span><span class="p">(</span><span class="n">workflow_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">jsonify</span><span class="p">:</span>
725 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
726 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="sd"> Endpoint to list execution status of a specified Shuffle workflow.</span>
727 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a>
728 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> This endpoint retrieves the status of the most recent execution for a specific workflow in Shuffle.</span>
729 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a>
730 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> Args:</span>
731 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> workflow_id (str): The ID of the workflow to retrieve the execution status for.</span>
732 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
733 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Returns:</span>
734 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> jsonify: A JSON response containing the last execution status of the specified workflow.</span>
735 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> &quot;&quot;&quot;</span>
736 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">WorkflowsService</span><span class="p">()</span>
737 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">workflow_details</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_workflow_executions_status</span><span class="p">(</span><span class="n">workflow_id</span><span class="p">)</span>
738 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">return</span> <span class="n">workflow_details</span>
739 +</code></pre></div></td></tr></table></div>
740 + </details>
741 + </div>
742 +
743 +</div>
744 +
745 +<div class="doc doc-object doc-function">
746 +
747 +
748 +
749 +<h2 id="app.routes.shuffle.get_workflows" class="doc doc-heading">
750 +<code class="highlight language-python"><span class="n">get_workflows</span><span class="p">()</span></code>
751 +
752 +</h2>
753 +
754 +
755 + <div class="doc doc-contents ">
756 +
757 + <p>Endpoint to list all available Shuffle workflows.</p>
758 +
759 + <p><strong>Returns:</strong></p>
760 + <table>
761 + <thead>
762 + <tr>
763 +<th>Name</th> <th>Type</th>
764 + <th>Description</th>
765 + </tr>
766 + </thead>
767 + <tbody>
768 + <tr>
769 +<td><code>jsonify</code></td> <td>
770 + <code><span title="flask.jsonify">jsonify</span></code>
771 + </td>
772 + <td>
773 + <div class="doc-md-description">
774 + <p>A JSON response containing the list of all configured Workflows in Shuffle.</p>
775 + </div>
776 + </td>
777 + </tr>
778 + </tbody>
779 + </table>
780 +
781 + <details class="quote">
782 + <summary>Source code in <code>app\routes\shuffle.py</code></summary>
783 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-17">17</a></span>
784 +<span class="normal"><a href="#__codelineno-0-18">18</a></span>
785 +<span class="normal"><a href="#__codelineno-0-19">19</a></span>
786 +<span class="normal"><a href="#__codelineno-0-20">20</a></span>
787 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
788 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
789 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
790 +<span class="normal"><a href="#__codelineno-0-24">24</a></span>
791 +<span class="normal"><a href="#__codelineno-0-25">25</a></span>
792 +<span class="normal"><a href="#__codelineno-0-26">26</a></span>
793 +<span class="normal"><a href="#__codelineno-0-27">27</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/shuffle/workflows&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
794 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="k">def</span> <span class="nf">get_workflows</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">jsonify</span><span class="p">:</span>
795 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
796 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> Endpoint to list all available Shuffle workflows.</span>
797 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a>
798 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> Returns:</span>
799 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> jsonify: A JSON response containing the list of all configured Workflows in Shuffle.</span>
800 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> &quot;&quot;&quot;</span>
801 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">WorkflowsService</span><span class="p">()</span>
802 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="n">workflows</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_workflows</span><span class="p">()</span>
803 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="k">return</span> <span class="n">workflows</span>
804 +</code></pre></div></td></tr></table></div>
805 + </details>
806 + </div>
807 +
808 +</div>
809 +
810 +<div class="doc doc-object doc-function">
811 +
812 +
813 +
814 +<h2 id="app.routes.shuffle.get_workflows_executions" class="doc doc-heading">
815 +<code class="highlight language-python"><span class="n">get_workflows_executions</span><span class="p">()</span></code>
816 +
817 +</h2>
818 +
819 +
820 + <div class="doc doc-contents ">
821 +
822 + <p>Endpoint to list all available Shuffle workflow execution status.</p>
823 +<p>This endpoint retrieves the status of the most recent execution for each workflow in Shuffle.</p>
824 +
825 + <p><strong>Returns:</strong></p>
826 + <table>
827 + <thead>
828 + <tr>
829 +<th>Name</th> <th>Type</th>
830 + <th>Description</th>
831 + </tr>
832 + </thead>
833 + <tbody>
834 + <tr>
835 +<td><code>jsonify</code></td> <td>
836 + <code><span title="flask.jsonify">jsonify</span></code>
837 + </td>
838 + <td>
839 + <div class="doc-md-description">
840 + <p>A JSON response containing the list of all configured workflows and their last execution status.</p>
841 + </div>
842 + </td>
843 + </tr>
844 + </tbody>
845 + </table>
846 +
847 + <details class="quote">
848 + <summary>Source code in <code>app\routes\shuffle.py</code></summary>
849 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-30">30</a></span>
850 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
851 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
852 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
853 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
854 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
855 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
856 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
857 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
858 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
859 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
860 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
861 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
862 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
863 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
864 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
865 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
866 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
867 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
868 +<span class="normal"><a href="#__codelineno-0-49">49</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/shuffle/workflows/executions&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
869 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="k">def</span> <span class="nf">get_workflows_executions</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">jsonify</span><span class="p">:</span>
870 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
871 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Endpoint to list all available Shuffle workflow execution status.</span>
872 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a>
873 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> This endpoint retrieves the status of the most recent execution for each workflow in Shuffle.</span>
874 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
875 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> Returns:</span>
876 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> jsonify: A JSON response containing the list of all configured workflows and their last execution status.</span>
877 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> &quot;&quot;&quot;</span>
878 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">WorkflowsService</span><span class="p">()</span>
879 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="n">workflow_details</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_workflow_details</span><span class="p">()</span>
880 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="k">if</span> <span class="s2">&quot;workflows&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">workflow_details</span><span class="p">:</span>
881 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="n">message</span> <span class="o">=</span> <span class="s2">&quot;No workflows found&quot;</span>
882 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">({</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="n">message</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}),</span> <span class="mi">500</span>
883 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">for</span> <span class="n">workflow</span> <span class="ow">in</span> <span class="n">workflow_details</span><span class="p">[</span><span class="s2">&quot;workflows&quot;</span><span class="p">]:</span>
884 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="n">workflow</span><span class="p">[</span><span class="s2">&quot;status&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_workflow_executions_status</span><span class="p">(</span>
885 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">workflow</span><span class="p">[</span><span class="s2">&quot;workflow_id&quot;</span><span class="p">],</span>
886 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="p">)</span>
887 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">return</span> <span class="n">workflow_details</span>
888 +</code></pre></div></td></tr></table></div>
889 + </details>
890 + </div>
891 +
892 +</div>
893 +
894 +
895 +
896 + </div>
897 +
898 + </div>
899 +
900 +</div><p><br></p>
901 +<h3 id="workflows-services"><span style="color:red">Workflows Services</span></h3>
902 +
903 +
904 +<div class="doc doc-object doc-module">
905 +
906 +
907 +<a id="app.services.Shuffle.workflows"></a>
908 + <div class="doc doc-contents first">
909 +
910 +
911 +
912 + <div class="doc doc-children">
913 +
914 +
915 +
916 +
917 +
918 +
919 +
920 +
921 +<div class="doc doc-object doc-class">
922 +
923 +
924 +
925 +<h2 id="app.services.Shuffle.workflows.WorkflowsService" class="doc doc-heading">
926 + <code>WorkflowsService</code>
927 +
928 +
929 +</h2>
930 +
931 +
932 + <div class="doc doc-contents ">
933 +
934 +
935 + <p>A service class that encapsulates the logic for retrieving workflow information from Shuffle.</p>
936 +
937 + <p><strong>Attributes:</strong></p>
938 + <table>
939 + <thead>
940 + <tr>
941 + <th>Name</th>
942 + <th>Type</th>
943 + <th>Description</th>
944 + </tr>
945 + </thead>
946 + <tbody>
947 + <tr>
948 + <td><code>connector_url</code></td>
949 + <td>
950 + <code>str</code>
951 + </td>
952 + <td>
953 + <div class="doc-md-description">
954 + <p>The URL of the Shuffle instance.</p>
955 + </div>
956 + </td>
957 + </tr>
958 + <tr>
959 + <td><code>connector_api_key</code></td>
960 + <td>
961 + <code>str</code>
962 + </td>
963 + <td>
964 + <div class="doc-md-description">
965 + <p>The API key used for the Shuffle instance.</p>
966 + </div>
967 + </td>
968 + </tr>
969 + <tr>
970 + <td><code>session</code></td>
971 + <td>
972 + <code>requests.<span title="requests.Session">Session</span></code>
973 + </td>
974 + <td>
975 + <div class="doc-md-description">
976 + <p>A requests session for making HTTP requests.</p>
977 + </div>
978 + </td>
979 + </tr>
980 + </tbody>
981 + </table>
982 +
983 +<details class="methods" open>
984 + <summary>Methods</summary>
985 + <p>_collect_shuffle_details: Collects the details of the Shuffle connector.
986 +_are_details_collected: Checks whether the details for the Shuffle connector were successfully collected.
987 +_send_request: Sends a GET request to a provided URL.
988 +collect_workflows: Collects the workflows from Shuffle.
989 +_handle_request_error: Handles any errors that occur during a request.
990 +_collect_workflows: Collects the workflows from Shuffle.
991 +collect_workflow_details: Collects the workflow ID and workflow name from Shuffle.
992 +_collect_workflow_details: Collects the workflow ID and workflow name from Shuffle.
993 +collect_workflow_executions_status: Collects the execution status of a Shuffle Workflow by its ID.
994 +_collect_workflow_executions_status: Collects the execution status of a Shuffle Workflow by its ID.</p>
995 +</details>
996 +
997 + <details class="quote">
998 + <summary>Source code in <code>app\services\Shuffle\workflows.py</code></summary>
999 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
1000 +<span class="normal"><a href="#__codelineno-0-10"> 10</a></span>
1001 +<span class="normal"><a href="#__codelineno-0-11"> 11</a></span>
1002 +<span class="normal"><a href="#__codelineno-0-12"> 12</a></span>
1003 +<span class="normal"><a href="#__codelineno-0-13"> 13</a></span>
1004 +<span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
1005 +<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
1006 +<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
1007 +<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
1008 +<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
1009 +<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
1010 +<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
1011 +<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
1012 +<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
1013 +<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
1014 +<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
1015 +<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
1016 +<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
1017 +<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
1018 +<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
1019 +<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
1020 +<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
1021 +<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
1022 +<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
1023 +<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
1024 +<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
1025 +<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
1026 +<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
1027 +<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
1028 +<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
1029 +<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
1030 +<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
1031 +<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
1032 +<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
1033 +<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
1034 +<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
1035 +<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
1036 +<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
1037 +<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
1038 +<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
1039 +<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
1040 +<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
1041 +<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
1042 +<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
1043 +<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
1044 +<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
1045 +<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
1046 +<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
1047 +<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
1048 +<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
1049 +<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
1050 +<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
1051 +<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
1052 +<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
1053 +<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
1054 +<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
1055 +<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
1056 +<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
1057 +<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
1058 +<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
1059 +<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
1060 +<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
1061 +<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
1062 +<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
1063 +<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
1064 +<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
1065 +<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
1066 +<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
1067 +<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
1068 +<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
1069 +<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
1070 +<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
1071 +<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
1072 +<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
1073 +<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
1074 +<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
1075 +<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
1076 +<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
1077 +<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
1078 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
1079 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
1080 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
1081 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
1082 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
1083 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
1084 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
1085 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1086 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1087 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1088 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1089 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1090 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1091 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
1092 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
1093 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
1094 +<span class="normal"><a href="#__codelineno-0-104">104</a></span>
1095 +<span class="normal"><a href="#__codelineno-0-105">105</a></span>
1096 +<span class="normal"><a href="#__codelineno-0-106">106</a></span>
1097 +<span class="normal"><a href="#__codelineno-0-107">107</a></span>
1098 +<span class="normal"><a href="#__codelineno-0-108">108</a></span>
1099 +<span class="normal"><a href="#__codelineno-0-109">109</a></span>
1100 +<span class="normal"><a href="#__codelineno-0-110">110</a></span>
1101 +<span class="normal"><a href="#__codelineno-0-111">111</a></span>
1102 +<span class="normal"><a href="#__codelineno-0-112">112</a></span>
1103 +<span class="normal"><a href="#__codelineno-0-113">113</a></span>
1104 +<span class="normal"><a href="#__codelineno-0-114">114</a></span>
1105 +<span class="normal"><a href="#__codelineno-0-115">115</a></span>
1106 +<span class="normal"><a href="#__codelineno-0-116">116</a></span>
1107 +<span class="normal"><a href="#__codelineno-0-117">117</a></span>
1108 +<span class="normal"><a href="#__codelineno-0-118">118</a></span>
1109 +<span class="normal"><a href="#__codelineno-0-119">119</a></span>
1110 +<span class="normal"><a href="#__codelineno-0-120">120</a></span>
1111 +<span class="normal"><a href="#__codelineno-0-121">121</a></span>
1112 +<span class="normal"><a href="#__codelineno-0-122">122</a></span>
1113 +<span class="normal"><a href="#__codelineno-0-123">123</a></span>
1114 +<span class="normal"><a href="#__codelineno-0-124">124</a></span>
1115 +<span class="normal"><a href="#__codelineno-0-125">125</a></span>
1116 +<span class="normal"><a href="#__codelineno-0-126">126</a></span>
1117 +<span class="normal"><a href="#__codelineno-0-127">127</a></span>
1118 +<span class="normal"><a href="#__codelineno-0-128">128</a></span>
1119 +<span class="normal"><a href="#__codelineno-0-129">129</a></span>
1120 +<span class="normal"><a href="#__codelineno-0-130">130</a></span>
1121 +<span class="normal"><a href="#__codelineno-0-131">131</a></span>
1122 +<span class="normal"><a href="#__codelineno-0-132">132</a></span>
1123 +<span class="normal"><a href="#__codelineno-0-133">133</a></span>
1124 +<span class="normal"><a href="#__codelineno-0-134">134</a></span>
1125 +<span class="normal"><a href="#__codelineno-0-135">135</a></span>
1126 +<span class="normal"><a href="#__codelineno-0-136">136</a></span>
1127 +<span class="normal"><a href="#__codelineno-0-137">137</a></span>
1128 +<span class="normal"><a href="#__codelineno-0-138">138</a></span>
1129 +<span class="normal"><a href="#__codelineno-0-139">139</a></span>
1130 +<span class="normal"><a href="#__codelineno-0-140">140</a></span>
1131 +<span class="normal"><a href="#__codelineno-0-141">141</a></span>
1132 +<span class="normal"><a href="#__codelineno-0-142">142</a></span>
1133 +<span class="normal"><a href="#__codelineno-0-143">143</a></span>
1134 +<span class="normal"><a href="#__codelineno-0-144">144</a></span>
1135 +<span class="normal"><a href="#__codelineno-0-145">145</a></span>
1136 +<span class="normal"><a href="#__codelineno-0-146">146</a></span>
1137 +<span class="normal"><a href="#__codelineno-0-147">147</a></span>
1138 +<span class="normal"><a href="#__codelineno-0-148">148</a></span>
1139 +<span class="normal"><a href="#__codelineno-0-149">149</a></span>
1140 +<span class="normal"><a href="#__codelineno-0-150">150</a></span>
1141 +<span class="normal"><a href="#__codelineno-0-151">151</a></span>
1142 +<span class="normal"><a href="#__codelineno-0-152">152</a></span>
1143 +<span class="normal"><a href="#__codelineno-0-153">153</a></span>
1144 +<span class="normal"><a href="#__codelineno-0-154">154</a></span>
1145 +<span class="normal"><a href="#__codelineno-0-155">155</a></span>
1146 +<span class="normal"><a href="#__codelineno-0-156">156</a></span>
1147 +<span class="normal"><a href="#__codelineno-0-157">157</a></span>
1148 +<span class="normal"><a href="#__codelineno-0-158">158</a></span>
1149 +<span class="normal"><a href="#__codelineno-0-159">159</a></span>
1150 +<span class="normal"><a href="#__codelineno-0-160">160</a></span>
1151 +<span class="normal"><a href="#__codelineno-0-161">161</a></span>
1152 +<span class="normal"><a href="#__codelineno-0-162">162</a></span>
1153 +<span class="normal"><a href="#__codelineno-0-163">163</a></span>
1154 +<span class="normal"><a href="#__codelineno-0-164">164</a></span>
1155 +<span class="normal"><a href="#__codelineno-0-165">165</a></span>
1156 +<span class="normal"><a href="#__codelineno-0-166">166</a></span>
1157 +<span class="normal"><a href="#__codelineno-0-167">167</a></span>
1158 +<span class="normal"><a href="#__codelineno-0-168">168</a></span>
1159 +<span class="normal"><a href="#__codelineno-0-169">169</a></span>
1160 +<span class="normal"><a href="#__codelineno-0-170">170</a></span>
1161 +<span class="normal"><a href="#__codelineno-0-171">171</a></span>
1162 +<span class="normal"><a href="#__codelineno-0-172">172</a></span>
1163 +<span class="normal"><a href="#__codelineno-0-173">173</a></span>
1164 +<span class="normal"><a href="#__codelineno-0-174">174</a></span>
1165 +<span class="normal"><a href="#__codelineno-0-175">175</a></span>
1166 +<span class="normal"><a href="#__codelineno-0-176">176</a></span>
1167 +<span class="normal"><a href="#__codelineno-0-177">177</a></span>
1168 +<span class="normal"><a href="#__codelineno-0-178">178</a></span>
1169 +<span class="normal"><a href="#__codelineno-0-179">179</a></span>
1170 +<span class="normal"><a href="#__codelineno-0-180">180</a></span>
1171 +<span class="normal"><a href="#__codelineno-0-181">181</a></span>
1172 +<span class="normal"><a href="#__codelineno-0-182">182</a></span>
1173 +<span class="normal"><a href="#__codelineno-0-183">183</a></span>
1174 +<span class="normal"><a href="#__codelineno-0-184">184</a></span>
1175 +<span class="normal"><a href="#__codelineno-0-185">185</a></span>
1176 +<span class="normal"><a href="#__codelineno-0-186">186</a></span>
1177 +<span class="normal"><a href="#__codelineno-0-187">187</a></span>
1178 +<span class="normal"><a href="#__codelineno-0-188">188</a></span>
1179 +<span class="normal"><a href="#__codelineno-0-189">189</a></span>
1180 +<span class="normal"><a href="#__codelineno-0-190">190</a></span>
1181 +<span class="normal"><a href="#__codelineno-0-191">191</a></span>
1182 +<span class="normal"><a href="#__codelineno-0-192">192</a></span>
1183 +<span class="normal"><a href="#__codelineno-0-193">193</a></span>
1184 +<span class="normal"><a href="#__codelineno-0-194">194</a></span>
1185 +<span class="normal"><a href="#__codelineno-0-195">195</a></span>
1186 +<span class="normal"><a href="#__codelineno-0-196">196</a></span>
1187 +<span class="normal"><a href="#__codelineno-0-197">197</a></span>
1188 +<span class="normal"><a href="#__codelineno-0-198">198</a></span>
1189 +<span class="normal"><a href="#__codelineno-0-199">199</a></span>
1190 +<span class="normal"><a href="#__codelineno-0-200">200</a></span>
1191 +<span class="normal"><a href="#__codelineno-0-201">201</a></span>
1192 +<span class="normal"><a href="#__codelineno-0-202">202</a></span>
1193 +<span class="normal"><a href="#__codelineno-0-203">203</a></span>
1194 +<span class="normal"><a href="#__codelineno-0-204">204</a></span>
1195 +<span class="normal"><a href="#__codelineno-0-205">205</a></span>
1196 +<span class="normal"><a href="#__codelineno-0-206">206</a></span>
1197 +<span class="normal"><a href="#__codelineno-0-207">207</a></span>
1198 +<span class="normal"><a href="#__codelineno-0-208">208</a></span>
1199 +<span class="normal"><a href="#__codelineno-0-209">209</a></span>
1200 +<span class="normal"><a href="#__codelineno-0-210">210</a></span>
1201 +<span class="normal"><a href="#__codelineno-0-211">211</a></span>
1202 +<span class="normal"><a href="#__codelineno-0-212">212</a></span>
1203 +<span class="normal"><a href="#__codelineno-0-213">213</a></span>
1204 +<span class="normal"><a href="#__codelineno-0-214">214</a></span>
1205 +<span class="normal"><a href="#__codelineno-0-215">215</a></span>
1206 +<span class="normal"><a href="#__codelineno-0-216">216</a></span>
1207 +<span class="normal"><a href="#__codelineno-0-217">217</a></span>
1208 +<span class="normal"><a href="#__codelineno-0-218">218</a></span>
1209 +<span class="normal"><a href="#__codelineno-0-219">219</a></span>
1210 +<span class="normal"><a href="#__codelineno-0-220">220</a></span>
1211 +<span class="normal"><a href="#__codelineno-0-221">221</a></span>
1212 +<span class="normal"><a href="#__codelineno-0-222">222</a></span>
1213 +<span class="normal"><a href="#__codelineno-0-223">223</a></span>
1214 +<span class="normal"><a href="#__codelineno-0-224">224</a></span>
1215 +<span class="normal"><a href="#__codelineno-0-225">225</a></span>
1216 +<span class="normal"><a href="#__codelineno-0-226">226</a></span>
1217 +<span class="normal"><a href="#__codelineno-0-227">227</a></span>
1218 +<span class="normal"><a href="#__codelineno-0-228">228</a></span>
1219 +<span class="normal"><a href="#__codelineno-0-229">229</a></span>
1220 +<span class="normal"><a href="#__codelineno-0-230">230</a></span>
1221 +<span class="normal"><a href="#__codelineno-0-231">231</a></span>
1222 +<span class="normal"><a href="#__codelineno-0-232">232</a></span>
1223 +<span class="normal"><a href="#__codelineno-0-233">233</a></span>
1224 +<span class="normal"><a href="#__codelineno-0-234">234</a></span>
1225 +<span class="normal"><a href="#__codelineno-0-235">235</a></span>
1226 +<span class="normal"><a href="#__codelineno-0-236">236</a></span>
1227 +<span class="normal"><a href="#__codelineno-0-237">237</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="k">class</span> <span class="nc">WorkflowsService</span><span class="p">:</span>
1228 +<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1229 +<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="sd"> A service class that encapsulates the logic for retrieving workflow information from Shuffle.</span>
1230 +<a id="__codelineno-0-12" name="__codelineno-0-12"></a>
1231 +<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> Attributes:</span>
1232 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> connector_url (str): The URL of the Shuffle instance.</span>
1233 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> connector_api_key (str): The API key used for the Shuffle instance.</span>
1234 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> session (requests.Session): A requests session for making HTTP requests.</span>
1235 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a>
1236 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> Methods:</span>
1237 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> _collect_shuffle_details: Collects the details of the Shuffle connector.</span>
1238 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> _are_details_collected: Checks whether the details for the Shuffle connector were successfully collected.</span>
1239 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> _send_request: Sends a GET request to a provided URL.</span>
1240 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> collect_workflows: Collects the workflows from Shuffle.</span>
1241 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> _handle_request_error: Handles any errors that occur during a request.</span>
1242 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> _collect_workflows: Collects the workflows from Shuffle.</span>
1243 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> collect_workflow_details: Collects the workflow ID and workflow name from Shuffle.</span>
1244 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> _collect_workflow_details: Collects the workflow ID and workflow name from Shuffle.</span>
1245 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> collect_workflow_executions_status: Collects the execution status of a Shuffle Workflow by its ID.</span>
1246 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> _collect_workflow_executions_status: Collects the execution status of a Shuffle Workflow by its ID.</span>
1247 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="sd"> &quot;&quot;&quot;</span>
1248 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a>
1249 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1250 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_shuffle_details</span><span class="p">()</span>
1251 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">Session</span><span class="p">()</span>
1252 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">headers</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
1253 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="p">{</span><span class="s2">&quot;Authorization&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Bearer </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">},</span>
1254 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="p">)</span>
1255 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a>
1256 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="k">def</span> <span class="nf">_collect_shuffle_details</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1257 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1258 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Collects the details of the Shuffle connector.</span>
1259 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a>
1260 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> The details are collected from a universal service which pulls connector details from a database.</span>
1261 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
1262 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Returns:</span>
1263 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> tuple: A tuple containing the connection URL and API key of the Shuffle connector.</span>
1264 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> &quot;&quot;&quot;</span>
1265 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="p">(</span>
1266 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
1267 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span><span class="p">,</span>
1268 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="p">)</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_shuffle_details</span><span class="p">(</span><span class="s2">&quot;Shuffle&quot;</span><span class="p">)</span>
1269 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
1270 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">def</span> <span class="nf">_are_details_collected</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
1271 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1272 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> Checks whether the details for the Shuffle connector were successfully collected.</span>
1273 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
1274 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Returns:</span>
1275 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> bool: True if all details were collected, False otherwise.</span>
1276 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> &quot;&quot;&quot;</span>
1277 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">return</span> <span class="nb">all</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span><span class="p">])</span>
1278 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a>
1279 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">def</span> <span class="nf">_send_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1280 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1281 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> Sends a GET request to a provided URL.</span>
1282 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
1283 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Args:</span>
1284 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> url (str): The URL to send the GET request to.</span>
1285 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a>
1286 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> Returns:</span>
1287 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> requests.Response: The response from the GET request.</span>
1288 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sd"> &quot;&quot;&quot;</span>
1289 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
1290 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">url</span><span class="p">,</span>
1291 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1292 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="p">)</span>
1293 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
1294 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">def</span> <span class="nf">collect_workflows</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1295 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1296 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> Collects the workflows from Shuffle.</span>
1297 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a>
1298 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="sd"> Returns:</span>
1299 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflows.</span>
1300 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="sd"> &quot;&quot;&quot;</span>
1301 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
1302 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="k">return</span> <span class="p">{</span>
1303 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Shuffle details&quot;</span><span class="p">,</span>
1304 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1305 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="p">}</span>
1306 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a>
1307 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="n">workflows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_workflows</span><span class="p">()</span>
1308 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1309 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">return</span> <span class="n">workflows</span>
1310 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a>
1311 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">return</span> <span class="p">{</span>
1312 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected workflows&quot;</span><span class="p">,</span>
1313 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1314 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">&quot;workflows&quot;</span><span class="p">:</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">&quot;workflows&quot;</span><span class="p">],</span>
1315 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="p">}</span>
1316 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a>
1317 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="k">def</span> <span class="nf">_handle_request_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">err</span><span class="p">:</span> <span class="ne">Exception</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1318 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1319 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> Handles any errors that occur during a request.</span>
1320 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a>
1321 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> Args:</span>
1322 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> err (Exception): The exception that occurred.</span>
1323 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a>
1324 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> Returns:</span>
1325 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> dict: A dictionary containing the success status and an error message.</span>
1326 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> &quot;&quot;&quot;</span>
1327 +<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to collect workflows from Shuffle: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
1328 +<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="k">return</span> <span class="p">{</span>
1329 +<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect workflows from Shuffle&quot;</span><span class="p">,</span>
1330 +<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1331 +<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="p">}</span>
1332 +<a id="__codelineno-0-114" name="__codelineno-0-114"></a>
1333 +<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="k">def</span> <span class="nf">_collect_workflows</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1334 +<a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1335 +<a id="__codelineno-0-117" name="__codelineno-0-117"></a><span class="sd"> Collects the workflows from Shuffle.</span>
1336 +<a id="__codelineno-0-118" name="__codelineno-0-118"></a>
1337 +<a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="sd"> Returns:</span>
1338 +<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflows.</span>
1339 +<a id="__codelineno-0-121" name="__codelineno-0-121"></a><span class="sd"> &quot;&quot;&quot;</span>
1340 +<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="k">try</span><span class="p">:</span>
1341 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_send_request</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/api/v1/workflows&quot;</span><span class="p">)</span>
1342 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
1343 +<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="k">except</span> <span class="n">requests</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">HTTPError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
1344 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_request_error</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
1345 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a>
1346 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="k">return</span> <span class="p">{</span>
1347 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected workflows from Shuffle&quot;</span><span class="p">,</span>
1348 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1349 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="s2">&quot;workflows&quot;</span><span class="p">:</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">(),</span>
1350 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="p">}</span>
1351 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a>
1352 +<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="k">def</span> <span class="nf">collect_workflow_details</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1353 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1354 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="sd"> Collects the workflow ID and workflow name from Shuffle.</span>
1355 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a>
1356 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a><span class="sd"> Returns:</span>
1357 +<a id="__codelineno-0-139" name="__codelineno-0-139"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflow IDs.</span>
1358 +<a id="__codelineno-0-140" name="__codelineno-0-140"></a><span class="sd"> &quot;&quot;&quot;</span>
1359 +<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
1360 +<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="k">return</span> <span class="p">{</span>
1361 +<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Shuffle details&quot;</span><span class="p">,</span>
1362 +<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1363 +<a id="__codelineno-0-145" name="__codelineno-0-145"></a> <span class="p">}</span>
1364 +<a id="__codelineno-0-146" name="__codelineno-0-146"></a>
1365 +<a id="__codelineno-0-147" name="__codelineno-0-147"></a> <span class="n">workflows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_workflow_details</span><span class="p">()</span>
1366 +<a id="__codelineno-0-148" name="__codelineno-0-148"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1367 +<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="k">return</span> <span class="n">workflows</span>
1368 +<a id="__codelineno-0-150" name="__codelineno-0-150"></a>
1369 +<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="k">return</span> <span class="p">{</span>
1370 +<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected workflow details&quot;</span><span class="p">,</span>
1371 +<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1372 +<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="s2">&quot;workflows&quot;</span><span class="p">:</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">&quot;workflows&quot;</span><span class="p">],</span>
1373 +<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="p">}</span>
1374 +<a id="__codelineno-0-156" name="__codelineno-0-156"></a>
1375 +<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="k">def</span> <span class="nf">_collect_workflow_details</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1376 +<a id="__codelineno-0-158" name="__codelineno-0-158"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1377 +<a id="__codelineno-0-159" name="__codelineno-0-159"></a><span class="sd"> Collects the workflow ID and workflow name from Shuffle.</span>
1378 +<a id="__codelineno-0-160" name="__codelineno-0-160"></a>
1379 +<a id="__codelineno-0-161" name="__codelineno-0-161"></a><span class="sd"> Returns:</span>
1380 +<a id="__codelineno-0-162" name="__codelineno-0-162"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflow IDs.</span>
1381 +<a id="__codelineno-0-163" name="__codelineno-0-163"></a><span class="sd"> &quot;&quot;&quot;</span>
1382 +<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="k">try</span><span class="p">:</span>
1383 +<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_send_request</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/api/v1/workflows&quot;</span><span class="p">)</span>
1384 +<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
1385 +<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="k">except</span> <span class="n">requests</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">HTTPError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
1386 +<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_request_error</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
1387 +<a id="__codelineno-0-169" name="__codelineno-0-169"></a>
1388 +<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="n">workflows</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
1389 +<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="n">workflow_details</span> <span class="o">=</span> <span class="p">[]</span>
1390 +<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="k">for</span> <span class="n">workflow</span> <span class="ow">in</span> <span class="n">workflows</span><span class="p">:</span>
1391 +<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">workflow_details</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
1392 +<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="p">{</span><span class="s2">&quot;workflow_id&quot;</span><span class="p">:</span> <span class="n">workflow</span><span class="p">[</span><span class="s2">&quot;id&quot;</span><span class="p">],</span> <span class="s2">&quot;workflow_name&quot;</span><span class="p">:</span> <span class="n">workflow</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]},</span>
1393 +<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="p">)</span>
1394 +<a id="__codelineno-0-176" name="__codelineno-0-176"></a>
1395 +<a id="__codelineno-0-177" name="__codelineno-0-177"></a> <span class="k">return</span> <span class="p">{</span>
1396 +<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected workflow details from Shuffle&quot;</span><span class="p">,</span>
1397 +<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1398 +<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="s2">&quot;workflows&quot;</span><span class="p">:</span> <span class="n">workflow_details</span><span class="p">,</span>
1399 +<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="p">}</span>
1400 +<a id="__codelineno-0-182" name="__codelineno-0-182"></a>
1401 +<a id="__codelineno-0-183" name="__codelineno-0-183"></a> <span class="k">def</span> <span class="nf">collect_workflow_executions_status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">workflow_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1402 +<a id="__codelineno-0-184" name="__codelineno-0-184"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1403 +<a id="__codelineno-0-185" name="__codelineno-0-185"></a><span class="sd"> Collects the execution status of a Shuffle Workflow by its ID.</span>
1404 +<a id="__codelineno-0-186" name="__codelineno-0-186"></a>
1405 +<a id="__codelineno-0-187" name="__codelineno-0-187"></a><span class="sd"> Returns:</span>
1406 +<a id="__codelineno-0-188" name="__codelineno-0-188"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflow execution status.</span>
1407 +<a id="__codelineno-0-189" name="__codelineno-0-189"></a><span class="sd"> &quot;&quot;&quot;</span>
1408 +<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
1409 +<a id="__codelineno-0-191" name="__codelineno-0-191"></a> <span class="k">return</span> <span class="p">{</span>
1410 +<a id="__codelineno-0-192" name="__codelineno-0-192"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Shuffle details&quot;</span><span class="p">,</span>
1411 +<a id="__codelineno-0-193" name="__codelineno-0-193"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1412 +<a id="__codelineno-0-194" name="__codelineno-0-194"></a> <span class="p">}</span>
1413 +<a id="__codelineno-0-195" name="__codelineno-0-195"></a>
1414 +<a id="__codelineno-0-196" name="__codelineno-0-196"></a> <span class="n">executions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_workflow_executions_status</span><span class="p">(</span><span class="n">workflow_id</span><span class="p">)</span>
1415 +<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">executions</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1416 +<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="k">return</span> <span class="n">executions</span>
1417 +<a id="__codelineno-0-199" name="__codelineno-0-199"></a>
1418 +<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="k">return</span> <span class="p">{</span>
1419 +<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected workflow executions&quot;</span><span class="p">,</span>
1420 +<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1421 +<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="s2">&quot;executions&quot;</span><span class="p">:</span> <span class="n">executions</span><span class="p">[</span><span class="s2">&quot;executions&quot;</span><span class="p">],</span>
1422 +<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="p">}</span>
1423 +<a id="__codelineno-0-205" name="__codelineno-0-205"></a>
1424 +<a id="__codelineno-0-206" name="__codelineno-0-206"></a> <span class="k">def</span> <span class="nf">_collect_workflow_executions_status</span><span class="p">(</span>
1425 +<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="bp">self</span><span class="p">,</span>
1426 +<a id="__codelineno-0-208" name="__codelineno-0-208"></a> <span class="n">workflow_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1427 +<a id="__codelineno-0-209" name="__codelineno-0-209"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1428 +<a id="__codelineno-0-210" name="__codelineno-0-210"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1429 +<a id="__codelineno-0-211" name="__codelineno-0-211"></a><span class="sd"> Collects the execution status of a Shuffle Workflow by its ID.</span>
1430 +<a id="__codelineno-0-212" name="__codelineno-0-212"></a>
1431 +<a id="__codelineno-0-213" name="__codelineno-0-213"></a><span class="sd"> Returns:</span>
1432 +<a id="__codelineno-0-214" name="__codelineno-0-214"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflow execution status.</span>
1433 +<a id="__codelineno-0-215" name="__codelineno-0-215"></a><span class="sd"> &quot;&quot;&quot;</span>
1434 +<a id="__codelineno-0-216" name="__codelineno-0-216"></a> <span class="k">try</span><span class="p">:</span>
1435 +<a id="__codelineno-0-217" name="__codelineno-0-217"></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_send_request</span><span class="p">(</span>
1436 +<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/api/v1/workflows/</span><span class="si">{</span><span class="n">workflow_id</span><span class="si">}</span><span class="s2">/executions&quot;</span><span class="p">,</span>
1437 +<a id="__codelineno-0-219" name="__codelineno-0-219"></a> <span class="p">)</span>
1438 +<a id="__codelineno-0-220" name="__codelineno-0-220"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
1439 +<a id="__codelineno-0-221" name="__codelineno-0-221"></a> <span class="k">except</span> <span class="n">requests</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">HTTPError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
1440 +<a id="__codelineno-0-222" name="__codelineno-0-222"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_request_error</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
1441 +<a id="__codelineno-0-223" name="__codelineno-0-223"></a>
1442 +<a id="__codelineno-0-224" name="__codelineno-0-224"></a> <span class="n">executions</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
1443 +<a id="__codelineno-0-225" name="__codelineno-0-225"></a> <span class="k">if</span> <span class="n">executions</span><span class="p">:</span>
1444 +<a id="__codelineno-0-226" name="__codelineno-0-226"></a> <span class="n">status</span> <span class="o">=</span> <span class="n">executions</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;status&quot;</span><span class="p">]</span>
1445 +<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="k">if</span> <span class="n">status</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1446 +<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="n">status</span> <span class="o">=</span> <span class="s2">&quot;Never Ran&quot;</span>
1447 +<a id="__codelineno-0-229" name="__codelineno-0-229"></a> <span class="k">else</span><span class="p">:</span>
1448 +<a id="__codelineno-0-230" name="__codelineno-0-230"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No Workflow Executions found from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
1449 +<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="n">status</span> <span class="o">=</span> <span class="kc">None</span>
1450 +<a id="__codelineno-0-232" name="__codelineno-0-232"></a>
1451 +<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="k">return</span> <span class="p">{</span>
1452 +<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected workflow executions from Shuffle&quot;</span><span class="p">,</span>
1453 +<a id="__codelineno-0-235" name="__codelineno-0-235"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1454 +<a id="__codelineno-0-236" name="__codelineno-0-236"></a> <span class="s2">&quot;executions&quot;</span><span class="p">:</span> <span class="n">status</span><span class="p">,</span>
1455 +<a id="__codelineno-0-237" name="__codelineno-0-237"></a> <span class="p">}</span>
1456 +</code></pre></div></td></tr></table></div>
1457 + </details>
1458 +
1459 +
1460 +
1461 + <div class="doc doc-children">
1462 +
1463 +
1464 +
1465 +
1466 +
1467 +
1468 +
1469 +
1470 +
1471 +<div class="doc doc-object doc-function">
1472 +
1473 +
1474 +
1475 +<h3 id="app.services.Shuffle.workflows.WorkflowsService.collect_workflow_details" class="doc doc-heading">
1476 +<code class="highlight language-python"><span class="n">collect_workflow_details</span><span class="p">()</span></code>
1477 +
1478 +</h3>
1479 +
1480 +
1481 + <div class="doc doc-contents ">
1482 +
1483 + <p>Collects the workflow ID and workflow name from Shuffle.</p>
1484 +
1485 + <p><strong>Returns:</strong></p>
1486 + <table>
1487 + <thead>
1488 + <tr>
1489 +<th>Name</th> <th>Type</th>
1490 + <th>Description</th>
1491 + </tr>
1492 + </thead>
1493 + <tbody>
1494 + <tr>
1495 +<td><code>dict</code></td> <td>
1496 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
1497 + </td>
1498 + <td>
1499 + <div class="doc-md-description">
1500 + <p>A dictionary containing the success status, a message, and potentially the workflow IDs.</p>
1501 + </div>
1502 + </td>
1503 + </tr>
1504 + </tbody>
1505 + </table>
1506 +
1507 + <details class="quote">
1508 + <summary>Source code in <code>app\services\Shuffle\workflows.py</code></summary>
1509 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-134">134</a></span>
1510 +<span class="normal"><a href="#__codelineno-0-135">135</a></span>
1511 +<span class="normal"><a href="#__codelineno-0-136">136</a></span>
1512 +<span class="normal"><a href="#__codelineno-0-137">137</a></span>
1513 +<span class="normal"><a href="#__codelineno-0-138">138</a></span>
1514 +<span class="normal"><a href="#__codelineno-0-139">139</a></span>
1515 +<span class="normal"><a href="#__codelineno-0-140">140</a></span>
1516 +<span class="normal"><a href="#__codelineno-0-141">141</a></span>
1517 +<span class="normal"><a href="#__codelineno-0-142">142</a></span>
1518 +<span class="normal"><a href="#__codelineno-0-143">143</a></span>
1519 +<span class="normal"><a href="#__codelineno-0-144">144</a></span>
1520 +<span class="normal"><a href="#__codelineno-0-145">145</a></span>
1521 +<span class="normal"><a href="#__codelineno-0-146">146</a></span>
1522 +<span class="normal"><a href="#__codelineno-0-147">147</a></span>
1523 +<span class="normal"><a href="#__codelineno-0-148">148</a></span>
1524 +<span class="normal"><a href="#__codelineno-0-149">149</a></span>
1525 +<span class="normal"><a href="#__codelineno-0-150">150</a></span>
1526 +<span class="normal"><a href="#__codelineno-0-151">151</a></span>
1527 +<span class="normal"><a href="#__codelineno-0-152">152</a></span>
1528 +<span class="normal"><a href="#__codelineno-0-153">153</a></span>
1529 +<span class="normal"><a href="#__codelineno-0-154">154</a></span>
1530 +<span class="normal"><a href="#__codelineno-0-155">155</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-134" name="__codelineno-0-134"></a><span class="k">def</span> <span class="nf">collect_workflow_details</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1531 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1532 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="sd"> Collects the workflow ID and workflow name from Shuffle.</span>
1533 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a>
1534 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a><span class="sd"> Returns:</span>
1535 +<a id="__codelineno-0-139" name="__codelineno-0-139"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflow IDs.</span>
1536 +<a id="__codelineno-0-140" name="__codelineno-0-140"></a><span class="sd"> &quot;&quot;&quot;</span>
1537 +<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
1538 +<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="k">return</span> <span class="p">{</span>
1539 +<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Shuffle details&quot;</span><span class="p">,</span>
1540 +<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1541 +<a id="__codelineno-0-145" name="__codelineno-0-145"></a> <span class="p">}</span>
1542 +<a id="__codelineno-0-146" name="__codelineno-0-146"></a>
1543 +<a id="__codelineno-0-147" name="__codelineno-0-147"></a> <span class="n">workflows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_workflow_details</span><span class="p">()</span>
1544 +<a id="__codelineno-0-148" name="__codelineno-0-148"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1545 +<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="k">return</span> <span class="n">workflows</span>
1546 +<a id="__codelineno-0-150" name="__codelineno-0-150"></a>
1547 +<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="k">return</span> <span class="p">{</span>
1548 +<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected workflow details&quot;</span><span class="p">,</span>
1549 +<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1550 +<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="s2">&quot;workflows&quot;</span><span class="p">:</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">&quot;workflows&quot;</span><span class="p">],</span>
1551 +<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="p">}</span>
1552 +</code></pre></div></td></tr></table></div>
1553 + </details>
1554 + </div>
1555 +
1556 +</div>
1557 +
1558 +<div class="doc doc-object doc-function">
1559 +
1560 +
1561 +
1562 +<h3 id="app.services.Shuffle.workflows.WorkflowsService.collect_workflow_executions_status" class="doc doc-heading">
1563 +<code class="highlight language-python"><span class="n">collect_workflow_executions_status</span><span class="p">(</span><span class="n">workflow_id</span><span class="p">)</span></code>
1564 +
1565 +</h3>
1566 +
1567 +
1568 + <div class="doc doc-contents ">
1569 +
1570 + <p>Collects the execution status of a Shuffle Workflow by its ID.</p>
1571 +
1572 + <p><strong>Returns:</strong></p>
1573 + <table>
1574 + <thead>
1575 + <tr>
1576 +<th>Name</th> <th>Type</th>
1577 + <th>Description</th>
1578 + </tr>
1579 + </thead>
1580 + <tbody>
1581 + <tr>
1582 +<td><code>dict</code></td> <td>
1583 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
1584 + </td>
1585 + <td>
1586 + <div class="doc-md-description">
1587 + <p>A dictionary containing the success status, a message, and potentially the workflow execution status.</p>
1588 + </div>
1589 + </td>
1590 + </tr>
1591 + </tbody>
1592 + </table>
1593 +
1594 + <details class="quote">
1595 + <summary>Source code in <code>app\services\Shuffle\workflows.py</code></summary>
1596 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-183">183</a></span>
1597 +<span class="normal"><a href="#__codelineno-0-184">184</a></span>
1598 +<span class="normal"><a href="#__codelineno-0-185">185</a></span>
1599 +<span class="normal"><a href="#__codelineno-0-186">186</a></span>
1600 +<span class="normal"><a href="#__codelineno-0-187">187</a></span>
1601 +<span class="normal"><a href="#__codelineno-0-188">188</a></span>
1602 +<span class="normal"><a href="#__codelineno-0-189">189</a></span>
1603 +<span class="normal"><a href="#__codelineno-0-190">190</a></span>
1604 +<span class="normal"><a href="#__codelineno-0-191">191</a></span>
1605 +<span class="normal"><a href="#__codelineno-0-192">192</a></span>
1606 +<span class="normal"><a href="#__codelineno-0-193">193</a></span>
1607 +<span class="normal"><a href="#__codelineno-0-194">194</a></span>
1608 +<span class="normal"><a href="#__codelineno-0-195">195</a></span>
1609 +<span class="normal"><a href="#__codelineno-0-196">196</a></span>
1610 +<span class="normal"><a href="#__codelineno-0-197">197</a></span>
1611 +<span class="normal"><a href="#__codelineno-0-198">198</a></span>
1612 +<span class="normal"><a href="#__codelineno-0-199">199</a></span>
1613 +<span class="normal"><a href="#__codelineno-0-200">200</a></span>
1614 +<span class="normal"><a href="#__codelineno-0-201">201</a></span>
1615 +<span class="normal"><a href="#__codelineno-0-202">202</a></span>
1616 +<span class="normal"><a href="#__codelineno-0-203">203</a></span>
1617 +<span class="normal"><a href="#__codelineno-0-204">204</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-183" name="__codelineno-0-183"></a><span class="k">def</span> <span class="nf">collect_workflow_executions_status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">workflow_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1618 +<a id="__codelineno-0-184" name="__codelineno-0-184"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1619 +<a id="__codelineno-0-185" name="__codelineno-0-185"></a><span class="sd"> Collects the execution status of a Shuffle Workflow by its ID.</span>
1620 +<a id="__codelineno-0-186" name="__codelineno-0-186"></a>
1621 +<a id="__codelineno-0-187" name="__codelineno-0-187"></a><span class="sd"> Returns:</span>
1622 +<a id="__codelineno-0-188" name="__codelineno-0-188"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflow execution status.</span>
1623 +<a id="__codelineno-0-189" name="__codelineno-0-189"></a><span class="sd"> &quot;&quot;&quot;</span>
1624 +<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
1625 +<a id="__codelineno-0-191" name="__codelineno-0-191"></a> <span class="k">return</span> <span class="p">{</span>
1626 +<a id="__codelineno-0-192" name="__codelineno-0-192"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Shuffle details&quot;</span><span class="p">,</span>
1627 +<a id="__codelineno-0-193" name="__codelineno-0-193"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1628 +<a id="__codelineno-0-194" name="__codelineno-0-194"></a> <span class="p">}</span>
1629 +<a id="__codelineno-0-195" name="__codelineno-0-195"></a>
1630 +<a id="__codelineno-0-196" name="__codelineno-0-196"></a> <span class="n">executions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_workflow_executions_status</span><span class="p">(</span><span class="n">workflow_id</span><span class="p">)</span>
1631 +<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">executions</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1632 +<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="k">return</span> <span class="n">executions</span>
1633 +<a id="__codelineno-0-199" name="__codelineno-0-199"></a>
1634 +<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="k">return</span> <span class="p">{</span>
1635 +<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected workflow executions&quot;</span><span class="p">,</span>
1636 +<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1637 +<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="s2">&quot;executions&quot;</span><span class="p">:</span> <span class="n">executions</span><span class="p">[</span><span class="s2">&quot;executions&quot;</span><span class="p">],</span>
1638 +<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="p">}</span>
1639 +</code></pre></div></td></tr></table></div>
1640 + </details>
1641 + </div>
1642 +
1643 +</div>
1644 +
1645 +<div class="doc doc-object doc-function">
1646 +
1647 +
1648 +
1649 +<h3 id="app.services.Shuffle.workflows.WorkflowsService.collect_workflows" class="doc doc-heading">
1650 +<code class="highlight language-python"><span class="n">collect_workflows</span><span class="p">()</span></code>
1651 +
1652 +</h3>
1653 +
1654 +
1655 + <div class="doc doc-contents ">
1656 +
1657 + <p>Collects the workflows from Shuffle.</p>
1658 +
1659 + <p><strong>Returns:</strong></p>
1660 + <table>
1661 + <thead>
1662 + <tr>
1663 +<th>Name</th> <th>Type</th>
1664 + <th>Description</th>
1665 + </tr>
1666 + </thead>
1667 + <tbody>
1668 + <tr>
1669 +<td><code>dict</code></td> <td>
1670 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
1671 + </td>
1672 + <td>
1673 + <div class="doc-md-description">
1674 + <p>A dictionary containing the success status, a message, and potentially the workflows.</p>
1675 + </div>
1676 + </td>
1677 + </tr>
1678 + </tbody>
1679 + </table>
1680 +
1681 + <details class="quote">
1682 + <summary>Source code in <code>app\services\Shuffle\workflows.py</code></summary>
1683 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-76">76</a></span>
1684 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1685 +<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1686 +<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1687 +<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1688 +<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1689 +<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1690 +<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1691 +<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1692 +<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1693 +<span class="normal"><a href="#__codelineno-0-86">86</a></span>
1694 +<span class="normal"><a href="#__codelineno-0-87">87</a></span>
1695 +<span class="normal"><a href="#__codelineno-0-88">88</a></span>
1696 +<span class="normal"><a href="#__codelineno-0-89">89</a></span>
1697 +<span class="normal"><a href="#__codelineno-0-90">90</a></span>
1698 +<span class="normal"><a href="#__codelineno-0-91">91</a></span>
1699 +<span class="normal"><a href="#__codelineno-0-92">92</a></span>
1700 +<span class="normal"><a href="#__codelineno-0-93">93</a></span>
1701 +<span class="normal"><a href="#__codelineno-0-94">94</a></span>
1702 +<span class="normal"><a href="#__codelineno-0-95">95</a></span>
1703 +<span class="normal"><a href="#__codelineno-0-96">96</a></span>
1704 +<span class="normal"><a href="#__codelineno-0-97">97</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="k">def</span> <span class="nf">collect_workflows</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1705 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1706 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> Collects the workflows from Shuffle.</span>
1707 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a>
1708 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="sd"> Returns:</span>
1709 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflows.</span>
1710 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="sd"> &quot;&quot;&quot;</span>
1711 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
1712 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="k">return</span> <span class="p">{</span>
1713 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Shuffle details&quot;</span><span class="p">,</span>
1714 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1715 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="p">}</span>
1716 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a>
1717 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="n">workflows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_workflows</span><span class="p">()</span>
1718 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1719 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">return</span> <span class="n">workflows</span>
1720 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a>
1721 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">return</span> <span class="p">{</span>
1722 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected workflows&quot;</span><span class="p">,</span>
1723 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1724 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">&quot;workflows&quot;</span><span class="p">:</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">&quot;workflows&quot;</span><span class="p">],</span>
1725 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="p">}</span>
1726 +</code></pre></div></td></tr></table></div>
1727 + </details>
1728 + </div>
1729 +
1730 +</div>
1731 +
1732 +
1733 +
1734 + </div>
1735 +
1736 + </div>
1737 +
1738 +</div>
1739 +
1740 +
1741 +
1742 +
1743 + </div>
1744 +
1745 + </div>
1746 +
1747 +</div><p><br></p>
1748 +<h3 id="universal-services"><span style="color:red">Universal Services</span></h3>
1749 +
1750 +
1751 +<div class="doc doc-object doc-module">
1752 +
1753 +
1754 +<a id="app.services.Shuffle.universal"></a>
1755 + <div class="doc doc-contents first">
1756 +
1757 +
1758 +
1759 + <div class="doc doc-children">
1760 +
1761 +
1762 +
1763 +
1764 +
1765 +
1766 +
1767 +
1768 +<div class="doc doc-object doc-class">
1769 +
1770 +
1771 +
1772 +<h2 id="app.services.Shuffle.universal.UniversalService" class="doc doc-heading">
1773 + <code>UniversalService</code>
1774 +
1775 +
1776 +</h2>
1777 +
1778 +
1779 + <div class="doc doc-contents ">
1780 +
1781 +
1782 + <p>A service class that encapsulates the logic for polling messages from Shuffle.</p>
1783 +
1784 +
1785 + <details class="quote">
1786 + <summary>Source code in <code>app\services\Shuffle\universal.py</code></summary>
1787 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-17">17</a></span>
1788 +<span class="normal"><a href="#__codelineno-0-18">18</a></span>
1789 +<span class="normal"><a href="#__codelineno-0-19">19</a></span>
1790 +<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1791 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1792 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1793 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1794 +<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1795 +<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1796 +<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1797 +<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1798 +<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1799 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1800 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1801 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1802 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1803 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1804 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1805 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1806 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1807 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1808 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1809 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1810 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1811 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1812 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1813 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1814 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1815 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1816 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1817 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1818 +<span class="normal"><a href="#__codelineno-0-48">48</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="k">class</span> <span class="nc">UniversalService</span><span class="p">:</span>
1819 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1820 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> A service class that encapsulates the logic for polling messages from Shuffle.</span>
1821 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> &quot;&quot;&quot;</span>
1822 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a>
1823 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
1824 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="bp">self</span><span class="o">.</span><span class="n">collect_shuffle_details</span><span class="p">(</span><span class="s2">&quot;Shuffle&quot;</span><span class="p">)</span>
1825 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="p">(</span>
1826 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
1827 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span><span class="p">,</span>
1828 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_shuffle_details</span><span class="p">(</span><span class="s2">&quot;Shuffle&quot;</span><span class="p">)</span>
1829 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a>
1830 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="k">def</span> <span class="nf">collect_shuffle_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1831 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1832 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> Collects the details of the Shuffle connector.</span>
1833 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
1834 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Args:</span>
1835 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> connector_name (str): The name of the Shuffle connector.</span>
1836 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a>
1837 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> Returns:</span>
1838 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> tuple: A tuple containing the connection URL, and api key.</span>
1839 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> &quot;&quot;&quot;</span>
1840 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">connector_instance</span> <span class="o">=</span> <span class="n">connector_factory</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">connector_name</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">)</span>
1841 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">connection_successful</span> <span class="o">=</span> <span class="n">connector_instance</span><span class="o">.</span><span class="n">verify_connection</span><span class="p">()</span>
1842 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
1843 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">connection_details</span> <span class="o">=</span> <span class="n">Connector</span><span class="o">.</span><span class="n">get_connector_info_from_db</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span>
1844 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">return</span> <span class="p">(</span>
1845 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_url&quot;</span><span class="p">),</span>
1846 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_api_key&quot;</span><span class="p">),</span>
1847 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="p">)</span>
1848 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="k">else</span><span class="p">:</span>
1849 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
1850 +</code></pre></div></td></tr></table></div>
1851 + </details>
1852 +
1853 +
1854 +
1855 + <div class="doc doc-children">
1856 +
1857 +
1858 +
1859 +
1860 +
1861 +
1862 +
1863 +
1864 +
1865 +<div class="doc doc-object doc-function">
1866 +
1867 +
1868 +
1869 +<h3 id="app.services.Shuffle.universal.UniversalService.collect_shuffle_details" class="doc doc-heading">
1870 +<code class="highlight language-python"><span class="n">collect_shuffle_details</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span></code>
1871 +
1872 +</h3>
1873 +
1874 +
1875 + <div class="doc doc-contents ">
1876 +
1877 + <p>Collects the details of the Shuffle connector.</p>
1878 +
1879 + <p><strong>Parameters:</strong></p>
1880 + <table>
1881 + <thead>
1882 + <tr>
1883 + <th>Name</th>
1884 + <th>Type</th>
1885 + <th>Description</th>
1886 + <th>Default</th>
1887 + </tr>
1888 + </thead>
1889 + <tbody>
1890 + <tr>
1891 + <td><code>connector_name</code></td>
1892 + <td>
1893 + <code>str</code>
1894 + </td>
1895 + <td>
1896 + <div class="doc-md-description">
1897 + <p>The name of the Shuffle connector.</p>
1898 + </div>
1899 + </td>
1900 + <td>
1901 + <em>required</em>
1902 + </td>
1903 + </tr>
1904 + </tbody>
1905 + </table>
1906 +
1907 + <p><strong>Returns:</strong></p>
1908 + <table>
1909 + <thead>
1910 + <tr>
1911 +<th>Name</th> <th>Type</th>
1912 + <th>Description</th>
1913 + </tr>
1914 + </thead>
1915 + <tbody>
1916 + <tr>
1917 +<td><code>tuple</code></td> <td>
1918 + </td>
1919 + <td>
1920 + <div class="doc-md-description">
1921 + <p>A tuple containing the connection URL, and api key.</p>
1922 + </div>
1923 + </td>
1924 + </tr>
1925 + </tbody>
1926 + </table>
1927 +
1928 + <details class="quote">
1929 + <summary>Source code in <code>app\services\Shuffle\universal.py</code></summary>
1930 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-29">29</a></span>
1931 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1932 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1933 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1934 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1935 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1936 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1937 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1938 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1939 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1940 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1941 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1942 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1943 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1944 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1945 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1946 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1947 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1948 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1949 +<span class="normal"><a href="#__codelineno-0-48">48</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="k">def</span> <span class="nf">collect_shuffle_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1950 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1951 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> Collects the details of the Shuffle connector.</span>
1952 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
1953 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Args:</span>
1954 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> connector_name (str): The name of the Shuffle connector.</span>
1955 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a>
1956 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> Returns:</span>
1957 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> tuple: A tuple containing the connection URL, and api key.</span>
1958 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> &quot;&quot;&quot;</span>
1959 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">connector_instance</span> <span class="o">=</span> <span class="n">connector_factory</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">connector_name</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">)</span>
1960 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">connection_successful</span> <span class="o">=</span> <span class="n">connector_instance</span><span class="o">.</span><span class="n">verify_connection</span><span class="p">()</span>
1961 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
1962 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">connection_details</span> <span class="o">=</span> <span class="n">Connector</span><span class="o">.</span><span class="n">get_connector_info_from_db</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span>
1963 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">return</span> <span class="p">(</span>
1964 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_url&quot;</span><span class="p">),</span>
1965 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_api_key&quot;</span><span class="p">),</span>
1966 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="p">)</span>
1967 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="k">else</span><span class="p">:</span>
1968 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
1969 +</code></pre></div></td></tr></table></div>
1970 + </details>
1971 + </div>
1972 +
1973 +</div>
1974 +
1975 +
1976 +
1977 + </div>
1978 +
1979 + </div>
1980 +
1981 +</div>
1982 +
1983 +
1984 +
1985 +
1986 + </div>
1987 +
1988 + </div>
1989 +
1990 +</div>
1991 +
1992 +
1993 +
1994 +
1995 +
1996 +
1997 + </article>
1998 + </div>
1999 +
2000 +
2001 + <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
2002 +
2003 + </div>
2004 +
2005 + <button type="button" class="md-top md-icon" data-md-component="top" hidden>
2006 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
2007 + Back to top
2008 + </button>
2009 +
2010 + </main>
2011 +
2012 + <footer class="md-footer">
2013 +
2014 + <div class="md-footer-meta md-typeset">
2015 + <div class="md-footer-meta__inner md-grid">
2016 + <div class="md-copyright">
2017 +
2018 + <div class="md-copyright__highlight">
2019 + &copy; 2023 <a href="https://github.com/socfortress/CoPilot" target="_blank" rel="noopener">SOCFortress CoPilot</a>
2020 +
2021 + </div>
2022 +
2023 +
2024 + Made with
2025 + <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2026 + Material for MkDocs
2027 + </a>
2028 +
2029 +</div>
2030 +
2031 + </div>
2032 + </div>
2033 +</footer>
2034 +
2035 + </div>
2036 + <div class="md-dialog" data-md-component="dialog">
2037 + <div class="md-dialog__inner md-typeset"></div>
2038 + </div>
2039 +
2040 + <script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.sections", "toc.integrate", "navigation.top", "search.suggest", "search.highlight", "content.tabs.link", "content.code.annotation", "content.code.copy"], "search": "../assets/javascripts/workers/search.74e28a9f.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
2041 +
2042 +
2043 + <script src="../assets/javascripts/bundle.220ee61c.min.js"></script>
2044 +
2045 +
2046 + </body>
2047 +</html>
\ No newline at end of file
backend/site/sitemap.xml.gz
Binary files a/backend/site/sitemap.xml.gz and b/backend/site/sitemap.xml.gz differ
backend/site/velociraptor/index.html renamed
+84 -57
@@ -9,17 +9,17 @@
9
10
11
12 - <link rel="prev" href="../alerts/">
12 + <link rel="prev" href="../wazuhmanager/">
13
14
15 - <link rel="next" href="../cases/">
15 + <link rel="next" href="../shuffle/">
16
17 <link rel="icon" href="../assets/images/favicon.png">
18 <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
19
20
21
22 - <title>Artifacts - SOCFortress CoPilot</title>
22 + <title>Velociraptor - SOCFortress CoPilot</title>
23
24
25
@@ -73,7 +73,7 @@
73 <div data-md-component="skip">
74
75
76 - <a href="#artifacts-overview" class="md-skip">
76 + <a href="#velociraptor-overview" class="md-skip">
77 Skip to content
78 </a>
79
@@ -106,7 +106,7 @@
106 <div class="md-header__topic" data-md-component="header-topic">
107 <span class="md-ellipsis">
108
109 - Artifacts
109 + Velociraptor
110
111 </span>
112 </div>
@@ -198,8 +198,8 @@
198
199
200 <li class="md-tabs__item">
201 - <a href="../alerts/" class="md-tabs__link">
202 - Alerts
201 + <a href="../wazuhindexer/" class="md-tabs__link">
202 + Wazuh-Indexer
203 </a>
204 </li>
205
@@ -207,13 +207,23 @@
207
208
209
210 -
210 +
211 +
212 + <li class="md-tabs__item">
213 + <a href="../dfiriris/" class="md-tabs__link">
214 + Dfir-Iris
215 + </a>
216 + </li>
217 +
218 +
219 +
220 +
221
222
223
224 <li class="md-tabs__item">
215 - <a href="./" class="md-tabs__link md-tabs__link--active">
216 - Artifacts
225 + <a href="../graylog/" class="md-tabs__link">
226 + Graylog
227 </a>
228 </li>
229
@@ -224,8 +234,8 @@
234
235
236 <li class="md-tabs__item">
227 - <a href="../cases/" class="md-tabs__link">
228 - Cases
237 + <a href="../wazuhmanager/" class="md-tabs__link">
238 + Wazuh-Manager
239 </a>
240 </li>
241
@@ -233,11 +243,13 @@
243
244
245
246 +
247 +
248
249
250 <li class="md-tabs__item">
239 - <a href="../graylog/" class="md-tabs__link">
240 - Graylog
251 + <a href="./" class="md-tabs__link md-tabs__link--active">
252 + Velociraptor
253 </a>
254 </li>
255
@@ -248,8 +260,8 @@
260
261
262 <li class="md-tabs__item">
251 - <a href="../wazuhmanager/" class="md-tabs__link">
252 - Wazuh-Manager
263 + <a href="../shuffle/" class="md-tabs__link">
264 + Shuffle
265 </a>
266 </li>
267
@@ -341,8 +353,53 @@
353
354
355 <li class="md-nav__item">
344 - <a href="../alerts/" class="md-nav__link">
345 - Alerts
356 + <a href="../wazuhindexer/" class="md-nav__link">
357 + Wazuh-Indexer
358 + </a>
359 + </li>
360 +
361 +
362 +
363 +
364 +
365 +
366 +
367 +
368 +
369 +
370 + <li class="md-nav__item">
371 + <a href="../dfiriris/" class="md-nav__link">
372 + Dfir-Iris
373 + </a>
374 + </li>
375 +
376 +
377 +
378 +
379 +
380 +
381 +
382 +
383 +
384 +
385 + <li class="md-nav__item">
386 + <a href="../graylog/" class="md-nav__link">
387 + Graylog
388 + </a>
389 + </li>
390 +
391 +
392 +
393 +
394 +
395 +
396 +
397 +
398 +
399 +
400 + <li class="md-nav__item">
401 + <a href="../wazuhmanager/" class="md-nav__link">
402 + Wazuh-Manager
403 </a>
404 </li>
405
@@ -364,12 +421,12 @@
421
422
423 <label class="md-nav__link md-nav__link--active" for="__toc">
367 - Artifacts
424 + Velociraptor
425 <span class="md-nav__icon md-icon"></span>
426 </label>
427
428 <a href="./" class="md-nav__link md-nav__link--active">
372 - Artifacts
429 + Velociraptor
430 </a>
431
432
@@ -386,11 +443,11 @@
443 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
444
445 <li class="md-nav__item">
389 - <a href="#artifacts-overview" class="md-nav__link">
390 - Artifacts Overview
446 + <a href="#velociraptor-overview" class="md-nav__link">
447 + Velociraptor Overview
448 </a>
449
393 - <nav class="md-nav" aria-label="Artifacts Overview">
450 + <nav class="md-nav" aria-label="Velociraptor Overview">
451 <ul class="md-nav__list">
452
453 <li class="md-nav__item">
@@ -599,38 +656,8 @@
656
657
658 <li class="md-nav__item">
602 - <a href="../cases/" class="md-nav__link">
603 - Cases
604 - </a>
605 - </li>
606 -
607 -
608 -
609 -
610 -
611 -
612 -
613 -
614 -
615 -
616 - <li class="md-nav__item">
617 - <a href="../graylog/" class="md-nav__link">
618 - Graylog
619 - </a>
620 - </li>
621 -
622 -
623 -
624 -
625 -
626 -
627 -
628 -
629 -
630 -
631 - <li class="md-nav__item">
632 - <a href="../wazuhmanager/" class="md-nav__link">
633 - Wazuh-Manager
659 + <a href="../shuffle/" class="md-nav__link">
660 + Shuffle
661 </a>
662 </li>
663
@@ -651,9 +678,9 @@
678
679
680
654 - <h1>Artifacts</h1>
681 + <h1>Velociraptor</h1>
682
656 -<h2 id="artifacts-overview">Artifacts Overview</h2>
683 +<h2 id="velociraptor-overview">Velociraptor Overview</h2>
684 <h3 id="artifacts-model"><span style="color:blue">Artifacts Model</span></h3>
685
686
backend/site/wazuhindexer/index.html new
+3568
@@ -0,0 +1,3568 @@
1 +
2 +<!doctype html>
3 +<html lang="en" class="no-js">
4 + <head>
5 +
6 + <meta charset="utf-8">
7 + <meta name="viewport" content="width=device-width,initial-scale=1">
8 +
9 +
10 +
11 +
12 + <link rel="prev" href="../agents/">
13 +
14 +
15 + <link rel="next" href="../dfiriris/">
16 +
17 + <link rel="icon" href="../assets/images/favicon.png">
18 + <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
19 +
20 +
21 +
22 + <title>Wazuh-Indexer - SOCFortress CoPilot</title>
23 +
24 +
25 +
26 + <link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
27 +
28 +
29 + <link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
30 +
31 +
32 +
33 +
34 +
35 +
36 +
37 +
38 +
39 + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
40 + <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
41 + <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
42 +
43 +
44 +
45 + <link rel="stylesheet" href="../assets/_mkdocstrings.css">
46 +
47 + <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
48 +
49 +
50 +
51 +
52 +
53 +
54 + </head>
55 +
56 +
57 +
58 +
59 +
60 +
61 +
62 +
63 +
64 + <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple">
65 +
66 +
67 +
68 + <script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
69 +
70 + <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
71 + <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
72 + <label class="md-overlay" for="__drawer"></label>
73 + <div data-md-component="skip">
74 +
75 +
76 + <a href="#wazuh-indexer-overview" class="md-skip">
77 + Skip to content
78 + </a>
79 +
80 + </div>
81 + <div data-md-component="announce">
82 +
83 + </div>
84 +
85 +
86 +
87 +
88 +<header class="md-header" data-md-component="header">
89 + <nav class="md-header__inner md-grid" aria-label="Header">
90 + <a href=".." title="SOCFortress CoPilot" class="md-header__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
91 +
92 +
93 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
94 +
95 + </a>
96 + <label class="md-header__button md-icon" for="__drawer">
97 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
98 + </label>
99 + <div class="md-header__title" data-md-component="header-title">
100 + <div class="md-header__ellipsis">
101 + <div class="md-header__topic">
102 + <span class="md-ellipsis">
103 + SOCFortress CoPilot
104 + </span>
105 + </div>
106 + <div class="md-header__topic" data-md-component="header-topic">
107 + <span class="md-ellipsis">
108 +
109 + Wazuh-Indexer
110 +
111 + </span>
112 + </div>
113 + </div>
114 + </div>
115 +
116 +
117 + <form class="md-header__option" data-md-component="palette">
118 +
119 +
120 +
121 +
122 + <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
123 +
124 + <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
125 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
126 + </label>
127 +
128 +
129 +
130 +
131 +
132 + <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="teal" data-md-color-accent="lime" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
133 +
134 + <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
135 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
136 + </label>
137 +
138 +
139 + </form>
140 +
141 +
142 +
143 +
144 +
145 + </nav>
146 +
147 +</header>
148 +
149 + <div class="md-container" data-md-component="container">
150 +
151 +
152 +
153 +
154 +
155 +<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
156 + <div class="md-grid">
157 + <ul class="md-tabs__list">
158 +
159 +
160 +
161 +
162 +
163 +
164 + <li class="md-tabs__item">
165 + <a href=".." class="md-tabs__link">
166 + Home
167 + </a>
168 + </li>
169 +
170 +
171 +
172 +
173 +
174 +
175 +
176 + <li class="md-tabs__item">
177 + <a href="../connectors/" class="md-tabs__link">
178 + Connectors
179 + </a>
180 + </li>
181 +
182 +
183 +
184 +
185 +
186 +
187 +
188 + <li class="md-tabs__item">
189 + <a href="../agents/" class="md-tabs__link">
190 + Agents
191 + </a>
192 + </li>
193 +
194 +
195 +
196 +
197 +
198 +
199 +
200 +
201 +
202 + <li class="md-tabs__item">
203 + <a href="./" class="md-tabs__link md-tabs__link--active">
204 + Wazuh-Indexer
205 + </a>
206 + </li>
207 +
208 +
209 +
210 +
211 +
212 +
213 +
214 + <li class="md-tabs__item">
215 + <a href="../dfiriris/" class="md-tabs__link">
216 + Dfir-Iris
217 + </a>
218 + </li>
219 +
220 +
221 +
222 +
223 +
224 +
225 +
226 + <li class="md-tabs__item">
227 + <a href="../graylog/" class="md-tabs__link">
228 + Graylog
229 + </a>
230 + </li>
231 +
232 +
233 +
234 +
235 +
236 +
237 +
238 + <li class="md-tabs__item">
239 + <a href="../wazuhmanager/" class="md-tabs__link">
240 + Wazuh-Manager
241 + </a>
242 + </li>
243 +
244 +
245 +
246 +
247 +
248 +
249 +
250 + <li class="md-tabs__item">
251 + <a href="../velociraptor/" class="md-tabs__link">
252 + Velociraptor
253 + </a>
254 + </li>
255 +
256 +
257 +
258 +
259 +
260 +
261 +
262 + <li class="md-tabs__item">
263 + <a href="../shuffle/" class="md-tabs__link">
264 + Shuffle
265 + </a>
266 + </li>
267 +
268 +
269 + </ul>
270 + </div>
271 +</nav>
272 +
273 +
274 +
275 + <main class="md-main" data-md-component="main">
276 + <div class="md-main__inner md-grid">
277 +
278 +
279 +
280 + <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
281 + <div class="md-sidebar__scrollwrap">
282 + <div class="md-sidebar__inner">
283 +
284 +
285 +
286 +
287 +
288 +
289 +
290 +<nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0">
291 + <label class="md-nav__title" for="__drawer">
292 + <a href=".." title="SOCFortress CoPilot" class="md-nav__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
293 +
294 +
295 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
296 +
297 + </a>
298 + SOCFortress CoPilot
299 + </label>
300 +
301 + <ul class="md-nav__list" data-md-scrollfix>
302 +
303 +
304 +
305 +
306 +
307 +
308 +
309 +
310 + <li class="md-nav__item">
311 + <a href=".." class="md-nav__link">
312 + Home
313 + </a>
314 + </li>
315 +
316 +
317 +
318 +
319 +
320 +
321 +
322 +
323 +
324 +
325 + <li class="md-nav__item">
326 + <a href="../connectors/" class="md-nav__link">
327 + Connectors
328 + </a>
329 + </li>
330 +
331 +
332 +
333 +
334 +
335 +
336 +
337 +
338 +
339 +
340 + <li class="md-nav__item">
341 + <a href="../agents/" class="md-nav__link">
342 + Agents
343 + </a>
344 + </li>
345 +
346 +
347 +
348 +
349 +
350 +
351 +
352 +
353 +
354 +
355 +
356 +
357 + <li class="md-nav__item md-nav__item--active">
358 +
359 + <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
360 +
361 +
362 +
363 + <label class="md-nav__link md-nav__link--active" for="__toc">
364 + Wazuh-Indexer
365 + <span class="md-nav__icon md-icon"></span>
366 + </label>
367 +
368 + <a href="./" class="md-nav__link md-nav__link--active">
369 + Wazuh-Indexer
370 + </a>
371 +
372 +
373 +
374 +<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
375 +
376 +
377 +
378 +
379 + <label class="md-nav__title" for="__toc">
380 + <span class="md-nav__icon md-icon"></span>
381 + Table of contents
382 + </label>
383 + <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
384 +
385 + <li class="md-nav__item">
386 + <a href="#wazuh-indexer-overview" class="md-nav__link">
387 + Wazuh-Indexer Overview
388 + </a>
389 +
390 + <nav class="md-nav" aria-label="Wazuh-Indexer Overview">
391 + <ul class="md-nav__list">
392 +
393 + <li class="md-nav__item">
394 + <a href="#alert-routes" class="md-nav__link">
395 + Alert Routes
396 + </a>
397 +
398 +</li>
399 +
400 + </ul>
401 + </nav>
402 +
403 +</li>
404 +
405 + <li class="md-nav__item">
406 + <a href="#app.routes.alerts" class="md-nav__link">
407 + app.routes.alerts
408 + </a>
409 +
410 +</li>
411 +
412 + <li class="md-nav__item">
413 + <a href="#app.routes.alerts.get_alerts" class="md-nav__link">
414 + get_alerts()
415 + </a>
416 +
417 + <nav class="md-nav" aria-label="get_alerts()">
418 + <ul class="md-nav__list">
419 +
420 + <li class="md-nav__item">
421 + <a href="#wazuh-indexer-routes" class="md-nav__link">
422 + Wazuh-Indexer Routes
423 + </a>
424 +
425 +</li>
426 +
427 + </ul>
428 + </nav>
429 +
430 +</li>
431 +
432 + <li class="md-nav__item">
433 + <a href="#app.routes.wazuhindexer" class="md-nav__link">
434 + app.routes.wazuhindexer
435 + </a>
436 +
437 +</li>
438 +
439 + <li class="md-nav__item">
440 + <a href="#app.routes.wazuhindexer.get_cluster_health" class="md-nav__link">
441 + get_cluster_health()
442 + </a>
443 +
444 +</li>
445 +
446 + <li class="md-nav__item">
447 + <a href="#app.routes.wazuhindexer.get_indices_summary" class="md-nav__link">
448 + get_indices_summary()
449 + </a>
450 +
451 +</li>
452 +
453 + <li class="md-nav__item">
454 + <a href="#app.routes.wazuhindexer.get_node_allocation" class="md-nav__link">
455 + get_node_allocation()
456 + </a>
457 +
458 +</li>
459 +
460 + <li class="md-nav__item">
461 + <a href="#app.routes.wazuhindexer.get_shards" class="md-nav__link">
462 + get_shards()
463 + </a>
464 +
465 + <nav class="md-nav" aria-label="get_shards()">
466 + <ul class="md-nav__list">
467 +
468 + <li class="md-nav__item">
469 + <a href="#alert-services" class="md-nav__link">
470 + Alert Services
471 + </a>
472 +
473 +</li>
474 +
475 + </ul>
476 + </nav>
477 +
478 +</li>
479 +
480 + <li class="md-nav__item">
481 + <a href="#app.services.WazuhIndexer.alerts" class="md-nav__link">
482 + app.services.WazuhIndexer.alerts
483 + </a>
484 +
485 +</li>
486 +
487 + <li class="md-nav__item">
488 + <a href="#app.services.WazuhIndexer.alerts.AlertsService" class="md-nav__link">
489 + AlertsService
490 + </a>
491 +
492 + <nav class="md-nav" aria-label="AlertsService">
493 + <ul class="md-nav__list">
494 +
495 + <li class="md-nav__item">
496 + <a href="#app.services.WazuhIndexer.alerts.AlertsService.__init__" class="md-nav__link">
497 + __init__()
498 + </a>
499 +
500 +</li>
501 +
502 + <li class="md-nav__item">
503 + <a href="#app.services.WazuhIndexer.alerts.AlertsService.collect_alerts" class="md-nav__link">
504 + collect_alerts()
505 + </a>
506 +
507 +</li>
508 +
509 + <li class="md-nav__item">
510 + <a href="#app.services.WazuhIndexer.alerts.AlertsService.is_index_skipped" class="md-nav__link">
511 + is_index_skipped()
512 + </a>
513 +
514 +</li>
515 +
516 + <li class="md-nav__item">
517 + <a href="#cluster-services" class="md-nav__link">
518 + Cluster Services
519 + </a>
520 +
521 +</li>
522 +
523 + </ul>
524 + </nav>
525 +
526 +</li>
527 +
528 + <li class="md-nav__item">
529 + <a href="#app.services.WazuhIndexer.cluster" class="md-nav__link">
530 + app.services.WazuhIndexer.cluster
531 + </a>
532 +
533 +</li>
534 +
535 + <li class="md-nav__item">
536 + <a href="#app.services.WazuhIndexer.cluster.ClusterService" class="md-nav__link">
537 + ClusterService
538 + </a>
539 +
540 + <nav class="md-nav" aria-label="ClusterService">
541 + <ul class="md-nav__list">
542 +
543 + <li class="md-nav__item">
544 + <a href="#app.services.WazuhIndexer.cluster.ClusterService.__init__" class="md-nav__link">
545 + __init__()
546 + </a>
547 +
548 +</li>
549 +
550 + <li class="md-nav__item">
551 + <a href="#app.services.WazuhIndexer.cluster.ClusterService.collect_cluster_health" class="md-nav__link">
552 + collect_cluster_health()
553 + </a>
554 +
555 +</li>
556 +
557 + <li class="md-nav__item">
558 + <a href="#app.services.WazuhIndexer.cluster.ClusterService.collect_node_allocation" class="md-nav__link">
559 + collect_node_allocation()
560 + </a>
561 +
562 +</li>
563 +
564 + <li class="md-nav__item">
565 + <a href="#app.services.WazuhIndexer.cluster.ClusterService.collect_shards" class="md-nav__link">
566 + collect_shards()
567 + </a>
568 +
569 +</li>
570 +
571 + <li class="md-nav__item">
572 + <a href="#index-services" class="md-nav__link">
573 + Index Services
574 + </a>
575 +
576 +</li>
577 +
578 + </ul>
579 + </nav>
580 +
581 +</li>
582 +
583 + <li class="md-nav__item">
584 + <a href="#app.services.WazuhIndexer.index" class="md-nav__link">
585 + app.services.WazuhIndexer.index
586 + </a>
587 +
588 +</li>
589 +
590 + <li class="md-nav__item">
591 + <a href="#app.services.WazuhIndexer.index.IndexService" class="md-nav__link">
592 + IndexService
593 + </a>
594 +
595 + <nav class="md-nav" aria-label="IndexService">
596 + <ul class="md-nav__list">
597 +
598 + <li class="md-nav__item">
599 + <a href="#app.services.WazuhIndexer.index.IndexService.__init__" class="md-nav__link">
600 + __init__()
601 + </a>
602 +
603 +</li>
604 +
605 + <li class="md-nav__item">
606 + <a href="#app.services.WazuhIndexer.index.IndexService.collect_indices_summary" class="md-nav__link">
607 + collect_indices_summary()
608 + </a>
609 +
610 +</li>
611 +
612 + <li class="md-nav__item">
613 + <a href="#universal-services" class="md-nav__link">
614 + Universal Services
615 + </a>
616 +
617 +</li>
618 +
619 + </ul>
620 + </nav>
621 +
622 +</li>
623 +
624 + <li class="md-nav__item">
625 + <a href="#app.services.WazuhIndexer.universal" class="md-nav__link">
626 + app.services.WazuhIndexer.universal
627 + </a>
628 +
629 +</li>
630 +
631 + <li class="md-nav__item">
632 + <a href="#app.services.WazuhIndexer.universal.UniversalService" class="md-nav__link">
633 + UniversalService
634 + </a>
635 +
636 + <nav class="md-nav" aria-label="UniversalService">
637 + <ul class="md-nav__list">
638 +
639 + <li class="md-nav__item">
640 + <a href="#app.services.WazuhIndexer.universal.UniversalService.collect_indices" class="md-nav__link">
641 + collect_indices()
642 + </a>
643 +
644 +</li>
645 +
646 + <li class="md-nav__item">
647 + <a href="#app.services.WazuhIndexer.universal.UniversalService.collect_wazuhindexer_details" class="md-nav__link">
648 + collect_wazuhindexer_details()
649 + </a>
650 +
651 +</li>
652 +
653 + </ul>
654 + </nav>
655 +
656 +</li>
657 +
658 + </ul>
659 +
660 +</nav>
661 +
662 + </li>
663 +
664 +
665 +
666 +
667 +
668 +
669 +
670 +
671 +
672 +
673 + <li class="md-nav__item">
674 + <a href="../dfiriris/" class="md-nav__link">
675 + Dfir-Iris
676 + </a>
677 + </li>
678 +
679 +
680 +
681 +
682 +
683 +
684 +
685 +
686 +
687 +
688 + <li class="md-nav__item">
689 + <a href="../graylog/" class="md-nav__link">
690 + Graylog
691 + </a>
692 + </li>
693 +
694 +
695 +
696 +
697 +
698 +
699 +
700 +
701 +
702 +
703 + <li class="md-nav__item">
704 + <a href="../wazuhmanager/" class="md-nav__link">
705 + Wazuh-Manager
706 + </a>
707 + </li>
708 +
709 +
710 +
711 +
712 +
713 +
714 +
715 +
716 +
717 +
718 + <li class="md-nav__item">
719 + <a href="../velociraptor/" class="md-nav__link">
720 + Velociraptor
721 + </a>
722 + </li>
723 +
724 +
725 +
726 +
727 +
728 +
729 +
730 +
731 +
732 +
733 + <li class="md-nav__item">
734 + <a href="../shuffle/" class="md-nav__link">
735 + Shuffle
736 + </a>
737 + </li>
738 +
739 +
740 +
741 + </ul>
742 +</nav>
743 + </div>
744 + </div>
745 + </div>
746 +
747 +
748 +
749 +
750 + <div class="md-content" data-md-component="content">
751 + <article class="md-content__inner md-typeset">
752 +
753 +
754 +
755 +
756 + <h1>Wazuh-Indexer</h1>
757 +
758 +<h2 id="wazuh-indexer-overview">Wazuh-Indexer Overview</h2>
759 +<h3 id="alert-routes"><span style="color:green">Alert Routes</span></h3>
760 +
761 +
762 +<div class="doc doc-object doc-module">
763 +
764 +
765 +<a id="app.routes.alerts"></a>
766 + <div class="doc doc-contents first">
767 +
768 +
769 +
770 + <div class="doc doc-children">
771 +
772 +
773 +
774 +
775 +
776 +
777 +
778 +
779 +
780 +<div class="doc doc-object doc-function">
781 +
782 +
783 +
784 +<h2 id="app.routes.alerts.get_alerts" class="doc doc-heading">
785 +<code class="highlight language-python"><span class="n">get_alerts</span><span class="p">()</span></code>
786 +
787 +</h2>
788 +
789 +
790 + <div class="doc doc-contents ">
791 +
792 + <p>Retrieves all alerts from the AlertsService.</p>
793 +<p>This endpoint retrieves all available alerts from the AlertsService. It does this by creating an instance of
794 +the AlertsService class and calling its <code>collect_alerts</code> method. The result is a list of all alerts currently
795 +available.</p>
796 +
797 + <p><strong>Returns:</strong></p>
798 + <table>
799 + <thead>
800 + <tr>
801 +<th>Name</th> <th>Type</th>
802 + <th>Description</th>
803 + </tr>
804 + </thead>
805 + <tbody>
806 + <tr>
807 +<td><code>jsonify</code></td> <td>
808 + <code><span title="flask.jsonify">jsonify</span></code>
809 + </td>
810 + <td>
811 + <div class="doc-md-description">
812 + <p>A JSON response containing a list of alerts. Each item in the list is a dictionary representing an alert,</p>
813 + </div>
814 + </td>
815 + </tr>
816 + <tr>
817 +<td></td> <td>
818 + <code><span title="flask.jsonify">jsonify</span></code>
819 + </td>
820 + <td>
821 + <div class="doc-md-description">
822 + <p>containing all its associated data.</p>
823 + </div>
824 + </td>
825 + </tr>
826 + </tbody>
827 + </table>
828 +
829 + <details class="quote">
830 + <summary>Source code in <code>app\routes\alerts.py</code></summary>
831 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
832 +<span class="normal"><a href="#__codelineno-0-10">10</a></span>
833 +<span class="normal"><a href="#__codelineno-0-11">11</a></span>
834 +<span class="normal"><a href="#__codelineno-0-12">12</a></span>
835 +<span class="normal"><a href="#__codelineno-0-13">13</a></span>
836 +<span class="normal"><a href="#__codelineno-0-14">14</a></span>
837 +<span class="normal"><a href="#__codelineno-0-15">15</a></span>
838 +<span class="normal"><a href="#__codelineno-0-16">16</a></span>
839 +<span class="normal"><a href="#__codelineno-0-17">17</a></span>
840 +<span class="normal"><a href="#__codelineno-0-18">18</a></span>
841 +<span class="normal"><a href="#__codelineno-0-19">19</a></span>
842 +<span class="normal"><a href="#__codelineno-0-20">20</a></span>
843 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
844 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
845 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
846 +<span class="normal"><a href="#__codelineno-0-24">24</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/alerts&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
847 +<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="k">def</span> <span class="nf">get_alerts</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">jsonify</span><span class="p">:</span>
848 +<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
849 +<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> Retrieves all alerts from the AlertsService.</span>
850 +<a id="__codelineno-0-13" name="__codelineno-0-13"></a>
851 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> This endpoint retrieves all available alerts from the AlertsService. It does this by creating an instance of</span>
852 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> the AlertsService class and calling its `collect_alerts` method. The result is a list of all alerts currently</span>
853 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> available.</span>
854 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a>
855 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> Returns:</span>
856 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> jsonify: A JSON response containing a list of alerts. Each item in the list is a dictionary representing an alert,</span>
857 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> containing all its associated data.</span>
858 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> &quot;&quot;&quot;</span>
859 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AlertsService</span><span class="p">()</span>
860 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_alerts</span><span class="p">()</span>
861 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">alerts</span><span class="p">)</span>
862 +</code></pre></div></td></tr></table></div>
863 + </details>
864 + </div>
865 +
866 +</div>
867 +
868 +
869 +
870 + </div>
871 +
872 + </div>
873 +
874 +</div><p><br></p>
875 +<h3 id="wazuh-indexer-routes"><span style="color:green">Wazuh-Indexer Routes</span></h3>
876 +
877 +
878 +<div class="doc doc-object doc-module">
879 +
880 +
881 +<a id="app.routes.wazuhindexer"></a>
882 + <div class="doc doc-contents first">
883 +
884 +
885 +
886 + <div class="doc doc-children">
887 +
888 +
889 +
890 +
891 +
892 +
893 +
894 +
895 +
896 +<div class="doc doc-object doc-function">
897 +
898 +
899 +
900 +<h2 id="app.routes.wazuhindexer.get_cluster_health" class="doc doc-heading">
901 +<code class="highlight language-python"><span class="n">get_cluster_health</span><span class="p">()</span></code>
902 +
903 +</h2>
904 +
905 +
906 + <div class="doc doc-contents ">
907 +
908 + <p>HTTP GET endpoint to collect Wazuh-Indexer cluster health information.</p>
909 +
910 + <p><strong>Returns:</strong></p>
911 + <table>
912 + <thead>
913 + <tr>
914 +<th>Name</th> <th>Type</th>
915 + <th>Description</th>
916 + </tr>
917 + </thead>
918 + <tbody>
919 + <tr>
920 +<td><code>json</code></td> <td>
921 + </td>
922 + <td>
923 + <div class="doc-md-description">
924 + <p>A JSON response containing health information for the Wazuh-Indexer cluster.</p>
925 + </div>
926 + </td>
927 + </tr>
928 + </tbody>
929 + </table>
930 +
931 + <details class="quote">
932 + <summary>Source code in <code>app\routes\wazuhindexer.py</code></summary>
933 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-49">49</a></span>
934 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
935 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
936 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
937 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
938 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
939 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
940 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
941 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
942 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
943 +<span class="normal"><a href="#__codelineno-0-59">59</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/wazuh_indexer/health&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
944 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="k">def</span> <span class="nf">get_cluster_health</span><span class="p">():</span>
945 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
946 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> HTTP GET endpoint to collect Wazuh-Indexer cluster health information.</span>
947 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a>
948 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> Returns:</span>
949 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="sd"> json: A JSON response containing health information for the Wazuh-Indexer cluster.</span>
950 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> &quot;&quot;&quot;</span>
951 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ClusterService</span><span class="p">()</span>
952 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="n">indices</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_cluster_health</span><span class="p">()</span>
953 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">return</span> <span class="n">indices</span>
954 +</code></pre></div></td></tr></table></div>
955 + </details>
956 + </div>
957 +
958 +</div>
959 +
960 +<div class="doc doc-object doc-function">
961 +
962 +
963 +
964 +<h2 id="app.routes.wazuhindexer.get_indices_summary" class="doc doc-heading">
965 +<code class="highlight language-python"><span class="n">get_indices_summary</span><span class="p">()</span></code>
966 +
967 +</h2>
968 +
969 +
970 + <div class="doc doc-contents ">
971 +
972 + <p>HTTP GET endpoint to list all available indices and collect relevant information for each.</p>
973 +<p>This includes:
974 +- Index name
975 +- Index health status
976 +- Document count in the index
977 +- Size of the index
978 +- Number of replicas for the index</p>
979 +
980 + <p><strong>Returns:</strong></p>
981 + <table>
982 + <thead>
983 + <tr>
984 +<th>Name</th> <th>Type</th>
985 + <th>Description</th>
986 + </tr>
987 + </thead>
988 + <tbody>
989 + <tr>
990 +<td><code>json</code></td> <td>
991 + </td>
992 + <td>
993 + <div class="doc-md-description">
994 + <p>A JSON response containing a list of all available indices along with their respective details.</p>
995 + </div>
996 + </td>
997 + </tr>
998 + </tbody>
999 + </table>
1000 +
1001 + <details class="quote">
1002 + <summary>Source code in <code>app\routes\wazuhindexer.py</code></summary>
1003 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
1004 +<span class="normal"><a href="#__codelineno-0-10">10</a></span>
1005 +<span class="normal"><a href="#__codelineno-0-11">11</a></span>
1006 +<span class="normal"><a href="#__codelineno-0-12">12</a></span>
1007 +<span class="normal"><a href="#__codelineno-0-13">13</a></span>
1008 +<span class="normal"><a href="#__codelineno-0-14">14</a></span>
1009 +<span class="normal"><a href="#__codelineno-0-15">15</a></span>
1010 +<span class="normal"><a href="#__codelineno-0-16">16</a></span>
1011 +<span class="normal"><a href="#__codelineno-0-17">17</a></span>
1012 +<span class="normal"><a href="#__codelineno-0-18">18</a></span>
1013 +<span class="normal"><a href="#__codelineno-0-19">19</a></span>
1014 +<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1015 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1016 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1017 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1018 +<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1019 +<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1020 +<span class="normal"><a href="#__codelineno-0-26">26</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/wazuh_indexer/indices&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1021 +<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="k">def</span> <span class="nf">get_indices_summary</span><span class="p">():</span>
1022 +<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1023 +<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> HTTP GET endpoint to list all available indices and collect relevant information for each.</span>
1024 +<a id="__codelineno-0-13" name="__codelineno-0-13"></a>
1025 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> This includes:</span>
1026 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> - Index name</span>
1027 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> - Index health status</span>
1028 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> - Document count in the index</span>
1029 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> - Size of the index</span>
1030 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> - Number of replicas for the index</span>
1031 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a>
1032 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> Returns:</span>
1033 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> json: A JSON response containing a list of all available indices along with their respective details.</span>
1034 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> &quot;&quot;&quot;</span>
1035 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">IndexService</span><span class="p">()</span>
1036 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">indices</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_indices_summary</span><span class="p">()</span>
1037 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="k">return</span> <span class="n">indices</span>
1038 +</code></pre></div></td></tr></table></div>
1039 + </details>
1040 + </div>
1041 +
1042 +</div>
1043 +
1044 +<div class="doc doc-object doc-function">
1045 +
1046 +
1047 +
1048 +<h2 id="app.routes.wazuhindexer.get_node_allocation" class="doc doc-heading">
1049 +<code class="highlight language-python"><span class="n">get_node_allocation</span><span class="p">()</span></code>
1050 +
1051 +</h2>
1052 +
1053 +
1054 + <div class="doc doc-contents ">
1055 +
1056 + <p>HTTP GET endpoint to list all available indices allocation.</p>
1057 +<p>This includes:
1058 +- Disk space used by the index
1059 +- Available disk space
1060 +- Total disk space
1061 +- Disk usage percentage
1062 +- Node on which the index resides</p>
1063 +
1064 + <p><strong>Returns:</strong></p>
1065 + <table>
1066 + <thead>
1067 + <tr>
1068 +<th>Name</th> <th>Type</th>
1069 + <th>Description</th>
1070 + </tr>
1071 + </thead>
1072 + <tbody>
1073 + <tr>
1074 +<td><code>json</code></td> <td>
1075 + </td>
1076 + <td>
1077 + <div class="doc-md-description">
1078 + <p>A JSON response containing a list of all available indices along with their respective allocation details.</p>
1079 + </div>
1080 + </td>
1081 + </tr>
1082 + </tbody>
1083 + </table>
1084 +
1085 + <details class="quote">
1086 + <summary>Source code in <code>app\routes\wazuhindexer.py</code></summary>
1087 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-29">29</a></span>
1088 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1089 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1090 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1091 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1092 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1093 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1094 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1095 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1096 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1097 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1098 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1099 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1100 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1101 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1102 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1103 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1104 +<span class="normal"><a href="#__codelineno-0-46">46</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/wazuh_indexer/allocation&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1105 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="k">def</span> <span class="nf">get_node_allocation</span><span class="p">():</span>
1106 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1107 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="sd"> HTTP GET endpoint to list all available indices allocation.</span>
1108 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a>
1109 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> This includes:</span>
1110 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> - Disk space used by the index</span>
1111 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> - Available disk space</span>
1112 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> - Total disk space</span>
1113 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> - Disk usage percentage</span>
1114 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> - Node on which the index resides</span>
1115 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a>
1116 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Returns:</span>
1117 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> json: A JSON response containing a list of all available indices along with their respective allocation details.</span>
1118 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> &quot;&quot;&quot;</span>
1119 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ClusterService</span><span class="p">()</span>
1120 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">indices</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_node_allocation</span><span class="p">()</span>
1121 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">return</span> <span class="n">indices</span>
1122 +</code></pre></div></td></tr></table></div>
1123 + </details>
1124 + </div>
1125 +
1126 +</div>
1127 +
1128 +<div class="doc doc-object doc-function">
1129 +
1130 +
1131 +
1132 +<h2 id="app.routes.wazuhindexer.get_shards" class="doc doc-heading">
1133 +<code class="highlight language-python"><span class="n">get_shards</span><span class="p">()</span></code>
1134 +
1135 +</h2>
1136 +
1137 +
1138 + <div class="doc doc-contents ">
1139 +
1140 + <p>HTTP GET endpoint to collect information about Wazuh-Indexer shards.</p>
1141 +
1142 + <p><strong>Returns:</strong></p>
1143 + <table>
1144 + <thead>
1145 + <tr>
1146 +<th>Name</th> <th>Type</th>
1147 + <th>Description</th>
1148 + </tr>
1149 + </thead>
1150 + <tbody>
1151 + <tr>
1152 +<td><code>json</code></td> <td>
1153 + </td>
1154 + <td>
1155 + <div class="doc-md-description">
1156 + <p>A JSON response containing information about the shards in the Wazuh-Indexer.</p>
1157 + </div>
1158 + </td>
1159 + </tr>
1160 + </tbody>
1161 + </table>
1162 +
1163 + <details class="quote">
1164 + <summary>Source code in <code>app\routes\wazuhindexer.py</code></summary>
1165 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-62">62</a></span>
1166 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1167 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1168 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1169 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1170 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1171 +<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1172 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1173 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1174 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1175 +<span class="normal"><a href="#__codelineno-0-72">72</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/wazuh_indexer/shards&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1176 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="k">def</span> <span class="nf">get_shards</span><span class="p">():</span>
1177 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1178 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> HTTP GET endpoint to collect information about Wazuh-Indexer shards.</span>
1179 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a>
1180 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> Returns:</span>
1181 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> json: A JSON response containing information about the shards in the Wazuh-Indexer.</span>
1182 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> &quot;&quot;&quot;</span>
1183 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ClusterService</span><span class="p">()</span>
1184 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="n">indices</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_shards</span><span class="p">()</span>
1185 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="k">return</span> <span class="n">indices</span>
1186 +</code></pre></div></td></tr></table></div>
1187 + </details>
1188 + </div>
1189 +
1190 +</div>
1191 +
1192 +
1193 +
1194 + </div>
1195 +
1196 + </div>
1197 +
1198 +</div><p><br></p>
1199 +<h3 id="alert-services"><span style="color:red">Alert Services</span></h3>
1200 +
1201 +
1202 +<div class="doc doc-object doc-module">
1203 +
1204 +
1205 +<a id="app.services.WazuhIndexer.alerts"></a>
1206 + <div class="doc doc-contents first">
1207 +
1208 +
1209 +
1210 + <div class="doc doc-children">
1211 +
1212 +
1213 +
1214 +
1215 +
1216 +
1217 +
1218 +
1219 +<div class="doc doc-object doc-class">
1220 +
1221 +
1222 +
1223 +<h2 id="app.services.WazuhIndexer.alerts.AlertsService" class="doc doc-heading">
1224 + <code>AlertsService</code>
1225 +
1226 +
1227 +</h2>
1228 +
1229 +
1230 + <div class="doc doc-contents ">
1231 +
1232 +
1233 + <p>A service class that encapsulates the logic for pulling alerts from the Wazuh-Indexer.</p>
1234 +
1235 + <p><strong>Attributes:</strong></p>
1236 + <table>
1237 + <thead>
1238 + <tr>
1239 + <th>Name</th>
1240 + <th>Type</th>
1241 + <th>Description</th>
1242 + </tr>
1243 + </thead>
1244 + <tbody>
1245 + <tr>
1246 + <td><code>connector_url</code></td>
1247 + <td>
1248 + <code>str</code>
1249 + </td>
1250 + <td>
1251 + <div class="doc-md-description">
1252 + <p>The url to the Wazuh-Indexer.</p>
1253 + </div>
1254 + </td>
1255 + </tr>
1256 + <tr>
1257 + <td><code>connector_username</code></td>
1258 + <td>
1259 + <code>str</code>
1260 + </td>
1261 + <td>
1262 + <div class="doc-md-description">
1263 + <p>The username for the Wazuh-Indexer.</p>
1264 + </div>
1265 + </td>
1266 + </tr>
1267 + <tr>
1268 + <td><code>connector_password</code></td>
1269 + <td>
1270 + <code>str</code>
1271 + </td>
1272 + <td>
1273 + <div class="doc-md-description">
1274 + <p>The password for the Wazuh-Indexer.</p>
1275 + </div>
1276 + </td>
1277 + </tr>
1278 + <tr>
1279 + <td><code>es</code></td>
1280 + <td>
1281 + <code><span title="elasticsearch7.Elasticsearch">Elasticsearch</span></code>
1282 + </td>
1283 + <td>
1284 + <div class="doc-md-description">
1285 + <p>The Elasticsearch client.</p>
1286 + </div>
1287 + </td>
1288 + </tr>
1289 + </tbody>
1290 + </table>
1291 +
1292 +
1293 + <details class="quote">
1294 + <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1295 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
1296 +<span class="normal"><a href="#__codelineno-0-10"> 10</a></span>
1297 +<span class="normal"><a href="#__codelineno-0-11"> 11</a></span>
1298 +<span class="normal"><a href="#__codelineno-0-12"> 12</a></span>
1299 +<span class="normal"><a href="#__codelineno-0-13"> 13</a></span>
1300 +<span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
1301 +<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
1302 +<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
1303 +<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
1304 +<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
1305 +<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
1306 +<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
1307 +<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
1308 +<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
1309 +<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
1310 +<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
1311 +<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
1312 +<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
1313 +<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
1314 +<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
1315 +<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
1316 +<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
1317 +<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
1318 +<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
1319 +<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
1320 +<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
1321 +<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
1322 +<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
1323 +<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
1324 +<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
1325 +<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
1326 +<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
1327 +<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
1328 +<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
1329 +<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
1330 +<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
1331 +<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
1332 +<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
1333 +<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
1334 +<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
1335 +<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
1336 +<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
1337 +<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
1338 +<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
1339 +<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
1340 +<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
1341 +<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
1342 +<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
1343 +<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
1344 +<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
1345 +<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
1346 +<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
1347 +<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
1348 +<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
1349 +<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
1350 +<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
1351 +<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
1352 +<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
1353 +<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
1354 +<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
1355 +<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
1356 +<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
1357 +<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
1358 +<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
1359 +<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
1360 +<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
1361 +<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
1362 +<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
1363 +<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
1364 +<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
1365 +<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
1366 +<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
1367 +<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
1368 +<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
1369 +<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
1370 +<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
1371 +<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
1372 +<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
1373 +<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
1374 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
1375 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
1376 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
1377 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
1378 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
1379 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
1380 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
1381 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1382 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1383 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1384 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1385 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1386 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1387 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
1388 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
1389 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
1390 +<span class="normal"><a href="#__codelineno-0-104">104</a></span>
1391 +<span class="normal"><a href="#__codelineno-0-105">105</a></span>
1392 +<span class="normal"><a href="#__codelineno-0-106">106</a></span>
1393 +<span class="normal"><a href="#__codelineno-0-107">107</a></span>
1394 +<span class="normal"><a href="#__codelineno-0-108">108</a></span>
1395 +<span class="normal"><a href="#__codelineno-0-109">109</a></span>
1396 +<span class="normal"><a href="#__codelineno-0-110">110</a></span>
1397 +<span class="normal"><a href="#__codelineno-0-111">111</a></span>
1398 +<span class="normal"><a href="#__codelineno-0-112">112</a></span>
1399 +<span class="normal"><a href="#__codelineno-0-113">113</a></span>
1400 +<span class="normal"><a href="#__codelineno-0-114">114</a></span>
1401 +<span class="normal"><a href="#__codelineno-0-115">115</a></span>
1402 +<span class="normal"><a href="#__codelineno-0-116">116</a></span>
1403 +<span class="normal"><a href="#__codelineno-0-117">117</a></span>
1404 +<span class="normal"><a href="#__codelineno-0-118">118</a></span>
1405 +<span class="normal"><a href="#__codelineno-0-119">119</a></span>
1406 +<span class="normal"><a href="#__codelineno-0-120">120</a></span>
1407 +<span class="normal"><a href="#__codelineno-0-121">121</a></span>
1408 +<span class="normal"><a href="#__codelineno-0-122">122</a></span>
1409 +<span class="normal"><a href="#__codelineno-0-123">123</a></span>
1410 +<span class="normal"><a href="#__codelineno-0-124">124</a></span>
1411 +<span class="normal"><a href="#__codelineno-0-125">125</a></span>
1412 +<span class="normal"><a href="#__codelineno-0-126">126</a></span>
1413 +<span class="normal"><a href="#__codelineno-0-127">127</a></span>
1414 +<span class="normal"><a href="#__codelineno-0-128">128</a></span>
1415 +<span class="normal"><a href="#__codelineno-0-129">129</a></span>
1416 +<span class="normal"><a href="#__codelineno-0-130">130</a></span>
1417 +<span class="normal"><a href="#__codelineno-0-131">131</a></span>
1418 +<span class="normal"><a href="#__codelineno-0-132">132</a></span>
1419 +<span class="normal"><a href="#__codelineno-0-133">133</a></span>
1420 +<span class="normal"><a href="#__codelineno-0-134">134</a></span>
1421 +<span class="normal"><a href="#__codelineno-0-135">135</a></span>
1422 +<span class="normal"><a href="#__codelineno-0-136">136</a></span>
1423 +<span class="normal"><a href="#__codelineno-0-137">137</a></span>
1424 +<span class="normal"><a href="#__codelineno-0-138">138</a></span>
1425 +<span class="normal"><a href="#__codelineno-0-139">139</a></span>
1426 +<span class="normal"><a href="#__codelineno-0-140">140</a></span>
1427 +<span class="normal"><a href="#__codelineno-0-141">141</a></span>
1428 +<span class="normal"><a href="#__codelineno-0-142">142</a></span>
1429 +<span class="normal"><a href="#__codelineno-0-143">143</a></span>
1430 +<span class="normal"><a href="#__codelineno-0-144">144</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="k">class</span> <span class="nc">AlertsService</span><span class="p">:</span>
1431 +<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1432 +<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="sd"> A service class that encapsulates the logic for pulling alerts from the Wazuh-Indexer.</span>
1433 +<a id="__codelineno-0-12" name="__codelineno-0-12"></a>
1434 +<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> Attributes:</span>
1435 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> connector_url (str): The url to the Wazuh-Indexer.</span>
1436 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> connector_username (str): The username for the Wazuh-Indexer.</span>
1437 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> connector_password (str): The password for the Wazuh-Indexer.</span>
1438 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> es (Elasticsearch): The Elasticsearch client.</span>
1439 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> &quot;&quot;&quot;</span>
1440 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a>
1441 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="n">SKIP_INDEX_NAMES</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
1442 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="s2">&quot;wazuh-statistics&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1443 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="s2">&quot;wazuh-monitoring&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1444 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="p">}</span>
1445 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
1446 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1447 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1448 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> Initializes the service by collecting Wazuh-Indexer details and creating an Elasticsearch client.</span>
1449 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> &quot;&quot;&quot;</span>
1450 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="p">(</span>
1451 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
1452 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
1453 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
1454 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="p">)</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">&quot;Wazuh-Indexer&quot;</span><span class="p">)</span>
1455 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="n">Elasticsearch</span><span class="p">(</span>
1456 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
1457 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">http_auth</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">),</span>
1458 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1459 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
1460 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
1461 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1462 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="p">)</span>
1463 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a>
1464 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">def</span> <span class="nf">is_index_skipped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
1465 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1466 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Checks whether the given index name should be skipped.</span>
1467 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
1468 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Args:</span>
1469 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> index_name (str): The name of the index.</span>
1470 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a>
1471 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Returns:</span>
1472 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> bool: True if the index should be skipped, False otherwise.</span>
1473 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> &quot;&quot;&quot;</span>
1474 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="k">for</span> <span class="n">skipped</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SKIP_INDEX_NAMES</span><span class="p">:</span>
1475 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">if</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">skipped</span><span class="p">):</span>
1476 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="kc">True</span>
1477 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="kc">False</span>
1478 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
1479 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">def</span> <span class="nf">collect_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1480 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1481 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Collects the alerts from the Wazuh-Indexer where the index name starts with &quot;wazuh_&quot;</span>
1482 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> and is not in the SKIP_INDEX_NAMES list.</span>
1483 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Returns the 10 previous alerts based on the `timestamp_utc` field.</span>
1484 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
1485 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Returns:</span>
1486 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Dict[str, object]: A dictionary containing success status and alerts or an error message.</span>
1487 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> &quot;&quot;&quot;</span>
1488 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span>
1489 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">],</span>
1490 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="p">):</span>
1491 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">return</span> <span class="p">{</span>
1492 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
1493 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1494 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="p">}</span>
1495 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
1496 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">indices_list</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_indices</span><span class="p">()</span>
1497 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1498 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect indices&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
1499 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
1500 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">alerts_summary</span> <span class="o">=</span> <span class="p">[]</span>
1501 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">for</span> <span class="n">index_name</span> <span class="ow">in</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">&quot;indices_list&quot;</span><span class="p">]:</span>
1502 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;wazuh_&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_index_skipped</span><span class="p">(</span><span class="n">index_name</span><span class="p">):</span>
1503 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">continue</span>
1504 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
1505 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_alerts</span><span class="p">(</span><span class="n">index_name</span><span class="p">)</span>
1506 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">if</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">])</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
1507 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="n">alerts_summary</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
1508 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="p">{</span>
1509 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="s2">&quot;index_name&quot;</span><span class="p">:</span> <span class="n">index_name</span><span class="p">,</span>
1510 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">&quot;total_alerts&quot;</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">]),</span>
1511 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">&quot;last_10_alerts&quot;</span><span class="p">:</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">],</span>
1512 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="p">},</span>
1513 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">)</span>
1514 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
1515 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">return</span> <span class="p">{</span>
1516 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected alerts&quot;</span><span class="p">,</span>
1517 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1518 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">&quot;alerts_summary&quot;</span><span class="p">:</span> <span class="n">alerts_summary</span><span class="p">,</span>
1519 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="p">}</span>
1520 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
1521 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="k">def</span> <span class="nf">_collect_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1522 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1523 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> Elasticsearch query to get the 10 most recent alerts where the `rule_level` is 12 or higher or the</span>
1524 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> `syslog_level` field is `ALERT` and return the results in descending order by the `timestamp_utc` field.</span>
1525 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a>
1526 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> Args:</span>
1527 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> index_name (str): The name of the index to query.</span>
1528 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
1529 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> Returns:</span>
1530 +<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> Dict[str, object]: A dictionary containing success status and alerts or an error message.</span>
1531 +<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> &quot;&quot;&quot;</span>
1532 +<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Collecting alerts from </span><span class="si">{</span><span class="n">index_name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
1533 +<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_query</span><span class="p">()</span>
1534 +<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="k">try</span><span class="p">:</span>
1535 +<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="n">index_name</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">query</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
1536 +<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="n">alerts_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">alert</span> <span class="k">for</span> <span class="n">alert</span> <span class="ow">in</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;hits&quot;</span><span class="p">][</span><span class="s2">&quot;hits&quot;</span><span class="p">]]</span>
1537 +<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="k">return</span> <span class="p">{</span>
1538 +<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected alerts&quot;</span><span class="p">,</span>
1539 +<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1540 +<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="s2">&quot;alerts&quot;</span><span class="p">:</span> <span class="n">alerts_list</span><span class="p">,</span>
1541 +<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="p">}</span>
1542 +<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
1543 +<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to collect alerts: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
1544 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect alerts&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
1545 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a>
1546 +<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="nd">@staticmethod</span>
1547 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="k">def</span> <span class="nf">_build_query</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1548 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1549 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="sd"> Builds the Elasticsearch query to get the 10 most recent alerts where the `rule_level` is 12 or higher or</span>
1550 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> the `syslog_level` field is `ALERT`.</span>
1551 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a>
1552 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a><span class="sd"> Returns:</span>
1553 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd"> Dict[str, object]: A dictionary representing the Elasticsearch query.</span>
1554 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="sd"> &quot;&quot;&quot;</span>
1555 +<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="k">return</span> <span class="p">{</span>
1556 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="s2">&quot;query&quot;</span><span class="p">:</span> <span class="p">{</span>
1557 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="s2">&quot;bool&quot;</span><span class="p">:</span> <span class="p">{</span>
1558 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="s2">&quot;should&quot;</span><span class="p">:</span> <span class="p">[</span>
1559 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="p">{</span><span class="s2">&quot;range&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;rule_level&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;gte&quot;</span><span class="p">:</span> <span class="mi">12</span><span class="p">}}},</span>
1560 +<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="p">{</span><span class="s2">&quot;match&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;syslog_level&quot;</span><span class="p">:</span> <span class="s2">&quot;ALERT&quot;</span><span class="p">}},</span>
1561 +<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="p">],</span>
1562 +<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="p">},</span>
1563 +<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="p">},</span>
1564 +<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="s2">&quot;sort&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;timestamp_utc&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="s2">&quot;desc&quot;</span><span class="p">}}],</span>
1565 +<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="p">}</span>
1566 +</code></pre></div></td></tr></table></div>
1567 + </details>
1568 +
1569 +
1570 +
1571 + <div class="doc doc-children">
1572 +
1573 +
1574 +
1575 +
1576 +
1577 +
1578 +
1579 +
1580 +
1581 +<div class="doc doc-object doc-function">
1582 +
1583 +
1584 +
1585 +<h3 id="app.services.WazuhIndexer.alerts.AlertsService.__init__" class="doc doc-heading">
1586 +<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
1587 +
1588 +</h3>
1589 +
1590 +
1591 + <div class="doc doc-contents ">
1592 +
1593 + <p>Initializes the service by collecting Wazuh-Indexer details and creating an Elasticsearch client.</p>
1594 +
1595 + <details class="quote">
1596 + <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1597 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-25">25</a></span>
1598 +<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1599 +<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1600 +<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1601 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1602 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1603 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1604 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1605 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1606 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1607 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1608 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1609 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1610 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1611 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1612 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1613 +<span class="normal"><a href="#__codelineno-0-41">41</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1614 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1615 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> Initializes the service by collecting Wazuh-Indexer details and creating an Elasticsearch client.</span>
1616 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> &quot;&quot;&quot;</span>
1617 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="p">(</span>
1618 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
1619 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
1620 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
1621 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="p">)</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">&quot;Wazuh-Indexer&quot;</span><span class="p">)</span>
1622 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="n">Elasticsearch</span><span class="p">(</span>
1623 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
1624 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">http_auth</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">),</span>
1625 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1626 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
1627 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
1628 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1629 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="p">)</span>
1630 +</code></pre></div></td></tr></table></div>
1631 + </details>
1632 + </div>
1633 +
1634 +</div>
1635 +
1636 +<div class="doc doc-object doc-function">
1637 +
1638 +
1639 +
1640 +<h3 id="app.services.WazuhIndexer.alerts.AlertsService.collect_alerts" class="doc doc-heading">
1641 +<code class="highlight language-python"><span class="n">collect_alerts</span><span class="p">()</span></code>
1642 +
1643 +</h3>
1644 +
1645 +
1646 + <div class="doc doc-contents ">
1647 +
1648 + <p>Collects the alerts from the Wazuh-Indexer where the index name starts with "wazuh_"
1649 +and is not in the SKIP_INDEX_NAMES list.
1650 +Returns the 10 previous alerts based on the <code>timestamp_utc</code> field.</p>
1651 +
1652 + <p><strong>Returns:</strong></p>
1653 + <table>
1654 + <thead>
1655 + <tr>
1656 + <th>Type</th>
1657 + <th>Description</th>
1658 + </tr>
1659 + </thead>
1660 + <tbody>
1661 + <tr>
1662 + <td>
1663 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
1664 + </td>
1665 + <td>
1666 + <div class="doc-md-description">
1667 + <p>Dict[str, object]: A dictionary containing success status and alerts or an error message.</p>
1668 + </div>
1669 + </td>
1670 + </tr>
1671 + </tbody>
1672 + </table>
1673 +
1674 + <details class="quote">
1675 + <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1676 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-58">58</a></span>
1677 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1678 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1679 +<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1680 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1681 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1682 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1683 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1684 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1685 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1686 +<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1687 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1688 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1689 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1690 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1691 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1692 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1693 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1694 +<span class="normal"><a href="#__codelineno-0-76">76</a></span>
1695 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1696 +<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1697 +<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1698 +<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1699 +<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1700 +<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1701 +<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1702 +<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1703 +<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1704 +<span class="normal"><a href="#__codelineno-0-86">86</a></span>
1705 +<span class="normal"><a href="#__codelineno-0-87">87</a></span>
1706 +<span class="normal"><a href="#__codelineno-0-88">88</a></span>
1707 +<span class="normal"><a href="#__codelineno-0-89">89</a></span>
1708 +<span class="normal"><a href="#__codelineno-0-90">90</a></span>
1709 +<span class="normal"><a href="#__codelineno-0-91">91</a></span>
1710 +<span class="normal"><a href="#__codelineno-0-92">92</a></span>
1711 +<span class="normal"><a href="#__codelineno-0-93">93</a></span>
1712 +<span class="normal"><a href="#__codelineno-0-94">94</a></span>
1713 +<span class="normal"><a href="#__codelineno-0-95">95</a></span>
1714 +<span class="normal"><a href="#__codelineno-0-96">96</a></span>
1715 +<span class="normal"><a href="#__codelineno-0-97">97</a></span>
1716 +<span class="normal"><a href="#__codelineno-0-98">98</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="k">def</span> <span class="nf">collect_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1717 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1718 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Collects the alerts from the Wazuh-Indexer where the index name starts with &quot;wazuh_&quot;</span>
1719 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> and is not in the SKIP_INDEX_NAMES list.</span>
1720 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Returns the 10 previous alerts based on the `timestamp_utc` field.</span>
1721 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
1722 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Returns:</span>
1723 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Dict[str, object]: A dictionary containing success status and alerts or an error message.</span>
1724 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> &quot;&quot;&quot;</span>
1725 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span>
1726 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">],</span>
1727 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="p">):</span>
1728 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">return</span> <span class="p">{</span>
1729 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
1730 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1731 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="p">}</span>
1732 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
1733 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">indices_list</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_indices</span><span class="p">()</span>
1734 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1735 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect indices&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
1736 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
1737 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">alerts_summary</span> <span class="o">=</span> <span class="p">[]</span>
1738 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">for</span> <span class="n">index_name</span> <span class="ow">in</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">&quot;indices_list&quot;</span><span class="p">]:</span>
1739 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;wazuh_&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_index_skipped</span><span class="p">(</span><span class="n">index_name</span><span class="p">):</span>
1740 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">continue</span>
1741 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
1742 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_alerts</span><span class="p">(</span><span class="n">index_name</span><span class="p">)</span>
1743 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">if</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">])</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
1744 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="n">alerts_summary</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
1745 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="p">{</span>
1746 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="s2">&quot;index_name&quot;</span><span class="p">:</span> <span class="n">index_name</span><span class="p">,</span>
1747 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">&quot;total_alerts&quot;</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">]),</span>
1748 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">&quot;last_10_alerts&quot;</span><span class="p">:</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">],</span>
1749 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="p">},</span>
1750 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">)</span>
1751 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
1752 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">return</span> <span class="p">{</span>
1753 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected alerts&quot;</span><span class="p">,</span>
1754 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1755 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">&quot;alerts_summary&quot;</span><span class="p">:</span> <span class="n">alerts_summary</span><span class="p">,</span>
1756 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="p">}</span>
1757 +</code></pre></div></td></tr></table></div>
1758 + </details>
1759 + </div>
1760 +
1761 +</div>
1762 +
1763 +<div class="doc doc-object doc-function">
1764 +
1765 +
1766 +
1767 +<h3 id="app.services.WazuhIndexer.alerts.AlertsService.is_index_skipped" class="doc doc-heading">
1768 +<code class="highlight language-python"><span class="n">is_index_skipped</span><span class="p">(</span><span class="n">index_name</span><span class="p">)</span></code>
1769 +
1770 +</h3>
1771 +
1772 +
1773 + <div class="doc doc-contents ">
1774 +
1775 + <p>Checks whether the given index name should be skipped.</p>
1776 +
1777 + <p><strong>Parameters:</strong></p>
1778 + <table>
1779 + <thead>
1780 + <tr>
1781 + <th>Name</th>
1782 + <th>Type</th>
1783 + <th>Description</th>
1784 + <th>Default</th>
1785 + </tr>
1786 + </thead>
1787 + <tbody>
1788 + <tr>
1789 + <td><code>index_name</code></td>
1790 + <td>
1791 + <code>str</code>
1792 + </td>
1793 + <td>
1794 + <div class="doc-md-description">
1795 + <p>The name of the index.</p>
1796 + </div>
1797 + </td>
1798 + <td>
1799 + <em>required</em>
1800 + </td>
1801 + </tr>
1802 + </tbody>
1803 + </table>
1804 +
1805 + <p><strong>Returns:</strong></p>
1806 + <table>
1807 + <thead>
1808 + <tr>
1809 +<th>Name</th> <th>Type</th>
1810 + <th>Description</th>
1811 + </tr>
1812 + </thead>
1813 + <tbody>
1814 + <tr>
1815 +<td><code>bool</code></td> <td>
1816 + <code>bool</code>
1817 + </td>
1818 + <td>
1819 + <div class="doc-md-description">
1820 + <p>True if the index should be skipped, False otherwise.</p>
1821 + </div>
1822 + </td>
1823 + </tr>
1824 + </tbody>
1825 + </table>
1826 +
1827 + <details class="quote">
1828 + <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1829 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-43">43</a></span>
1830 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1831 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1832 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1833 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1834 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1835 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1836 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1837 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1838 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1839 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1840 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1841 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1842 +<span class="normal"><a href="#__codelineno-0-56">56</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="k">def</span> <span class="nf">is_index_skipped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
1843 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1844 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Checks whether the given index name should be skipped.</span>
1845 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
1846 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Args:</span>
1847 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> index_name (str): The name of the index.</span>
1848 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a>
1849 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Returns:</span>
1850 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> bool: True if the index should be skipped, False otherwise.</span>
1851 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> &quot;&quot;&quot;</span>
1852 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="k">for</span> <span class="n">skipped</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SKIP_INDEX_NAMES</span><span class="p">:</span>
1853 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">if</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">skipped</span><span class="p">):</span>
1854 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="kc">True</span>
1855 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="kc">False</span>
1856 +</code></pre></div></td></tr></table></div>
1857 + </details>
1858 + </div>
1859 +
1860 +</div>
1861 +
1862 +
1863 +
1864 + </div>
1865 +
1866 + </div>
1867 +
1868 +</div>
1869 +
1870 +
1871 +
1872 +
1873 + </div>
1874 +
1875 + </div>
1876 +
1877 +</div><h3 id="cluster-services"><span style="color:red">Cluster Services</span></h3>
1878 +
1879 +
1880 +<div class="doc doc-object doc-module">
1881 +
1882 +
1883 +<a id="app.services.WazuhIndexer.cluster"></a>
1884 + <div class="doc doc-contents first">
1885 +
1886 +
1887 +
1888 + <div class="doc doc-children">
1889 +
1890 +
1891 +
1892 +
1893 +
1894 +
1895 +
1896 +
1897 +<div class="doc doc-object doc-class">
1898 +
1899 +
1900 +
1901 +<h2 id="app.services.WazuhIndexer.cluster.ClusterService" class="doc doc-heading">
1902 + <code>ClusterService</code>
1903 +
1904 +
1905 +</h2>
1906 +
1907 +
1908 + <div class="doc doc-contents ">
1909 +
1910 +
1911 + <p>A service class that encapsulates the logic for pulling indices from the Wazuh-Indexer.</p>
1912 +
1913 +
1914 + <details class="quote">
1915 + <summary>Source code in <code>app\services\WazuhIndexer\cluster.py</code></summary>
1916 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-10"> 10</a></span>
1917 +<span class="normal"><a href="#__codelineno-0-11"> 11</a></span>
1918 +<span class="normal"><a href="#__codelineno-0-12"> 12</a></span>
1919 +<span class="normal"><a href="#__codelineno-0-13"> 13</a></span>
1920 +<span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
1921 +<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
1922 +<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
1923 +<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
1924 +<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
1925 +<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
1926 +<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
1927 +<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
1928 +<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
1929 +<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
1930 +<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
1931 +<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
1932 +<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
1933 +<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
1934 +<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
1935 +<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
1936 +<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
1937 +<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
1938 +<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
1939 +<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
1940 +<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
1941 +<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
1942 +<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
1943 +<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
1944 +<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
1945 +<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
1946 +<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
1947 +<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
1948 +<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
1949 +<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
1950 +<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
1951 +<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
1952 +<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
1953 +<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
1954 +<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
1955 +<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
1956 +<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
1957 +<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
1958 +<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
1959 +<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
1960 +<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
1961 +<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
1962 +<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
1963 +<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
1964 +<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
1965 +<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
1966 +<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
1967 +<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
1968 +<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
1969 +<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
1970 +<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
1971 +<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
1972 +<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
1973 +<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
1974 +<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
1975 +<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
1976 +<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
1977 +<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
1978 +<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
1979 +<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
1980 +<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
1981 +<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
1982 +<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
1983 +<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
1984 +<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
1985 +<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
1986 +<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
1987 +<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
1988 +<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
1989 +<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
1990 +<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
1991 +<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
1992 +<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
1993 +<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
1994 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
1995 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
1996 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
1997 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
1998 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
1999 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
2000 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
2001 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
2002 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
2003 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
2004 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
2005 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
2006 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
2007 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
2008 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
2009 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
2010 +<span class="normal"><a href="#__codelineno-0-104">104</a></span>
2011 +<span class="normal"><a href="#__codelineno-0-105">105</a></span>
2012 +<span class="normal"><a href="#__codelineno-0-106">106</a></span>
2013 +<span class="normal"><a href="#__codelineno-0-107">107</a></span>
2014 +<span class="normal"><a href="#__codelineno-0-108">108</a></span>
2015 +<span class="normal"><a href="#__codelineno-0-109">109</a></span>
2016 +<span class="normal"><a href="#__codelineno-0-110">110</a></span>
2017 +<span class="normal"><a href="#__codelineno-0-111">111</a></span>
2018 +<span class="normal"><a href="#__codelineno-0-112">112</a></span>
2019 +<span class="normal"><a href="#__codelineno-0-113">113</a></span>
2020 +<span class="normal"><a href="#__codelineno-0-114">114</a></span>
2021 +<span class="normal"><a href="#__codelineno-0-115">115</a></span>
2022 +<span class="normal"><a href="#__codelineno-0-116">116</a></span>
2023 +<span class="normal"><a href="#__codelineno-0-117">117</a></span>
2024 +<span class="normal"><a href="#__codelineno-0-118">118</a></span>
2025 +<span class="normal"><a href="#__codelineno-0-119">119</a></span>
2026 +<span class="normal"><a href="#__codelineno-0-120">120</a></span>
2027 +<span class="normal"><a href="#__codelineno-0-121">121</a></span>
2028 +<span class="normal"><a href="#__codelineno-0-122">122</a></span>
2029 +<span class="normal"><a href="#__codelineno-0-123">123</a></span>
2030 +<span class="normal"><a href="#__codelineno-0-124">124</a></span>
2031 +<span class="normal"><a href="#__codelineno-0-125">125</a></span>
2032 +<span class="normal"><a href="#__codelineno-0-126">126</a></span>
2033 +<span class="normal"><a href="#__codelineno-0-127">127</a></span>
2034 +<span class="normal"><a href="#__codelineno-0-128">128</a></span>
2035 +<span class="normal"><a href="#__codelineno-0-129">129</a></span>
2036 +<span class="normal"><a href="#__codelineno-0-130">130</a></span>
2037 +<span class="normal"><a href="#__codelineno-0-131">131</a></span>
2038 +<span class="normal"><a href="#__codelineno-0-132">132</a></span>
2039 +<span class="normal"><a href="#__codelineno-0-133">133</a></span>
2040 +<span class="normal"><a href="#__codelineno-0-134">134</a></span>
2041 +<span class="normal"><a href="#__codelineno-0-135">135</a></span>
2042 +<span class="normal"><a href="#__codelineno-0-136">136</a></span>
2043 +<span class="normal"><a href="#__codelineno-0-137">137</a></span>
2044 +<span class="normal"><a href="#__codelineno-0-138">138</a></span>
2045 +<span class="normal"><a href="#__codelineno-0-139">139</a></span>
2046 +<span class="normal"><a href="#__codelineno-0-140">140</a></span>
2047 +<span class="normal"><a href="#__codelineno-0-141">141</a></span>
2048 +<span class="normal"><a href="#__codelineno-0-142">142</a></span>
2049 +<span class="normal"><a href="#__codelineno-0-143">143</a></span>
2050 +<span class="normal"><a href="#__codelineno-0-144">144</a></span>
2051 +<span class="normal"><a href="#__codelineno-0-145">145</a></span>
2052 +<span class="normal"><a href="#__codelineno-0-146">146</a></span>
2053 +<span class="normal"><a href="#__codelineno-0-147">147</a></span>
2054 +<span class="normal"><a href="#__codelineno-0-148">148</a></span>
2055 +<span class="normal"><a href="#__codelineno-0-149">149</a></span>
2056 +<span class="normal"><a href="#__codelineno-0-150">150</a></span>
2057 +<span class="normal"><a href="#__codelineno-0-151">151</a></span>
2058 +<span class="normal"><a href="#__codelineno-0-152">152</a></span>
2059 +<span class="normal"><a href="#__codelineno-0-153">153</a></span>
2060 +<span class="normal"><a href="#__codelineno-0-154">154</a></span>
2061 +<span class="normal"><a href="#__codelineno-0-155">155</a></span>
2062 +<span class="normal"><a href="#__codelineno-0-156">156</a></span>
2063 +<span class="normal"><a href="#__codelineno-0-157">157</a></span>
2064 +<span class="normal"><a href="#__codelineno-0-158">158</a></span>
2065 +<span class="normal"><a href="#__codelineno-0-159">159</a></span>
2066 +<span class="normal"><a href="#__codelineno-0-160">160</a></span>
2067 +<span class="normal"><a href="#__codelineno-0-161">161</a></span>
2068 +<span class="normal"><a href="#__codelineno-0-162">162</a></span>
2069 +<span class="normal"><a href="#__codelineno-0-163">163</a></span>
2070 +<span class="normal"><a href="#__codelineno-0-164">164</a></span>
2071 +<span class="normal"><a href="#__codelineno-0-165">165</a></span>
2072 +<span class="normal"><a href="#__codelineno-0-166">166</a></span>
2073 +<span class="normal"><a href="#__codelineno-0-167">167</a></span>
2074 +<span class="normal"><a href="#__codelineno-0-168">168</a></span>
2075 +<span class="normal"><a href="#__codelineno-0-169">169</a></span>
2076 +<span class="normal"><a href="#__codelineno-0-170">170</a></span>
2077 +<span class="normal"><a href="#__codelineno-0-171">171</a></span>
2078 +<span class="normal"><a href="#__codelineno-0-172">172</a></span>
2079 +<span class="normal"><a href="#__codelineno-0-173">173</a></span>
2080 +<span class="normal"><a href="#__codelineno-0-174">174</a></span>
2081 +<span class="normal"><a href="#__codelineno-0-175">175</a></span>
2082 +<span class="normal"><a href="#__codelineno-0-176">176</a></span>
2083 +<span class="normal"><a href="#__codelineno-0-177">177</a></span>
2084 +<span class="normal"><a href="#__codelineno-0-178">178</a></span>
2085 +<span class="normal"><a href="#__codelineno-0-179">179</a></span>
2086 +<span class="normal"><a href="#__codelineno-0-180">180</a></span>
2087 +<span class="normal"><a href="#__codelineno-0-181">181</a></span>
2088 +<span class="normal"><a href="#__codelineno-0-182">182</a></span>
2089 +<span class="normal"><a href="#__codelineno-0-183">183</a></span>
2090 +<span class="normal"><a href="#__codelineno-0-184">184</a></span>
2091 +<span class="normal"><a href="#__codelineno-0-185">185</a></span>
2092 +<span class="normal"><a href="#__codelineno-0-186">186</a></span>
2093 +<span class="normal"><a href="#__codelineno-0-187">187</a></span>
2094 +<span class="normal"><a href="#__codelineno-0-188">188</a></span>
2095 +<span class="normal"><a href="#__codelineno-0-189">189</a></span>
2096 +<span class="normal"><a href="#__codelineno-0-190">190</a></span>
2097 +<span class="normal"><a href="#__codelineno-0-191">191</a></span>
2098 +<span class="normal"><a href="#__codelineno-0-192">192</a></span>
2099 +<span class="normal"><a href="#__codelineno-0-193">193</a></span>
2100 +<span class="normal"><a href="#__codelineno-0-194">194</a></span>
2101 +<span class="normal"><a href="#__codelineno-0-195">195</a></span>
2102 +<span class="normal"><a href="#__codelineno-0-196">196</a></span>
2103 +<span class="normal"><a href="#__codelineno-0-197">197</a></span>
2104 +<span class="normal"><a href="#__codelineno-0-198">198</a></span>
2105 +<span class="normal"><a href="#__codelineno-0-199">199</a></span>
2106 +<span class="normal"><a href="#__codelineno-0-200">200</a></span>
2107 +<span class="normal"><a href="#__codelineno-0-201">201</a></span>
2108 +<span class="normal"><a href="#__codelineno-0-202">202</a></span>
2109 +<span class="normal"><a href="#__codelineno-0-203">203</a></span>
2110 +<span class="normal"><a href="#__codelineno-0-204">204</a></span>
2111 +<span class="normal"><a href="#__codelineno-0-205">205</a></span>
2112 +<span class="normal"><a href="#__codelineno-0-206">206</a></span>
2113 +<span class="normal"><a href="#__codelineno-0-207">207</a></span>
2114 +<span class="normal"><a href="#__codelineno-0-208">208</a></span>
2115 +<span class="normal"><a href="#__codelineno-0-209">209</a></span>
2116 +<span class="normal"><a href="#__codelineno-0-210">210</a></span>
2117 +<span class="normal"><a href="#__codelineno-0-211">211</a></span>
2118 +<span class="normal"><a href="#__codelineno-0-212">212</a></span>
2119 +<span class="normal"><a href="#__codelineno-0-213">213</a></span>
2120 +<span class="normal"><a href="#__codelineno-0-214">214</a></span>
2121 +<span class="normal"><a href="#__codelineno-0-215">215</a></span>
2122 +<span class="normal"><a href="#__codelineno-0-216">216</a></span>
2123 +<span class="normal"><a href="#__codelineno-0-217">217</a></span>
2124 +<span class="normal"><a href="#__codelineno-0-218">218</a></span>
2125 +<span class="normal"><a href="#__codelineno-0-219">219</a></span>
2126 +<span class="normal"><a href="#__codelineno-0-220">220</a></span>
2127 +<span class="normal"><a href="#__codelineno-0-221">221</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="k">class</span> <span class="nc">ClusterService</span><span class="p">:</span>
2128 +<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2129 +<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> A service class that encapsulates the logic for pulling indices from the Wazuh-Indexer.</span>
2130 +<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> &quot;&quot;&quot;</span>
2131 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a>
2132 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2133 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2134 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Initialize the ClusterService with the details of the Wazuh-Indexer and initialize the Elasticsearch client.</span>
2135 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> &quot;&quot;&quot;</span>
2136 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_wazuhindexer_details</span><span class="p">()</span>
2137 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_initialize_es_client</span><span class="p">()</span>
2138 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a>
2139 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">def</span> <span class="nf">_collect_wazuhindexer_details</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2140 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2141 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> Collect details of the Wazuh-Indexer. These details include the connector URL, username, and password.</span>
2142 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> &quot;&quot;&quot;</span>
2143 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="p">(</span>
2144 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
2145 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
2146 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
2147 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="p">)</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">&quot;Wazuh-Indexer&quot;</span><span class="p">)</span>
2148 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a>
2149 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">def</span> <span class="nf">_initialize_es_client</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2150 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2151 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> Initialize the Elasticsearch client with the details of the Wazuh-Indexer.</span>
2152 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> &quot;&quot;&quot;</span>
2153 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="n">Elasticsearch</span><span class="p">(</span>
2154 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
2155 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">http_auth</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">),</span>
2156 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2157 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
2158 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
2159 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2160 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="p">)</span>
2161 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a>
2162 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">def</span> <span class="nf">_are_details_collected</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
2163 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2164 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Check whether the details of the Wazuh-Indexer have been collected.</span>
2165 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
2166 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Returns:</span>
2167 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> bool: True if all details have been collected, False otherwise.</span>
2168 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> &quot;&quot;&quot;</span>
2169 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">return</span> <span class="nb">all</span><span class="p">(</span>
2170 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">],</span>
2171 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="p">)</span>
2172 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
2173 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">def</span> <span class="nf">collect_node_allocation</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2174 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2175 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> Collect node allocation details from the Wazuh-Indexer&#39;s Elasticsearch cluster.</span>
2176 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a>
2177 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Returns:</span>
2178 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the node allocation details.</span>
2179 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> &quot;&quot;&quot;</span>
2180 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
2181 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">return</span> <span class="p">{</span>
2182 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
2183 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2184 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="p">}</span>
2185 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
2186 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_node_allocation</span><span class="p">()</span>
2187 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2188 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="n">index_summary</span>
2189 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
2190 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="k">return</span> <span class="p">{</span>
2191 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected node allocation&quot;</span><span class="p">,</span>
2192 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2193 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">&quot;node_allocation&quot;</span><span class="p">:</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;node_allocation&quot;</span><span class="p">],</span>
2194 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="p">}</span>
2195 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
2196 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="k">def</span> <span class="nf">_collect_node_allocation</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2197 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2198 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> Collect node allocation details from the Wazuh-Indexer&#39;s Elasticsearch cluster.</span>
2199 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a>
2200 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="sd"> Returns:</span>
2201 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the node allocation details.</span>
2202 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> &quot;&quot;&quot;</span>
2203 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="k">try</span><span class="p">:</span>
2204 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="n">node_allocation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">cat</span><span class="o">.</span><span class="n">allocation</span><span class="p">(</span><span class="nb">format</span><span class="o">=</span><span class="s2">&quot;json&quot;</span><span class="p">)</span>
2205 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="n">node_allocation_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_format_node_allocation</span><span class="p">(</span><span class="n">node_allocation</span><span class="p">)</span>
2206 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="k">return</span> <span class="p">{</span>
2207 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected node allocation&quot;</span><span class="p">,</span>
2208 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2209 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="s2">&quot;node_allocation&quot;</span><span class="p">:</span> <span class="n">node_allocation_list</span><span class="p">,</span>
2210 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="p">}</span>
2211 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
2212 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to collect node allocation: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2213 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect node allocation&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2214 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a>
2215 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">def</span> <span class="nf">_format_node_allocation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_allocation</span><span class="p">):</span>
2216 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2217 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> Format the node allocation details into a list of dictionaries. Each dictionary contains disk used, disk available, total disk, disk usage percentage, and node name.</span>
2218 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a>
2219 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> Args:</span>
2220 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> node_allocation: Node allocation details from Elasticsearch.</span>
2221 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a>
2222 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> Returns:</span>
2223 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> list: A list of dictionaries containing formatted node allocation details.</span>
2224 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> &quot;&quot;&quot;</span>
2225 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="k">return</span> <span class="p">[</span>
2226 +<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="p">{</span>
2227 +<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="s2">&quot;disk_used&quot;</span><span class="p">:</span> <span class="n">node</span><span class="p">[</span><span class="s2">&quot;disk.used&quot;</span><span class="p">],</span>
2228 +<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="s2">&quot;disk_available&quot;</span><span class="p">:</span> <span class="n">node</span><span class="p">[</span><span class="s2">&quot;disk.avail&quot;</span><span class="p">],</span>
2229 +<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="s2">&quot;disk_total&quot;</span><span class="p">:</span> <span class="n">node</span><span class="p">[</span><span class="s2">&quot;disk.total&quot;</span><span class="p">],</span>
2230 +<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="s2">&quot;disk_percent&quot;</span><span class="p">:</span> <span class="n">node</span><span class="p">[</span><span class="s2">&quot;disk.percent&quot;</span><span class="p">],</span>
2231 +<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="s2">&quot;node&quot;</span><span class="p">:</span> <span class="n">node</span><span class="p">[</span><span class="s2">&quot;node&quot;</span><span class="p">],</span>
2232 +<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="p">}</span>
2233 +<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">node_allocation</span>
2234 +<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="p">]</span>
2235 +<a id="__codelineno-0-118" name="__codelineno-0-118"></a>
2236 +<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="k">def</span> <span class="nf">collect_cluster_health</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2237 +<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2238 +<a id="__codelineno-0-121" name="__codelineno-0-121"></a><span class="sd"> Collect health details of the Elasticsearch cluster from the Wazuh-Indexer.</span>
2239 +<a id="__codelineno-0-122" name="__codelineno-0-122"></a>
2240 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a><span class="sd"> Returns:</span>
2241 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the cluster health details.</span>
2242 +<a id="__codelineno-0-125" name="__codelineno-0-125"></a><span class="sd"> &quot;&quot;&quot;</span>
2243 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
2244 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="k">return</span> <span class="p">{</span>
2245 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
2246 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2247 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="p">}</span>
2248 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a>
2249 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_cluster_health</span><span class="p">()</span>
2250 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2251 +<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="k">return</span> <span class="n">index_summary</span>
2252 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a>
2253 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="k">return</span> <span class="p">{</span>
2254 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected cluster health&quot;</span><span class="p">,</span>
2255 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2256 +<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="s2">&quot;cluster_health&quot;</span><span class="p">:</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;cluster_health&quot;</span><span class="p">],</span>
2257 +<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="p">}</span>
2258 +<a id="__codelineno-0-141" name="__codelineno-0-141"></a>
2259 +<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="k">def</span> <span class="nf">_collect_cluster_health</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2260 +<a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2261 +<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> Collect health details of the Elasticsearch cluster from the Wazuh-Indexer.</span>
2262 +<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
2263 +<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Returns:</span>
2264 +<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the cluster health details.</span>
2265 +<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> &quot;&quot;&quot;</span>
2266 +<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="k">try</span><span class="p">:</span>
2267 +<a id="__codelineno-0-150" name="__codelineno-0-150"></a> <span class="n">cluster_health</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">cluster</span><span class="o">.</span><span class="n">health</span><span class="p">()</span>
2268 +<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="k">return</span> <span class="p">{</span>
2269 +<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected cluster health&quot;</span><span class="p">,</span>
2270 +<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2271 +<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="s2">&quot;cluster_health&quot;</span><span class="p">:</span> <span class="n">cluster_health</span><span class="p">,</span>
2272 +<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="p">}</span>
2273 +<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
2274 +<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to collect cluster health: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2275 +<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect cluster health&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2276 +<a id="__codelineno-0-159" name="__codelineno-0-159"></a>
2277 +<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="k">def</span> <span class="nf">collect_shards</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2278 +<a id="__codelineno-0-161" name="__codelineno-0-161"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2279 +<a id="__codelineno-0-162" name="__codelineno-0-162"></a><span class="sd"> Collect shard details from the Wazuh-Indexer&#39;s Elasticsearch cluster.</span>
2280 +<a id="__codelineno-0-163" name="__codelineno-0-163"></a>
2281 +<a id="__codelineno-0-164" name="__codelineno-0-164"></a><span class="sd"> Returns:</span>
2282 +<a id="__codelineno-0-165" name="__codelineno-0-165"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the shard details.</span>
2283 +<a id="__codelineno-0-166" name="__codelineno-0-166"></a><span class="sd"> &quot;&quot;&quot;</span>
2284 +<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
2285 +<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="k">return</span> <span class="p">{</span>
2286 +<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
2287 +<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2288 +<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="p">}</span>
2289 +<a id="__codelineno-0-172" name="__codelineno-0-172"></a>
2290 +<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_shards</span><span class="p">()</span>
2291 +<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2292 +<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="k">return</span> <span class="n">index_summary</span>
2293 +<a id="__codelineno-0-176" name="__codelineno-0-176"></a>
2294 +<a id="__codelineno-0-177" name="__codelineno-0-177"></a> <span class="k">return</span> <span class="p">{</span>
2295 +<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected shards&quot;</span><span class="p">,</span>
2296 +<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2297 +<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="s2">&quot;shards&quot;</span><span class="p">:</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;shards&quot;</span><span class="p">],</span>
2298 +<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="p">}</span>
2299 +<a id="__codelineno-0-182" name="__codelineno-0-182"></a>
2300 +<a id="__codelineno-0-183" name="__codelineno-0-183"></a> <span class="k">def</span> <span class="nf">_collect_shards</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2301 +<a id="__codelineno-0-184" name="__codelineno-0-184"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2302 +<a id="__codelineno-0-185" name="__codelineno-0-185"></a><span class="sd"> Collect shard details from the Wazuh-Indexer&#39;s Elasticsearch cluster.</span>
2303 +<a id="__codelineno-0-186" name="__codelineno-0-186"></a>
2304 +<a id="__codelineno-0-187" name="__codelineno-0-187"></a><span class="sd"> Returns:</span>
2305 +<a id="__codelineno-0-188" name="__codelineno-0-188"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the shard details.</span>
2306 +<a id="__codelineno-0-189" name="__codelineno-0-189"></a><span class="sd"> &quot;&quot;&quot;</span>
2307 +<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="k">try</span><span class="p">:</span>
2308 +<a id="__codelineno-0-191" name="__codelineno-0-191"></a> <span class="n">shards</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">cat</span><span class="o">.</span><span class="n">shards</span><span class="p">(</span><span class="nb">format</span><span class="o">=</span><span class="s2">&quot;json&quot;</span><span class="p">)</span>
2309 +<a id="__codelineno-0-192" name="__codelineno-0-192"></a> <span class="n">shards_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_format_shards</span><span class="p">(</span><span class="n">shards</span><span class="p">)</span>
2310 +<a id="__codelineno-0-193" name="__codelineno-0-193"></a> <span class="k">return</span> <span class="p">{</span>
2311 +<a id="__codelineno-0-194" name="__codelineno-0-194"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected shards&quot;</span><span class="p">,</span>
2312 +<a id="__codelineno-0-195" name="__codelineno-0-195"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2313 +<a id="__codelineno-0-196" name="__codelineno-0-196"></a> <span class="s2">&quot;shards&quot;</span><span class="p">:</span> <span class="n">shards_list</span><span class="p">,</span>
2314 +<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="p">}</span>
2315 +<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
2316 +<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to collect shards: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2317 +<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect shards&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2318 +<a id="__codelineno-0-201" name="__codelineno-0-201"></a>
2319 +<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="k">def</span> <span class="nf">_format_shards</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">shards</span><span class="p">):</span>
2320 +<a id="__codelineno-0-203" name="__codelineno-0-203"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2321 +<a id="__codelineno-0-204" name="__codelineno-0-204"></a><span class="sd"> Format the shard details into a list of dictionaries. Each dictionary contains index name, shard number, shard state, shard size, and node name.</span>
2322 +<a id="__codelineno-0-205" name="__codelineno-0-205"></a>
2323 +<a id="__codelineno-0-206" name="__codelineno-0-206"></a><span class="sd"> Args:</span>
2324 +<a id="__codelineno-0-207" name="__codelineno-0-207"></a><span class="sd"> shards: Shard details from Elasticsearch.</span>
2325 +<a id="__codelineno-0-208" name="__codelineno-0-208"></a>
2326 +<a id="__codelineno-0-209" name="__codelineno-0-209"></a><span class="sd"> Returns:</span>
2327 +<a id="__codelineno-0-210" name="__codelineno-0-210"></a><span class="sd"> list: A list of dictionaries containing formatted shard details.</span>
2328 +<a id="__codelineno-0-211" name="__codelineno-0-211"></a><span class="sd"> &quot;&quot;&quot;</span>
2329 +<a id="__codelineno-0-212" name="__codelineno-0-212"></a> <span class="k">return</span> <span class="p">[</span>
2330 +<a id="__codelineno-0-213" name="__codelineno-0-213"></a> <span class="p">{</span>
2331 +<a id="__codelineno-0-214" name="__codelineno-0-214"></a> <span class="s2">&quot;index&quot;</span><span class="p">:</span> <span class="n">shard</span><span class="p">[</span><span class="s2">&quot;index&quot;</span><span class="p">],</span>
2332 +<a id="__codelineno-0-215" name="__codelineno-0-215"></a> <span class="s2">&quot;shard&quot;</span><span class="p">:</span> <span class="n">shard</span><span class="p">[</span><span class="s2">&quot;shard&quot;</span><span class="p">],</span>
2333 +<a id="__codelineno-0-216" name="__codelineno-0-216"></a> <span class="s2">&quot;state&quot;</span><span class="p">:</span> <span class="n">shard</span><span class="p">[</span><span class="s2">&quot;state&quot;</span><span class="p">],</span>
2334 +<a id="__codelineno-0-217" name="__codelineno-0-217"></a> <span class="s2">&quot;size&quot;</span><span class="p">:</span> <span class="n">shard</span><span class="p">[</span><span class="s2">&quot;store&quot;</span><span class="p">],</span>
2335 +<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="s2">&quot;node&quot;</span><span class="p">:</span> <span class="n">shard</span><span class="p">[</span><span class="s2">&quot;node&quot;</span><span class="p">],</span>
2336 +<a id="__codelineno-0-219" name="__codelineno-0-219"></a> <span class="p">}</span>
2337 +<a id="__codelineno-0-220" name="__codelineno-0-220"></a> <span class="k">for</span> <span class="n">shard</span> <span class="ow">in</span> <span class="n">shards</span>
2338 +<a id="__codelineno-0-221" name="__codelineno-0-221"></a> <span class="p">]</span>
2339 +</code></pre></div></td></tr></table></div>
2340 + </details>
2341 +
2342 +
2343 +
2344 + <div class="doc doc-children">
2345 +
2346 +
2347 +
2348 +
2349 +
2350 +
2351 +
2352 +
2353 +
2354 +<div class="doc doc-object doc-function">
2355 +
2356 +
2357 +
2358 +<h3 id="app.services.WazuhIndexer.cluster.ClusterService.__init__" class="doc doc-heading">
2359 +<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
2360 +
2361 +</h3>
2362 +
2363 +
2364 + <div class="doc doc-contents ">
2365 +
2366 + <p>Initialize the ClusterService with the details of the Wazuh-Indexer and initialize the Elasticsearch client.</p>
2367 +
2368 + <details class="quote">
2369 + <summary>Source code in <code>app\services\WazuhIndexer\cluster.py</code></summary>
2370 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-15">15</a></span>
2371 +<span class="normal"><a href="#__codelineno-0-16">16</a></span>
2372 +<span class="normal"><a href="#__codelineno-0-17">17</a></span>
2373 +<span class="normal"><a href="#__codelineno-0-18">18</a></span>
2374 +<span class="normal"><a href="#__codelineno-0-19">19</a></span>
2375 +<span class="normal"><a href="#__codelineno-0-20">20</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2376 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2377 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Initialize the ClusterService with the details of the Wazuh-Indexer and initialize the Elasticsearch client.</span>
2378 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> &quot;&quot;&quot;</span>
2379 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_wazuhindexer_details</span><span class="p">()</span>
2380 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_initialize_es_client</span><span class="p">()</span>
2381 +</code></pre></div></td></tr></table></div>
2382 + </details>
2383 + </div>
2384 +
2385 +</div>
2386 +
2387 +<div class="doc doc-object doc-function">
2388 +
2389 +
2390 +
2391 +<h3 id="app.services.WazuhIndexer.cluster.ClusterService.collect_cluster_health" class="doc doc-heading">
2392 +<code class="highlight language-python"><span class="n">collect_cluster_health</span><span class="p">()</span></code>
2393 +
2394 +</h3>
2395 +
2396 +
2397 + <div class="doc doc-contents ">
2398 +
2399 + <p>Collect health details of the Elasticsearch cluster from the Wazuh-Indexer.</p>
2400 +
2401 + <p><strong>Returns:</strong></p>
2402 + <table>
2403 + <thead>
2404 + <tr>
2405 +<th>Name</th> <th>Type</th>
2406 + <th>Description</th>
2407 + </tr>
2408 + </thead>
2409 + <tbody>
2410 + <tr>
2411 +<td><code>dict</code></td> <td>
2412 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
2413 + </td>
2414 + <td>
2415 + <div class="doc-md-description">
2416 + <p>A dictionary containing success status, a message, and potentially the cluster health details.</p>
2417 + </div>
2418 + </td>
2419 + </tr>
2420 + </tbody>
2421 + </table>
2422 +
2423 + <details class="quote">
2424 + <summary>Source code in <code>app\services\WazuhIndexer\cluster.py</code></summary>
2425 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-119">119</a></span>
2426 +<span class="normal"><a href="#__codelineno-0-120">120</a></span>
2427 +<span class="normal"><a href="#__codelineno-0-121">121</a></span>
2428 +<span class="normal"><a href="#__codelineno-0-122">122</a></span>
2429 +<span class="normal"><a href="#__codelineno-0-123">123</a></span>
2430 +<span class="normal"><a href="#__codelineno-0-124">124</a></span>
2431 +<span class="normal"><a href="#__codelineno-0-125">125</a></span>
2432 +<span class="normal"><a href="#__codelineno-0-126">126</a></span>
2433 +<span class="normal"><a href="#__codelineno-0-127">127</a></span>
2434 +<span class="normal"><a href="#__codelineno-0-128">128</a></span>
2435 +<span class="normal"><a href="#__codelineno-0-129">129</a></span>
2436 +<span class="normal"><a href="#__codelineno-0-130">130</a></span>
2437 +<span class="normal"><a href="#__codelineno-0-131">131</a></span>
2438 +<span class="normal"><a href="#__codelineno-0-132">132</a></span>
2439 +<span class="normal"><a href="#__codelineno-0-133">133</a></span>
2440 +<span class="normal"><a href="#__codelineno-0-134">134</a></span>
2441 +<span class="normal"><a href="#__codelineno-0-135">135</a></span>
2442 +<span class="normal"><a href="#__codelineno-0-136">136</a></span>
2443 +<span class="normal"><a href="#__codelineno-0-137">137</a></span>
2444 +<span class="normal"><a href="#__codelineno-0-138">138</a></span>
2445 +<span class="normal"><a href="#__codelineno-0-139">139</a></span>
2446 +<span class="normal"><a href="#__codelineno-0-140">140</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="k">def</span> <span class="nf">collect_cluster_health</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2447 +<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2448 +<a id="__codelineno-0-121" name="__codelineno-0-121"></a><span class="sd"> Collect health details of the Elasticsearch cluster from the Wazuh-Indexer.</span>
2449 +<a id="__codelineno-0-122" name="__codelineno-0-122"></a>
2450 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a><span class="sd"> Returns:</span>
2451 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the cluster health details.</span>
2452 +<a id="__codelineno-0-125" name="__codelineno-0-125"></a><span class="sd"> &quot;&quot;&quot;</span>
2453 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
2454 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="k">return</span> <span class="p">{</span>
2455 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
2456 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2457 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="p">}</span>
2458 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a>
2459 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_cluster_health</span><span class="p">()</span>
2460 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2461 +<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="k">return</span> <span class="n">index_summary</span>
2462 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a>
2463 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="k">return</span> <span class="p">{</span>
2464 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected cluster health&quot;</span><span class="p">,</span>
2465 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2466 +<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="s2">&quot;cluster_health&quot;</span><span class="p">:</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;cluster_health&quot;</span><span class="p">],</span>
2467 +<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="p">}</span>
2468 +</code></pre></div></td></tr></table></div>
2469 + </details>
2470 + </div>
2471 +
2472 +</div>
2473 +
2474 +<div class="doc doc-object doc-function">
2475 +
2476 +
2477 +
2478 +<h3 id="app.services.WazuhIndexer.cluster.ClusterService.collect_node_allocation" class="doc doc-heading">
2479 +<code class="highlight language-python"><span class="n">collect_node_allocation</span><span class="p">()</span></code>
2480 +
2481 +</h3>
2482 +
2483 +
2484 + <div class="doc doc-contents ">
2485 +
2486 + <p>Collect node allocation details from the Wazuh-Indexer's Elasticsearch cluster.</p>
2487 +
2488 + <p><strong>Returns:</strong></p>
2489 + <table>
2490 + <thead>
2491 + <tr>
2492 +<th>Name</th> <th>Type</th>
2493 + <th>Description</th>
2494 + </tr>
2495 + </thead>
2496 + <tbody>
2497 + <tr>
2498 +<td><code>dict</code></td> <td>
2499 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
2500 + </td>
2501 + <td>
2502 + <div class="doc-md-description">
2503 + <p>A dictionary containing success status, a message, and potentially the node allocation details.</p>
2504 + </div>
2505 + </td>
2506 + </tr>
2507 + </tbody>
2508 + </table>
2509 +
2510 + <details class="quote">
2511 + <summary>Source code in <code>app\services\WazuhIndexer\cluster.py</code></summary>
2512 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-56">56</a></span>
2513 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2514 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2515 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
2516 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
2517 +<span class="normal"><a href="#__codelineno-0-61">61</a></span>
2518 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
2519 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
2520 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
2521 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
2522 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
2523 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
2524 +<span class="normal"><a href="#__codelineno-0-68">68</a></span>
2525 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
2526 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
2527 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
2528 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
2529 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
2530 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
2531 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
2532 +<span class="normal"><a href="#__codelineno-0-76">76</a></span>
2533 +<span class="normal"><a href="#__codelineno-0-77">77</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="k">def</span> <span class="nf">collect_node_allocation</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2534 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2535 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> Collect node allocation details from the Wazuh-Indexer&#39;s Elasticsearch cluster.</span>
2536 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a>
2537 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Returns:</span>
2538 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the node allocation details.</span>
2539 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> &quot;&quot;&quot;</span>
2540 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
2541 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">return</span> <span class="p">{</span>
2542 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
2543 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2544 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="p">}</span>
2545 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
2546 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_node_allocation</span><span class="p">()</span>
2547 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2548 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="n">index_summary</span>
2549 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
2550 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="k">return</span> <span class="p">{</span>
2551 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected node allocation&quot;</span><span class="p">,</span>
2552 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2553 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">&quot;node_allocation&quot;</span><span class="p">:</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;node_allocation&quot;</span><span class="p">],</span>
2554 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="p">}</span>
2555 +</code></pre></div></td></tr></table></div>
2556 + </details>
2557 + </div>
2558 +
2559 +</div>
2560 +
2561 +<div class="doc doc-object doc-function">
2562 +
2563 +
2564 +
2565 +<h3 id="app.services.WazuhIndexer.cluster.ClusterService.collect_shards" class="doc doc-heading">
2566 +<code class="highlight language-python"><span class="n">collect_shards</span><span class="p">()</span></code>
2567 +
2568 +</h3>
2569 +
2570 +
2571 + <div class="doc doc-contents ">
2572 +
2573 + <p>Collect shard details from the Wazuh-Indexer's Elasticsearch cluster.</p>
2574 +
2575 + <p><strong>Returns:</strong></p>
2576 + <table>
2577 + <thead>
2578 + <tr>
2579 +<th>Name</th> <th>Type</th>
2580 + <th>Description</th>
2581 + </tr>
2582 + </thead>
2583 + <tbody>
2584 + <tr>
2585 +<td><code>dict</code></td> <td>
2586 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
2587 + </td>
2588 + <td>
2589 + <div class="doc-md-description">
2590 + <p>A dictionary containing success status, a message, and potentially the shard details.</p>
2591 + </div>
2592 + </td>
2593 + </tr>
2594 + </tbody>
2595 + </table>
2596 +
2597 + <details class="quote">
2598 + <summary>Source code in <code>app\services\WazuhIndexer\cluster.py</code></summary>
2599 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-160">160</a></span>
2600 +<span class="normal"><a href="#__codelineno-0-161">161</a></span>
2601 +<span class="normal"><a href="#__codelineno-0-162">162</a></span>
2602 +<span class="normal"><a href="#__codelineno-0-163">163</a></span>
2603 +<span class="normal"><a href="#__codelineno-0-164">164</a></span>
2604 +<span class="normal"><a href="#__codelineno-0-165">165</a></span>
2605 +<span class="normal"><a href="#__codelineno-0-166">166</a></span>
2606 +<span class="normal"><a href="#__codelineno-0-167">167</a></span>
2607 +<span class="normal"><a href="#__codelineno-0-168">168</a></span>
2608 +<span class="normal"><a href="#__codelineno-0-169">169</a></span>
2609 +<span class="normal"><a href="#__codelineno-0-170">170</a></span>
2610 +<span class="normal"><a href="#__codelineno-0-171">171</a></span>
2611 +<span class="normal"><a href="#__codelineno-0-172">172</a></span>
2612 +<span class="normal"><a href="#__codelineno-0-173">173</a></span>
2613 +<span class="normal"><a href="#__codelineno-0-174">174</a></span>
2614 +<span class="normal"><a href="#__codelineno-0-175">175</a></span>
2615 +<span class="normal"><a href="#__codelineno-0-176">176</a></span>
2616 +<span class="normal"><a href="#__codelineno-0-177">177</a></span>
2617 +<span class="normal"><a href="#__codelineno-0-178">178</a></span>
2618 +<span class="normal"><a href="#__codelineno-0-179">179</a></span>
2619 +<span class="normal"><a href="#__codelineno-0-180">180</a></span>
2620 +<span class="normal"><a href="#__codelineno-0-181">181</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-160" name="__codelineno-0-160"></a><span class="k">def</span> <span class="nf">collect_shards</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2621 +<a id="__codelineno-0-161" name="__codelineno-0-161"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2622 +<a id="__codelineno-0-162" name="__codelineno-0-162"></a><span class="sd"> Collect shard details from the Wazuh-Indexer&#39;s Elasticsearch cluster.</span>
2623 +<a id="__codelineno-0-163" name="__codelineno-0-163"></a>
2624 +<a id="__codelineno-0-164" name="__codelineno-0-164"></a><span class="sd"> Returns:</span>
2625 +<a id="__codelineno-0-165" name="__codelineno-0-165"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the shard details.</span>
2626 +<a id="__codelineno-0-166" name="__codelineno-0-166"></a><span class="sd"> &quot;&quot;&quot;</span>
2627 +<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
2628 +<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="k">return</span> <span class="p">{</span>
2629 +<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
2630 +<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2631 +<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="p">}</span>
2632 +<a id="__codelineno-0-172" name="__codelineno-0-172"></a>
2633 +<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_shards</span><span class="p">()</span>
2634 +<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2635 +<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="k">return</span> <span class="n">index_summary</span>
2636 +<a id="__codelineno-0-176" name="__codelineno-0-176"></a>
2637 +<a id="__codelineno-0-177" name="__codelineno-0-177"></a> <span class="k">return</span> <span class="p">{</span>
2638 +<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected shards&quot;</span><span class="p">,</span>
2639 +<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2640 +<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="s2">&quot;shards&quot;</span><span class="p">:</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;shards&quot;</span><span class="p">],</span>
2641 +<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="p">}</span>
2642 +</code></pre></div></td></tr></table></div>
2643 + </details>
2644 + </div>
2645 +
2646 +</div>
2647 +
2648 +
2649 +
2650 + </div>
2651 +
2652 + </div>
2653 +
2654 +</div>
2655 +
2656 +
2657 +
2658 +
2659 + </div>
2660 +
2661 + </div>
2662 +
2663 +</div><h3 id="index-services"><span style="color:red">Index Services</span></h3>
2664 +
2665 +
2666 +<div class="doc doc-object doc-module">
2667 +
2668 +
2669 +<a id="app.services.WazuhIndexer.index"></a>
2670 + <div class="doc doc-contents first">
2671 +
2672 +
2673 +
2674 + <div class="doc doc-children">
2675 +
2676 +
2677 +
2678 +
2679 +
2680 +
2681 +
2682 +
2683 +<div class="doc doc-object doc-class">
2684 +
2685 +
2686 +
2687 +<h2 id="app.services.WazuhIndexer.index.IndexService" class="doc doc-heading">
2688 + <code>IndexService</code>
2689 +
2690 +
2691 +</h2>
2692 +
2693 +
2694 + <div class="doc doc-contents ">
2695 +
2696 +
2697 + <p>A service class that encapsulates the logic for pulling indices from the Wazuh-Indexer.</p>
2698 +
2699 +
2700 + <details class="quote">
2701 + <summary>Source code in <code>app\services\WazuhIndexer\index.py</code></summary>
2702 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-10"> 10</a></span>
2703 +<span class="normal"><a href="#__codelineno-0-11"> 11</a></span>
2704 +<span class="normal"><a href="#__codelineno-0-12"> 12</a></span>
2705 +<span class="normal"><a href="#__codelineno-0-13"> 13</a></span>
2706 +<span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
2707 +<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
2708 +<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
2709 +<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
2710 +<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
2711 +<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
2712 +<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
2713 +<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
2714 +<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
2715 +<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
2716 +<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
2717 +<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
2718 +<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
2719 +<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
2720 +<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
2721 +<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
2722 +<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
2723 +<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
2724 +<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
2725 +<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
2726 +<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
2727 +<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
2728 +<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
2729 +<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
2730 +<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
2731 +<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
2732 +<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
2733 +<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
2734 +<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
2735 +<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
2736 +<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
2737 +<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
2738 +<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
2739 +<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
2740 +<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
2741 +<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
2742 +<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
2743 +<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
2744 +<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
2745 +<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
2746 +<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
2747 +<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
2748 +<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
2749 +<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
2750 +<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
2751 +<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
2752 +<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
2753 +<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
2754 +<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
2755 +<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
2756 +<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
2757 +<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
2758 +<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
2759 +<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
2760 +<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
2761 +<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
2762 +<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
2763 +<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
2764 +<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
2765 +<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
2766 +<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
2767 +<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
2768 +<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
2769 +<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
2770 +<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
2771 +<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
2772 +<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
2773 +<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
2774 +<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
2775 +<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
2776 +<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
2777 +<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
2778 +<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
2779 +<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
2780 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
2781 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
2782 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
2783 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
2784 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
2785 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
2786 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
2787 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
2788 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
2789 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
2790 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
2791 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
2792 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
2793 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
2794 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
2795 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
2796 +<span class="normal"><a href="#__codelineno-0-104">104</a></span>
2797 +<span class="normal"><a href="#__codelineno-0-105">105</a></span>
2798 +<span class="normal"><a href="#__codelineno-0-106">106</a></span>
2799 +<span class="normal"><a href="#__codelineno-0-107">107</a></span>
2800 +<span class="normal"><a href="#__codelineno-0-108">108</a></span>
2801 +<span class="normal"><a href="#__codelineno-0-109">109</a></span>
2802 +<span class="normal"><a href="#__codelineno-0-110">110</a></span>
2803 +<span class="normal"><a href="#__codelineno-0-111">111</a></span>
2804 +<span class="normal"><a href="#__codelineno-0-112">112</a></span>
2805 +<span class="normal"><a href="#__codelineno-0-113">113</a></span>
2806 +<span class="normal"><a href="#__codelineno-0-114">114</a></span>
2807 +<span class="normal"><a href="#__codelineno-0-115">115</a></span>
2808 +<span class="normal"><a href="#__codelineno-0-116">116</a></span>
2809 +<span class="normal"><a href="#__codelineno-0-117">117</a></span>
2810 +<span class="normal"><a href="#__codelineno-0-118">118</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="k">class</span> <span class="nc">IndexService</span><span class="p">:</span>
2811 +<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2812 +<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> A service class that encapsulates the logic for pulling indices from the Wazuh-Indexer.</span>
2813 +<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> &quot;&quot;&quot;</span>
2814 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a>
2815 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2816 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2817 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Initialize the IndexService with the details of the Wazuh-Indexer and initialize the Elasticsearch client.</span>
2818 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> &quot;&quot;&quot;</span>
2819 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_wazuhindexer_details</span><span class="p">()</span>
2820 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_initialize_es_client</span><span class="p">()</span>
2821 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a>
2822 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">def</span> <span class="nf">_collect_wazuhindexer_details</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2823 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2824 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> Collect details of the Wazuh-Indexer. These details include the connector URL, username, and password.</span>
2825 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> &quot;&quot;&quot;</span>
2826 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="p">(</span>
2827 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
2828 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
2829 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
2830 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="p">)</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">&quot;Wazuh-Indexer&quot;</span><span class="p">)</span>
2831 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a>
2832 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">def</span> <span class="nf">_initialize_es_client</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2833 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2834 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> Initialize the Elasticsearch client with the details of the Wazuh-Indexer.</span>
2835 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> &quot;&quot;&quot;</span>
2836 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="n">Elasticsearch</span><span class="p">(</span>
2837 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
2838 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">http_auth</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">),</span>
2839 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2840 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
2841 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
2842 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2843 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="p">)</span>
2844 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a>
2845 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">def</span> <span class="nf">_are_details_collected</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
2846 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2847 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Check whether the details of the Wazuh-Indexer have been collected.</span>
2848 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
2849 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Returns:</span>
2850 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> bool: True if all details have been collected, False otherwise.</span>
2851 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> &quot;&quot;&quot;</span>
2852 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">return</span> <span class="nb">all</span><span class="p">(</span>
2853 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">],</span>
2854 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="p">)</span>
2855 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
2856 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">def</span> <span class="nf">collect_indices_summary</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2857 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2858 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> Collect summary information for each index from the Wazuh-Indexer&#39;s Elasticsearch cluster.</span>
2859 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a>
2860 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Returns:</span>
2861 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the indices summary.</span>
2862 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> &quot;&quot;&quot;</span>
2863 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
2864 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">return</span> <span class="p">{</span>
2865 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
2866 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2867 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="p">}</span>
2868 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
2869 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_indices</span><span class="p">()</span>
2870 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2871 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="n">index_summary</span>
2872 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
2873 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_format_indices_summary</span><span class="p">(</span><span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;indices&quot;</span><span class="p">])</span>
2874 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
2875 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">return</span> <span class="p">{</span>
2876 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected indices summary&quot;</span><span class="p">,</span>
2877 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2878 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="s2">&quot;indices&quot;</span><span class="p">:</span> <span class="n">summary</span><span class="p">,</span>
2879 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="p">}</span>
2880 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a>
2881 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">def</span> <span class="nf">_format_indices_summary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">indices</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2882 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2883 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="sd"> Format the indices summary into a list of dictionaries. Each dictionary contains index name, health status, document count, store size, and replica count.</span>
2884 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a>
2885 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> Args:</span>
2886 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> indices (dict): Indices summary from Elasticsearch.</span>
2887 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a>
2888 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> Returns:</span>
2889 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> list: A list of dictionaries containing formatted indices summary.</span>
2890 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> &quot;&quot;&quot;</span>
2891 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">return</span> <span class="p">[</span>
2892 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">{</span>
2893 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="s2">&quot;index&quot;</span><span class="p">:</span> <span class="n">index</span><span class="p">[</span><span class="s2">&quot;index&quot;</span><span class="p">],</span>
2894 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="s2">&quot;health&quot;</span><span class="p">:</span> <span class="n">index</span><span class="p">[</span><span class="s2">&quot;health&quot;</span><span class="p">],</span>
2895 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">&quot;docs_count&quot;</span><span class="p">:</span> <span class="n">index</span><span class="p">[</span><span class="s2">&quot;docs.count&quot;</span><span class="p">],</span>
2896 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">&quot;store_size&quot;</span><span class="p">:</span> <span class="n">index</span><span class="p">[</span><span class="s2">&quot;store.size&quot;</span><span class="p">],</span>
2897 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">&quot;replica_count&quot;</span><span class="p">:</span> <span class="n">index</span><span class="p">[</span><span class="s2">&quot;rep&quot;</span><span class="p">],</span>
2898 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="p">}</span>
2899 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="k">for</span> <span class="n">index</span> <span class="ow">in</span> <span class="n">indices</span>
2900 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="p">]</span>
2901 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a>
2902 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="k">def</span> <span class="nf">_collect_indices</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2903 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2904 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> Collect indices from the Wazuh-Indexer&#39;s Elasticsearch cluster.</span>
2905 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a>
2906 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> Returns:</span>
2907 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the indices.</span>
2908 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> &quot;&quot;&quot;</span>
2909 +<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="k">try</span><span class="p">:</span>
2910 +<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="n">indices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">cat</span><span class="o">.</span><span class="n">indices</span><span class="p">(</span><span class="nb">format</span><span class="o">=</span><span class="s2">&quot;json&quot;</span><span class="p">)</span>
2911 +<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="k">return</span> <span class="p">{</span>
2912 +<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected indices&quot;</span><span class="p">,</span>
2913 +<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2914 +<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="s2">&quot;indices&quot;</span><span class="p">:</span> <span class="n">indices</span><span class="p">,</span>
2915 +<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="p">}</span>
2916 +<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
2917 +<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
2918 +<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect indices&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2919 +</code></pre></div></td></tr></table></div>
2920 + </details>
2921 +
2922 +
2923 +
2924 + <div class="doc doc-children">
2925 +
2926 +
2927 +
2928 +
2929 +
2930 +
2931 +
2932 +
2933 +
2934 +<div class="doc doc-object doc-function">
2935 +
2936 +
2937 +
2938 +<h3 id="app.services.WazuhIndexer.index.IndexService.__init__" class="doc doc-heading">
2939 +<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
2940 +
2941 +</h3>
2942 +
2943 +
2944 + <div class="doc doc-contents ">
2945 +
2946 + <p>Initialize the IndexService with the details of the Wazuh-Indexer and initialize the Elasticsearch client.</p>
2947 +
2948 + <details class="quote">
2949 + <summary>Source code in <code>app\services\WazuhIndexer\index.py</code></summary>
2950 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-15">15</a></span>
2951 +<span class="normal"><a href="#__codelineno-0-16">16</a></span>
2952 +<span class="normal"><a href="#__codelineno-0-17">17</a></span>
2953 +<span class="normal"><a href="#__codelineno-0-18">18</a></span>
2954 +<span class="normal"><a href="#__codelineno-0-19">19</a></span>
2955 +<span class="normal"><a href="#__codelineno-0-20">20</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2956 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2957 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Initialize the IndexService with the details of the Wazuh-Indexer and initialize the Elasticsearch client.</span>
2958 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> &quot;&quot;&quot;</span>
2959 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_wazuhindexer_details</span><span class="p">()</span>
2960 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_initialize_es_client</span><span class="p">()</span>
2961 +</code></pre></div></td></tr></table></div>
2962 + </details>
2963 + </div>
2964 +
2965 +</div>
2966 +
2967 +<div class="doc doc-object doc-function">
2968 +
2969 +
2970 +
2971 +<h3 id="app.services.WazuhIndexer.index.IndexService.collect_indices_summary" class="doc doc-heading">
2972 +<code class="highlight language-python"><span class="n">collect_indices_summary</span><span class="p">()</span></code>
2973 +
2974 +</h3>
2975 +
2976 +
2977 + <div class="doc doc-contents ">
2978 +
2979 + <p>Collect summary information for each index from the Wazuh-Indexer's Elasticsearch cluster.</p>
2980 +
2981 + <p><strong>Returns:</strong></p>
2982 + <table>
2983 + <thead>
2984 + <tr>
2985 +<th>Name</th> <th>Type</th>
2986 + <th>Description</th>
2987 + </tr>
2988 + </thead>
2989 + <tbody>
2990 + <tr>
2991 +<td><code>dict</code></td> <td>
2992 + <code><span title="typing.Dict">Dict</span>[str, object]</code>
2993 + </td>
2994 + <td>
2995 + <div class="doc-md-description">
2996 + <p>A dictionary containing success status, a message, and potentially the indices summary.</p>
2997 + </div>
2998 + </td>
2999 + </tr>
3000 + </tbody>
3001 + </table>
3002 +
3003 + <details class="quote">
3004 + <summary>Source code in <code>app\services\WazuhIndexer\index.py</code></summary>
3005 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-56">56</a></span>
3006 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
3007 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
3008 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
3009 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
3010 +<span class="normal"><a href="#__codelineno-0-61">61</a></span>
3011 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
3012 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
3013 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
3014 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
3015 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
3016 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
3017 +<span class="normal"><a href="#__codelineno-0-68">68</a></span>
3018 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
3019 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
3020 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
3021 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
3022 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
3023 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
3024 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
3025 +<span class="normal"><a href="#__codelineno-0-76">76</a></span>
3026 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
3027 +<span class="normal"><a href="#__codelineno-0-78">78</a></span>
3028 +<span class="normal"><a href="#__codelineno-0-79">79</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="k">def</span> <span class="nf">collect_indices_summary</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
3029 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3030 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> Collect summary information for each index from the Wazuh-Indexer&#39;s Elasticsearch cluster.</span>
3031 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a>
3032 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Returns:</span>
3033 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the indices summary.</span>
3034 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> &quot;&quot;&quot;</span>
3035 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
3036 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">return</span> <span class="p">{</span>
3037 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
3038 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3039 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="p">}</span>
3040 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
3041 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_indices</span><span class="p">()</span>
3042 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3043 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="n">index_summary</span>
3044 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
3045 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_format_indices_summary</span><span class="p">(</span><span class="n">index_summary</span><span class="p">[</span><span class="s2">&quot;indices&quot;</span><span class="p">])</span>
3046 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
3047 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">return</span> <span class="p">{</span>
3048 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected indices summary&quot;</span><span class="p">,</span>
3049 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3050 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="s2">&quot;indices&quot;</span><span class="p">:</span> <span class="n">summary</span><span class="p">,</span>
3051 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="p">}</span>
3052 +</code></pre></div></td></tr></table></div>
3053 + </details>
3054 + </div>
3055 +
3056 +</div>
3057 +
3058 +
3059 +
3060 + </div>
3061 +
3062 + </div>
3063 +
3064 +</div>
3065 +
3066 +
3067 +
3068 +
3069 + </div>
3070 +
3071 + </div>
3072 +
3073 +</div><h3 id="universal-services"><span style="color:red">Universal Services</span></h3>
3074 +
3075 +
3076 +<div class="doc doc-object doc-module">
3077 +
3078 +
3079 +<a id="app.services.WazuhIndexer.universal"></a>
3080 + <div class="doc doc-contents first">
3081 +
3082 +
3083 +
3084 + <div class="doc doc-children">
3085 +
3086 +
3087 +
3088 +
3089 +
3090 +
3091 +
3092 +
3093 +<div class="doc doc-object doc-class">
3094 +
3095 +
3096 +
3097 +<h2 id="app.services.WazuhIndexer.universal.UniversalService" class="doc doc-heading">
3098 + <code>UniversalService</code>
3099 +
3100 +
3101 +</h2>
3102 +
3103 +
3104 + <div class="doc doc-contents ">
3105 +
3106 +
3107 + <p>A service class that encapsulates the logic for polling messages from the Wazuh-Indexer.</p>
3108 +
3109 +
3110 + <details class="quote">
3111 + <summary>Source code in <code>app\services\WazuhIndexer\universal.py</code></summary>
3112 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
3113 +<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
3114 +<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
3115 +<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
3116 +<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
3117 +<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
3118 +<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
3119 +<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
3120 +<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
3121 +<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
3122 +<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
3123 +<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
3124 +<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
3125 +<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
3126 +<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
3127 +<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
3128 +<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
3129 +<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
3130 +<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
3131 +<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
3132 +<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
3133 +<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
3134 +<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
3135 +<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
3136 +<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
3137 +<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
3138 +<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
3139 +<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
3140 +<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
3141 +<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
3142 +<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
3143 +<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
3144 +<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
3145 +<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
3146 +<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
3147 +<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
3148 +<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
3149 +<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
3150 +<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
3151 +<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
3152 +<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
3153 +<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
3154 +<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
3155 +<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
3156 +<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
3157 +<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
3158 +<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
3159 +<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
3160 +<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
3161 +<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
3162 +<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
3163 +<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
3164 +<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
3165 +<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
3166 +<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
3167 +<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
3168 +<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
3169 +<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
3170 +<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
3171 +<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
3172 +<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
3173 +<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
3174 +<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
3175 +<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
3176 +<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
3177 +<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
3178 +<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
3179 +<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
3180 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
3181 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
3182 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
3183 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
3184 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
3185 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
3186 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
3187 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
3188 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
3189 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
3190 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
3191 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
3192 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
3193 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
3194 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
3195 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
3196 +<span class="normal"><a href="#__codelineno-0-104">104</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="k">class</span> <span class="nc">UniversalService</span><span class="p">:</span>
3197 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3198 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> A service class that encapsulates the logic for polling messages from the Wazuh-Indexer.</span>
3199 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> &quot;&quot;&quot;</span>
3200 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
3201 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
3202 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="bp">self</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">&quot;Wazuh-Indexer&quot;</span><span class="p">)</span>
3203 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="p">(</span>
3204 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
3205 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
3206 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
3207 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">&quot;Wazuh-Indexer&quot;</span><span class="p">)</span>
3208 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="n">Elasticsearch</span><span class="p">(</span>
3209 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
3210 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">http_auth</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">),</span>
3211 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
3212 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
3213 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
3214 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
3215 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="p">)</span>
3216 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a>
3217 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="k">def</span> <span class="nf">collect_wazuhindexer_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
3218 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3219 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Collects the details of the Wazuh-Indexer connector.</span>
3220 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a>
3221 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Args:</span>
3222 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> connector_name (str): The name of the Wazuh-Indexer connector.</span>
3223 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a>
3224 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> Returns:</span>
3225 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> tuple: A tuple containing the connection URL, username, and password.</span>
3226 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> &quot;&quot;&quot;</span>
3227 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">connector_instance</span> <span class="o">=</span> <span class="n">connector_factory</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">connector_name</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">)</span>
3228 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">connection_successful</span> <span class="o">=</span> <span class="n">connector_instance</span><span class="o">.</span><span class="n">verify_connection</span><span class="p">()</span>
3229 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
3230 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="n">connection_details</span> <span class="o">=</span> <span class="n">Connector</span><span class="o">.</span><span class="n">get_connector_info_from_db</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span>
3231 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="p">(</span>
3232 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_url&quot;</span><span class="p">),</span>
3233 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_username&quot;</span><span class="p">),</span>
3234 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_password&quot;</span><span class="p">),</span>
3235 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="p">)</span>
3236 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">else</span><span class="p">:</span>
3237 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
3238 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a>
3239 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">def</span> <span class="nf">collect_indices</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3240 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3241 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Collects the indices from the Wazuh-Indexer.</span>
3242 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a>
3243 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> Returns:</span>
3244 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> list: A list containing the indices.</span>
3245 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> &quot;&quot;&quot;</span>
3246 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="p">(</span>
3247 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span> <span class="ow">is</span> <span class="kc">None</span>
3248 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span> <span class="ow">is</span> <span class="kc">None</span>
3249 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span> <span class="ow">is</span> <span class="kc">None</span>
3250 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="p">):</span>
3251 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">return</span> <span class="p">{</span>
3252 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
3253 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3254 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="p">}</span>
3255 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a>
3256 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">indices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_indices</span><span class="p">()</span>
3257 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a>
3258 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">if</span> <span class="n">indices</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3259 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="n">indices</span>
3260 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a>
3261 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect indices&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
3262 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
3263 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="k">def</span> <span class="nf">_collect_indices</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
3264 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3265 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> Wazuh-Indexer query to retrievce all indices.</span>
3266 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a>
3267 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Returns:</span>
3268 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> Dict[str, object]: _description_</span>
3269 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> &quot;&quot;&quot;</span>
3270 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">try</span><span class="p">:</span>
3271 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="n">indices_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">indices</span><span class="o">.</span><span class="n">get_alias</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span>
3272 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="n">indices_list</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">indices_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
3273 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="k">return</span> <span class="p">{</span>
3274 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected indices&quot;</span><span class="p">,</span>
3275 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3276 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="s2">&quot;indices_list&quot;</span><span class="p">:</span> <span class="n">indices_list</span><span class="p">,</span>
3277 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="p">}</span>
3278 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
3279 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to collect indices: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3280 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect indices&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
3281 +</code></pre></div></td></tr></table></div>
3282 + </details>
3283 +
3284 +
3285 +
3286 + <div class="doc doc-children">
3287 +
3288 +
3289 +
3290 +
3291 +
3292 +
3293 +
3294 +
3295 +
3296 +<div class="doc doc-object doc-function">
3297 +
3298 +
3299 +
3300 +<h3 id="app.services.WazuhIndexer.universal.UniversalService.collect_indices" class="doc doc-heading">
3301 +<code class="highlight language-python"><span class="n">collect_indices</span><span class="p">()</span></code>
3302 +
3303 +</h3>
3304 +
3305 +
3306 + <div class="doc doc-contents ">
3307 +
3308 + <p>Collects the indices from the Wazuh-Indexer.</p>
3309 +
3310 + <p><strong>Returns:</strong></p>
3311 + <table>
3312 + <thead>
3313 + <tr>
3314 +<th>Name</th> <th>Type</th>
3315 + <th>Description</th>
3316 + </tr>
3317 + </thead>
3318 + <tbody>
3319 + <tr>
3320 +<td><code>list</code></td> <td>
3321 + </td>
3322 + <td>
3323 + <div class="doc-md-description">
3324 + <p>A list containing the indices.</p>
3325 + </div>
3326 + </td>
3327 + </tr>
3328 + </tbody>
3329 + </table>
3330 +
3331 + <details class="quote">
3332 + <summary>Source code in <code>app\services\WazuhIndexer\universal.py</code></summary>
3333 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-63">63</a></span>
3334 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
3335 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
3336 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
3337 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
3338 +<span class="normal"><a href="#__codelineno-0-68">68</a></span>
3339 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
3340 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
3341 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
3342 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
3343 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
3344 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
3345 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
3346 +<span class="normal"><a href="#__codelineno-0-76">76</a></span>
3347 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
3348 +<span class="normal"><a href="#__codelineno-0-78">78</a></span>
3349 +<span class="normal"><a href="#__codelineno-0-79">79</a></span>
3350 +<span class="normal"><a href="#__codelineno-0-80">80</a></span>
3351 +<span class="normal"><a href="#__codelineno-0-81">81</a></span>
3352 +<span class="normal"><a href="#__codelineno-0-82">82</a></span>
3353 +<span class="normal"><a href="#__codelineno-0-83">83</a></span>
3354 +<span class="normal"><a href="#__codelineno-0-84">84</a></span>
3355 +<span class="normal"><a href="#__codelineno-0-85">85</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="k">def</span> <span class="nf">collect_indices</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3356 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3357 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Collects the indices from the Wazuh-Indexer.</span>
3358 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a>
3359 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> Returns:</span>
3360 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> list: A list containing the indices.</span>
3361 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> &quot;&quot;&quot;</span>
3362 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="p">(</span>
3363 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span> <span class="ow">is</span> <span class="kc">None</span>
3364 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span> <span class="ow">is</span> <span class="kc">None</span>
3365 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span> <span class="ow">is</span> <span class="kc">None</span>
3366 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="p">):</span>
3367 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">return</span> <span class="p">{</span>
3368 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
3369 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3370 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="p">}</span>
3371 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a>
3372 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">indices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_indices</span><span class="p">()</span>
3373 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a>
3374 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">if</span> <span class="n">indices</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3375 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="n">indices</span>
3376 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a>
3377 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect indices&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
3378 +</code></pre></div></td></tr></table></div>
3379 + </details>
3380 + </div>
3381 +
3382 +</div>
3383 +
3384 +<div class="doc doc-object doc-function">
3385 +
3386 +
3387 +
3388 +<h3 id="app.services.WazuhIndexer.universal.UniversalService.collect_wazuhindexer_details" class="doc doc-heading">
3389 +<code class="highlight language-python"><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span></code>
3390 +
3391 +</h3>
3392 +
3393 +
3394 + <div class="doc doc-contents ">
3395 +
3396 + <p>Collects the details of the Wazuh-Indexer connector.</p>
3397 +
3398 + <p><strong>Parameters:</strong></p>
3399 + <table>
3400 + <thead>
3401 + <tr>
3402 + <th>Name</th>
3403 + <th>Type</th>
3404 + <th>Description</th>
3405 + <th>Default</th>
3406 + </tr>
3407 + </thead>
3408 + <tbody>
3409 + <tr>
3410 + <td><code>connector_name</code></td>
3411 + <td>
3412 + <code>str</code>
3413 + </td>
3414 + <td>
3415 + <div class="doc-md-description">
3416 + <p>The name of the Wazuh-Indexer connector.</p>
3417 + </div>
3418 + </td>
3419 + <td>
3420 + <em>required</em>
3421 + </td>
3422 + </tr>
3423 + </tbody>
3424 + </table>
3425 +
3426 + <p><strong>Returns:</strong></p>
3427 + <table>
3428 + <thead>
3429 + <tr>
3430 +<th>Name</th> <th>Type</th>
3431 + <th>Description</th>
3432 + </tr>
3433 + </thead>
3434 + <tbody>
3435 + <tr>
3436 +<td><code>tuple</code></td> <td>
3437 + </td>
3438 + <td>
3439 + <div class="doc-md-description">
3440 + <p>A tuple containing the connection URL, username, and password.</p>
3441 + </div>
3442 + </td>
3443 + </tr>
3444 + </tbody>
3445 + </table>
3446 +
3447 + <details class="quote">
3448 + <summary>Source code in <code>app\services\WazuhIndexer\universal.py</code></summary>
3449 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-41">41</a></span>
3450 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
3451 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
3452 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
3453 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
3454 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
3455 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
3456 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
3457 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
3458 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
3459 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
3460 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
3461 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
3462 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
3463 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
3464 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
3465 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
3466 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
3467 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
3468 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
3469 +<span class="normal"><a href="#__codelineno-0-61">61</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="k">def</span> <span class="nf">collect_wazuhindexer_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
3470 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3471 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Collects the details of the Wazuh-Indexer connector.</span>
3472 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a>
3473 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Args:</span>
3474 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> connector_name (str): The name of the Wazuh-Indexer connector.</span>
3475 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a>
3476 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> Returns:</span>
3477 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> tuple: A tuple containing the connection URL, username, and password.</span>
3478 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> &quot;&quot;&quot;</span>
3479 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">connector_instance</span> <span class="o">=</span> <span class="n">connector_factory</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">connector_name</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">)</span>
3480 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">connection_successful</span> <span class="o">=</span> <span class="n">connector_instance</span><span class="o">.</span><span class="n">verify_connection</span><span class="p">()</span>
3481 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
3482 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="n">connection_details</span> <span class="o">=</span> <span class="n">Connector</span><span class="o">.</span><span class="n">get_connector_info_from_db</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span>
3483 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="p">(</span>
3484 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_url&quot;</span><span class="p">),</span>
3485 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_username&quot;</span><span class="p">),</span>
3486 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_password&quot;</span><span class="p">),</span>
3487 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="p">)</span>
3488 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">else</span><span class="p">:</span>
3489 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
3490 +</code></pre></div></td></tr></table></div>
3491 + </details>
3492 + </div>
3493 +
3494 +</div>
3495 +
3496 +
3497 +
3498 + </div>
3499 +
3500 + </div>
3501 +
3502 +</div>
3503 +
3504 +
3505 +
3506 +
3507 + </div>
3508 +
3509 + </div>
3510 +
3511 +</div>
3512 +
3513 +
3514 +
3515 +
3516 +
3517 +
3518 + </article>
3519 + </div>
3520 +
3521 +
3522 + <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
3523 +
3524 + </div>
3525 +
3526 + <button type="button" class="md-top md-icon" data-md-component="top" hidden>
3527 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
3528 + Back to top
3529 + </button>
3530 +
3531 + </main>
3532 +
3533 + <footer class="md-footer">
3534 +
3535 + <div class="md-footer-meta md-typeset">
3536 + <div class="md-footer-meta__inner md-grid">
3537 + <div class="md-copyright">
3538 +
3539 + <div class="md-copyright__highlight">
3540 + &copy; 2023 <a href="https://github.com/socfortress/CoPilot" target="_blank" rel="noopener">SOCFortress CoPilot</a>
3541 +
3542 + </div>
3543 +
3544 +
3545 + Made with
3546 + <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
3547 + Material for MkDocs
3548 + </a>
3549 +
3550 +</div>
3551 +
3552 + </div>
3553 + </div>
3554 +</footer>
3555 +
3556 + </div>
3557 + <div class="md-dialog" data-md-component="dialog">
3558 + <div class="md-dialog__inner md-typeset"></div>
3559 + </div>
3560 +
3561 + <script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.sections", "toc.integrate", "navigation.top", "search.suggest", "search.highlight", "content.tabs.link", "content.code.annotation", "content.code.copy"], "search": "../assets/javascripts/workers/search.74e28a9f.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
3562 +
3563 +
3564 + <script src="../assets/javascripts/bundle.220ee61c.min.js"></script>
3565 +
3566 +
3567 + </body>
3568 +</html>
\ No newline at end of file
backend/site/wazuhmanager/index.html
+6596 -895
@@ -12,6 +12,8 @@
12 <link rel="prev" href="../graylog/">
13
14
15 + <link rel="next" href="../velociraptor/">
16 +
17 <link rel="icon" href="../assets/images/favicon.png">
18 <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
19
@@ -196,8 +198,8 @@
198
199
200 <li class="md-tabs__item">
199 - <a href="../alerts/" class="md-tabs__link">
200 - Alerts
201 + <a href="../wazuhindexer/" class="md-tabs__link">
202 + Wazuh-Indexer
203 </a>
204 </li>
205
@@ -208,8 +210,8 @@
210
211
212 <li class="md-tabs__item">
211 - <a href="../artifacts/" class="md-tabs__link">
212 - Artifacts
213 + <a href="../dfiriris/" class="md-tabs__link">
214 + Dfir-Iris
215 </a>
216 </li>
217
@@ -220,8 +222,8 @@
222
223
224 <li class="md-tabs__item">
223 - <a href="../cases/" class="md-tabs__link">
224 - Cases
225 + <a href="../graylog/" class="md-tabs__link">
226 + Graylog
227 </a>
228 </li>
229
@@ -229,11 +231,13 @@
231
232
233
234 +
235 +
236
237
238 <li class="md-tabs__item">
235 - <a href="../graylog/" class="md-tabs__link">
236 - Graylog
239 + <a href="./" class="md-tabs__link md-tabs__link--active">
240 + Wazuh-Manager
241 </a>
242 </li>
243
@@ -241,13 +245,23 @@
245
246
247
244 -
248 +
249 +
250 + <li class="md-tabs__item">
251 + <a href="../velociraptor/" class="md-tabs__link">
252 + Velociraptor
253 + </a>
254 + </li>
255 +
256 +
257 +
258 +
259
260
261
262 <li class="md-tabs__item">
249 - <a href="./" class="md-tabs__link md-tabs__link--active">
250 - Wazuh-Manager
263 + <a href="../shuffle/" class="md-tabs__link">
264 + Shuffle
265 </a>
266 </li>
267
@@ -339,23 +353,8 @@
353
354
355 <li class="md-nav__item">
342 - <a href="../alerts/" class="md-nav__link">
343 - Alerts
344 - </a>
345 - </li>
346 -
347 -
348 -
349 -
350 -
351 -
352 -
353 -
354 -
355 -
356 - <li class="md-nav__item">
357 - <a href="../artifacts/" class="md-nav__link">
358 - Artifacts
356 + <a href="../wazuhindexer/" class="md-nav__link">
357 + Wazuh-Indexer
358 </a>
359 </li>
360
@@ -369,8 +368,8 @@
368
369
370 <li class="md-nav__item">
372 - <a href="../cases/" class="md-nav__link">
373 - Cases
371 + <a href="../dfiriris/" class="md-nav__link">
372 + Dfir-Iris
373 </a>
374 </li>
375
@@ -618,233 +617,5229 @@
617
618 </li>
619
621 - </ul>
620 + <li class="md-nav__item">
621 + <a href="#app.services.WazuhManager.agent" class="md-nav__link">
622 + app.services.WazuhManager.agent
623 + </a>
624
623 -</nav>
625 +</li>
626
625 - </li>
626 -
627 -
628 -
629 - </ul>
630 -</nav>
631 - </div>
632 - </div>
633 - </div>
634 -
635 -
636 -
637 -
638 - <div class="md-content" data-md-component="content">
639 - <article class="md-content__inner md-typeset">
640 -
641 -
642 -
643 -
644 - <h1>Wazuh-Manager</h1>
645 -
646 -<h2 id="wazuh-manager-overview">Wazuh-Manager Overview</h2>
647 -<h3 id="wazuh-manager-model"><span style="color:blue">Wazuh-Manager Model</span></h3>
648 -
649 -
650 -<div class="doc doc-object doc-module">
651 -
652 -
653 -<a id="app.models.rules"></a>
654 - <div class="doc doc-contents first">
655 -
627 + <li class="md-nav__item">
628 + <a href="#app.services.WazuhManager.agent.WazuhHttpRequests" class="md-nav__link">
629 + WazuhHttpRequests
630 + </a>
631
657 -
658 - <div class="doc doc-children">
659 -
660 -
661 -
662 -
663 -
664 -
665 -
666 -
667 -<div class="doc doc-object doc-class">
668 -
669 -
670 -
671 -<h2 id="app.models.rules.DisabledRules" class="doc doc-heading">
672 - <code>DisabledRules</code>
673 -
674 -
675 -</h2>
676 -
677 -
678 - <div class="doc doc-contents ">
679 - <p class="doc doc-class-bases">
680 - Bases: <code><span title="app.db">db</span>.<span title="app.db.Model">Model</span></code></p>
681 -
632 + <nav class="md-nav" aria-label="WazuhHttpRequests">
633 + <ul class="md-nav__list">
634 +
635 + <li class="md-nav__item">
636 + <a href="#app.services.WazuhManager.agent.WazuhHttpRequests.__init__" class="md-nav__link">
637 + __init__()
638 + </a>
639
683 - <p>Class for disabled rules which stores the rule ID, previous configuration, new configuration, reason for
684 -disabling, date disabled, and the length of time the rule will be disabled for.
685 -This class inherits from SQLAlchemy's Model class.</p>
686 -<p>:ivar id: Unique integer ID of the rule.
687 -:ivar rule_id: ID of the rule.
688 -:ivar previous_level: Previous level configuration of the rule.
689 -:ivar new_level: New level configuration of the rule.
690 -:ivar reason_for_disabling: Reason for disabling the rule.
691 -:ivar date_disabled: Date when the rule was disabled.
692 -:ivar length_of_time: Length of time the rule will be disabled for.</p>
693 -
694 -
695 - <details class="quote">
696 - <summary>Source code in <code>app\models\rules.py</code></summary>
697 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-13">13</a></span>
698 -<span class="normal"><a href="#__codelineno-0-14">14</a></span>
699 -<span class="normal"><a href="#__codelineno-0-15">15</a></span>
700 -<span class="normal"><a href="#__codelineno-0-16">16</a></span>
701 -<span class="normal"><a href="#__codelineno-0-17">17</a></span>
702 -<span class="normal"><a href="#__codelineno-0-18">18</a></span>
703 -<span class="normal"><a href="#__codelineno-0-19">19</a></span>
704 -<span class="normal"><a href="#__codelineno-0-20">20</a></span>
705 -<span class="normal"><a href="#__codelineno-0-21">21</a></span>
706 -<span class="normal"><a href="#__codelineno-0-22">22</a></span>
707 -<span class="normal"><a href="#__codelineno-0-23">23</a></span>
708 -<span class="normal"><a href="#__codelineno-0-24">24</a></span>
709 -<span class="normal"><a href="#__codelineno-0-25">25</a></span>
710 -<span class="normal"><a href="#__codelineno-0-26">26</a></span>
711 -<span class="normal"><a href="#__codelineno-0-27">27</a></span>
712 -<span class="normal"><a href="#__codelineno-0-28">28</a></span>
713 -<span class="normal"><a href="#__codelineno-0-29">29</a></span>
714 -<span class="normal"><a href="#__codelineno-0-30">30</a></span>
715 -<span class="normal"><a href="#__codelineno-0-31">31</a></span>
716 -<span class="normal"><a href="#__codelineno-0-32">32</a></span>
717 -<span class="normal"><a href="#__codelineno-0-33">33</a></span>
718 -<span class="normal"><a href="#__codelineno-0-34">34</a></span>
719 -<span class="normal"><a href="#__codelineno-0-35">35</a></span>
720 -<span class="normal"><a href="#__codelineno-0-36">36</a></span>
721 -<span class="normal"><a href="#__codelineno-0-37">37</a></span>
722 -<span class="normal"><a href="#__codelineno-0-38">38</a></span>
723 -<span class="normal"><a href="#__codelineno-0-39">39</a></span>
724 -<span class="normal"><a href="#__codelineno-0-40">40</a></span>
725 -<span class="normal"><a href="#__codelineno-0-41">41</a></span>
726 -<span class="normal"><a href="#__codelineno-0-42">42</a></span>
727 -<span class="normal"><a href="#__codelineno-0-43">43</a></span>
728 -<span class="normal"><a href="#__codelineno-0-44">44</a></span>
729 -<span class="normal"><a href="#__codelineno-0-45">45</a></span>
730 -<span class="normal"><a href="#__codelineno-0-46">46</a></span>
731 -<span class="normal"><a href="#__codelineno-0-47">47</a></span>
732 -<span class="normal"><a href="#__codelineno-0-48">48</a></span>
733 -<span class="normal"><a href="#__codelineno-0-49">49</a></span>
734 -<span class="normal"><a href="#__codelineno-0-50">50</a></span>
735 -<span class="normal"><a href="#__codelineno-0-51">51</a></span>
736 -<span class="normal"><a href="#__codelineno-0-52">52</a></span>
737 -<span class="normal"><a href="#__codelineno-0-53">53</a></span>
738 -<span class="normal"><a href="#__codelineno-0-54">54</a></span>
739 -<span class="normal"><a href="#__codelineno-0-55">55</a></span>
740 -<span class="normal"><a href="#__codelineno-0-56">56</a></span>
741 -<span class="normal"><a href="#__codelineno-0-57">57</a></span>
742 -<span class="normal"><a href="#__codelineno-0-58">58</a></span>
743 -<span class="normal"><a href="#__codelineno-0-59">59</a></span>
744 -<span class="normal"><a href="#__codelineno-0-60">60</a></span>
745 -<span class="normal"><a href="#__codelineno-0-61">61</a></span>
746 -<span class="normal"><a href="#__codelineno-0-62">62</a></span>
747 -<span class="normal"><a href="#__codelineno-0-63">63</a></span>
748 -<span class="normal"><a href="#__codelineno-0-64">64</a></span>
749 -<span class="normal"><a href="#__codelineno-0-65">65</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="k">class</span> <span class="nc">DisabledRules</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
750 -<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
751 -<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> Class for disabled rules which stores the rule ID, previous configuration, new configuration, reason for</span>
752 -<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> disabling, date disabled, and the length of time the rule will be disabled for.</span>
753 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> This class inherits from SQLAlchemy&#39;s Model class.</span>
754 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a>
755 -<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> :ivar id: Unique integer ID of the rule.</span>
756 -<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> :ivar rule_id: ID of the rule.</span>
757 -<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> :ivar previous_level: Previous level configuration of the rule.</span>
758 -<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> :ivar new_level: New level configuration of the rule.</span>
759 -<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> :ivar reason_for_disabling: Reason for disabling the rule.</span>
760 -<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> :ivar date_disabled: Date when the rule was disabled.</span>
761 -<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> :ivar length_of_time: Length of time the rule will be disabled for.</span>
762 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> &quot;&quot;&quot;</span>
763 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a>
764 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="nb">id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> <span class="n">primary_key</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
765 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
766 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">previous_level</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">1000</span><span class="p">))</span>
767 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="n">new_level</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">1000</span><span class="p">))</span>
768 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="n">reason_for_disabling</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
769 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="n">date_disabled</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">DateTime</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">DateTime</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">utcnow</span><span class="p">)</span>
770 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">length_of_time</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">)</span>
771 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a>
772 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
773 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="bp">self</span><span class="p">,</span>
774 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
775 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">previous_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
776 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">new_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
777 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="n">reason_for_disabling</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
778 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">length_of_time</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
779 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="p">):</span>
780 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
781 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Initialize a new instance of the DisabledRules class.</span>
782 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
783 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> :param rule_id: The ID of the rule.</span>
784 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> :param previous_level: The previous level configuration of the rule.</span>
785 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> :param new_level: The new level configuration of the rule.</span>
786 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> :param reason_for_disabling: The reason for disabling the rule.</span>
787 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> :param length_of_time: The length of time the rule will be disabled for.</span>
788 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> &quot;&quot;&quot;</span>
789 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="bp">self</span><span class="o">.</span><span class="n">rule_id</span> <span class="o">=</span> <span class="n">rule_id</span>
790 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="bp">self</span><span class="o">.</span><span class="n">previous_level</span> <span class="o">=</span> <span class="n">previous_level</span>
791 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="bp">self</span><span class="o">.</span><span class="n">new_level</span> <span class="o">=</span> <span class="n">new_level</span>
792 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="bp">self</span><span class="o">.</span><span class="n">reason_for_disabling</span> <span class="o">=</span> <span class="n">reason_for_disabling</span>
793 -<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="bp">self</span><span class="o">.</span><span class="n">length_of_time</span> <span class="o">=</span> <span class="n">length_of_time</span>
794 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a>
795 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
796 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
797 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> Returns a string representation of the DisabledRules instance.</span>
798 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a>
799 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> :return: A string representation of the rule ID.</span>
800 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> &quot;&quot;&quot;</span>
801 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;DisabledRules </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">rule_id</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
802 -</code></pre></div></td></tr></table></div>
803 - </details>
804 -
640 +</li>
641 +
642 + <li class="md-nav__item">
643 + <a href="#app.services.WazuhManager.agent.WazuhHttpRequests.delete_request" class="md-nav__link">
644 + delete_request()
645 + </a>
646
806 -
807 - <div class="doc doc-children">
808 -
809 -
810 -
811 -
812 -
813 -
814 -
815 -
816 -
817 -<div class="doc doc-object doc-function">
818 -
819 -
820 -
821 -<h3 id="app.models.rules.DisabledRules.__init__" class="doc doc-heading">
822 -<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">rule_id</span><span class="p">,</span> <span class="n">previous_level</span><span class="p">,</span> <span class="n">new_level</span><span class="p">,</span> <span class="n">reason_for_disabling</span><span class="p">,</span> <span class="n">length_of_time</span><span class="p">)</span></code>
823 -
824 -</h3>
825 -
826 -
827 - <div class="doc doc-contents ">
647 +</li>
648 +
649 + </ul>
650 + </nav>
651
829 - <p>Initialize a new instance of the DisabledRules class.</p>
830 -<p>:param rule_id: The ID of the rule.
652 +</li>
653 +
654 + <li class="md-nav__item">
655 + <a href="#app.services.WazuhManager.agent.WazuhManagerAgentService" class="md-nav__link">
656 + WazuhManagerAgentService
657 + </a>
658 +
659 + <nav class="md-nav" aria-label="WazuhManagerAgentService">
660 + <ul class="md-nav__list">
661 +
662 + <li class="md-nav__item">
663 + <a href="#app.services.WazuhManager.agent.WazuhManagerAgentService.__init__" class="md-nav__link">
664 + __init__()
665 + </a>
666 +
667 +</li>
668 +
669 + <li class="md-nav__item">
670 + <a href="#app.services.WazuhManager.agent.WazuhManagerAgentService.collect_agents" class="md-nav__link">
671 + collect_agents()
672 + </a>
673 +
674 +</li>
675 +
676 + <li class="md-nav__item">
677 + <a href="#app.services.WazuhManager.agent.WazuhManagerAgentService.delete_agent" class="md-nav__link">
678 + delete_agent()
679 + </a>
680 +
681 +</li>
682 +
683 + </ul>
684 + </nav>
685 +
686 +</li>
687 +
688 + <li class="md-nav__item">
689 + <a href="#app.services.WazuhManager.disabled_rule" class="md-nav__link">
690 + app.services.WazuhManager.disabled_rule
691 + </a>
692 +
693 +</li>
694 +
695 + <li class="md-nav__item">
696 + <a href="#app.services.WazuhManager.disabled_rule.DisableRuleService" class="md-nav__link">
697 + DisableRuleService
698 + </a>
699 +
700 + <nav class="md-nav" aria-label="DisableRuleService">
701 + <ul class="md-nav__list">
702 +
703 + <li class="md-nav__item">
704 + <a href="#app.services.WazuhManager.disabled_rule.DisableRuleService.__init__" class="md-nav__link">
705 + __init__()
706 + </a>
707 +
708 +</li>
709 +
710 + <li class="md-nav__item">
711 + <a href="#app.services.WazuhManager.disabled_rule.DisableRuleService.disable_rule" class="md-nav__link">
712 + disable_rule()
713 + </a>
714 +
715 +</li>
716 +
717 + </ul>
718 + </nav>
719 +
720 +</li>
721 +
722 + <li class="md-nav__item">
723 + <a href="#app.services.WazuhManager.disabled_rule.WazuhHttpRequests" class="md-nav__link">
724 + WazuhHttpRequests
725 + </a>
726 +
727 + <nav class="md-nav" aria-label="WazuhHttpRequests">
728 + <ul class="md-nav__list">
729 +
730 + <li class="md-nav__item">
731 + <a href="#app.services.WazuhManager.disabled_rule.WazuhHttpRequests.__init__" class="md-nav__link">
732 + __init__()
733 + </a>
734 +
735 +</li>
736 +
737 + <li class="md-nav__item">
738 + <a href="#app.services.WazuhManager.disabled_rule.WazuhHttpRequests.get_request" class="md-nav__link">
739 + get_request()
740 + </a>
741 +
742 +</li>
743 +
744 + <li class="md-nav__item">
745 + <a href="#app.services.WazuhManager.disabled_rule.WazuhHttpRequests.put_request" class="md-nav__link">
746 + put_request()
747 + </a>
748 +
749 +</li>
750 +
751 + </ul>
752 + </nav>
753 +
754 +</li>
755 +
756 + <li class="md-nav__item">
757 + <a href="#app.services.WazuhManager.enabled_rule" class="md-nav__link">
758 + app.services.WazuhManager.enabled_rule
759 + </a>
760 +
761 +</li>
762 +
763 + <li class="md-nav__item">
764 + <a href="#app.services.WazuhManager.enabled_rule.EnableRuleService" class="md-nav__link">
765 + EnableRuleService
766 + </a>
767 +
768 + <nav class="md-nav" aria-label="EnableRuleService">
769 + <ul class="md-nav__list">
770 +
771 + <li class="md-nav__item">
772 + <a href="#app.services.WazuhManager.enabled_rule.EnableRuleService.__init__" class="md-nav__link">
773 + __init__()
774 + </a>
775 +
776 +</li>
777 +
778 + <li class="md-nav__item">
779 + <a href="#app.services.WazuhManager.enabled_rule.EnableRuleService.enable_rule" class="md-nav__link">
780 + enable_rule()
781 + </a>
782 +
783 +</li>
784 +
785 + </ul>
786 + </nav>
787 +
788 +</li>
789 +
790 + <li class="md-nav__item">
791 + <a href="#app.services.WazuhManager.enabled_rule.WazuhHttpRequests" class="md-nav__link">
792 + WazuhHttpRequests
793 + </a>
794 +
795 + <nav class="md-nav" aria-label="WazuhHttpRequests">
796 + <ul class="md-nav__list">
797 +
798 + <li class="md-nav__item">
799 + <a href="#app.services.WazuhManager.enabled_rule.WazuhHttpRequests.__init__" class="md-nav__link">
800 + __init__()
801 + </a>
802 +
803 +</li>
804 +
805 + <li class="md-nav__item">
806 + <a href="#app.services.WazuhManager.enabled_rule.WazuhHttpRequests.get_request" class="md-nav__link">
807 + get_request()
808 + </a>
809 +
810 +</li>
811 +
812 + <li class="md-nav__item">
813 + <a href="#app.services.WazuhManager.enabled_rule.WazuhHttpRequests.put_request" class="md-nav__link">
814 + put_request()
815 + </a>
816 +
817 +</li>
818 +
819 + </ul>
820 + </nav>
821 +
822 +</li>
823 +
824 + <li class="md-nav__item">
825 + <a href="#app.services.WazuhManager.universal" class="md-nav__link">
826 + app.services.WazuhManager.universal
827 + </a>
828 +
829 +</li>
830 +
831 + <li class="md-nav__item">
832 + <a href="#app.services.WazuhManager.universal.UniversalService" class="md-nav__link">
833 + UniversalService
834 + </a>
835 +
836 + <nav class="md-nav" aria-label="UniversalService">
837 + <ul class="md-nav__list">
838 +
839 + <li class="md-nav__item">
840 + <a href="#app.services.WazuhManager.universal.UniversalService.__init__" class="md-nav__link">
841 + __init__()
842 + </a>
843 +
844 +</li>
845 +
846 + <li class="md-nav__item">
847 + <a href="#app.services.WazuhManager.universal.UniversalService.collect_wazuhmanager_details" class="md-nav__link">
848 + collect_wazuhmanager_details()
849 + </a>
850 +
851 +</li>
852 +
853 + <li class="md-nav__item">
854 + <a href="#app.services.WazuhManager.universal.UniversalService.get_auth_token" class="md-nav__link">
855 + get_auth_token()
856 + </a>
857 +
858 +</li>
859 +
860 + <li class="md-nav__item">
861 + <a href="#app.services.WazuhManager.universal.UniversalService.restart_service" class="md-nav__link">
862 + restart_service()
863 + </a>
864 +
865 +</li>
866 +
867 + </ul>
868 + </nav>
869 +
870 +</li>
871 +
872 + <li class="md-nav__item">
873 + <a href="#app.services.WazuhManager.vulnerability" class="md-nav__link">
874 + app.services.WazuhManager.vulnerability
875 + </a>
876 +
877 +</li>
878 +
879 + <li class="md-nav__item">
880 + <a href="#app.services.WazuhManager.vulnerability.VulnerabilityService" class="md-nav__link">
881 + VulnerabilityService
882 + </a>
883 +
884 + <nav class="md-nav" aria-label="VulnerabilityService">
885 + <ul class="md-nav__list">
886 +
887 + <li class="md-nav__item">
888 + <a href="#app.services.WazuhManager.vulnerability.VulnerabilityService.__init__" class="md-nav__link">
889 + __init__()
890 + </a>
891 +
892 +</li>
893 +
894 + <li class="md-nav__item">
895 + <a href="#app.services.WazuhManager.vulnerability.VulnerabilityService.agent_vulnerabilities" class="md-nav__link">
896 + agent_vulnerabilities()
897 + </a>
898 +
899 +</li>
900 +
901 + </ul>
902 + </nav>
903 +
904 +</li>
905 +
906 + <li class="md-nav__item">
907 + <a href="#app.services.WazuhManager.vulnerability.WazuhHttpRequests" class="md-nav__link">
908 + WazuhHttpRequests
909 + </a>
910 +
911 + <nav class="md-nav" aria-label="WazuhHttpRequests">
912 + <ul class="md-nav__list">
913 +
914 + <li class="md-nav__item">
915 + <a href="#app.services.WazuhManager.vulnerability.WazuhHttpRequests.__init__" class="md-nav__link">
916 + __init__()
917 + </a>
918 +
919 +</li>
920 +
921 + <li class="md-nav__item">
922 + <a href="#app.services.WazuhManager.vulnerability.WazuhHttpRequests.get_request" class="md-nav__link">
923 + get_request()
924 + </a>
925 +
926 +</li>
927 +
928 + </ul>
929 + </nav>
930 +
931 +</li>
932 +
933 + </ul>
934 +
935 +</nav>
936 +
937 + </li>
938 +
939 +
940 +
941 +
942 +
943 +
944 +
945 +
946 +
947 +
948 + <li class="md-nav__item">
949 + <a href="../velociraptor/" class="md-nav__link">
950 + Velociraptor
951 + </a>
952 + </li>
953 +
954 +
955 +
956 +
957 +
958 +
959 +
960 +
961 +
962 +
963 + <li class="md-nav__item">
964 + <a href="../shuffle/" class="md-nav__link">
965 + Shuffle
966 + </a>
967 + </li>
968 +
969 +
970 +
971 + </ul>
972 +</nav>
973 + </div>
974 + </div>
975 + </div>
976 +
977 +
978 +
979 +
980 + <div class="md-content" data-md-component="content">
981 + <article class="md-content__inner md-typeset">
982 +
983 +
984 +
985 +
986 + <h1>Wazuh-Manager</h1>
987 +
988 +<h2 id="wazuh-manager-overview">Wazuh-Manager Overview</h2>
989 +<h3 id="wazuh-manager-model"><span style="color:blue">Wazuh-Manager Model</span></h3>
990 +
991 +
992 +<div class="doc doc-object doc-module">
993 +
994 +
995 +<a id="app.models.rules"></a>
996 + <div class="doc doc-contents first">
997 +
998 +
999 +
1000 + <div class="doc doc-children">
1001 +
1002 +
1003 +
1004 +
1005 +
1006 +
1007 +
1008 +
1009 +<div class="doc doc-object doc-class">
1010 +
1011 +
1012 +
1013 +<h2 id="app.models.rules.DisabledRules" class="doc doc-heading">
1014 + <code>DisabledRules</code>
1015 +
1016 +
1017 +</h2>
1018 +
1019 +
1020 + <div class="doc doc-contents ">
1021 + <p class="doc doc-class-bases">
1022 + Bases: <code><span title="app.db">db</span>.<span title="app.db.Model">Model</span></code></p>
1023 +
1024 +
1025 + <p>Class for disabled rules which stores the rule ID, previous configuration, new configuration, reason for
1026 +disabling, date disabled, and the length of time the rule will be disabled for.
1027 +This class inherits from SQLAlchemy's Model class.</p>
1028 +<p>:ivar id: Unique integer ID of the rule.
1029 +:ivar rule_id: ID of the rule.
1030 +:ivar previous_level: Previous level configuration of the rule.
1031 +:ivar new_level: New level configuration of the rule.
1032 +:ivar reason_for_disabling: Reason for disabling the rule.
1033 +:ivar date_disabled: Date when the rule was disabled.
1034 +:ivar length_of_time: Length of time the rule will be disabled for.</p>
1035 +
1036 +
1037 + <details class="quote">
1038 + <summary>Source code in <code>app\models\rules.py</code></summary>
1039 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-13">13</a></span>
1040 +<span class="normal"><a href="#__codelineno-0-14">14</a></span>
1041 +<span class="normal"><a href="#__codelineno-0-15">15</a></span>
1042 +<span class="normal"><a href="#__codelineno-0-16">16</a></span>
1043 +<span class="normal"><a href="#__codelineno-0-17">17</a></span>
1044 +<span class="normal"><a href="#__codelineno-0-18">18</a></span>
1045 +<span class="normal"><a href="#__codelineno-0-19">19</a></span>
1046 +<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1047 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1048 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1049 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1050 +<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1051 +<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1052 +<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1053 +<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1054 +<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1055 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1056 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1057 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1058 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1059 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1060 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1061 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1062 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1063 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1064 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1065 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1066 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1067 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1068 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1069 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1070 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1071 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1072 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1073 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1074 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1075 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1076 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1077 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1078 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1079 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1080 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1081 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1082 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1083 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
1084 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
1085 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1086 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1087 +<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1088 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1089 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1090 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1091 +<span class="normal"><a href="#__codelineno-0-65">65</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="k">class</span> <span class="nc">DisabledRules</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
1092 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1093 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> Class for disabled rules which stores the rule ID, previous configuration, new configuration, reason for</span>
1094 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> disabling, date disabled, and the length of time the rule will be disabled for.</span>
1095 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> This class inherits from SQLAlchemy&#39;s Model class.</span>
1096 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a>
1097 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> :ivar id: Unique integer ID of the rule.</span>
1098 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> :ivar rule_id: ID of the rule.</span>
1099 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> :ivar previous_level: Previous level configuration of the rule.</span>
1100 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> :ivar new_level: New level configuration of the rule.</span>
1101 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> :ivar reason_for_disabling: Reason for disabling the rule.</span>
1102 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> :ivar date_disabled: Date when the rule was disabled.</span>
1103 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> :ivar length_of_time: Length of time the rule will be disabled for.</span>
1104 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> &quot;&quot;&quot;</span>
1105 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a>
1106 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="nb">id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> <span class="n">primary_key</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1107 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
1108 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">previous_level</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">1000</span><span class="p">))</span>
1109 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="n">new_level</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">1000</span><span class="p">))</span>
1110 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="n">reason_for_disabling</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
1111 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="n">date_disabled</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">DateTime</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">DateTime</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">utcnow</span><span class="p">)</span>
1112 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">length_of_time</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">)</span>
1113 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a>
1114 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
1115 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="bp">self</span><span class="p">,</span>
1116 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1117 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">previous_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1118 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">new_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1119 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="n">reason_for_disabling</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1120 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">length_of_time</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
1121 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="p">):</span>
1122 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1123 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Initialize a new instance of the DisabledRules class.</span>
1124 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
1125 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> :param rule_id: The ID of the rule.</span>
1126 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> :param previous_level: The previous level configuration of the rule.</span>
1127 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> :param new_level: The new level configuration of the rule.</span>
1128 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> :param reason_for_disabling: The reason for disabling the rule.</span>
1129 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> :param length_of_time: The length of time the rule will be disabled for.</span>
1130 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> &quot;&quot;&quot;</span>
1131 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="bp">self</span><span class="o">.</span><span class="n">rule_id</span> <span class="o">=</span> <span class="n">rule_id</span>
1132 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="bp">self</span><span class="o">.</span><span class="n">previous_level</span> <span class="o">=</span> <span class="n">previous_level</span>
1133 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="bp">self</span><span class="o">.</span><span class="n">new_level</span> <span class="o">=</span> <span class="n">new_level</span>
1134 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="bp">self</span><span class="o">.</span><span class="n">reason_for_disabling</span> <span class="o">=</span> <span class="n">reason_for_disabling</span>
1135 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="bp">self</span><span class="o">.</span><span class="n">length_of_time</span> <span class="o">=</span> <span class="n">length_of_time</span>
1136 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a>
1137 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
1138 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1139 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> Returns a string representation of the DisabledRules instance.</span>
1140 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a>
1141 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> :return: A string representation of the rule ID.</span>
1142 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> &quot;&quot;&quot;</span>
1143 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;DisabledRules </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">rule_id</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
1144 +</code></pre></div></td></tr></table></div>
1145 + </details>
1146 +
1147 +
1148 +
1149 + <div class="doc doc-children">
1150 +
1151 +
1152 +
1153 +
1154 +
1155 +
1156 +
1157 +
1158 +
1159 +<div class="doc doc-object doc-function">
1160 +
1161 +
1162 +
1163 +<h3 id="app.models.rules.DisabledRules.__init__" class="doc doc-heading">
1164 +<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">rule_id</span><span class="p">,</span> <span class="n">previous_level</span><span class="p">,</span> <span class="n">new_level</span><span class="p">,</span> <span class="n">reason_for_disabling</span><span class="p">,</span> <span class="n">length_of_time</span><span class="p">)</span></code>
1165 +
1166 +</h3>
1167 +
1168 +
1169 + <div class="doc doc-contents ">
1170 +
1171 + <p>Initialize a new instance of the DisabledRules class.</p>
1172 +<p>:param rule_id: The ID of the rule.
1173 :param previous_level: The previous level configuration of the rule.
1174 :param new_level: The new level configuration of the rule.
1175 :param reason_for_disabling: The reason for disabling the rule.
1176 :param length_of_time: The length of time the rule will be disabled for.</p>
1177
1178 <details class="quote">
837 - <summary>Source code in <code>app\models\rules.py</code></summary>
838 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-36">36</a></span>
1179 + <summary>Source code in <code>app\models\rules.py</code></summary>
1180 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-36">36</a></span>
1181 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1182 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1183 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1184 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1185 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1186 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1187 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1188 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1189 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1190 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1191 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1192 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1193 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1194 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1195 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1196 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1197 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1198 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1199 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1200 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1201 +<span class="normal"><a href="#__codelineno-0-57">57</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
1202 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="bp">self</span><span class="p">,</span>
1203 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1204 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">previous_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1205 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">new_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1206 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="n">reason_for_disabling</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1207 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">length_of_time</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
1208 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="p">):</span>
1209 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1210 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Initialize a new instance of the DisabledRules class.</span>
1211 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
1212 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> :param rule_id: The ID of the rule.</span>
1213 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> :param previous_level: The previous level configuration of the rule.</span>
1214 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> :param new_level: The new level configuration of the rule.</span>
1215 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> :param reason_for_disabling: The reason for disabling the rule.</span>
1216 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> :param length_of_time: The length of time the rule will be disabled for.</span>
1217 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> &quot;&quot;&quot;</span>
1218 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="bp">self</span><span class="o">.</span><span class="n">rule_id</span> <span class="o">=</span> <span class="n">rule_id</span>
1219 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="bp">self</span><span class="o">.</span><span class="n">previous_level</span> <span class="o">=</span> <span class="n">previous_level</span>
1220 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="bp">self</span><span class="o">.</span><span class="n">new_level</span> <span class="o">=</span> <span class="n">new_level</span>
1221 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="bp">self</span><span class="o">.</span><span class="n">reason_for_disabling</span> <span class="o">=</span> <span class="n">reason_for_disabling</span>
1222 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="bp">self</span><span class="o">.</span><span class="n">length_of_time</span> <span class="o">=</span> <span class="n">length_of_time</span>
1223 +</code></pre></div></td></tr></table></div>
1224 + </details>
1225 + </div>
1226 +
1227 +</div>
1228 +
1229 +<div class="doc doc-object doc-function">
1230 +
1231 +
1232 +
1233 +<h3 id="app.models.rules.DisabledRules.__repr__" class="doc doc-heading">
1234 +<code class="highlight language-python"><span class="fm">__repr__</span><span class="p">()</span></code>
1235 +
1236 +</h3>
1237 +
1238 +
1239 + <div class="doc doc-contents ">
1240 +
1241 + <p>Returns a string representation of the DisabledRules instance.</p>
1242 +<p>:return: A string representation of the rule ID.</p>
1243 +
1244 + <details class="quote">
1245 + <summary>Source code in <code>app\models\rules.py</code></summary>
1246 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-59">59</a></span>
1247 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1248 +<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1249 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1250 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1251 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1252 +<span class="normal"><a href="#__codelineno-0-65">65</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
1253 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1254 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> Returns a string representation of the DisabledRules instance.</span>
1255 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a>
1256 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> :return: A string representation of the rule ID.</span>
1257 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> &quot;&quot;&quot;</span>
1258 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;DisabledRules </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">rule_id</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
1259 +</code></pre></div></td></tr></table></div>
1260 + </details>
1261 + </div>
1262 +
1263 +</div>
1264 +
1265 +
1266 +
1267 + </div>
1268 +
1269 + </div>
1270 +
1271 +</div>
1272 +
1273 +<div class="doc doc-object doc-class">
1274 +
1275 +
1276 +
1277 +<h2 id="app.models.rules.DisabledRulesSchema" class="doc doc-heading">
1278 + <code>DisabledRulesSchema</code>
1279 +
1280 +
1281 +</h2>
1282 +
1283 +
1284 + <div class="doc doc-contents ">
1285 + <p class="doc doc-class-bases">
1286 + Bases: <code><span title="app.ma">ma</span>.<span title="app.ma.Schema">Schema</span></code></p>
1287 +
1288 +
1289 + <p>Schema for serializing and deserializing instances of the DisabledRules class.</p>
1290 +
1291 +
1292 + <details class="quote">
1293 + <summary>Source code in <code>app\models\rules.py</code></summary>
1294 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-68">68</a></span>
1295 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1296 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1297 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1298 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1299 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1300 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1301 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1302 +<span class="normal"><a href="#__codelineno-0-76">76</a></span>
1303 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1304 +<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1305 +<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1306 +<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1307 +<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1308 +<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1309 +<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1310 +<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1311 +<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1312 +<span class="normal"><a href="#__codelineno-0-86">86</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="k">class</span> <span class="nc">DisabledRulesSchema</span><span class="p">(</span><span class="n">ma</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
1313 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1314 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sd"> Schema for serializing and deserializing instances of the DisabledRules class.</span>
1315 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="sd"> &quot;&quot;&quot;</span>
1316 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
1317 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
1318 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1319 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
1320 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="sd"> &quot;&quot;&quot;</span>
1321 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a>
1322 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
1323 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="s2">&quot;id&quot;</span><span class="p">,</span>
1324 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="s2">&quot;rule_id&quot;</span><span class="p">,</span>
1325 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="s2">&quot;previous_level&quot;</span><span class="p">,</span>
1326 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="s2">&quot;new_level&quot;</span><span class="p">,</span>
1327 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="s2">&quot;reason_for_disabling&quot;</span><span class="p">,</span>
1328 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">&quot;date_disabled&quot;</span><span class="p">,</span>
1329 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">&quot;length_of_time&quot;</span><span class="p">,</span>
1330 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">)</span>
1331 +</code></pre></div></td></tr></table></div>
1332 + </details>
1333 +
1334 +
1335 +
1336 + <div class="doc doc-children">
1337 +
1338 +
1339 +
1340 +
1341 +
1342 +
1343 +
1344 +
1345 +<div class="doc doc-object doc-class">
1346 +
1347 +
1348 +
1349 +<h3 id="app.models.rules.DisabledRulesSchema.Meta" class="doc doc-heading">
1350 + <code>Meta</code>
1351 +
1352 +
1353 +</h3>
1354 +
1355 +
1356 + <div class="doc doc-contents ">
1357 +
1358 +
1359 + <p>Meta class defines the fields to be serialized/deserialized.</p>
1360 +
1361 +
1362 + <details class="quote">
1363 + <summary>Source code in <code>app\models\rules.py</code></summary>
1364 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-73">73</a></span>
1365 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1366 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1367 +<span class="normal"><a href="#__codelineno-0-76">76</a></span>
1368 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1369 +<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1370 +<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1371 +<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1372 +<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1373 +<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1374 +<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1375 +<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1376 +<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1377 +<span class="normal"><a href="#__codelineno-0-86">86</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
1378 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1379 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
1380 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="sd"> &quot;&quot;&quot;</span>
1381 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a>
1382 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
1383 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="s2">&quot;id&quot;</span><span class="p">,</span>
1384 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="s2">&quot;rule_id&quot;</span><span class="p">,</span>
1385 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="s2">&quot;previous_level&quot;</span><span class="p">,</span>
1386 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="s2">&quot;new_level&quot;</span><span class="p">,</span>
1387 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="s2">&quot;reason_for_disabling&quot;</span><span class="p">,</span>
1388 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">&quot;date_disabled&quot;</span><span class="p">,</span>
1389 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">&quot;length_of_time&quot;</span><span class="p">,</span>
1390 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">)</span>
1391 +</code></pre></div></td></tr></table></div>
1392 + </details>
1393 +
1394 +
1395 +
1396 + <div class="doc doc-children">
1397 +
1398 +
1399 +
1400 +
1401 +
1402 +
1403 +
1404 +
1405 +
1406 +
1407 +
1408 + </div>
1409 +
1410 + </div>
1411 +
1412 +</div>
1413 +
1414 +
1415 +
1416 +
1417 + </div>
1418 +
1419 + </div>
1420 +
1421 +</div>
1422 +
1423 +
1424 +
1425 +
1426 + </div>
1427 +
1428 + </div>
1429 +
1430 +</div>
1431 +
1432 +<div class="doc doc-object doc-module">
1433 +
1434 +
1435 +<a id="app.models.agents"></a>
1436 + <div class="doc doc-contents first">
1437 +
1438 +
1439 +
1440 + <div class="doc doc-children">
1441 +
1442 +
1443 +
1444 +
1445 +
1446 +
1447 +
1448 +
1449 +<div class="doc doc-object doc-class">
1450 +
1451 +
1452 +
1453 +<h2 id="app.models.agents.AgentMetadata" class="doc doc-heading">
1454 + <code>AgentMetadata</code>
1455 +
1456 +
1457 +</h2>
1458 +
1459 +
1460 + <div class="doc doc-contents ">
1461 + <p class="doc doc-class-bases">
1462 + Bases: <code><span title="app.db">db</span>.<span title="app.db.Model">Model</span></code></p>
1463 +
1464 +
1465 + <p>Class for agent metadata which stores the agent ID, IP address, hostname, OS, last seen timestamp,
1466 +and boolean for critical asset. This class inherits from SQLAlchemy's Model class.</p>
1467 +
1468 +
1469 + <details class="quote">
1470 + <summary>Source code in <code>app\models\agents.py</code></summary>
1471 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-14">14</a></span>
1472 +<span class="normal"><a href="#__codelineno-0-15">15</a></span>
1473 +<span class="normal"><a href="#__codelineno-0-16">16</a></span>
1474 +<span class="normal"><a href="#__codelineno-0-17">17</a></span>
1475 +<span class="normal"><a href="#__codelineno-0-18">18</a></span>
1476 +<span class="normal"><a href="#__codelineno-0-19">19</a></span>
1477 +<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1478 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1479 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1480 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1481 +<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1482 +<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1483 +<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1484 +<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1485 +<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1486 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1487 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1488 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1489 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1490 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1491 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1492 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1493 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1494 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1495 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1496 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1497 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1498 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1499 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1500 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1501 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1502 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1503 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1504 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1505 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1506 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1507 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1508 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1509 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1510 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1511 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1512 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1513 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1514 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
1515 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
1516 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1517 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1518 +<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1519 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1520 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1521 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1522 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1523 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1524 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1525 +<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1526 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1527 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1528 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1529 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1530 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1531 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1532 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1533 +<span class="normal"><a href="#__codelineno-0-76">76</a></span>
1534 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1535 +<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1536 +<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1537 +<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1538 +<span class="normal"><a href="#__codelineno-0-81">81</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="k">class</span> <span class="nc">AgentMetadata</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
1539 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1540 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> Class for agent metadata which stores the agent ID, IP address, hostname, OS, last seen timestamp,</span>
1541 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> and boolean for critical asset. This class inherits from SQLAlchemy&#39;s Model class.</span>
1542 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> &quot;&quot;&quot;</span>
1543 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a>
1544 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="nb">id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> <span class="n">primary_key</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1545 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="n">agent_id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
1546 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="n">ip_address</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
1547 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="n">os</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
1548 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="n">hostname</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
1549 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">critical_asset</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Boolean</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Boolean</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1550 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="n">last_seen</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">DateTime</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">DateTime</span><span class="p">)</span>
1551 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a>
1552 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
1553 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="p">,</span>
1554 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">agent_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1555 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="n">ip_address</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1556 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="n">os</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1557 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="n">hostname</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1558 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">critical_asset</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
1559 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="n">last_seen</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span>
1560 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="p">):</span>
1561 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1562 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> Initialize a new instance of the AgentMetadata class.</span>
1563 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a>
1564 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> :param agent_id: Unique ID for the agent.</span>
1565 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> :param ip_address: IP address of the agent.</span>
1566 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> :param os: Operating system of the agent.</span>
1567 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> :param hostname: Hostname of the agent.</span>
1568 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> :param critical_asset: Boolean value indicating if the agent is a critical asset.</span>
1569 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> :param last_seen: Timestamp of when the agent was last seen.</span>
1570 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> &quot;&quot;&quot;</span>
1571 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agent_id</span> <span class="o">=</span> <span class="n">agent_id</span>
1572 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="bp">self</span><span class="o">.</span><span class="n">ip_address</span> <span class="o">=</span> <span class="n">ip_address</span>
1573 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="bp">self</span><span class="o">.</span><span class="n">os</span> <span class="o">=</span> <span class="n">os</span>
1574 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="bp">self</span><span class="o">.</span><span class="n">hostname</span> <span class="o">=</span> <span class="n">hostname</span>
1575 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="bp">self</span><span class="o">.</span><span class="n">critical_asset</span> <span class="o">=</span> <span class="n">critical_asset</span>
1576 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="bp">self</span><span class="o">.</span><span class="n">last_seen</span> <span class="o">=</span> <span class="n">last_seen</span>
1577 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a>
1578 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
1579 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1580 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Returns a string representation of the AgentMetadata instance.</span>
1581 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
1582 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> :return: A string representation of the agent ID.</span>
1583 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> &quot;&quot;&quot;</span>
1584 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;AgentMetadata </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">agent_id</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
1585 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
1586 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="k">def</span> <span class="nf">mark_as_critical</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1587 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1588 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Marks the agent as a critical asset.</span>
1589 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> &quot;&quot;&quot;</span>
1590 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="bp">self</span><span class="o">.</span><span class="n">critical_asset</span> <span class="o">=</span> <span class="kc">True</span>
1591 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
1592 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
1593 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">def</span> <span class="nf">mark_as_non_critical</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1594 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1595 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="sd"> Marks the agent as a non-critical asset.</span>
1596 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd"> &quot;&quot;&quot;</span>
1597 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="bp">self</span><span class="o">.</span><span class="n">critical_asset</span> <span class="o">=</span> <span class="kc">False</span>
1598 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
1599 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
1600 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">def</span> <span class="nf">commit_wazuh_agent_to_db</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1601 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1602 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> Commits the agent to the database.</span>
1603 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="sd"> &quot;&quot;&quot;</span>
1604 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
1605 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
1606 +</code></pre></div></td></tr></table></div>
1607 + </details>
1608 +
1609 +
1610 +
1611 + <div class="doc doc-children">
1612 +
1613 +
1614 +
1615 +
1616 +
1617 +
1618 +
1619 +
1620 +
1621 +<div class="doc doc-object doc-function">
1622 +
1623 +
1624 +
1625 +<h3 id="app.models.agents.AgentMetadata.__init__" class="doc doc-heading">
1626 +<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">agent_id</span><span class="p">,</span> <span class="n">ip_address</span><span class="p">,</span> <span class="n">os</span><span class="p">,</span> <span class="n">hostname</span><span class="p">,</span> <span class="n">critical_asset</span><span class="p">,</span> <span class="n">last_seen</span><span class="p">)</span></code>
1627 +
1628 +</h3>
1629 +
1630 +
1631 + <div class="doc doc-contents ">
1632 +
1633 + <p>Initialize a new instance of the AgentMetadata class.</p>
1634 +<p>:param agent_id: Unique ID for the agent.
1635 +:param ip_address: IP address of the agent.
1636 +:param os: Operating system of the agent.
1637 +:param hostname: Hostname of the agent.
1638 +:param critical_asset: Boolean value indicating if the agent is a critical asset.
1639 +:param last_seen: Timestamp of when the agent was last seen.</p>
1640 +
1641 + <details class="quote">
1642 + <summary>Source code in <code>app\models\agents.py</code></summary>
1643 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-28">28</a></span>
1644 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1645 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1646 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1647 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1648 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1649 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1650 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1651 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1652 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1653 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1654 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1655 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1656 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1657 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1658 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1659 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1660 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1661 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1662 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1663 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1664 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1665 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1666 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1667 +<span class="normal"><a href="#__codelineno-0-52">52</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
1668 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="p">,</span>
1669 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">agent_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1670 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="n">ip_address</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1671 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="n">os</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1672 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="n">hostname</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1673 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">critical_asset</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
1674 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="n">last_seen</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span>
1675 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="p">):</span>
1676 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1677 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> Initialize a new instance of the AgentMetadata class.</span>
1678 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a>
1679 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> :param agent_id: Unique ID for the agent.</span>
1680 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> :param ip_address: IP address of the agent.</span>
1681 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> :param os: Operating system of the agent.</span>
1682 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> :param hostname: Hostname of the agent.</span>
1683 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> :param critical_asset: Boolean value indicating if the agent is a critical asset.</span>
1684 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> :param last_seen: Timestamp of when the agent was last seen.</span>
1685 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> &quot;&quot;&quot;</span>
1686 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agent_id</span> <span class="o">=</span> <span class="n">agent_id</span>
1687 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="bp">self</span><span class="o">.</span><span class="n">ip_address</span> <span class="o">=</span> <span class="n">ip_address</span>
1688 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="bp">self</span><span class="o">.</span><span class="n">os</span> <span class="o">=</span> <span class="n">os</span>
1689 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="bp">self</span><span class="o">.</span><span class="n">hostname</span> <span class="o">=</span> <span class="n">hostname</span>
1690 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="bp">self</span><span class="o">.</span><span class="n">critical_asset</span> <span class="o">=</span> <span class="n">critical_asset</span>
1691 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="bp">self</span><span class="o">.</span><span class="n">last_seen</span> <span class="o">=</span> <span class="n">last_seen</span>
1692 +</code></pre></div></td></tr></table></div>
1693 + </details>
1694 + </div>
1695 +
1696 +</div>
1697 +
1698 +<div class="doc doc-object doc-function">
1699 +
1700 +
1701 +
1702 +<h3 id="app.models.agents.AgentMetadata.__repr__" class="doc doc-heading">
1703 +<code class="highlight language-python"><span class="fm">__repr__</span><span class="p">()</span></code>
1704 +
1705 +</h3>
1706 +
1707 +
1708 + <div class="doc doc-contents ">
1709 +
1710 + <p>Returns a string representation of the AgentMetadata instance.</p>
1711 +<p>:return: A string representation of the agent ID.</p>
1712 +
1713 + <details class="quote">
1714 + <summary>Source code in <code>app\models\agents.py</code></summary>
1715 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-54">54</a></span>
1716 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1717 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1718 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
1719 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
1720 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1721 +<span class="normal"><a href="#__codelineno-0-60">60</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
1722 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1723 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Returns a string representation of the AgentMetadata instance.</span>
1724 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
1725 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> :return: A string representation of the agent ID.</span>
1726 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> &quot;&quot;&quot;</span>
1727 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;AgentMetadata </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">agent_id</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
1728 +</code></pre></div></td></tr></table></div>
1729 + </details>
1730 + </div>
1731 +
1732 +</div>
1733 +
1734 +<div class="doc doc-object doc-function">
1735 +
1736 +
1737 +
1738 +<h3 id="app.models.agents.AgentMetadata.commit_wazuh_agent_to_db" class="doc doc-heading">
1739 +<code class="highlight language-python"><span class="n">commit_wazuh_agent_to_db</span><span class="p">()</span></code>
1740 +
1741 +</h3>
1742 +
1743 +
1744 + <div class="doc doc-contents ">
1745 +
1746 + <p>Commits the agent to the database.</p>
1747 +
1748 + <details class="quote">
1749 + <summary>Source code in <code>app\models\agents.py</code></summary>
1750 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-76">76</a></span>
1751 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1752 +<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1753 +<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1754 +<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1755 +<span class="normal"><a href="#__codelineno-0-81">81</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="k">def</span> <span class="nf">commit_wazuh_agent_to_db</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1756 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1757 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> Commits the agent to the database.</span>
1758 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="sd"> &quot;&quot;&quot;</span>
1759 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
1760 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
1761 +</code></pre></div></td></tr></table></div>
1762 + </details>
1763 + </div>
1764 +
1765 +</div>
1766 +
1767 +<div class="doc doc-object doc-function">
1768 +
1769 +
1770 +
1771 +<h3 id="app.models.agents.AgentMetadata.mark_as_critical" class="doc doc-heading">
1772 +<code class="highlight language-python"><span class="n">mark_as_critical</span><span class="p">()</span></code>
1773 +
1774 +</h3>
1775 +
1776 +
1777 + <div class="doc doc-contents ">
1778 +
1779 + <p>Marks the agent as a critical asset.</p>
1780 +
1781 + <details class="quote">
1782 + <summary>Source code in <code>app\models\agents.py</code></summary>
1783 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-62">62</a></span>
1784 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1785 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1786 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1787 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1788 +<span class="normal"><a href="#__codelineno-0-67">67</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="k">def</span> <span class="nf">mark_as_critical</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1789 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1790 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Marks the agent as a critical asset.</span>
1791 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> &quot;&quot;&quot;</span>
1792 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="bp">self</span><span class="o">.</span><span class="n">critical_asset</span> <span class="o">=</span> <span class="kc">True</span>
1793 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
1794 +</code></pre></div></td></tr></table></div>
1795 + </details>
1796 + </div>
1797 +
1798 +</div>
1799 +
1800 +<div class="doc doc-object doc-function">
1801 +
1802 +
1803 +
1804 +<h3 id="app.models.agents.AgentMetadata.mark_as_non_critical" class="doc doc-heading">
1805 +<code class="highlight language-python"><span class="n">mark_as_non_critical</span><span class="p">()</span></code>
1806 +
1807 +</h3>
1808 +
1809 +
1810 + <div class="doc doc-contents ">
1811 +
1812 + <p>Marks the agent as a non-critical asset.</p>
1813 +
1814 + <details class="quote">
1815 + <summary>Source code in <code>app\models\agents.py</code></summary>
1816 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-69">69</a></span>
1817 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1818 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1819 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1820 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1821 +<span class="normal"><a href="#__codelineno-0-74">74</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="k">def</span> <span class="nf">mark_as_non_critical</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1822 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1823 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="sd"> Marks the agent as a non-critical asset.</span>
1824 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd"> &quot;&quot;&quot;</span>
1825 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="bp">self</span><span class="o">.</span><span class="n">critical_asset</span> <span class="o">=</span> <span class="kc">False</span>
1826 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
1827 +</code></pre></div></td></tr></table></div>
1828 + </details>
1829 + </div>
1830 +
1831 +</div>
1832 +
1833 +
1834 +
1835 + </div>
1836 +
1837 + </div>
1838 +
1839 +</div>
1840 +
1841 +<div class="doc doc-object doc-class">
1842 +
1843 +
1844 +
1845 +<h2 id="app.models.agents.AgentMetadataSchema" class="doc doc-heading">
1846 + <code>AgentMetadataSchema</code>
1847 +
1848 +
1849 +</h2>
1850 +
1851 +
1852 + <div class="doc doc-contents ">
1853 + <p class="doc doc-class-bases">
1854 + Bases: <code><span title="app.ma">ma</span>.<span title="app.ma.Schema">Schema</span></code></p>
1855 +
1856 +
1857 + <p>Schema for serializing and deserializing instances of the AgentMetadata class.</p>
1858 +
1859 +
1860 + <details class="quote">
1861 + <summary>Source code in <code>app\models\agents.py</code></summary>
1862 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
1863 +<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
1864 +<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
1865 +<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
1866 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
1867 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
1868 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
1869 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
1870 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
1871 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
1872 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
1873 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1874 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1875 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1876 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1877 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1878 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1879 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
1880 +<span class="normal"><a href="#__codelineno-0-102">102</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="k">class</span> <span class="nc">AgentMetadataSchema</span><span class="p">(</span><span class="n">ma</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
1881 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1882 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> Schema for serializing and deserializing instances of the AgentMetadata class.</span>
1883 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> &quot;&quot;&quot;</span>
1884 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a>
1885 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
1886 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1887 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
1888 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> &quot;&quot;&quot;</span>
1889 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
1890 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
1891 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">&quot;id&quot;</span><span class="p">,</span>
1892 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">&quot;agent_id&quot;</span><span class="p">,</span>
1893 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">&quot;ip_address&quot;</span><span class="p">,</span>
1894 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="s2">&quot;os&quot;</span><span class="p">,</span>
1895 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="s2">&quot;hostname&quot;</span><span class="p">,</span>
1896 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="s2">&quot;critical_asset&quot;</span><span class="p">,</span>
1897 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="s2">&quot;last_seen&quot;</span><span class="p">,</span>
1898 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="p">)</span>
1899 +</code></pre></div></td></tr></table></div>
1900 + </details>
1901 +
1902 +
1903 +
1904 + <div class="doc doc-children">
1905 +
1906 +
1907 +
1908 +
1909 +
1910 +
1911 +
1912 +
1913 +<div class="doc doc-object doc-class">
1914 +
1915 +
1916 +
1917 +<h3 id="app.models.agents.AgentMetadataSchema.Meta" class="doc doc-heading">
1918 + <code>Meta</code>
1919 +
1920 +
1921 +</h3>
1922 +
1923 +
1924 + <div class="doc doc-contents ">
1925 +
1926 +
1927 + <p>Meta class defines the fields to be serialized/deserialized.</p>
1928 +
1929 +
1930 + <details class="quote">
1931 + <summary>Source code in <code>app\models\agents.py</code></summary>
1932 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
1933 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
1934 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
1935 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
1936 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
1937 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
1938 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1939 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1940 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1941 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1942 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1943 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1944 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
1945 +<span class="normal"><a href="#__codelineno-0-102">102</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
1946 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1947 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
1948 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> &quot;&quot;&quot;</span>
1949 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
1950 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
1951 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">&quot;id&quot;</span><span class="p">,</span>
1952 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">&quot;agent_id&quot;</span><span class="p">,</span>
1953 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">&quot;ip_address&quot;</span><span class="p">,</span>
1954 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="s2">&quot;os&quot;</span><span class="p">,</span>
1955 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="s2">&quot;hostname&quot;</span><span class="p">,</span>
1956 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="s2">&quot;critical_asset&quot;</span><span class="p">,</span>
1957 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="s2">&quot;last_seen&quot;</span><span class="p">,</span>
1958 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="p">)</span>
1959 +</code></pre></div></td></tr></table></div>
1960 + </details>
1961 +
1962 +
1963 +
1964 + <div class="doc doc-children">
1965 +
1966 +
1967 +
1968 +
1969 +
1970 +
1971 +
1972 +
1973 +
1974 +
1975 +
1976 + </div>
1977 +
1978 + </div>
1979 +
1980 +</div>
1981 +
1982 +
1983 +
1984 +
1985 + </div>
1986 +
1987 + </div>
1988 +
1989 +</div>
1990 +
1991 +
1992 +
1993 +
1994 + </div>
1995 +
1996 + </div>
1997 +
1998 +</div><p><br></p>
1999 +<h3 id="wazuh-manager-routes"><span style="color:green">Wazuh-Manager Routes</span></h3>
2000 +
2001 +
2002 +<div class="doc doc-object doc-function">
2003 +
2004 +
2005 +<a id="app.routes.agents.sync_agents"></a>
2006 + <div class="doc doc-contents first">
2007 +
2008 + <p>Endpoint to synchronize all agents.</p>
2009 +
2010 + <p><strong>Returns:</strong></p>
2011 + <table>
2012 + <thead>
2013 + <tr>
2014 +<th>Name</th> <th>Type</th>
2015 + <th>Description</th>
2016 + </tr>
2017 + </thead>
2018 + <tbody>
2019 + <tr>
2020 +<td><code>json</code></td> <td>
2021 + <code><span title="typing.Any">Any</span></code>
2022 + </td>
2023 + <td>
2024 + <div class="doc-md-description">
2025 + <p>A JSON response containing the updated information of all synchronized agents.</p>
2026 + </div>
2027 + </td>
2028 + </tr>
2029 + </tbody>
2030 + </table>
2031 +
2032 + <details class="quote">
2033 + <summary>Source code in <code>app\routes\agents.py</code></summary>
2034 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-69">69</a></span>
2035 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
2036 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
2037 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
2038 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
2039 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
2040 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
2041 +<span class="normal"><a href="#__codelineno-0-76">76</a></span>
2042 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
2043 +<span class="normal"><a href="#__codelineno-0-78">78</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/agents/sync&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
2044 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="k">def</span> <span class="nf">sync_agents</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
2045 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2046 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd"> Endpoint to synchronize all agents.</span>
2047 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="sd"> Returns:</span>
2048 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="sd"> json: A JSON response containing the updated information of all synchronized agents.</span>
2049 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> &quot;&quot;&quot;</span>
2050 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AgentSyncService</span><span class="p">()</span>
2051 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">sync_agents</span><span class="p">()</span>
2052 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
2053 +</code></pre></div></td></tr></table></div>
2054 + </details>
2055 + </div>
2056 +
2057 +</div>
2058 +
2059 +<div class="doc doc-object doc-function">
2060 +
2061 +
2062 +<a id="app.routes.agents.delete_agent"></a>
2063 + <div class="doc doc-contents first">
2064 +
2065 + <p>Endpoint to delete an agent.</p>
2066 +
2067 + <p><strong>Parameters:</strong></p>
2068 + <table>
2069 + <thead>
2070 + <tr>
2071 + <th>Name</th>
2072 + <th>Type</th>
2073 + <th>Description</th>
2074 + <th>Default</th>
2075 + </tr>
2076 + </thead>
2077 + <tbody>
2078 + <tr>
2079 + <td><code>agent_id</code></td>
2080 + <td>
2081 + <code>str</code>
2082 + </td>
2083 + <td>
2084 + <div class="doc-md-description">
2085 + <p>The ID of the agent to be deleted.</p>
2086 + </div>
2087 + </td>
2088 + <td>
2089 + <em>required</em>
2090 + </td>
2091 + </tr>
2092 + </tbody>
2093 + </table>
2094 +
2095 + <p><strong>Returns:</strong></p>
2096 + <table>
2097 + <thead>
2098 + <tr>
2099 +<th>Name</th> <th>Type</th>
2100 + <th>Description</th>
2101 + </tr>
2102 + </thead>
2103 + <tbody>
2104 + <tr>
2105 +<td><code>json</code></td> <td>
2106 + <code><span title="typing.Any">Any</span></code>
2107 + </td>
2108 + <td>
2109 + <div class="doc-md-description">
2110 + <p>A JSON response indicating whether the deletion was successful.</p>
2111 + </div>
2112 + </td>
2113 + </tr>
2114 + </tbody>
2115 + </table>
2116 +
2117 + <details class="quote">
2118 + <summary>Source code in <code>app\routes\agents.py</code></summary>
2119 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-81">81</a></span>
2120 +<span class="normal"><a href="#__codelineno-0-82">82</a></span>
2121 +<span class="normal"><a href="#__codelineno-0-83">83</a></span>
2122 +<span class="normal"><a href="#__codelineno-0-84">84</a></span>
2123 +<span class="normal"><a href="#__codelineno-0-85">85</a></span>
2124 +<span class="normal"><a href="#__codelineno-0-86">86</a></span>
2125 +<span class="normal"><a href="#__codelineno-0-87">87</a></span>
2126 +<span class="normal"><a href="#__codelineno-0-88">88</a></span>
2127 +<span class="normal"><a href="#__codelineno-0-89">89</a></span>
2128 +<span class="normal"><a href="#__codelineno-0-90">90</a></span>
2129 +<span class="normal"><a href="#__codelineno-0-91">91</a></span>
2130 +<span class="normal"><a href="#__codelineno-0-92">92</a></span>
2131 +<span class="normal"><a href="#__codelineno-0-93">93</a></span>
2132 +<span class="normal"><a href="#__codelineno-0-94">94</a></span>
2133 +<span class="normal"><a href="#__codelineno-0-95">95</a></span>
2134 +<span class="normal"><a href="#__codelineno-0-96">96</a></span>
2135 +<span class="normal"><a href="#__codelineno-0-97">97</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/agents/&lt;agent_id&gt;/delete&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
2136 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="k">def</span> <span class="nf">delete_agent</span><span class="p">(</span><span class="n">agent_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
2137 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2138 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> Endpoint to delete an agent.</span>
2139 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> Args:</span>
2140 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> agent_id (str): The ID of the agent to be deleted.</span>
2141 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> Returns:</span>
2142 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> json: A JSON response indicating whether the deletion was successful.</span>
2143 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> &quot;&quot;&quot;</span>
2144 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AgentService</span><span class="p">()</span>
2145 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">delete_agent_db</span><span class="p">(</span><span class="n">agent_id</span><span class="o">=</span><span class="n">agent_id</span><span class="p">)</span>
2146 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a>
2147 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span>
2148 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">agent_service</span> <span class="o">=</span> <span class="n">WazuhManagerAgentService</span><span class="p">(</span><span class="n">universal_service</span><span class="p">)</span>
2149 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="n">agent_service</span><span class="o">.</span><span class="n">delete_agent</span><span class="p">(</span><span class="n">agent_id</span><span class="o">=</span><span class="n">agent_id</span><span class="p">)</span>
2150 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a>
2151 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="k">return</span> <span class="n">result</span>
2152 +</code></pre></div></td></tr></table></div>
2153 + </details>
2154 + </div>
2155 +
2156 +</div>
2157 +
2158 +<div class="doc doc-object doc-function">
2159 +
2160 +
2161 +<a id="app.routes.agents.get_agent_vulnerabilities"></a>
2162 + <div class="doc doc-contents first">
2163 +
2164 + <p>Endpoint to get the vulnerabilities of a specific agent.</p>
2165 +
2166 + <p><strong>Parameters:</strong></p>
2167 + <table>
2168 + <thead>
2169 + <tr>
2170 + <th>Name</th>
2171 + <th>Type</th>
2172 + <th>Description</th>
2173 + <th>Default</th>
2174 + </tr>
2175 + </thead>
2176 + <tbody>
2177 + <tr>
2178 + <td><code>agent_id</code></td>
2179 + <td>
2180 + <code>str</code>
2181 + </td>
2182 + <td>
2183 + <div class="doc-md-description">
2184 + <p>The ID of the agent whose vulnerabilities are to be fetched.</p>
2185 + </div>
2186 + </td>
2187 + <td>
2188 + <em>required</em>
2189 + </td>
2190 + </tr>
2191 + </tbody>
2192 + </table>
2193 +
2194 + <p><strong>Returns:</strong></p>
2195 + <table>
2196 + <thead>
2197 + <tr>
2198 +<th>Name</th> <th>Type</th>
2199 + <th>Description</th>
2200 + </tr>
2201 + </thead>
2202 + <tbody>
2203 + <tr>
2204 +<td><code>json</code></td> <td>
2205 + <code><span title="typing.Any">Any</span></code>
2206 + </td>
2207 + <td>
2208 + <div class="doc-md-description">
2209 + <p>A JSON response containing the vulnerabilities of the agent.</p>
2210 + </div>
2211 + </td>
2212 + </tr>
2213 + </tbody>
2214 + </table>
2215 +
2216 + <details class="quote">
2217 + <summary>Source code in <code>app\routes\agents.py</code></summary>
2218 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-100">100</a></span>
2219 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
2220 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
2221 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
2222 +<span class="normal"><a href="#__codelineno-0-104">104</a></span>
2223 +<span class="normal"><a href="#__codelineno-0-105">105</a></span>
2224 +<span class="normal"><a href="#__codelineno-0-106">106</a></span>
2225 +<span class="normal"><a href="#__codelineno-0-107">107</a></span>
2226 +<span class="normal"><a href="#__codelineno-0-108">108</a></span>
2227 +<span class="normal"><a href="#__codelineno-0-109">109</a></span>
2228 +<span class="normal"><a href="#__codelineno-0-110">110</a></span>
2229 +<span class="normal"><a href="#__codelineno-0-111">111</a></span>
2230 +<span class="normal"><a href="#__codelineno-0-112">112</a></span>
2231 +<span class="normal"><a href="#__codelineno-0-113">113</a></span>
2232 +<span class="normal"><a href="#__codelineno-0-114">114</a></span>
2233 +<span class="normal"><a href="#__codelineno-0-115">115</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/agents/&lt;agent_id&gt;/vulnerabilities&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
2234 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="k">def</span> <span class="nf">get_agent_vulnerabilities</span><span class="p">(</span><span class="n">agent_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
2235 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2236 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> Endpoint to get the vulnerabilities of a specific agent.</span>
2237 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> Args:</span>
2238 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> agent_id (str): The ID of the agent whose vulnerabilities are to be fetched.</span>
2239 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> Returns:</span>
2240 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> json: A JSON response containing the vulnerabilities of the agent.</span>
2241 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> &quot;&quot;&quot;</span>
2242 +<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span>
2243 +<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="n">vulnerability_service</span> <span class="o">=</span> <span class="n">VulnerabilityService</span><span class="p">(</span><span class="n">universal_service</span><span class="p">)</span>
2244 +<a id="__codelineno-0-111" name="__codelineno-0-111"></a>
2245 +<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="n">agent_vulnerabilities</span> <span class="o">=</span> <span class="n">vulnerability_service</span><span class="o">.</span><span class="n">agent_vulnerabilities</span><span class="p">(</span>
2246 +<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="n">agent_id</span><span class="o">=</span><span class="n">agent_id</span><span class="p">,</span>
2247 +<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="p">)</span>
2248 +<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="k">return</span> <span class="n">agent_vulnerabilities</span>
2249 +</code></pre></div></td></tr></table></div>
2250 + </details>
2251 + </div>
2252 +
2253 +</div><p><br></p>
2254 +<h3 id="wazuh-manager-services"><span style="color:red">Wazuh-Manager Services</span></h3>
2255 +
2256 +
2257 +<div class="doc doc-object doc-module">
2258 +
2259 +
2260 +<a id="app.services.WazuhManager.agent"></a>
2261 + <div class="doc doc-contents first">
2262 +
2263 +
2264 +
2265 + <div class="doc doc-children">
2266 +
2267 +
2268 +
2269 +
2270 +
2271 +
2272 +
2273 +
2274 +<div class="doc doc-object doc-class">
2275 +
2276 +
2277 +
2278 +<h2 id="app.services.WazuhManager.agent.WazuhHttpRequests" class="doc doc-heading">
2279 + <code>WazuhHttpRequests</code>
2280 +
2281 +
2282 +</h2>
2283 +
2284 +
2285 + <div class="doc doc-contents ">
2286 +
2287 +
2288 + <p>A class to handle HTTP requests to the Wazuh API.</p>
2289 +<p>This class is initialized with the URL for the Wazuh connector and an authentication token.
2290 +It provides a method to make HTTP DELETE requests to the specified Wazuh API endpoint.</p>
2291 +
2292 +
2293 + <details class="quote">
2294 + <summary>Source code in <code>app\services\WazuhManager\agent.py</code></summary>
2295 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-12">12</a></span>
2296 +<span class="normal"><a href="#__codelineno-0-13">13</a></span>
2297 +<span class="normal"><a href="#__codelineno-0-14">14</a></span>
2298 +<span class="normal"><a href="#__codelineno-0-15">15</a></span>
2299 +<span class="normal"><a href="#__codelineno-0-16">16</a></span>
2300 +<span class="normal"><a href="#__codelineno-0-17">17</a></span>
2301 +<span class="normal"><a href="#__codelineno-0-18">18</a></span>
2302 +<span class="normal"><a href="#__codelineno-0-19">19</a></span>
2303 +<span class="normal"><a href="#__codelineno-0-20">20</a></span>
2304 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
2305 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
2306 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
2307 +<span class="normal"><a href="#__codelineno-0-24">24</a></span>
2308 +<span class="normal"><a href="#__codelineno-0-25">25</a></span>
2309 +<span class="normal"><a href="#__codelineno-0-26">26</a></span>
2310 +<span class="normal"><a href="#__codelineno-0-27">27</a></span>
2311 +<span class="normal"><a href="#__codelineno-0-28">28</a></span>
2312 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
2313 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
2314 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
2315 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
2316 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
2317 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
2318 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
2319 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
2320 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
2321 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
2322 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
2323 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
2324 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
2325 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
2326 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
2327 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
2328 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
2329 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
2330 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
2331 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2332 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2333 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
2334 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
2335 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
2336 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
2337 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
2338 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
2339 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
2340 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2341 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2342 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
2343 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
2344 +<span class="normal"><a href="#__codelineno-0-61">61</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="k">class</span> <span class="nc">WazuhHttpRequests</span><span class="p">:</span>
2345 +<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2346 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> A class to handle HTTP requests to the Wazuh API.</span>
2347 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a>
2348 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> This class is initialized with the URL for the Wazuh connector and an authentication token.</span>
2349 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> It provides a method to make HTTP DELETE requests to the specified Wazuh API endpoint.</span>
2350 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> &quot;&quot;&quot;</span>
2351 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a>
2352 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">wazuh_auth_token</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
2353 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2354 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> Initializes a WazuhHttpRequests instance.</span>
2355 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a>
2356 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> Args:</span>
2357 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> connector_url (str): The URL for the Wazuh connector.</span>
2358 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> wazuh_auth_token (str): The Wazuh API authentication token.</span>
2359 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> &quot;&quot;&quot;</span>
2360 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span> <span class="o">=</span> <span class="n">connector_url</span>
2361 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_auth_token</span> <span class="o">=</span> <span class="n">wazuh_auth_token</span>
2362 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;Authorization&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Bearer </span><span class="si">{</span><span class="n">wazuh_auth_token</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">}</span>
2363 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a>
2364 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">def</span> <span class="nf">delete_request</span><span class="p">(</span>
2365 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="bp">self</span><span class="p">,</span>
2366 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">endpoint</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
2367 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="n">params</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
2368 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]:</span>
2369 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2370 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> Makes an HTTP DELETE request to a specified Wazuh API endpoint.</span>
2371 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a>
2372 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Args:</span>
2373 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> endpoint (str): The endpoint to make a DELETE request to.</span>
2374 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> params (Optional[Dict[str, str]]): Any parameters to pass in the DELETE request.</span>
2375 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
2376 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Returns:</span>
2377 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Dict[str, bool]: A dictionary indicating the success of the operation. If the request was successful,</span>
2378 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> `{&quot;agentDeleted&quot;: True}` is returned. If it failed, `{&quot;agentDeleted&quot;: False}` is returned.</span>
2379 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> &quot;&quot;&quot;</span>
2380 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">try</span><span class="p">:</span>
2381 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span>
2382 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
2383 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">headers</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">headers</span><span class="p">,</span>
2384 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
2385 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2386 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="p">)</span>
2387 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
2388 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Successfully deleted </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2389 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;agentDeleted&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2390 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a>
2391 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
2392 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to delete </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2393 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;agentDeleted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2394 +</code></pre></div></td></tr></table></div>
2395 + </details>
2396 +
2397 +
2398 +
2399 + <div class="doc doc-children">
2400 +
2401 +
2402 +
2403 +
2404 +
2405 +
2406 +
2407 +
2408 +
2409 +<div class="doc doc-object doc-function">
2410 +
2411 +
2412 +
2413 +<h3 id="app.services.WazuhManager.agent.WazuhHttpRequests.__init__" class="doc doc-heading">
2414 +<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">connector_url</span><span class="p">,</span> <span class="n">wazuh_auth_token</span><span class="p">)</span></code>
2415 +
2416 +</h3>
2417 +
2418 +
2419 + <div class="doc doc-contents ">
2420 +
2421 + <p>Initializes a WazuhHttpRequests instance.</p>
2422 +
2423 + <p><strong>Parameters:</strong></p>
2424 + <table>
2425 + <thead>
2426 + <tr>
2427 + <th>Name</th>
2428 + <th>Type</th>
2429 + <th>Description</th>
2430 + <th>Default</th>
2431 + </tr>
2432 + </thead>
2433 + <tbody>
2434 + <tr>
2435 + <td><code>connector_url</code></td>
2436 + <td>
2437 + <code>str</code>
2438 + </td>
2439 + <td>
2440 + <div class="doc-md-description">
2441 + <p>The URL for the Wazuh connector.</p>
2442 + </div>
2443 + </td>
2444 + <td>
2445 + <em>required</em>
2446 + </td>
2447 + </tr>
2448 + <tr>
2449 + <td><code>wazuh_auth_token</code></td>
2450 + <td>
2451 + <code>str</code>
2452 + </td>
2453 + <td>
2454 + <div class="doc-md-description">
2455 + <p>The Wazuh API authentication token.</p>
2456 + </div>
2457 + </td>
2458 + <td>
2459 + <em>required</em>
2460 + </td>
2461 + </tr>
2462 + </tbody>
2463 + </table>
2464 +
2465 + <details class="quote">
2466 + <summary>Source code in <code>app\services\WazuhManager\agent.py</code></summary>
2467 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-20">20</a></span>
2468 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
2469 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
2470 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
2471 +<span class="normal"><a href="#__codelineno-0-24">24</a></span>
2472 +<span class="normal"><a href="#__codelineno-0-25">25</a></span>
2473 +<span class="normal"><a href="#__codelineno-0-26">26</a></span>
2474 +<span class="normal"><a href="#__codelineno-0-27">27</a></span>
2475 +<span class="normal"><a href="#__codelineno-0-28">28</a></span>
2476 +<span class="normal"><a href="#__codelineno-0-29">29</a></span>
2477 +<span class="normal"><a href="#__codelineno-0-30">30</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">wazuh_auth_token</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
2478 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2479 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> Initializes a WazuhHttpRequests instance.</span>
2480 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a>
2481 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> Args:</span>
2482 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> connector_url (str): The URL for the Wazuh connector.</span>
2483 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> wazuh_auth_token (str): The Wazuh API authentication token.</span>
2484 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> &quot;&quot;&quot;</span>
2485 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span> <span class="o">=</span> <span class="n">connector_url</span>
2486 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_auth_token</span> <span class="o">=</span> <span class="n">wazuh_auth_token</span>
2487 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;Authorization&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Bearer </span><span class="si">{</span><span class="n">wazuh_auth_token</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">}</span>
2488 +</code></pre></div></td></tr></table></div>
2489 + </details>
2490 + </div>
2491 +
2492 +</div>
2493 +
2494 +<div class="doc doc-object doc-function">
2495 +
2496 +
2497 +
2498 +<h3 id="app.services.WazuhManager.agent.WazuhHttpRequests.delete_request" class="doc doc-heading">
2499 +<code class="highlight language-python"><span class="n">delete_request</span><span class="p">(</span><span class="n">endpoint</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
2500 +
2501 +</h3>
2502 +
2503 +
2504 + <div class="doc doc-contents ">
2505 +
2506 + <p>Makes an HTTP DELETE request to a specified Wazuh API endpoint.</p>
2507 +
2508 + <p><strong>Parameters:</strong></p>
2509 + <table>
2510 + <thead>
2511 + <tr>
2512 + <th>Name</th>
2513 + <th>Type</th>
2514 + <th>Description</th>
2515 + <th>Default</th>
2516 + </tr>
2517 + </thead>
2518 + <tbody>
2519 + <tr>
2520 + <td><code>endpoint</code></td>
2521 + <td>
2522 + <code>str</code>
2523 + </td>
2524 + <td>
2525 + <div class="doc-md-description">
2526 + <p>The endpoint to make a DELETE request to.</p>
2527 + </div>
2528 + </td>
2529 + <td>
2530 + <em>required</em>
2531 + </td>
2532 + </tr>
2533 + <tr>
2534 + <td><code>params</code></td>
2535 + <td>
2536 + <code><span title="typing.Optional">Optional</span>[<span title="typing.Dict">Dict</span>[str, str]]</code>
2537 + </td>
2538 + <td>
2539 + <div class="doc-md-description">
2540 + <p>Any parameters to pass in the DELETE request.</p>
2541 + </div>
2542 + </td>
2543 + <td>
2544 + <code>None</code>
2545 + </td>
2546 + </tr>
2547 + </tbody>
2548 + </table>
2549 +
2550 + <p><strong>Returns:</strong></p>
2551 + <table>
2552 + <thead>
2553 + <tr>
2554 + <th>Type</th>
2555 + <th>Description</th>
2556 + </tr>
2557 + </thead>
2558 + <tbody>
2559 + <tr>
2560 + <td>
2561 + <code><span title="typing.Dict">Dict</span>[str, bool]</code>
2562 + </td>
2563 + <td>
2564 + <div class="doc-md-description">
2565 + <p>Dict[str, bool]: A dictionary indicating the success of the operation. If the request was successful,
2566 + <code>{"agentDeleted": True}</code> is returned. If it failed, <code>{"agentDeleted": False}</code> is returned.</p>
2567 + </div>
2568 + </td>
2569 + </tr>
2570 + </tbody>
2571 + </table>
2572 +
2573 + <details class="quote">
2574 + <summary>Source code in <code>app\services\WazuhManager\agent.py</code></summary>
2575 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-32">32</a></span>
2576 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
2577 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
2578 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
2579 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
2580 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
2581 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
2582 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
2583 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
2584 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
2585 +<span class="normal"><a href="#__codelineno-0-42">42</a></span>
2586 +<span class="normal"><a href="#__codelineno-0-43">43</a></span>
2587 +<span class="normal"><a href="#__codelineno-0-44">44</a></span>
2588 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
2589 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
2590 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
2591 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2592 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2593 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
2594 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
2595 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
2596 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
2597 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
2598 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
2599 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
2600 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2601 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2602 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
2603 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
2604 +<span class="normal"><a href="#__codelineno-0-61">61</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="k">def</span> <span class="nf">delete_request</span><span class="p">(</span>
2605 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="bp">self</span><span class="p">,</span>
2606 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">endpoint</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
2607 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="n">params</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
2608 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]:</span>
2609 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2610 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> Makes an HTTP DELETE request to a specified Wazuh API endpoint.</span>
2611 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a>
2612 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Args:</span>
2613 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> endpoint (str): The endpoint to make a DELETE request to.</span>
2614 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> params (Optional[Dict[str, str]]): Any parameters to pass in the DELETE request.</span>
2615 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
2616 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Returns:</span>
2617 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Dict[str, bool]: A dictionary indicating the success of the operation. If the request was successful,</span>
2618 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> `{&quot;agentDeleted&quot;: True}` is returned. If it failed, `{&quot;agentDeleted&quot;: False}` is returned.</span>
2619 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> &quot;&quot;&quot;</span>
2620 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">try</span><span class="p">:</span>
2621 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span>
2622 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
2623 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">headers</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">headers</span><span class="p">,</span>
2624 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
2625 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2626 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="p">)</span>
2627 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
2628 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Successfully deleted </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2629 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;agentDeleted&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2630 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a>
2631 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
2632 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to delete </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2633 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;agentDeleted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2634 +</code></pre></div></td></tr></table></div>
2635 + </details>
2636 + </div>
2637 +
2638 +</div>
2639 +
2640 +
2641 +
2642 + </div>
2643 +
2644 + </div>
2645 +
2646 +</div>
2647 +
2648 +<div class="doc doc-object doc-class">
2649 +
2650 +
2651 +
2652 +<h2 id="app.services.WazuhManager.agent.WazuhManagerAgentService" class="doc doc-heading">
2653 + <code>WazuhManagerAgentService</code>
2654 +
2655 +
2656 +</h2>
2657 +
2658 +
2659 + <div class="doc doc-contents ">
2660 +
2661 +
2662 + <p>A service class that encapsulates the logic for handling agent-related operations in the Wazuh Manager.</p>
2663 +<p>This class uses the UniversalService to get authentication tokens and URLs, and WazuhHttpRequests to make HTTP requests.
2664 +It provides methods to collect all agents from Wazuh Manager and to delete a specific agent.</p>
2665 +
2666 +
2667 + <details class="quote">
2668 + <summary>Source code in <code>app\services\WazuhManager\agent.py</code></summary>
2669 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
2670 +<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
2671 +<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
2672 +<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
2673 +<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
2674 +<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
2675 +<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
2676 +<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
2677 +<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
2678 +<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
2679 +<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
2680 +<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
2681 +<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
2682 +<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
2683 +<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
2684 +<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
2685 +<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
2686 +<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
2687 +<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
2688 +<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
2689 +<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
2690 +<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
2691 +<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
2692 +<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
2693 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
2694 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
2695 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
2696 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
2697 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
2698 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
2699 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
2700 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
2701 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
2702 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
2703 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
2704 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
2705 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
2706 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
2707 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
2708 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
2709 +<span class="normal"><a href="#__codelineno-0-104">104</a></span>
2710 +<span class="normal"><a href="#__codelineno-0-105">105</a></span>
2711 +<span class="normal"><a href="#__codelineno-0-106">106</a></span>
2712 +<span class="normal"><a href="#__codelineno-0-107">107</a></span>
2713 +<span class="normal"><a href="#__codelineno-0-108">108</a></span>
2714 +<span class="normal"><a href="#__codelineno-0-109">109</a></span>
2715 +<span class="normal"><a href="#__codelineno-0-110">110</a></span>
2716 +<span class="normal"><a href="#__codelineno-0-111">111</a></span>
2717 +<span class="normal"><a href="#__codelineno-0-112">112</a></span>
2718 +<span class="normal"><a href="#__codelineno-0-113">113</a></span>
2719 +<span class="normal"><a href="#__codelineno-0-114">114</a></span>
2720 +<span class="normal"><a href="#__codelineno-0-115">115</a></span>
2721 +<span class="normal"><a href="#__codelineno-0-116">116</a></span>
2722 +<span class="normal"><a href="#__codelineno-0-117">117</a></span>
2723 +<span class="normal"><a href="#__codelineno-0-118">118</a></span>
2724 +<span class="normal"><a href="#__codelineno-0-119">119</a></span>
2725 +<span class="normal"><a href="#__codelineno-0-120">120</a></span>
2726 +<span class="normal"><a href="#__codelineno-0-121">121</a></span>
2727 +<span class="normal"><a href="#__codelineno-0-122">122</a></span>
2728 +<span class="normal"><a href="#__codelineno-0-123">123</a></span>
2729 +<span class="normal"><a href="#__codelineno-0-124">124</a></span>
2730 +<span class="normal"><a href="#__codelineno-0-125">125</a></span>
2731 +<span class="normal"><a href="#__codelineno-0-126">126</a></span>
2732 +<span class="normal"><a href="#__codelineno-0-127">127</a></span>
2733 +<span class="normal"><a href="#__codelineno-0-128">128</a></span>
2734 +<span class="normal"><a href="#__codelineno-0-129">129</a></span>
2735 +<span class="normal"><a href="#__codelineno-0-130">130</a></span>
2736 +<span class="normal"><a href="#__codelineno-0-131">131</a></span>
2737 +<span class="normal"><a href="#__codelineno-0-132">132</a></span>
2738 +<span class="normal"><a href="#__codelineno-0-133">133</a></span>
2739 +<span class="normal"><a href="#__codelineno-0-134">134</a></span>
2740 +<span class="normal"><a href="#__codelineno-0-135">135</a></span>
2741 +<span class="normal"><a href="#__codelineno-0-136">136</a></span>
2742 +<span class="normal"><a href="#__codelineno-0-137">137</a></span>
2743 +<span class="normal"><a href="#__codelineno-0-138">138</a></span>
2744 +<span class="normal"><a href="#__codelineno-0-139">139</a></span>
2745 +<span class="normal"><a href="#__codelineno-0-140">140</a></span>
2746 +<span class="normal"><a href="#__codelineno-0-141">141</a></span>
2747 +<span class="normal"><a href="#__codelineno-0-142">142</a></span>
2748 +<span class="normal"><a href="#__codelineno-0-143">143</a></span>
2749 +<span class="normal"><a href="#__codelineno-0-144">144</a></span>
2750 +<span class="normal"><a href="#__codelineno-0-145">145</a></span>
2751 +<span class="normal"><a href="#__codelineno-0-146">146</a></span>
2752 +<span class="normal"><a href="#__codelineno-0-147">147</a></span>
2753 +<span class="normal"><a href="#__codelineno-0-148">148</a></span>
2754 +<span class="normal"><a href="#__codelineno-0-149">149</a></span>
2755 +<span class="normal"><a href="#__codelineno-0-150">150</a></span>
2756 +<span class="normal"><a href="#__codelineno-0-151">151</a></span>
2757 +<span class="normal"><a href="#__codelineno-0-152">152</a></span>
2758 +<span class="normal"><a href="#__codelineno-0-153">153</a></span>
2759 +<span class="normal"><a href="#__codelineno-0-154">154</a></span>
2760 +<span class="normal"><a href="#__codelineno-0-155">155</a></span>
2761 +<span class="normal"><a href="#__codelineno-0-156">156</a></span>
2762 +<span class="normal"><a href="#__codelineno-0-157">157</a></span>
2763 +<span class="normal"><a href="#__codelineno-0-158">158</a></span>
2764 +<span class="normal"><a href="#__codelineno-0-159">159</a></span>
2765 +<span class="normal"><a href="#__codelineno-0-160">160</a></span>
2766 +<span class="normal"><a href="#__codelineno-0-161">161</a></span>
2767 +<span class="normal"><a href="#__codelineno-0-162">162</a></span>
2768 +<span class="normal"><a href="#__codelineno-0-163">163</a></span>
2769 +<span class="normal"><a href="#__codelineno-0-164">164</a></span>
2770 +<span class="normal"><a href="#__codelineno-0-165">165</a></span>
2771 +<span class="normal"><a href="#__codelineno-0-166">166</a></span>
2772 +<span class="normal"><a href="#__codelineno-0-167">167</a></span>
2773 +<span class="normal"><a href="#__codelineno-0-168">168</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="k">class</span> <span class="nc">WazuhManagerAgentService</span><span class="p">:</span>
2774 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2775 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> A service class that encapsulates the logic for handling agent-related operations in the Wazuh Manager.</span>
2776 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a>
2777 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> This class uses the UniversalService to get authentication tokens and URLs, and WazuhHttpRequests to make HTTP requests.</span>
2778 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> It provides methods to collect all agents from Wazuh Manager and to delete a specific agent.</span>
2779 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sd"> &quot;&quot;&quot;</span>
2780 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a>
2781 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">universal_service</span><span class="p">:</span> <span class="n">UniversalService</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
2782 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2783 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="sd"> Initializes a WazuhManagerAgentService instance.</span>
2784 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
2785 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="sd"> Args:</span>
2786 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> universal_service (UniversalService): An instance of UniversalService.</span>
2787 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> &quot;&quot;&quot;</span>
2788 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">universal_service</span>
2789 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span> <span class="o">=</span> <span class="n">universal_service</span><span class="o">.</span><span class="n">get_auth_token</span><span class="p">()</span>
2790 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span> <span class="o">=</span> <span class="n">WazuhHttpRequests</span><span class="p">(</span>
2791 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
2792 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span><span class="p">,</span>
2793 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="p">)</span>
2794 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a>
2795 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="k">def</span> <span class="nf">collect_agents</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]]:</span>
2796 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2797 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> Collects all agents from the Wazuh Manager.</span>
2798 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a>
2799 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> Returns:</span>
2800 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Optional[List[Dict[str, str]]]: A list of dictionaries where each dictionary contains data about an agent.</span>
2801 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> If the operation fails, it returns None.</span>
2802 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> &quot;&quot;&quot;</span>
2803 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting Wazuh Agents&quot;</span><span class="p">)</span>
2804 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="k">try</span><span class="p">:</span>
2805 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="n">agent_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_agent_data</span><span class="p">()</span>
2806 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="k">if</span> <span class="n">agent_data</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2807 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">return</span> <span class="kc">None</span>
2808 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
2809 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">wazuh_agents_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_agent_list</span><span class="p">(</span><span class="n">agent_data</span><span class="p">)</span>
2810 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="k">return</span> <span class="n">wazuh_agents_list</span>
2811 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
2812 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to collect Wazuh Agents: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2813 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="k">return</span> <span class="kc">None</span>
2814 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a>
2815 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a> <span class="k">def</span> <span class="nf">_get_agent_data</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]:</span>
2816 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2817 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> Retrieves agent data from the Wazuh Manager.</span>
2818 +<a id="__codelineno-0-109" name="__codelineno-0-109"></a>
2819 +<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> Returns:</span>
2820 +<a id="__codelineno-0-111" name="__codelineno-0-111"></a><span class="sd"> Optional[Dict[str, Any]]: A dictionary containing data about agents. If the operation fails, it returns None.</span>
2821 +<a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="sd"> &quot;&quot;&quot;</span>
2822 +<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;Authorization&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Bearer </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">}</span>
2823 +<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">limit</span> <span class="o">=</span> <span class="mi">1000</span>
2824 +<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
2825 +<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/agents?limit=</span><span class="si">{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
2826 +<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
2827 +<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2828 +<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="p">)</span>
2829 +<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
2830 +<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s2">&quot;data&quot;</span><span class="p">][</span><span class="s2">&quot;affected_items&quot;</span><span class="p">]</span>
2831 +<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="k">else</span><span class="p">:</span>
2832 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="k">return</span> <span class="kc">None</span>
2833 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a>
2834 +<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="k">def</span> <span class="nf">_build_agent_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agent_data</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]:</span>
2835 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2836 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> Builds a list of dictionaries with agent data.</span>
2837 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a>
2838 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> Args:</span>
2839 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a><span class="sd"> agent_data (Dict[str, Any]): The raw agent data.</span>
2840 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a>
2841 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd"> Returns:</span>
2842 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="sd"> List[Dict[str, str]]: A list of dictionaries where each dictionary contains data about an agent.</span>
2843 +<a id="__codelineno-0-134" name="__codelineno-0-134"></a><span class="sd"> &quot;&quot;&quot;</span>
2844 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="n">wazuh_agents_list</span> <span class="o">=</span> <span class="p">[]</span>
2845 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="k">for</span> <span class="n">agent</span> <span class="ow">in</span> <span class="n">agent_data</span><span class="p">:</span>
2846 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="n">os_name</span> <span class="o">=</span> <span class="n">agent</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;os&quot;</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">,</span> <span class="s2">&quot;Unknown&quot;</span><span class="p">)</span>
2847 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="n">last_keep_alive</span> <span class="o">=</span> <span class="n">agent</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;lastKeepAlive&quot;</span><span class="p">,</span> <span class="s2">&quot;Unknown&quot;</span><span class="p">)</span>
2848 +<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="n">wazuh_agents_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
2849 +<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="p">{</span>
2850 +<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="s2">&quot;agent_id&quot;</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;id&quot;</span><span class="p">],</span>
2851 +<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="s2">&quot;agent_name&quot;</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">],</span>
2852 +<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="s2">&quot;agent_ip&quot;</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;ip&quot;</span><span class="p">],</span>
2853 +<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="s2">&quot;agent_os&quot;</span><span class="p">:</span> <span class="n">os_name</span><span class="p">,</span>
2854 +<a id="__codelineno-0-145" name="__codelineno-0-145"></a> <span class="s2">&quot;agent_last_seen&quot;</span><span class="p">:</span> <span class="n">last_keep_alive</span><span class="p">,</span>
2855 +<a id="__codelineno-0-146" name="__codelineno-0-146"></a> <span class="p">},</span>
2856 +<a id="__codelineno-0-147" name="__codelineno-0-147"></a> <span class="p">)</span>
2857 +<a id="__codelineno-0-148" name="__codelineno-0-148"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Collected Wazuh Agent: </span><span class="si">{</span><span class="n">agent</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2858 +<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="k">return</span> <span class="n">wazuh_agents_list</span>
2859 +<a id="__codelineno-0-150" name="__codelineno-0-150"></a>
2860 +<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="k">def</span> <span class="nf">delete_agent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agent_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]:</span>
2861 +<a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2862 +<a id="__codelineno-0-153" name="__codelineno-0-153"></a><span class="sd"> Deletes an agent from the Wazuh Manager.</span>
2863 +<a id="__codelineno-0-154" name="__codelineno-0-154"></a>
2864 +<a id="__codelineno-0-155" name="__codelineno-0-155"></a><span class="sd"> Args:</span>
2865 +<a id="__codelineno-0-156" name="__codelineno-0-156"></a><span class="sd"> agent_id (str): The id of the agent to be deleted.</span>
2866 +<a id="__codelineno-0-157" name="__codelineno-0-157"></a>
2867 +<a id="__codelineno-0-158" name="__codelineno-0-158"></a><span class="sd"> Returns:</span>
2868 +<a id="__codelineno-0-159" name="__codelineno-0-159"></a><span class="sd"> Dict[str, bool]: A dictionary indicating the success of the operation. If the operation was successful,</span>
2869 +<a id="__codelineno-0-160" name="__codelineno-0-160"></a><span class="sd"> `{&quot;agentDeleted&quot;: True}` is returned. If it failed, `{&quot;agentDeleted&quot;: False}` is returned.</span>
2870 +<a id="__codelineno-0-161" name="__codelineno-0-161"></a><span class="sd"> &quot;&quot;&quot;</span>
2871 +<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
2872 +<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="s2">&quot;purge&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2873 +<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="s2">&quot;agents_list&quot;</span><span class="p">:</span> <span class="p">[</span><span class="n">agent_id</span><span class="p">],</span>
2874 +<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="s2">&quot;status&quot;</span><span class="p">:</span> <span class="s2">&quot;all&quot;</span><span class="p">,</span>
2875 +<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="s2">&quot;older_than&quot;</span><span class="p">:</span> <span class="s2">&quot;0s&quot;</span><span class="p">,</span>
2876 +<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="p">}</span>
2877 +<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">delete_request</span><span class="p">(</span><span class="s2">&quot;agents&quot;</span><span class="p">,</span> <span class="n">params</span><span class="p">)</span>
2878 +</code></pre></div></td></tr></table></div>
2879 + </details>
2880 +
2881 +
2882 +
2883 + <div class="doc doc-children">
2884 +
2885 +
2886 +
2887 +
2888 +
2889 +
2890 +
2891 +
2892 +
2893 +<div class="doc doc-object doc-function">
2894 +
2895 +
2896 +
2897 +<h3 id="app.services.WazuhManager.agent.WazuhManagerAgentService.__init__" class="doc doc-heading">
2898 +<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">universal_service</span><span class="p">)</span></code>
2899 +
2900 +</h3>
2901 +
2902 +
2903 + <div class="doc doc-contents ">
2904 +
2905 + <p>Initializes a WazuhManagerAgentService instance.</p>
2906 +
2907 + <p><strong>Parameters:</strong></p>
2908 + <table>
2909 + <thead>
2910 + <tr>
2911 + <th>Name</th>
2912 + <th>Type</th>
2913 + <th>Description</th>
2914 + <th>Default</th>
2915 + </tr>
2916 + </thead>
2917 + <tbody>
2918 + <tr>
2919 + <td><code>universal_service</code></td>
2920 + <td>
2921 + <code><a class="autorefs autorefs-internal" title="app.services.WazuhManager.universal.UniversalService" href="#app.services.WazuhManager.universal.UniversalService">UniversalService</a></code>
2922 + </td>
2923 + <td>
2924 + <div class="doc-md-description">
2925 + <p>An instance of UniversalService.</p>
2926 + </div>
2927 + </td>
2928 + <td>
2929 + <em>required</em>
2930 + </td>
2931 + </tr>
2932 + </tbody>
2933 + </table>
2934 +
2935 + <details class="quote">
2936 + <summary>Source code in <code>app\services\WazuhManager\agent.py</code></summary>
2937 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-72">72</a></span>
2938 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
2939 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
2940 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
2941 +<span class="normal"><a href="#__codelineno-0-76">76</a></span>
2942 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
2943 +<span class="normal"><a href="#__codelineno-0-78">78</a></span>
2944 +<span class="normal"><a href="#__codelineno-0-79">79</a></span>
2945 +<span class="normal"><a href="#__codelineno-0-80">80</a></span>
2946 +<span class="normal"><a href="#__codelineno-0-81">81</a></span>
2947 +<span class="normal"><a href="#__codelineno-0-82">82</a></span>
2948 +<span class="normal"><a href="#__codelineno-0-83">83</a></span>
2949 +<span class="normal"><a href="#__codelineno-0-84">84</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">universal_service</span><span class="p">:</span> <span class="n">UniversalService</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
2950 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2951 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="sd"> Initializes a WazuhManagerAgentService instance.</span>
2952 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
2953 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="sd"> Args:</span>
2954 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> universal_service (UniversalService): An instance of UniversalService.</span>
2955 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> &quot;&quot;&quot;</span>
2956 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">universal_service</span>
2957 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span> <span class="o">=</span> <span class="n">universal_service</span><span class="o">.</span><span class="n">get_auth_token</span><span class="p">()</span>
2958 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span> <span class="o">=</span> <span class="n">WazuhHttpRequests</span><span class="p">(</span>
2959 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
2960 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span><span class="p">,</span>
2961 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="p">)</span>
2962 +</code></pre></div></td></tr></table></div>
2963 + </details>
2964 + </div>
2965 +
2966 +</div>
2967 +
2968 +<div class="doc doc-object doc-function">
2969 +
2970 +
2971 +
2972 +<h3 id="app.services.WazuhManager.agent.WazuhManagerAgentService.collect_agents" class="doc doc-heading">
2973 +<code class="highlight language-python"><span class="n">collect_agents</span><span class="p">()</span></code>
2974 +
2975 +</h3>
2976 +
2977 +
2978 + <div class="doc doc-contents ">
2979 +
2980 + <p>Collects all agents from the Wazuh Manager.</p>
2981 +
2982 + <p><strong>Returns:</strong></p>
2983 + <table>
2984 + <thead>
2985 + <tr>
2986 + <th>Type</th>
2987 + <th>Description</th>
2988 + </tr>
2989 + </thead>
2990 + <tbody>
2991 + <tr>
2992 + <td>
2993 + <code><span title="typing.Optional">Optional</span>[<span title="typing.List">List</span>[<span title="typing.Dict">Dict</span>[str, str]]]</code>
2994 + </td>
2995 + <td>
2996 + <div class="doc-md-description">
2997 + <p>Optional[List[Dict[str, str]]]: A list of dictionaries where each dictionary contains data about an agent.
2998 + If the operation fails, it returns None.</p>
2999 + </div>
3000 + </td>
3001 + </tr>
3002 + </tbody>
3003 + </table>
3004 +
3005 + <details class="quote">
3006 + <summary>Source code in <code>app\services\WazuhManager\agent.py</code></summary>
3007 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
3008 +<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
3009 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
3010 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
3011 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
3012 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
3013 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
3014 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
3015 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
3016 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
3017 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
3018 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
3019 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
3020 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
3021 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
3022 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
3023 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
3024 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
3025 +<span class="normal"><a href="#__codelineno-0-104">104</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="k">def</span> <span class="nf">collect_agents</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]]:</span>
3026 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3027 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> Collects all agents from the Wazuh Manager.</span>
3028 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a>
3029 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> Returns:</span>
3030 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Optional[List[Dict[str, str]]]: A list of dictionaries where each dictionary contains data about an agent.</span>
3031 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> If the operation fails, it returns None.</span>
3032 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> &quot;&quot;&quot;</span>
3033 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting Wazuh Agents&quot;</span><span class="p">)</span>
3034 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="k">try</span><span class="p">:</span>
3035 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="n">agent_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_agent_data</span><span class="p">()</span>
3036 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="k">if</span> <span class="n">agent_data</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3037 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">return</span> <span class="kc">None</span>
3038 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
3039 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">wazuh_agents_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_agent_list</span><span class="p">(</span><span class="n">agent_data</span><span class="p">)</span>
3040 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="k">return</span> <span class="n">wazuh_agents_list</span>
3041 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
3042 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to collect Wazuh Agents: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3043 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="k">return</span> <span class="kc">None</span>
3044 +</code></pre></div></td></tr></table></div>
3045 + </details>
3046 + </div>
3047 +
3048 +</div>
3049 +
3050 +<div class="doc doc-object doc-function">
3051 +
3052 +
3053 +
3054 +<h3 id="app.services.WazuhManager.agent.WazuhManagerAgentService.delete_agent" class="doc doc-heading">
3055 +<code class="highlight language-python"><span class="n">delete_agent</span><span class="p">(</span><span class="n">agent_id</span><span class="p">)</span></code>
3056 +
3057 +</h3>
3058 +
3059 +
3060 + <div class="doc doc-contents ">
3061 +
3062 + <p>Deletes an agent from the Wazuh Manager.</p>
3063 +
3064 + <p><strong>Parameters:</strong></p>
3065 + <table>
3066 + <thead>
3067 + <tr>
3068 + <th>Name</th>
3069 + <th>Type</th>
3070 + <th>Description</th>
3071 + <th>Default</th>
3072 + </tr>
3073 + </thead>
3074 + <tbody>
3075 + <tr>
3076 + <td><code>agent_id</code></td>
3077 + <td>
3078 + <code>str</code>
3079 + </td>
3080 + <td>
3081 + <div class="doc-md-description">
3082 + <p>The id of the agent to be deleted.</p>
3083 + </div>
3084 + </td>
3085 + <td>
3086 + <em>required</em>
3087 + </td>
3088 + </tr>
3089 + </tbody>
3090 + </table>
3091 +
3092 + <p><strong>Returns:</strong></p>
3093 + <table>
3094 + <thead>
3095 + <tr>
3096 + <th>Type</th>
3097 + <th>Description</th>
3098 + </tr>
3099 + </thead>
3100 + <tbody>
3101 + <tr>
3102 + <td>
3103 + <code><span title="typing.Dict">Dict</span>[str, bool]</code>
3104 + </td>
3105 + <td>
3106 + <div class="doc-md-description">
3107 + <p>Dict[str, bool]: A dictionary indicating the success of the operation. If the operation was successful,
3108 + <code>{"agentDeleted": True}</code> is returned. If it failed, <code>{"agentDeleted": False}</code> is returned.</p>
3109 + </div>
3110 + </td>
3111 + </tr>
3112 + </tbody>
3113 + </table>
3114 +
3115 + <details class="quote">
3116 + <summary>Source code in <code>app\services\WazuhManager\agent.py</code></summary>
3117 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-151">151</a></span>
3118 +<span class="normal"><a href="#__codelineno-0-152">152</a></span>
3119 +<span class="normal"><a href="#__codelineno-0-153">153</a></span>
3120 +<span class="normal"><a href="#__codelineno-0-154">154</a></span>
3121 +<span class="normal"><a href="#__codelineno-0-155">155</a></span>
3122 +<span class="normal"><a href="#__codelineno-0-156">156</a></span>
3123 +<span class="normal"><a href="#__codelineno-0-157">157</a></span>
3124 +<span class="normal"><a href="#__codelineno-0-158">158</a></span>
3125 +<span class="normal"><a href="#__codelineno-0-159">159</a></span>
3126 +<span class="normal"><a href="#__codelineno-0-160">160</a></span>
3127 +<span class="normal"><a href="#__codelineno-0-161">161</a></span>
3128 +<span class="normal"><a href="#__codelineno-0-162">162</a></span>
3129 +<span class="normal"><a href="#__codelineno-0-163">163</a></span>
3130 +<span class="normal"><a href="#__codelineno-0-164">164</a></span>
3131 +<span class="normal"><a href="#__codelineno-0-165">165</a></span>
3132 +<span class="normal"><a href="#__codelineno-0-166">166</a></span>
3133 +<span class="normal"><a href="#__codelineno-0-167">167</a></span>
3134 +<span class="normal"><a href="#__codelineno-0-168">168</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="k">def</span> <span class="nf">delete_agent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agent_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]:</span>
3135 +<a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3136 +<a id="__codelineno-0-153" name="__codelineno-0-153"></a><span class="sd"> Deletes an agent from the Wazuh Manager.</span>
3137 +<a id="__codelineno-0-154" name="__codelineno-0-154"></a>
3138 +<a id="__codelineno-0-155" name="__codelineno-0-155"></a><span class="sd"> Args:</span>
3139 +<a id="__codelineno-0-156" name="__codelineno-0-156"></a><span class="sd"> agent_id (str): The id of the agent to be deleted.</span>
3140 +<a id="__codelineno-0-157" name="__codelineno-0-157"></a>
3141 +<a id="__codelineno-0-158" name="__codelineno-0-158"></a><span class="sd"> Returns:</span>
3142 +<a id="__codelineno-0-159" name="__codelineno-0-159"></a><span class="sd"> Dict[str, bool]: A dictionary indicating the success of the operation. If the operation was successful,</span>
3143 +<a id="__codelineno-0-160" name="__codelineno-0-160"></a><span class="sd"> `{&quot;agentDeleted&quot;: True}` is returned. If it failed, `{&quot;agentDeleted&quot;: False}` is returned.</span>
3144 +<a id="__codelineno-0-161" name="__codelineno-0-161"></a><span class="sd"> &quot;&quot;&quot;</span>
3145 +<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
3146 +<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="s2">&quot;purge&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3147 +<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="s2">&quot;agents_list&quot;</span><span class="p">:</span> <span class="p">[</span><span class="n">agent_id</span><span class="p">],</span>
3148 +<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="s2">&quot;status&quot;</span><span class="p">:</span> <span class="s2">&quot;all&quot;</span><span class="p">,</span>
3149 +<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="s2">&quot;older_than&quot;</span><span class="p">:</span> <span class="s2">&quot;0s&quot;</span><span class="p">,</span>
3150 +<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="p">}</span>
3151 +<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">delete_request</span><span class="p">(</span><span class="s2">&quot;agents&quot;</span><span class="p">,</span> <span class="n">params</span><span class="p">)</span>
3152 +</code></pre></div></td></tr></table></div>
3153 + </details>
3154 + </div>
3155 +
3156 +</div>
3157 +
3158 +
3159 +
3160 + </div>
3161 +
3162 + </div>
3163 +
3164 +</div>
3165 +
3166 +
3167 +
3168 +
3169 + </div>
3170 +
3171 + </div>
3172 +
3173 +</div>
3174 +
3175 +<div class="doc doc-object doc-module">
3176 +
3177 +
3178 +<a id="app.services.WazuhManager.disabled_rule"></a>
3179 + <div class="doc doc-contents first">
3180 +
3181 +
3182 +
3183 + <div class="doc doc-children">
3184 +
3185 +
3186 +
3187 +
3188 +
3189 +
3190 +
3191 +
3192 +<div class="doc doc-object doc-class">
3193 +
3194 +
3195 +
3196 +<h2 id="app.services.WazuhManager.disabled_rule.DisableRuleService" class="doc doc-heading">
3197 + <code>DisableRuleService</code>
3198 +
3199 +
3200 +</h2>
3201 +
3202 +
3203 + <div class="doc doc-contents ">
3204 +
3205 +
3206 + <p>This class handles rule disabling related operations in Wazuh Manager.</p>
3207 +
3208 + <p><strong>Attributes:</strong></p>
3209 + <table>
3210 + <thead>
3211 + <tr>
3212 + <th>Name</th>
3213 + <th>Type</th>
3214 + <th>Description</th>
3215 + </tr>
3216 + </thead>
3217 + <tbody>
3218 + <tr>
3219 + <td><code>universal_service</code></td>
3220 + <td>
3221 + <code><a class="autorefs autorefs-internal" title="app.services.WazuhManager.universal.UniversalService" href="#app.services.WazuhManager.universal.UniversalService">UniversalService</a></code>
3222 + </td>
3223 + <td>
3224 + <div class="doc-md-description">
3225 + <p>An instance of UniversalService.</p>
3226 + </div>
3227 + </td>
3228 + </tr>
3229 + <tr>
3230 + <td><code>auth_token</code></td>
3231 + <td>
3232 + <code>str</code>
3233 + </td>
3234 + <td>
3235 + <div class="doc-md-description">
3236 + <p>The Wazuh API authentication token.</p>
3237 + </div>
3238 + </td>
3239 + </tr>
3240 + <tr>
3241 + <td><code>wazuh_http_requests</code></td>
3242 + <td>
3243 + <code><a class="autorefs autorefs-internal" title="app.services.WazuhManager.disabled_rule.WazuhHttpRequests" href="#app.services.WazuhManager.disabled_rule.WazuhHttpRequests">WazuhHttpRequests</a></code>
3244 + </td>
3245 + <td>
3246 + <div class="doc-md-description">
3247 + <p>An instance of WazuhHttpRequests.</p>
3248 + </div>
3249 + </td>
3250 + </tr>
3251 + </tbody>
3252 + </table>
3253 +
3254 +
3255 + <details class="quote">
3256 + <summary>Source code in <code>app\services\WazuhManager\disabled_rule.py</code></summary>
3257 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-112">112</a></span>
3258 +<span class="normal"><a href="#__codelineno-0-113">113</a></span>
3259 +<span class="normal"><a href="#__codelineno-0-114">114</a></span>
3260 +<span class="normal"><a href="#__codelineno-0-115">115</a></span>
3261 +<span class="normal"><a href="#__codelineno-0-116">116</a></span>
3262 +<span class="normal"><a href="#__codelineno-0-117">117</a></span>
3263 +<span class="normal"><a href="#__codelineno-0-118">118</a></span>
3264 +<span class="normal"><a href="#__codelineno-0-119">119</a></span>
3265 +<span class="normal"><a href="#__codelineno-0-120">120</a></span>
3266 +<span class="normal"><a href="#__codelineno-0-121">121</a></span>
3267 +<span class="normal"><a href="#__codelineno-0-122">122</a></span>
3268 +<span class="normal"><a href="#__codelineno-0-123">123</a></span>
3269 +<span class="normal"><a href="#__codelineno-0-124">124</a></span>
3270 +<span class="normal"><a href="#__codelineno-0-125">125</a></span>
3271 +<span class="normal"><a href="#__codelineno-0-126">126</a></span>
3272 +<span class="normal"><a href="#__codelineno-0-127">127</a></span>
3273 +<span class="normal"><a href="#__codelineno-0-128">128</a></span>
3274 +<span class="normal"><a href="#__codelineno-0-129">129</a></span>
3275 +<span class="normal"><a href="#__codelineno-0-130">130</a></span>
3276 +<span class="normal"><a href="#__codelineno-0-131">131</a></span>
3277 +<span class="normal"><a href="#__codelineno-0-132">132</a></span>
3278 +<span class="normal"><a href="#__codelineno-0-133">133</a></span>
3279 +<span class="normal"><a href="#__codelineno-0-134">134</a></span>
3280 +<span class="normal"><a href="#__codelineno-0-135">135</a></span>
3281 +<span class="normal"><a href="#__codelineno-0-136">136</a></span>
3282 +<span class="normal"><a href="#__codelineno-0-137">137</a></span>
3283 +<span class="normal"><a href="#__codelineno-0-138">138</a></span>
3284 +<span class="normal"><a href="#__codelineno-0-139">139</a></span>
3285 +<span class="normal"><a href="#__codelineno-0-140">140</a></span>
3286 +<span class="normal"><a href="#__codelineno-0-141">141</a></span>
3287 +<span class="normal"><a href="#__codelineno-0-142">142</a></span>
3288 +<span class="normal"><a href="#__codelineno-0-143">143</a></span>
3289 +<span class="normal"><a href="#__codelineno-0-144">144</a></span>
3290 +<span class="normal"><a href="#__codelineno-0-145">145</a></span>
3291 +<span class="normal"><a href="#__codelineno-0-146">146</a></span>
3292 +<span class="normal"><a href="#__codelineno-0-147">147</a></span>
3293 +<span class="normal"><a href="#__codelineno-0-148">148</a></span>
3294 +<span class="normal"><a href="#__codelineno-0-149">149</a></span>
3295 +<span class="normal"><a href="#__codelineno-0-150">150</a></span>
3296 +<span class="normal"><a href="#__codelineno-0-151">151</a></span>
3297 +<span class="normal"><a href="#__codelineno-0-152">152</a></span>
3298 +<span class="normal"><a href="#__codelineno-0-153">153</a></span>
3299 +<span class="normal"><a href="#__codelineno-0-154">154</a></span>
3300 +<span class="normal"><a href="#__codelineno-0-155">155</a></span>
3301 +<span class="normal"><a href="#__codelineno-0-156">156</a></span>
3302 +<span class="normal"><a href="#__codelineno-0-157">157</a></span>
3303 +<span class="normal"><a href="#__codelineno-0-158">158</a></span>
3304 +<span class="normal"><a href="#__codelineno-0-159">159</a></span>
3305 +<span class="normal"><a href="#__codelineno-0-160">160</a></span>
3306 +<span class="normal"><a href="#__codelineno-0-161">161</a></span>
3307 +<span class="normal"><a href="#__codelineno-0-162">162</a></span>
3308 +<span class="normal"><a href="#__codelineno-0-163">163</a></span>
3309 +<span class="normal"><a href="#__codelineno-0-164">164</a></span>
3310 +<span class="normal"><a href="#__codelineno-0-165">165</a></span>
3311 +<span class="normal"><a href="#__codelineno-0-166">166</a></span>
3312 +<span class="normal"><a href="#__codelineno-0-167">167</a></span>
3313 +<span class="normal"><a href="#__codelineno-0-168">168</a></span>
3314 +<span class="normal"><a href="#__codelineno-0-169">169</a></span>
3315 +<span class="normal"><a href="#__codelineno-0-170">170</a></span>
3316 +<span class="normal"><a href="#__codelineno-0-171">171</a></span>
3317 +<span class="normal"><a href="#__codelineno-0-172">172</a></span>
3318 +<span class="normal"><a href="#__codelineno-0-173">173</a></span>
3319 +<span class="normal"><a href="#__codelineno-0-174">174</a></span>
3320 +<span class="normal"><a href="#__codelineno-0-175">175</a></span>
3321 +<span class="normal"><a href="#__codelineno-0-176">176</a></span>
3322 +<span class="normal"><a href="#__codelineno-0-177">177</a></span>
3323 +<span class="normal"><a href="#__codelineno-0-178">178</a></span>
3324 +<span class="normal"><a href="#__codelineno-0-179">179</a></span>
3325 +<span class="normal"><a href="#__codelineno-0-180">180</a></span>
3326 +<span class="normal"><a href="#__codelineno-0-181">181</a></span>
3327 +<span class="normal"><a href="#__codelineno-0-182">182</a></span>
3328 +<span class="normal"><a href="#__codelineno-0-183">183</a></span>
3329 +<span class="normal"><a href="#__codelineno-0-184">184</a></span>
3330 +<span class="normal"><a href="#__codelineno-0-185">185</a></span>
3331 +<span class="normal"><a href="#__codelineno-0-186">186</a></span>
3332 +<span class="normal"><a href="#__codelineno-0-187">187</a></span>
3333 +<span class="normal"><a href="#__codelineno-0-188">188</a></span>
3334 +<span class="normal"><a href="#__codelineno-0-189">189</a></span>
3335 +<span class="normal"><a href="#__codelineno-0-190">190</a></span>
3336 +<span class="normal"><a href="#__codelineno-0-191">191</a></span>
3337 +<span class="normal"><a href="#__codelineno-0-192">192</a></span>
3338 +<span class="normal"><a href="#__codelineno-0-193">193</a></span>
3339 +<span class="normal"><a href="#__codelineno-0-194">194</a></span>
3340 +<span class="normal"><a href="#__codelineno-0-195">195</a></span>
3341 +<span class="normal"><a href="#__codelineno-0-196">196</a></span>
3342 +<span class="normal"><a href="#__codelineno-0-197">197</a></span>
3343 +<span class="normal"><a href="#__codelineno-0-198">198</a></span>
3344 +<span class="normal"><a href="#__codelineno-0-199">199</a></span>
3345 +<span class="normal"><a href="#__codelineno-0-200">200</a></span>
3346 +<span class="normal"><a href="#__codelineno-0-201">201</a></span>
3347 +<span class="normal"><a href="#__codelineno-0-202">202</a></span>
3348 +<span class="normal"><a href="#__codelineno-0-203">203</a></span>
3349 +<span class="normal"><a href="#__codelineno-0-204">204</a></span>
3350 +<span class="normal"><a href="#__codelineno-0-205">205</a></span>
3351 +<span class="normal"><a href="#__codelineno-0-206">206</a></span>
3352 +<span class="normal"><a href="#__codelineno-0-207">207</a></span>
3353 +<span class="normal"><a href="#__codelineno-0-208">208</a></span>
3354 +<span class="normal"><a href="#__codelineno-0-209">209</a></span>
3355 +<span class="normal"><a href="#__codelineno-0-210">210</a></span>
3356 +<span class="normal"><a href="#__codelineno-0-211">211</a></span>
3357 +<span class="normal"><a href="#__codelineno-0-212">212</a></span>
3358 +<span class="normal"><a href="#__codelineno-0-213">213</a></span>
3359 +<span class="normal"><a href="#__codelineno-0-214">214</a></span>
3360 +<span class="normal"><a href="#__codelineno-0-215">215</a></span>
3361 +<span class="normal"><a href="#__codelineno-0-216">216</a></span>
3362 +<span class="normal"><a href="#__codelineno-0-217">217</a></span>
3363 +<span class="normal"><a href="#__codelineno-0-218">218</a></span>
3364 +<span class="normal"><a href="#__codelineno-0-219">219</a></span>
3365 +<span class="normal"><a href="#__codelineno-0-220">220</a></span>
3366 +<span class="normal"><a href="#__codelineno-0-221">221</a></span>
3367 +<span class="normal"><a href="#__codelineno-0-222">222</a></span>
3368 +<span class="normal"><a href="#__codelineno-0-223">223</a></span>
3369 +<span class="normal"><a href="#__codelineno-0-224">224</a></span>
3370 +<span class="normal"><a href="#__codelineno-0-225">225</a></span>
3371 +<span class="normal"><a href="#__codelineno-0-226">226</a></span>
3372 +<span class="normal"><a href="#__codelineno-0-227">227</a></span>
3373 +<span class="normal"><a href="#__codelineno-0-228">228</a></span>
3374 +<span class="normal"><a href="#__codelineno-0-229">229</a></span>
3375 +<span class="normal"><a href="#__codelineno-0-230">230</a></span>
3376 +<span class="normal"><a href="#__codelineno-0-231">231</a></span>
3377 +<span class="normal"><a href="#__codelineno-0-232">232</a></span>
3378 +<span class="normal"><a href="#__codelineno-0-233">233</a></span>
3379 +<span class="normal"><a href="#__codelineno-0-234">234</a></span>
3380 +<span class="normal"><a href="#__codelineno-0-235">235</a></span>
3381 +<span class="normal"><a href="#__codelineno-0-236">236</a></span>
3382 +<span class="normal"><a href="#__codelineno-0-237">237</a></span>
3383 +<span class="normal"><a href="#__codelineno-0-238">238</a></span>
3384 +<span class="normal"><a href="#__codelineno-0-239">239</a></span>
3385 +<span class="normal"><a href="#__codelineno-0-240">240</a></span>
3386 +<span class="normal"><a href="#__codelineno-0-241">241</a></span>
3387 +<span class="normal"><a href="#__codelineno-0-242">242</a></span>
3388 +<span class="normal"><a href="#__codelineno-0-243">243</a></span>
3389 +<span class="normal"><a href="#__codelineno-0-244">244</a></span>
3390 +<span class="normal"><a href="#__codelineno-0-245">245</a></span>
3391 +<span class="normal"><a href="#__codelineno-0-246">246</a></span>
3392 +<span class="normal"><a href="#__codelineno-0-247">247</a></span>
3393 +<span class="normal"><a href="#__codelineno-0-248">248</a></span>
3394 +<span class="normal"><a href="#__codelineno-0-249">249</a></span>
3395 +<span class="normal"><a href="#__codelineno-0-250">250</a></span>
3396 +<span class="normal"><a href="#__codelineno-0-251">251</a></span>
3397 +<span class="normal"><a href="#__codelineno-0-252">252</a></span>
3398 +<span class="normal"><a href="#__codelineno-0-253">253</a></span>
3399 +<span class="normal"><a href="#__codelineno-0-254">254</a></span>
3400 +<span class="normal"><a href="#__codelineno-0-255">255</a></span>
3401 +<span class="normal"><a href="#__codelineno-0-256">256</a></span>
3402 +<span class="normal"><a href="#__codelineno-0-257">257</a></span>
3403 +<span class="normal"><a href="#__codelineno-0-258">258</a></span>
3404 +<span class="normal"><a href="#__codelineno-0-259">259</a></span>
3405 +<span class="normal"><a href="#__codelineno-0-260">260</a></span>
3406 +<span class="normal"><a href="#__codelineno-0-261">261</a></span>
3407 +<span class="normal"><a href="#__codelineno-0-262">262</a></span>
3408 +<span class="normal"><a href="#__codelineno-0-263">263</a></span>
3409 +<span class="normal"><a href="#__codelineno-0-264">264</a></span>
3410 +<span class="normal"><a href="#__codelineno-0-265">265</a></span>
3411 +<span class="normal"><a href="#__codelineno-0-266">266</a></span>
3412 +<span class="normal"><a href="#__codelineno-0-267">267</a></span>
3413 +<span class="normal"><a href="#__codelineno-0-268">268</a></span>
3414 +<span class="normal"><a href="#__codelineno-0-269">269</a></span>
3415 +<span class="normal"><a href="#__codelineno-0-270">270</a></span>
3416 +<span class="normal"><a href="#__codelineno-0-271">271</a></span>
3417 +<span class="normal"><a href="#__codelineno-0-272">272</a></span>
3418 +<span class="normal"><a href="#__codelineno-0-273">273</a></span>
3419 +<span class="normal"><a href="#__codelineno-0-274">274</a></span>
3420 +<span class="normal"><a href="#__codelineno-0-275">275</a></span>
3421 +<span class="normal"><a href="#__codelineno-0-276">276</a></span>
3422 +<span class="normal"><a href="#__codelineno-0-277">277</a></span>
3423 +<span class="normal"><a href="#__codelineno-0-278">278</a></span>
3424 +<span class="normal"><a href="#__codelineno-0-279">279</a></span>
3425 +<span class="normal"><a href="#__codelineno-0-280">280</a></span>
3426 +<span class="normal"><a href="#__codelineno-0-281">281</a></span>
3427 +<span class="normal"><a href="#__codelineno-0-282">282</a></span>
3428 +<span class="normal"><a href="#__codelineno-0-283">283</a></span>
3429 +<span class="normal"><a href="#__codelineno-0-284">284</a></span>
3430 +<span class="normal"><a href="#__codelineno-0-285">285</a></span>
3431 +<span class="normal"><a href="#__codelineno-0-286">286</a></span>
3432 +<span class="normal"><a href="#__codelineno-0-287">287</a></span>
3433 +<span class="normal"><a href="#__codelineno-0-288">288</a></span>
3434 +<span class="normal"><a href="#__codelineno-0-289">289</a></span>
3435 +<span class="normal"><a href="#__codelineno-0-290">290</a></span>
3436 +<span class="normal"><a href="#__codelineno-0-291">291</a></span>
3437 +<span class="normal"><a href="#__codelineno-0-292">292</a></span>
3438 +<span class="normal"><a href="#__codelineno-0-293">293</a></span>
3439 +<span class="normal"><a href="#__codelineno-0-294">294</a></span>
3440 +<span class="normal"><a href="#__codelineno-0-295">295</a></span>
3441 +<span class="normal"><a href="#__codelineno-0-296">296</a></span>
3442 +<span class="normal"><a href="#__codelineno-0-297">297</a></span>
3443 +<span class="normal"><a href="#__codelineno-0-298">298</a></span>
3444 +<span class="normal"><a href="#__codelineno-0-299">299</a></span>
3445 +<span class="normal"><a href="#__codelineno-0-300">300</a></span>
3446 +<span class="normal"><a href="#__codelineno-0-301">301</a></span>
3447 +<span class="normal"><a href="#__codelineno-0-302">302</a></span>
3448 +<span class="normal"><a href="#__codelineno-0-303">303</a></span>
3449 +<span class="normal"><a href="#__codelineno-0-304">304</a></span>
3450 +<span class="normal"><a href="#__codelineno-0-305">305</a></span>
3451 +<span class="normal"><a href="#__codelineno-0-306">306</a></span>
3452 +<span class="normal"><a href="#__codelineno-0-307">307</a></span>
3453 +<span class="normal"><a href="#__codelineno-0-308">308</a></span>
3454 +<span class="normal"><a href="#__codelineno-0-309">309</a></span>
3455 +<span class="normal"><a href="#__codelineno-0-310">310</a></span>
3456 +<span class="normal"><a href="#__codelineno-0-311">311</a></span>
3457 +<span class="normal"><a href="#__codelineno-0-312">312</a></span>
3458 +<span class="normal"><a href="#__codelineno-0-313">313</a></span>
3459 +<span class="normal"><a href="#__codelineno-0-314">314</a></span>
3460 +<span class="normal"><a href="#__codelineno-0-315">315</a></span>
3461 +<span class="normal"><a href="#__codelineno-0-316">316</a></span>
3462 +<span class="normal"><a href="#__codelineno-0-317">317</a></span>
3463 +<span class="normal"><a href="#__codelineno-0-318">318</a></span>
3464 +<span class="normal"><a href="#__codelineno-0-319">319</a></span>
3465 +<span class="normal"><a href="#__codelineno-0-320">320</a></span>
3466 +<span class="normal"><a href="#__codelineno-0-321">321</a></span>
3467 +<span class="normal"><a href="#__codelineno-0-322">322</a></span>
3468 +<span class="normal"><a href="#__codelineno-0-323">323</a></span>
3469 +<span class="normal"><a href="#__codelineno-0-324">324</a></span>
3470 +<span class="normal"><a href="#__codelineno-0-325">325</a></span>
3471 +<span class="normal"><a href="#__codelineno-0-326">326</a></span>
3472 +<span class="normal"><a href="#__codelineno-0-327">327</a></span>
3473 +<span class="normal"><a href="#__codelineno-0-328">328</a></span>
3474 +<span class="normal"><a href="#__codelineno-0-329">329</a></span>
3475 +<span class="normal"><a href="#__codelineno-0-330">330</a></span>
3476 +<span class="normal"><a href="#__codelineno-0-331">331</a></span>
3477 +<span class="normal"><a href="#__codelineno-0-332">332</a></span>
3478 +<span class="normal"><a href="#__codelineno-0-333">333</a></span>
3479 +<span class="normal"><a href="#__codelineno-0-334">334</a></span>
3480 +<span class="normal"><a href="#__codelineno-0-335">335</a></span>
3481 +<span class="normal"><a href="#__codelineno-0-336">336</a></span>
3482 +<span class="normal"><a href="#__codelineno-0-337">337</a></span>
3483 +<span class="normal"><a href="#__codelineno-0-338">338</a></span>
3484 +<span class="normal"><a href="#__codelineno-0-339">339</a></span>
3485 +<span class="normal"><a href="#__codelineno-0-340">340</a></span>
3486 +<span class="normal"><a href="#__codelineno-0-341">341</a></span>
3487 +<span class="normal"><a href="#__codelineno-0-342">342</a></span>
3488 +<span class="normal"><a href="#__codelineno-0-343">343</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="k">class</span> <span class="nc">DisableRuleService</span><span class="p">:</span>
3489 +<a id="__codelineno-0-113" name="__codelineno-0-113"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3490 +<a id="__codelineno-0-114" name="__codelineno-0-114"></a><span class="sd"> This class handles rule disabling related operations in Wazuh Manager.</span>
3491 +<a id="__codelineno-0-115" name="__codelineno-0-115"></a>
3492 +<a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="sd"> Attributes:</span>
3493 +<a id="__codelineno-0-117" name="__codelineno-0-117"></a><span class="sd"> universal_service (UniversalService): An instance of UniversalService.</span>
3494 +<a id="__codelineno-0-118" name="__codelineno-0-118"></a><span class="sd"> auth_token (str): The Wazuh API authentication token.</span>
3495 +<a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="sd"> wazuh_http_requests (WazuhHttpRequests): An instance of WazuhHttpRequests.</span>
3496 +<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="sd"> &quot;&quot;&quot;</span>
3497 +<a id="__codelineno-0-121" name="__codelineno-0-121"></a>
3498 +<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">universal_service</span><span class="p">:</span> <span class="n">UniversalService</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
3499 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3500 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a><span class="sd"> Initialize a DisableRuleService instance.</span>
3501 +<a id="__codelineno-0-125" name="__codelineno-0-125"></a>
3502 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="sd"> Args:</span>
3503 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> universal_service (UniversalService): The UniversalService instance to use.</span>
3504 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="sd"> &quot;&quot;&quot;</span>
3505 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">universal_service</span>
3506 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span> <span class="o">=</span> <span class="n">universal_service</span><span class="o">.</span><span class="n">get_auth_token</span><span class="p">()</span>
3507 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span> <span class="o">=</span> <span class="n">WazuhHttpRequests</span><span class="p">(</span>
3508 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
3509 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span><span class="p">,</span>
3510 +<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="p">)</span>
3511 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a>
3512 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="k">def</span> <span class="nf">disable_rule</span><span class="p">(</span>
3513 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="bp">self</span><span class="p">,</span>
3514 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="n">request</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]],</span>
3515 +<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]:</span>
3516 +<a id="__codelineno-0-140" name="__codelineno-0-140"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3517 +<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="sd"> Disable a rule in Wazuh Manager.</span>
3518 +<a id="__codelineno-0-142" name="__codelineno-0-142"></a>
3519 +<a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="sd"> Args:</span>
3520 +<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> request (Dict[str, Union[str, int]]): The request to disable a rule. It should contain &#39;rule_id&#39;, &#39;reason&#39;, and &#39;length_of_time&#39;.</span>
3521 +<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
3522 +<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Returns:</span>
3523 +<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> Dict[str, Union[str, bool]]: A dictionary indicating the success or failure of the operation.</span>
3524 +<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> &quot;&quot;&quot;</span>
3525 +<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="k">try</span><span class="p">:</span>
3526 +<a id="__codelineno-0-150" name="__codelineno-0-150"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_validate_request</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
3527 +<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="n">rule_id</span> <span class="o">=</span> <span class="n">request</span><span class="p">[</span><span class="s2">&quot;rule_id&quot;</span><span class="p">]</span>
3528 +<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="n">filename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fetch_filename</span><span class="p">(</span><span class="n">rule_id</span><span class="p">)</span>
3529 +<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="n">file_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fetch_file_content</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
3530 +<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="n">previous_level</span><span class="p">,</span> <span class="n">updated_file_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_level_1</span><span class="p">(</span>
3531 +<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="n">file_content</span><span class="p">,</span>
3532 +<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="n">rule_id</span><span class="p">,</span>
3533 +<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="p">)</span>
3534 +<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_convert_to_xml</span><span class="p">(</span><span class="n">updated_file_content</span><span class="p">)</span>
3535 +<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_store_disabled_rule_info</span><span class="p">(</span>
3536 +<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="n">rule_id</span><span class="p">,</span>
3537 +<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="n">previous_level</span><span class="p">,</span>
3538 +<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="n">request</span><span class="p">[</span><span class="s2">&quot;reason&quot;</span><span class="p">],</span>
3539 +<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="n">request</span><span class="p">[</span><span class="s2">&quot;length_of_time&quot;</span><span class="p">],</span>
3540 +<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="p">)</span>
3541 +<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_upload_updated_rule</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">xml_content</span><span class="p">)</span>
3542 +<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">restart_service</span><span class="p">()</span>
3543 +<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="k">return</span> <span class="p">{</span>
3544 +<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Rule </span><span class="si">{</span><span class="n">rule_id</span><span class="si">}</span><span class="s2"> successfully disabled in file </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">,</span>
3545 +<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3546 +<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="p">}</span>
3547 +<a id="__codelineno-0-171" name="__codelineno-0-171"></a>
3548 +<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
3549 +<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
3550 +<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
3551 +<a id="__codelineno-0-175" name="__codelineno-0-175"></a>
3552 +<a id="__codelineno-0-176" name="__codelineno-0-176"></a> <span class="k">def</span> <span class="nf">_validate_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
3553 +<a id="__codelineno-0-177" name="__codelineno-0-177"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3554 +<a id="__codelineno-0-178" name="__codelineno-0-178"></a><span class="sd"> Validate the request to disable a rule.</span>
3555 +<a id="__codelineno-0-179" name="__codelineno-0-179"></a>
3556 +<a id="__codelineno-0-180" name="__codelineno-0-180"></a><span class="sd"> Args:</span>
3557 +<a id="__codelineno-0-181" name="__codelineno-0-181"></a><span class="sd"> request (Dict[str, Union[str, int]]): The request to disable a rule.</span>
3558 +<a id="__codelineno-0-182" name="__codelineno-0-182"></a>
3559 +<a id="__codelineno-0-183" name="__codelineno-0-183"></a><span class="sd"> Raises:</span>
3560 +<a id="__codelineno-0-184" name="__codelineno-0-184"></a><span class="sd"> ValueError: If any of the required fields (&#39;rule_id&#39;, &#39;reason&#39;, &#39;length_of_time&#39;) are missing in the request.</span>
3561 +<a id="__codelineno-0-185" name="__codelineno-0-185"></a><span class="sd"> &quot;&quot;&quot;</span>
3562 +<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Validating disable rule request: </span><span class="si">{</span><span class="n">request</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3563 +<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="k">if</span> <span class="s2">&quot;rule_id&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">request</span><span class="p">:</span>
3564 +<a id="__codelineno-0-188" name="__codelineno-0-188"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Request missing rule_id&quot;</span><span class="p">)</span>
3565 +<a id="__codelineno-0-189" name="__codelineno-0-189"></a> <span class="k">if</span> <span class="s2">&quot;reason&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">request</span><span class="p">:</span>
3566 +<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Request missing reason&quot;</span><span class="p">)</span>
3567 +<a id="__codelineno-0-191" name="__codelineno-0-191"></a> <span class="k">if</span> <span class="s2">&quot;length_of_time&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">request</span><span class="p">:</span>
3568 +<a id="__codelineno-0-192" name="__codelineno-0-192"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Request missing length_of_time&quot;</span><span class="p">)</span>
3569 +<a id="__codelineno-0-193" name="__codelineno-0-193"></a> <span class="n">request</span><span class="p">[</span><span class="s2">&quot;length_of_time&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">request</span><span class="p">[</span><span class="s2">&quot;length_of_time&quot;</span><span class="p">])</span>
3570 +<a id="__codelineno-0-194" name="__codelineno-0-194"></a>
3571 +<a id="__codelineno-0-195" name="__codelineno-0-195"></a> <span class="k">def</span> <span class="nf">_fetch_filename</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
3572 +<a id="__codelineno-0-196" name="__codelineno-0-196"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3573 +<a id="__codelineno-0-197" name="__codelineno-0-197"></a><span class="sd"> Fetch the filename from the Wazuh-Manager that contains the rule to be disabled.</span>
3574 +<a id="__codelineno-0-198" name="__codelineno-0-198"></a>
3575 +<a id="__codelineno-0-199" name="__codelineno-0-199"></a><span class="sd"> Args:</span>
3576 +<a id="__codelineno-0-200" name="__codelineno-0-200"></a><span class="sd"> rule_id (str): The id of the rule to be disabled.</span>
3577 +<a id="__codelineno-0-201" name="__codelineno-0-201"></a>
3578 +<a id="__codelineno-0-202" name="__codelineno-0-202"></a><span class="sd"> Returns:</span>
3579 +<a id="__codelineno-0-203" name="__codelineno-0-203"></a><span class="sd"> str: The filename that contains the rule.</span>
3580 +<a id="__codelineno-0-204" name="__codelineno-0-204"></a>
3581 +<a id="__codelineno-0-205" name="__codelineno-0-205"></a><span class="sd"> Raises:</span>
3582 +<a id="__codelineno-0-206" name="__codelineno-0-206"></a><span class="sd"> ValueError: If the filename could not be fetched successfully.</span>
3583 +<a id="__codelineno-0-207" name="__codelineno-0-207"></a><span class="sd"> &quot;&quot;&quot;</span>
3584 +<a id="__codelineno-0-208" name="__codelineno-0-208"></a> <span class="n">filename_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">get_request</span><span class="p">(</span>
3585 +<a id="__codelineno-0-209" name="__codelineno-0-209"></a> <span class="s2">&quot;rules&quot;</span><span class="p">,</span>
3586 +<a id="__codelineno-0-210" name="__codelineno-0-210"></a> <span class="p">{</span><span class="s2">&quot;rule_ids&quot;</span><span class="p">:</span> <span class="n">rule_id</span><span class="p">},</span>
3587 +<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="p">)</span>
3588 +<a id="__codelineno-0-212" name="__codelineno-0-212"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">filename_data</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3589 +<a id="__codelineno-0-213" name="__codelineno-0-213"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">filename_data</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">])</span>
3590 +<a id="__codelineno-0-214" name="__codelineno-0-214"></a> <span class="k">return</span> <span class="n">filename_data</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">][</span><span class="s2">&quot;data&quot;</span><span class="p">][</span><span class="s2">&quot;affected_items&quot;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;filename&quot;</span><span class="p">]</span>
3591 +<a id="__codelineno-0-215" name="__codelineno-0-215"></a>
3592 +<a id="__codelineno-0-216" name="__codelineno-0-216"></a> <span class="k">def</span> <span class="nf">_fetch_file_content</span><span class="p">(</span>
3593 +<a id="__codelineno-0-217" name="__codelineno-0-217"></a> <span class="bp">self</span><span class="p">,</span>
3594 +<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="n">filename</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3595 +<a id="__codelineno-0-219" name="__codelineno-0-219"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]]:</span>
3596 +<a id="__codelineno-0-220" name="__codelineno-0-220"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3597 +<a id="__codelineno-0-221" name="__codelineno-0-221"></a><span class="sd"> Fetch the content of the file that contains the rule to be disabled.</span>
3598 +<a id="__codelineno-0-222" name="__codelineno-0-222"></a>
3599 +<a id="__codelineno-0-223" name="__codelineno-0-223"></a><span class="sd"> Args:</span>
3600 +<a id="__codelineno-0-224" name="__codelineno-0-224"></a><span class="sd"> filename (str): The filename that contains the rule.</span>
3601 +<a id="__codelineno-0-225" name="__codelineno-0-225"></a>
3602 +<a id="__codelineno-0-226" name="__codelineno-0-226"></a><span class="sd"> Returns:</span>
3603 +<a id="__codelineno-0-227" name="__codelineno-0-227"></a><span class="sd"> Union[Dict[str, str], List[Dict[str, str]]]: The content of the file.</span>
3604 +<a id="__codelineno-0-228" name="__codelineno-0-228"></a>
3605 +<a id="__codelineno-0-229" name="__codelineno-0-229"></a><span class="sd"> Raises:</span>
3606 +<a id="__codelineno-0-230" name="__codelineno-0-230"></a><span class="sd"> ValueError: If the file content could not be fetched successfully.</span>
3607 +<a id="__codelineno-0-231" name="__codelineno-0-231"></a><span class="sd"> &quot;&quot;&quot;</span>
3608 +<a id="__codelineno-0-232" name="__codelineno-0-232"></a> <span class="n">file_content_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">get_request</span><span class="p">(</span>
3609 +<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="sa">f</span><span class="s2">&quot;rules/files/</span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
3610 +<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="p">)</span>
3611 +<a id="__codelineno-0-235" name="__codelineno-0-235"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">file_content_data</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3612 +<a id="__codelineno-0-236" name="__codelineno-0-236"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">file_content_data</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">])</span>
3613 +<a id="__codelineno-0-237" name="__codelineno-0-237"></a> <span class="k">return</span> <span class="n">file_content_data</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">][</span><span class="s2">&quot;data&quot;</span><span class="p">][</span><span class="s2">&quot;affected_items&quot;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;group&quot;</span><span class="p">]</span>
3614 +<a id="__codelineno-0-238" name="__codelineno-0-238"></a>
3615 +<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="k">def</span> <span class="nf">_set_level_1</span><span class="p">(</span>
3616 +<a id="__codelineno-0-240" name="__codelineno-0-240"></a> <span class="bp">self</span><span class="p">,</span>
3617 +<a id="__codelineno-0-241" name="__codelineno-0-241"></a> <span class="n">file_content</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]],</span>
3618 +<a id="__codelineno-0-242" name="__codelineno-0-242"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3619 +<a id="__codelineno-0-243" name="__codelineno-0-243"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]]]:</span>
3620 +<a id="__codelineno-0-244" name="__codelineno-0-244"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3621 +<a id="__codelineno-0-245" name="__codelineno-0-245"></a><span class="sd"> Set the level of the rule to 1.</span>
3622 +<a id="__codelineno-0-246" name="__codelineno-0-246"></a>
3623 +<a id="__codelineno-0-247" name="__codelineno-0-247"></a><span class="sd"> Args:</span>
3624 +<a id="__codelineno-0-248" name="__codelineno-0-248"></a><span class="sd"> file_content (Union[Dict[str, str], List[Dict[str, str]]]): The content of the file that contains the rule.</span>
3625 +<a id="__codelineno-0-249" name="__codelineno-0-249"></a><span class="sd"> rule_id (str): The id of the rule to be disabled.</span>
3626 +<a id="__codelineno-0-250" name="__codelineno-0-250"></a>
3627 +<a id="__codelineno-0-251" name="__codelineno-0-251"></a><span class="sd"> Returns:</span>
3628 +<a id="__codelineno-0-252" name="__codelineno-0-252"></a><span class="sd"> Tuple[str, Union[Dict[str, str], List[Dict[str, str]]]]: A tuple containing the previous level of the rule and the updated file content.</span>
3629 +<a id="__codelineno-0-253" name="__codelineno-0-253"></a><span class="sd"> &quot;&quot;&quot;</span>
3630 +<a id="__codelineno-0-254" name="__codelineno-0-254"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
3631 +<a id="__codelineno-0-255" name="__codelineno-0-255"></a> <span class="sa">f</span><span class="s2">&quot;Setting rule </span><span class="si">{</span><span class="n">rule_id</span><span class="si">}</span><span class="s2"> level to 1 for file_content: </span><span class="si">{</span><span class="n">file_content</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
3632 +<a id="__codelineno-0-256" name="__codelineno-0-256"></a> <span class="p">)</span>
3633 +<a id="__codelineno-0-257" name="__codelineno-0-257"></a> <span class="n">previous_level</span> <span class="o">=</span> <span class="kc">None</span>
3634 +<a id="__codelineno-0-258" name="__codelineno-0-258"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">file_content</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
3635 +<a id="__codelineno-0-259" name="__codelineno-0-259"></a> <span class="n">file_content</span> <span class="o">=</span> <span class="p">[</span><span class="n">file_content</span><span class="p">]</span>
3636 +<a id="__codelineno-0-260" name="__codelineno-0-260"></a> <span class="k">for</span> <span class="n">group_block</span> <span class="ow">in</span> <span class="n">file_content</span><span class="p">:</span>
3637 +<a id="__codelineno-0-261" name="__codelineno-0-261"></a> <span class="n">rule_block</span> <span class="o">=</span> <span class="n">group_block</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;rule&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
3638 +<a id="__codelineno-0-262" name="__codelineno-0-262"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">rule_block</span><span class="p">:</span>
3639 +<a id="__codelineno-0-263" name="__codelineno-0-263"></a> <span class="k">continue</span>
3640 +<a id="__codelineno-0-264" name="__codelineno-0-264"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">rule_block</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
3641 +<a id="__codelineno-0-265" name="__codelineno-0-265"></a> <span class="n">rule_block</span> <span class="o">=</span> <span class="p">[</span><span class="n">rule_block</span><span class="p">]</span>
3642 +<a id="__codelineno-0-266" name="__codelineno-0-266"></a> <span class="k">for</span> <span class="n">rule</span> <span class="ow">in</span> <span class="n">rule_block</span><span class="p">:</span>
3643 +<a id="__codelineno-0-267" name="__codelineno-0-267"></a> <span class="k">if</span> <span class="n">rule</span><span class="p">[</span><span class="s2">&quot;@id&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">rule_id</span><span class="p">:</span>
3644 +<a id="__codelineno-0-268" name="__codelineno-0-268"></a> <span class="n">previous_level</span> <span class="o">=</span> <span class="n">rule</span><span class="p">[</span><span class="s2">&quot;@level&quot;</span><span class="p">]</span>
3645 +<a id="__codelineno-0-269" name="__codelineno-0-269"></a> <span class="n">rule</span><span class="p">[</span><span class="s2">&quot;@level&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;1&quot;</span>
3646 +<a id="__codelineno-0-270" name="__codelineno-0-270"></a> <span class="k">break</span>
3647 +<a id="__codelineno-0-271" name="__codelineno-0-271"></a> <span class="k">return</span> <span class="n">previous_level</span><span class="p">,</span> <span class="n">file_content</span>
3648 +<a id="__codelineno-0-272" name="__codelineno-0-272"></a>
3649 +<a id="__codelineno-0-273" name="__codelineno-0-273"></a> <span class="k">def</span> <span class="nf">_convert_to_xml</span><span class="p">(</span>
3650 +<a id="__codelineno-0-274" name="__codelineno-0-274"></a> <span class="bp">self</span><span class="p">,</span>
3651 +<a id="__codelineno-0-275" name="__codelineno-0-275"></a> <span class="n">updated_file_content</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]],</span>
3652 +<a id="__codelineno-0-276" name="__codelineno-0-276"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
3653 +<a id="__codelineno-0-277" name="__codelineno-0-277"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3654 +<a id="__codelineno-0-278" name="__codelineno-0-278"></a><span class="sd"> Convert the updated file content to XML format.</span>
3655 +<a id="__codelineno-0-279" name="__codelineno-0-279"></a>
3656 +<a id="__codelineno-0-280" name="__codelineno-0-280"></a><span class="sd"> Args:</span>
3657 +<a id="__codelineno-0-281" name="__codelineno-0-281"></a><span class="sd"> updated_file_content (Union[Dict[str, str], List[Dict[str, str]]]): The updated file content.</span>
3658 +<a id="__codelineno-0-282" name="__codelineno-0-282"></a>
3659 +<a id="__codelineno-0-283" name="__codelineno-0-283"></a><span class="sd"> Returns:</span>
3660 +<a id="__codelineno-0-284" name="__codelineno-0-284"></a><span class="sd"> str: The updated file content in XML format.</span>
3661 +<a id="__codelineno-0-285" name="__codelineno-0-285"></a><span class="sd"> &quot;&quot;&quot;</span>
3662 +<a id="__codelineno-0-286" name="__codelineno-0-286"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Received updated_file_content: </span><span class="si">{</span><span class="n">updated_file_content</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3663 +<a id="__codelineno-0-287" name="__codelineno-0-287"></a> <span class="n">xml_content_list</span> <span class="o">=</span> <span class="p">[]</span>
3664 +<a id="__codelineno-0-288" name="__codelineno-0-288"></a> <span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="n">updated_file_content</span><span class="p">:</span>
3665 +<a id="__codelineno-0-289" name="__codelineno-0-289"></a> <span class="n">xml_dict</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;group&quot;</span><span class="p">:</span> <span class="n">group</span><span class="p">}</span>
3666 +<a id="__codelineno-0-290" name="__codelineno-0-290"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="n">xmltodict</span><span class="o">.</span><span class="n">unparse</span><span class="p">(</span><span class="n">xml_dict</span><span class="p">,</span> <span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
3667 +<a id="__codelineno-0-291" name="__codelineno-0-291"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="n">xml_content</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span>
3668 +<a id="__codelineno-0-292" name="__codelineno-0-292"></a> <span class="s1">&#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;&#39;</span><span class="p">,</span>
3669 +<a id="__codelineno-0-293" name="__codelineno-0-293"></a> <span class="s2">&quot;&quot;</span><span class="p">,</span>
3670 +<a id="__codelineno-0-294" name="__codelineno-0-294"></a> <span class="p">)</span>
3671 +<a id="__codelineno-0-295" name="__codelineno-0-295"></a> <span class="n">xml_content_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">xml_content</span><span class="p">)</span>
3672 +<a id="__codelineno-0-296" name="__codelineno-0-296"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">xml_content_list</span><span class="p">)</span>
3673 +<a id="__codelineno-0-297" name="__codelineno-0-297"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="n">xml_content</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
3674 +<a id="__codelineno-0-298" name="__codelineno-0-298"></a> <span class="k">return</span> <span class="n">xml_content</span>
3675 +<a id="__codelineno-0-299" name="__codelineno-0-299"></a>
3676 +<a id="__codelineno-0-300" name="__codelineno-0-300"></a> <span class="k">def</span> <span class="nf">_store_disabled_rule_info</span><span class="p">(</span>
3677 +<a id="__codelineno-0-301" name="__codelineno-0-301"></a> <span class="bp">self</span><span class="p">,</span>
3678 +<a id="__codelineno-0-302" name="__codelineno-0-302"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3679 +<a id="__codelineno-0-303" name="__codelineno-0-303"></a> <span class="n">previous_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3680 +<a id="__codelineno-0-304" name="__codelineno-0-304"></a> <span class="n">reason</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3681 +<a id="__codelineno-0-305" name="__codelineno-0-305"></a> <span class="n">length_of_time</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3682 +<a id="__codelineno-0-306" name="__codelineno-0-306"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
3683 +<a id="__codelineno-0-307" name="__codelineno-0-307"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3684 +<a id="__codelineno-0-308" name="__codelineno-0-308"></a><span class="sd"> Store information about the disabled rule in the database.</span>
3685 +<a id="__codelineno-0-309" name="__codelineno-0-309"></a>
3686 +<a id="__codelineno-0-310" name="__codelineno-0-310"></a><span class="sd"> Args:</span>
3687 +<a id="__codelineno-0-311" name="__codelineno-0-311"></a><span class="sd"> rule_id (str): The id of the rule.</span>
3688 +<a id="__codelineno-0-312" name="__codelineno-0-312"></a><span class="sd"> previous_level (str): The previous level of the rule before it was disabled.</span>
3689 +<a id="__codelineno-0-313" name="__codelineno-0-313"></a><span class="sd"> reason (str): The reason for disabling the rule.</span>
3690 +<a id="__codelineno-0-314" name="__codelineno-0-314"></a><span class="sd"> length_of_time (str): The length of time for which the rule will be disabled.</span>
3691 +<a id="__codelineno-0-315" name="__codelineno-0-315"></a><span class="sd"> &quot;&quot;&quot;</span>
3692 +<a id="__codelineno-0-316" name="__codelineno-0-316"></a> <span class="n">disabled_rule</span> <span class="o">=</span> <span class="n">DisabledRules</span><span class="p">(</span>
3693 +<a id="__codelineno-0-317" name="__codelineno-0-317"></a> <span class="n">rule_id</span><span class="o">=</span><span class="n">rule_id</span><span class="p">,</span>
3694 +<a id="__codelineno-0-318" name="__codelineno-0-318"></a> <span class="n">previous_level</span><span class="o">=</span><span class="n">previous_level</span><span class="p">,</span>
3695 +<a id="__codelineno-0-319" name="__codelineno-0-319"></a> <span class="n">new_level</span><span class="o">=</span><span class="s2">&quot;1&quot;</span><span class="p">,</span>
3696 +<a id="__codelineno-0-320" name="__codelineno-0-320"></a> <span class="n">reason_for_disabling</span><span class="o">=</span><span class="n">reason</span><span class="p">,</span>
3697 +<a id="__codelineno-0-321" name="__codelineno-0-321"></a> <span class="n">length_of_time</span><span class="o">=</span><span class="n">length_of_time</span><span class="p">,</span>
3698 +<a id="__codelineno-0-322" name="__codelineno-0-322"></a> <span class="p">)</span>
3699 +<a id="__codelineno-0-323" name="__codelineno-0-323"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">disabled_rule</span><span class="p">)</span>
3700 +<a id="__codelineno-0-324" name="__codelineno-0-324"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
3701 +<a id="__codelineno-0-325" name="__codelineno-0-325"></a>
3702 +<a id="__codelineno-0-326" name="__codelineno-0-326"></a> <span class="k">def</span> <span class="nf">_upload_updated_rule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">xml_content</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
3703 +<a id="__codelineno-0-327" name="__codelineno-0-327"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3704 +<a id="__codelineno-0-328" name="__codelineno-0-328"></a><span class="sd"> Upload the updated rule to the Wazuh Manager.</span>
3705 +<a id="__codelineno-0-329" name="__codelineno-0-329"></a>
3706 +<a id="__codelineno-0-330" name="__codelineno-0-330"></a><span class="sd"> Args:</span>
3707 +<a id="__codelineno-0-331" name="__codelineno-0-331"></a><span class="sd"> filename (str): The filename that contains the rule.</span>
3708 +<a id="__codelineno-0-332" name="__codelineno-0-332"></a><span class="sd"> xml_content (str): The updated rule in XML format.</span>
3709 +<a id="__codelineno-0-333" name="__codelineno-0-333"></a>
3710 +<a id="__codelineno-0-334" name="__codelineno-0-334"></a><span class="sd"> Raises:</span>
3711 +<a id="__codelineno-0-335" name="__codelineno-0-335"></a><span class="sd"> ValueError: If the updated rule could not be uploaded successfully.</span>
3712 +<a id="__codelineno-0-336" name="__codelineno-0-336"></a><span class="sd"> &quot;&quot;&quot;</span>
3713 +<a id="__codelineno-0-337" name="__codelineno-0-337"></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">put_request</span><span class="p">(</span>
3714 +<a id="__codelineno-0-338" name="__codelineno-0-338"></a> <span class="sa">f</span><span class="s2">&quot;rules/files/</span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
3715 +<a id="__codelineno-0-339" name="__codelineno-0-339"></a> <span class="n">xml_content</span><span class="p">,</span>
3716 +<a id="__codelineno-0-340" name="__codelineno-0-340"></a> <span class="p">{</span><span class="s2">&quot;overwrite&quot;</span><span class="p">:</span> <span class="s2">&quot;true&quot;</span><span class="p">},</span>
3717 +<a id="__codelineno-0-341" name="__codelineno-0-341"></a> <span class="p">)</span>
3718 +<a id="__codelineno-0-342" name="__codelineno-0-342"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">response</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3719 +<a id="__codelineno-0-343" name="__codelineno-0-343"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">])</span>
3720 +</code></pre></div></td></tr></table></div>
3721 + </details>
3722 +
3723 +
3724 +
3725 + <div class="doc doc-children">
3726 +
3727 +
3728 +
3729 +
3730 +
3731 +
3732 +
3733 +
3734 +
3735 +<div class="doc doc-object doc-function">
3736 +
3737 +
3738 +
3739 +<h3 id="app.services.WazuhManager.disabled_rule.DisableRuleService.__init__" class="doc doc-heading">
3740 +<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">universal_service</span><span class="p">)</span></code>
3741 +
3742 +</h3>
3743 +
3744 +
3745 + <div class="doc doc-contents ">
3746 +
3747 + <p>Initialize a DisableRuleService instance.</p>
3748 +
3749 + <p><strong>Parameters:</strong></p>
3750 + <table>
3751 + <thead>
3752 + <tr>
3753 + <th>Name</th>
3754 + <th>Type</th>
3755 + <th>Description</th>
3756 + <th>Default</th>
3757 + </tr>
3758 + </thead>
3759 + <tbody>
3760 + <tr>
3761 + <td><code>universal_service</code></td>
3762 + <td>
3763 + <code><a class="autorefs autorefs-internal" title="app.services.WazuhManager.universal.UniversalService" href="#app.services.WazuhManager.universal.UniversalService">UniversalService</a></code>
3764 + </td>
3765 + <td>
3766 + <div class="doc-md-description">
3767 + <p>The UniversalService instance to use.</p>
3768 + </div>
3769 + </td>
3770 + <td>
3771 + <em>required</em>
3772 + </td>
3773 + </tr>
3774 + </tbody>
3775 + </table>
3776 +
3777 + <details class="quote">
3778 + <summary>Source code in <code>app\services\WazuhManager\disabled_rule.py</code></summary>
3779 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-122">122</a></span>
3780 +<span class="normal"><a href="#__codelineno-0-123">123</a></span>
3781 +<span class="normal"><a href="#__codelineno-0-124">124</a></span>
3782 +<span class="normal"><a href="#__codelineno-0-125">125</a></span>
3783 +<span class="normal"><a href="#__codelineno-0-126">126</a></span>
3784 +<span class="normal"><a href="#__codelineno-0-127">127</a></span>
3785 +<span class="normal"><a href="#__codelineno-0-128">128</a></span>
3786 +<span class="normal"><a href="#__codelineno-0-129">129</a></span>
3787 +<span class="normal"><a href="#__codelineno-0-130">130</a></span>
3788 +<span class="normal"><a href="#__codelineno-0-131">131</a></span>
3789 +<span class="normal"><a href="#__codelineno-0-132">132</a></span>
3790 +<span class="normal"><a href="#__codelineno-0-133">133</a></span>
3791 +<span class="normal"><a href="#__codelineno-0-134">134</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-122" name="__codelineno-0-122"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">universal_service</span><span class="p">:</span> <span class="n">UniversalService</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
3792 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3793 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a><span class="sd"> Initialize a DisableRuleService instance.</span>
3794 +<a id="__codelineno-0-125" name="__codelineno-0-125"></a>
3795 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="sd"> Args:</span>
3796 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> universal_service (UniversalService): The UniversalService instance to use.</span>
3797 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="sd"> &quot;&quot;&quot;</span>
3798 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">universal_service</span>
3799 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span> <span class="o">=</span> <span class="n">universal_service</span><span class="o">.</span><span class="n">get_auth_token</span><span class="p">()</span>
3800 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span> <span class="o">=</span> <span class="n">WazuhHttpRequests</span><span class="p">(</span>
3801 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
3802 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span><span class="p">,</span>
3803 +<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="p">)</span>
3804 +</code></pre></div></td></tr></table></div>
3805 + </details>
3806 + </div>
3807 +
3808 +</div>
3809 +
3810 +<div class="doc doc-object doc-function">
3811 +
3812 +
3813 +
3814 +<h3 id="app.services.WazuhManager.disabled_rule.DisableRuleService.disable_rule" class="doc doc-heading">
3815 +<code class="highlight language-python"><span class="n">disable_rule</span><span class="p">(</span><span class="n">request</span><span class="p">)</span></code>
3816 +
3817 +</h3>
3818 +
3819 +
3820 + <div class="doc doc-contents ">
3821 +
3822 + <p>Disable a rule in Wazuh Manager.</p>
3823 +
3824 + <p><strong>Parameters:</strong></p>
3825 + <table>
3826 + <thead>
3827 + <tr>
3828 + <th>Name</th>
3829 + <th>Type</th>
3830 + <th>Description</th>
3831 + <th>Default</th>
3832 + </tr>
3833 + </thead>
3834 + <tbody>
3835 + <tr>
3836 + <td><code>request</code></td>
3837 + <td>
3838 + <code><span title="typing.Dict">Dict</span>[str, <span title="typing.Union">Union</span>[str, int]]</code>
3839 + </td>
3840 + <td>
3841 + <div class="doc-md-description">
3842 + <p>The request to disable a rule. It should contain 'rule_id', 'reason', and 'length_of_time'.</p>
3843 + </div>
3844 + </td>
3845 + <td>
3846 + <em>required</em>
3847 + </td>
3848 + </tr>
3849 + </tbody>
3850 + </table>
3851 +
3852 + <p><strong>Returns:</strong></p>
3853 + <table>
3854 + <thead>
3855 + <tr>
3856 + <th>Type</th>
3857 + <th>Description</th>
3858 + </tr>
3859 + </thead>
3860 + <tbody>
3861 + <tr>
3862 + <td>
3863 + <code><span title="typing.Dict">Dict</span>[str, <span title="typing.Union">Union</span>[str, bool]]</code>
3864 + </td>
3865 + <td>
3866 + <div class="doc-md-description">
3867 + <p>Dict[str, Union[str, bool]]: A dictionary indicating the success or failure of the operation.</p>
3868 + </div>
3869 + </td>
3870 + </tr>
3871 + </tbody>
3872 + </table>
3873 +
3874 + <details class="quote">
3875 + <summary>Source code in <code>app\services\WazuhManager\disabled_rule.py</code></summary>
3876 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-136">136</a></span>
3877 +<span class="normal"><a href="#__codelineno-0-137">137</a></span>
3878 +<span class="normal"><a href="#__codelineno-0-138">138</a></span>
3879 +<span class="normal"><a href="#__codelineno-0-139">139</a></span>
3880 +<span class="normal"><a href="#__codelineno-0-140">140</a></span>
3881 +<span class="normal"><a href="#__codelineno-0-141">141</a></span>
3882 +<span class="normal"><a href="#__codelineno-0-142">142</a></span>
3883 +<span class="normal"><a href="#__codelineno-0-143">143</a></span>
3884 +<span class="normal"><a href="#__codelineno-0-144">144</a></span>
3885 +<span class="normal"><a href="#__codelineno-0-145">145</a></span>
3886 +<span class="normal"><a href="#__codelineno-0-146">146</a></span>
3887 +<span class="normal"><a href="#__codelineno-0-147">147</a></span>
3888 +<span class="normal"><a href="#__codelineno-0-148">148</a></span>
3889 +<span class="normal"><a href="#__codelineno-0-149">149</a></span>
3890 +<span class="normal"><a href="#__codelineno-0-150">150</a></span>
3891 +<span class="normal"><a href="#__codelineno-0-151">151</a></span>
3892 +<span class="normal"><a href="#__codelineno-0-152">152</a></span>
3893 +<span class="normal"><a href="#__codelineno-0-153">153</a></span>
3894 +<span class="normal"><a href="#__codelineno-0-154">154</a></span>
3895 +<span class="normal"><a href="#__codelineno-0-155">155</a></span>
3896 +<span class="normal"><a href="#__codelineno-0-156">156</a></span>
3897 +<span class="normal"><a href="#__codelineno-0-157">157</a></span>
3898 +<span class="normal"><a href="#__codelineno-0-158">158</a></span>
3899 +<span class="normal"><a href="#__codelineno-0-159">159</a></span>
3900 +<span class="normal"><a href="#__codelineno-0-160">160</a></span>
3901 +<span class="normal"><a href="#__codelineno-0-161">161</a></span>
3902 +<span class="normal"><a href="#__codelineno-0-162">162</a></span>
3903 +<span class="normal"><a href="#__codelineno-0-163">163</a></span>
3904 +<span class="normal"><a href="#__codelineno-0-164">164</a></span>
3905 +<span class="normal"><a href="#__codelineno-0-165">165</a></span>
3906 +<span class="normal"><a href="#__codelineno-0-166">166</a></span>
3907 +<span class="normal"><a href="#__codelineno-0-167">167</a></span>
3908 +<span class="normal"><a href="#__codelineno-0-168">168</a></span>
3909 +<span class="normal"><a href="#__codelineno-0-169">169</a></span>
3910 +<span class="normal"><a href="#__codelineno-0-170">170</a></span>
3911 +<span class="normal"><a href="#__codelineno-0-171">171</a></span>
3912 +<span class="normal"><a href="#__codelineno-0-172">172</a></span>
3913 +<span class="normal"><a href="#__codelineno-0-173">173</a></span>
3914 +<span class="normal"><a href="#__codelineno-0-174">174</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="k">def</span> <span class="nf">disable_rule</span><span class="p">(</span>
3915 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="bp">self</span><span class="p">,</span>
3916 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="n">request</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]],</span>
3917 +<a id="__codelineno-0-139" name="__codelineno-0-139"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]:</span>
3918 +<a id="__codelineno-0-140" name="__codelineno-0-140"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3919 +<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="sd"> Disable a rule in Wazuh Manager.</span>
3920 +<a id="__codelineno-0-142" name="__codelineno-0-142"></a>
3921 +<a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="sd"> Args:</span>
3922 +<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> request (Dict[str, Union[str, int]]): The request to disable a rule. It should contain &#39;rule_id&#39;, &#39;reason&#39;, and &#39;length_of_time&#39;.</span>
3923 +<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
3924 +<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Returns:</span>
3925 +<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> Dict[str, Union[str, bool]]: A dictionary indicating the success or failure of the operation.</span>
3926 +<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> &quot;&quot;&quot;</span>
3927 +<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="k">try</span><span class="p">:</span>
3928 +<a id="__codelineno-0-150" name="__codelineno-0-150"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_validate_request</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
3929 +<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="n">rule_id</span> <span class="o">=</span> <span class="n">request</span><span class="p">[</span><span class="s2">&quot;rule_id&quot;</span><span class="p">]</span>
3930 +<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="n">filename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fetch_filename</span><span class="p">(</span><span class="n">rule_id</span><span class="p">)</span>
3931 +<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="n">file_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fetch_file_content</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
3932 +<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="n">previous_level</span><span class="p">,</span> <span class="n">updated_file_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_level_1</span><span class="p">(</span>
3933 +<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="n">file_content</span><span class="p">,</span>
3934 +<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="n">rule_id</span><span class="p">,</span>
3935 +<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="p">)</span>
3936 +<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_convert_to_xml</span><span class="p">(</span><span class="n">updated_file_content</span><span class="p">)</span>
3937 +<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_store_disabled_rule_info</span><span class="p">(</span>
3938 +<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="n">rule_id</span><span class="p">,</span>
3939 +<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="n">previous_level</span><span class="p">,</span>
3940 +<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="n">request</span><span class="p">[</span><span class="s2">&quot;reason&quot;</span><span class="p">],</span>
3941 +<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="n">request</span><span class="p">[</span><span class="s2">&quot;length_of_time&quot;</span><span class="p">],</span>
3942 +<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="p">)</span>
3943 +<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_upload_updated_rule</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">xml_content</span><span class="p">)</span>
3944 +<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">restart_service</span><span class="p">()</span>
3945 +<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="k">return</span> <span class="p">{</span>
3946 +<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Rule </span><span class="si">{</span><span class="n">rule_id</span><span class="si">}</span><span class="s2"> successfully disabled in file </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">,</span>
3947 +<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3948 +<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="p">}</span>
3949 +<a id="__codelineno-0-171" name="__codelineno-0-171"></a>
3950 +<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
3951 +<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
3952 +<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
3953 +</code></pre></div></td></tr></table></div>
3954 + </details>
3955 + </div>
3956 +
3957 +</div>
3958 +
3959 +
3960 +
3961 + </div>
3962 +
3963 + </div>
3964 +
3965 +</div>
3966 +
3967 +<div class="doc doc-object doc-class">
3968 +
3969 +
3970 +
3971 +<h2 id="app.services.WazuhManager.disabled_rule.WazuhHttpRequests" class="doc doc-heading">
3972 + <code>WazuhHttpRequests</code>
3973 +
3974 +
3975 +</h2>
3976 +
3977 +
3978 + <div class="doc doc-contents ">
3979 +
3980 +
3981 + <p>This class helps to send HTTP requests to the Wazuh API.</p>
3982 +
3983 + <p><strong>Attributes:</strong></p>
3984 + <table>
3985 + <thead>
3986 + <tr>
3987 + <th>Name</th>
3988 + <th>Type</th>
3989 + <th>Description</th>
3990 + </tr>
3991 + </thead>
3992 + <tbody>
3993 + <tr>
3994 + <td><code>connector_url</code></td>
3995 + <td>
3996 + <code>str</code>
3997 + </td>
3998 + <td>
3999 + <div class="doc-md-description">
4000 + <p>The URL of the Wazuh Manager.</p>
4001 + </div>
4002 + </td>
4003 + </tr>
4004 + <tr>
4005 + <td><code>wazuh_auth_token</code></td>
4006 + <td>
4007 + <code>str</code>
4008 + </td>
4009 + <td>
4010 + <div class="doc-md-description">
4011 + <p>The Wazuh API authentication token.</p>
4012 + </div>
4013 + </td>
4014 + </tr>
4015 + <tr>
4016 + <td><code>headers</code></td>
4017 + <td>
4018 + <code><span title="typing.Dict">Dict</span>[str, str]</code>
4019 + </td>
4020 + <td>
4021 + <div class="doc-md-description">
4022 + <p>The headers for HTTP requests.</p>
4023 + </div>
4024 + </td>
4025 + </tr>
4026 + </tbody>
4027 + </table>
4028 +
4029 +
4030 + <details class="quote">
4031 + <summary>Source code in <code>app\services\WazuhManager\disabled_rule.py</code></summary>
4032 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
4033 +<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
4034 +<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
4035 +<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
4036 +<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
4037 +<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
4038 +<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
4039 +<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
4040 +<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
4041 +<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
4042 +<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
4043 +<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
4044 +<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
4045 +<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
4046 +<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
4047 +<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
4048 +<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
4049 +<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
4050 +<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
4051 +<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
4052 +<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
4053 +<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
4054 +<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
4055 +<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
4056 +<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
4057 +<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
4058 +<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
4059 +<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
4060 +<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
4061 +<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
4062 +<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
4063 +<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
4064 +<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
4065 +<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
4066 +<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
4067 +<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
4068 +<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
4069 +<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
4070 +<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
4071 +<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
4072 +<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
4073 +<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
4074 +<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
4075 +<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
4076 +<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
4077 +<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
4078 +<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
4079 +<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
4080 +<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
4081 +<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
4082 +<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
4083 +<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
4084 +<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
4085 +<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
4086 +<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
4087 +<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
4088 +<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
4089 +<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
4090 +<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
4091 +<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
4092 +<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
4093 +<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
4094 +<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
4095 +<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
4096 +<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
4097 +<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
4098 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
4099 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
4100 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
4101 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
4102 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
4103 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
4104 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
4105 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
4106 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
4107 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
4108 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
4109 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
4110 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
4111 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
4112 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
4113 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
4114 +<span class="normal"><a href="#__codelineno-0-104">104</a></span>
4115 +<span class="normal"><a href="#__codelineno-0-105">105</a></span>
4116 +<span class="normal"><a href="#__codelineno-0-106">106</a></span>
4117 +<span class="normal"><a href="#__codelineno-0-107">107</a></span>
4118 +<span class="normal"><a href="#__codelineno-0-108">108</a></span>
4119 +<span class="normal"><a href="#__codelineno-0-109">109</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="k">class</span> <span class="nc">WazuhHttpRequests</span><span class="p">:</span>
4120 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4121 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> This class helps to send HTTP requests to the Wazuh API.</span>
4122 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a>
4123 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> Attributes:</span>
4124 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> connector_url (str): The URL of the Wazuh Manager.</span>
4125 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> wazuh_auth_token (str): The Wazuh API authentication token.</span>
4126 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="sd"> headers (Dict[str, str]): The headers for HTTP requests.</span>
4127 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> &quot;&quot;&quot;</span>
4128 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a>
4129 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">wazuh_auth_token</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
4130 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4131 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> Initialize a WazuhHttpRequests instance.</span>
4132 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a>
4133 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> Args:</span>
4134 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> connector_url (str): The URL of the Wazuh Manager.</span>
4135 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> wazuh_auth_token (str): The Wazuh API authentication token.</span>
4136 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> &quot;&quot;&quot;</span>
4137 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span> <span class="o">=</span> <span class="n">connector_url</span>
4138 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_auth_token</span> <span class="o">=</span> <span class="n">wazuh_auth_token</span>
4139 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="bp">self</span><span class="o">.</span><span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;Authorization&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Bearer </span><span class="si">{</span><span class="n">wazuh_auth_token</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">}</span>
4140 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
4141 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="k">def</span> <span class="nf">get_request</span><span class="p">(</span>
4142 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="bp">self</span><span class="p">,</span>
4143 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="n">endpoint</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
4144 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">params</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
4145 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]:</span>
4146 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4147 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Send a GET request to the specified endpoint.</span>
4148 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
4149 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> Args:</span>
4150 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="sd"> endpoint (str): The endpoint to send the GET request to.</span>
4151 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> params (Optional[Dict[str, str]]): Additional parameters to include in the request.</span>
4152 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
4153 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Returns:</span>
4154 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> Dict[str, Union[str, bool]]: The response from the endpoint. It contains the data from the response or an error message.</span>
4155 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> &quot;&quot;&quot;</span>
4156 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">try</span><span class="p">:</span>
4157 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
4158 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
4159 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="n">headers</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">headers</span><span class="p">,</span>
4160 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
4161 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
4162 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="p">)</span>
4163 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
4164 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;data&quot;</span><span class="p">:</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">(),</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
4165 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
4166 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
4167 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;GET request to </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2"> failed: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4168 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="p">{</span>
4169 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;GET request to </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2"> failed: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
4170 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
4171 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="p">}</span>
4172 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
4173 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">def</span> <span class="nf">put_request</span><span class="p">(</span>
4174 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="bp">self</span><span class="p">,</span>
4175 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">endpoint</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
4176 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">data</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
4177 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">params</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
4178 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]:</span>
4179 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4180 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="sd"> Send a PUT request to the specified endpoint.</span>
4181 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a>
4182 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> Args:</span>
4183 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> endpoint (str): The endpoint to send the PUT request to.</span>
4184 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> data (str): The data to be updated in the PUT request.</span>
4185 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> params (Optional[Dict[str, str]]): Additional parameters to include in the request.</span>
4186 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a>
4187 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> Returns:</span>
4188 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Dict[str, bool]: A dictionary indicating the success or failure of the operation.</span>
4189 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> &quot;&quot;&quot;</span>
4190 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">try</span><span class="p">:</span>
4191 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">headers</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">headers</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
4192 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="n">headers</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s2">&quot;Content-Type&quot;</span><span class="p">:</span> <span class="s2">&quot;application/octet-stream&quot;</span><span class="p">})</span>
4193 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a>
4194 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">put</span><span class="p">(</span>
4195 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
4196 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
4197 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
4198 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">,</span>
4199 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
4200 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="p">)</span>
4201 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
4202 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Successfully updated </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
4203 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a>
4204 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
4205 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to update </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4206 +<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Failed to update </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
4207 +</code></pre></div></td></tr></table></div>
4208 + </details>
4209 +
4210 +
4211 +
4212 + <div class="doc doc-children">
4213 +
4214 +
4215 +
4216 +
4217 +
4218 +
4219 +
4220 +
4221 +
4222 +<div class="doc doc-object doc-function">
4223 +
4224 +
4225 +
4226 +<h3 id="app.services.WazuhManager.disabled_rule.WazuhHttpRequests.__init__" class="doc doc-heading">
4227 +<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">connector_url</span><span class="p">,</span> <span class="n">wazuh_auth_token</span><span class="p">)</span></code>
4228 +
4229 +</h3>
4230 +
4231 +
4232 + <div class="doc doc-contents ">
4233 +
4234 + <p>Initialize a WazuhHttpRequests instance.</p>
4235 +
4236 + <p><strong>Parameters:</strong></p>
4237 + <table>
4238 + <thead>
4239 + <tr>
4240 + <th>Name</th>
4241 + <th>Type</th>
4242 + <th>Description</th>
4243 + <th>Default</th>
4244 + </tr>
4245 + </thead>
4246 + <tbody>
4247 + <tr>
4248 + <td><code>connector_url</code></td>
4249 + <td>
4250 + <code>str</code>
4251 + </td>
4252 + <td>
4253 + <div class="doc-md-description">
4254 + <p>The URL of the Wazuh Manager.</p>
4255 + </div>
4256 + </td>
4257 + <td>
4258 + <em>required</em>
4259 + </td>
4260 + </tr>
4261 + <tr>
4262 + <td><code>wazuh_auth_token</code></td>
4263 + <td>
4264 + <code>str</code>
4265 + </td>
4266 + <td>
4267 + <div class="doc-md-description">
4268 + <p>The Wazuh API authentication token.</p>
4269 + </div>
4270 + </td>
4271 + <td>
4272 + <em>required</em>
4273 + </td>
4274 + </tr>
4275 + </tbody>
4276 + </table>
4277 +
4278 + <details class="quote">
4279 + <summary>Source code in <code>app\services\WazuhManager\disabled_rule.py</code></summary>
4280 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-32">32</a></span>
4281 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
4282 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
4283 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
4284 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
4285 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
4286 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
4287 +<span class="normal"><a href="#__codelineno-0-39">39</a></span>
4288 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
4289 +<span class="normal"><a href="#__codelineno-0-41">41</a></span>
4290 +<span class="normal"><a href="#__codelineno-0-42">42</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">wazuh_auth_token</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
4291 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4292 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> Initialize a WazuhHttpRequests instance.</span>
4293 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a>
4294 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> Args:</span>
4295 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> connector_url (str): The URL of the Wazuh Manager.</span>
4296 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> wazuh_auth_token (str): The Wazuh API authentication token.</span>
4297 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> &quot;&quot;&quot;</span>
4298 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span> <span class="o">=</span> <span class="n">connector_url</span>
4299 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_auth_token</span> <span class="o">=</span> <span class="n">wazuh_auth_token</span>
4300 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="bp">self</span><span class="o">.</span><span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;Authorization&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Bearer </span><span class="si">{</span><span class="n">wazuh_auth_token</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">}</span>
4301 +</code></pre></div></td></tr></table></div>
4302 + </details>
4303 + </div>
4304 +
4305 +</div>
4306 +
4307 +<div class="doc doc-object doc-function">
4308 +
4309 +
4310 +
4311 +<h3 id="app.services.WazuhManager.disabled_rule.WazuhHttpRequests.get_request" class="doc doc-heading">
4312 +<code class="highlight language-python"><span class="n">get_request</span><span class="p">(</span><span class="n">endpoint</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
4313 +
4314 +</h3>
4315 +
4316 +
4317 + <div class="doc doc-contents ">
4318 +
4319 + <p>Send a GET request to the specified endpoint.</p>
4320 +
4321 + <p><strong>Parameters:</strong></p>
4322 + <table>
4323 + <thead>
4324 + <tr>
4325 + <th>Name</th>
4326 + <th>Type</th>
4327 + <th>Description</th>
4328 + <th>Default</th>
4329 + </tr>
4330 + </thead>
4331 + <tbody>
4332 + <tr>
4333 + <td><code>endpoint</code></td>
4334 + <td>
4335 + <code>str</code>
4336 + </td>
4337 + <td>
4338 + <div class="doc-md-description">
4339 + <p>The endpoint to send the GET request to.</p>
4340 + </div>
4341 + </td>
4342 + <td>
4343 + <em>required</em>
4344 + </td>
4345 + </tr>
4346 + <tr>
4347 + <td><code>params</code></td>
4348 + <td>
4349 + <code><span title="typing.Optional">Optional</span>[<span title="typing.Dict">Dict</span>[str, str]]</code>
4350 + </td>
4351 + <td>
4352 + <div class="doc-md-description">
4353 + <p>Additional parameters to include in the request.</p>
4354 + </div>
4355 + </td>
4356 + <td>
4357 + <code>None</code>
4358 + </td>
4359 + </tr>
4360 + </tbody>
4361 + </table>
4362 +
4363 + <p><strong>Returns:</strong></p>
4364 + <table>
4365 + <thead>
4366 + <tr>
4367 + <th>Type</th>
4368 + <th>Description</th>
4369 + </tr>
4370 + </thead>
4371 + <tbody>
4372 + <tr>
4373 + <td>
4374 + <code><span title="typing.Dict">Dict</span>[str, <span title="typing.Union">Union</span>[str, bool]]</code>
4375 + </td>
4376 + <td>
4377 + <div class="doc-md-description">
4378 + <p>Dict[str, Union[str, bool]]: The response from the endpoint. It contains the data from the response or an error message.</p>
4379 + </div>
4380 + </td>
4381 + </tr>
4382 + </tbody>
4383 + </table>
4384 +
4385 + <details class="quote">
4386 + <summary>Source code in <code>app\services\WazuhManager\disabled_rule.py</code></summary>
4387 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-44">44</a></span>
4388 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
4389 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
4390 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
4391 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
4392 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
4393 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
4394 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
4395 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
4396 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
4397 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
4398 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
4399 +<span class="normal"><a href="#__codelineno-0-56">56</a></span>
4400 +<span class="normal"><a href="#__codelineno-0-57">57</a></span>
4401 +<span class="normal"><a href="#__codelineno-0-58">58</a></span>
4402 +<span class="normal"><a href="#__codelineno-0-59">59</a></span>
4403 +<span class="normal"><a href="#__codelineno-0-60">60</a></span>
4404 +<span class="normal"><a href="#__codelineno-0-61">61</a></span>
4405 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
4406 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
4407 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
4408 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
4409 +<span class="normal"><a href="#__codelineno-0-66">66</a></span>
4410 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
4411 +<span class="normal"><a href="#__codelineno-0-68">68</a></span>
4412 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
4413 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
4414 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
4415 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
4416 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
4417 +<span class="normal"><a href="#__codelineno-0-74">74</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="k">def</span> <span class="nf">get_request</span><span class="p">(</span>
4418 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="bp">self</span><span class="p">,</span>
4419 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="n">endpoint</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
4420 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">params</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
4421 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]:</span>
4422 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4423 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Send a GET request to the specified endpoint.</span>
4424 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
4425 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> Args:</span>
4426 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="sd"> endpoint (str): The endpoint to send the GET request to.</span>
4427 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> params (Optional[Dict[str, str]]): Additional parameters to include in the request.</span>
4428 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
4429 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Returns:</span>
4430 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> Dict[str, Union[str, bool]]: The response from the endpoint. It contains the data from the response or an error message.</span>
4431 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> &quot;&quot;&quot;</span>
4432 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">try</span><span class="p">:</span>
4433 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
4434 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
4435 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="n">headers</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">headers</span><span class="p">,</span>
4436 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
4437 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
4438 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="p">)</span>
4439 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
4440 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;data&quot;</span><span class="p">:</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">(),</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
4441 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
4442 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
4443 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;GET request to </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2"> failed: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4444 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="p">{</span>
4445 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;GET request to </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2"> failed: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
4446 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
4447 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="p">}</span>
4448 +</code></pre></div></td></tr></table></div>
4449 + </details>
4450 + </div>
4451 +
4452 +</div>
4453 +
4454 +<div class="doc doc-object doc-function">
4455 +
4456 +
4457 +
4458 +<h3 id="app.services.WazuhManager.disabled_rule.WazuhHttpRequests.put_request" class="doc doc-heading">
4459 +<code class="highlight language-python"><span class="n">put_request</span><span class="p">(</span><span class="n">endpoint</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
4460 +
4461 +</h3>
4462 +
4463 +
4464 + <div class="doc doc-contents ">
4465 +
4466 + <p>Send a PUT request to the specified endpoint.</p>
4467 +
4468 + <p><strong>Parameters:</strong></p>
4469 + <table>
4470 + <thead>
4471 + <tr>
4472 + <th>Name</th>
4473 + <th>Type</th>
4474 + <th>Description</th>
4475 + <th>Default</th>
4476 + </tr>
4477 + </thead>
4478 + <tbody>
4479 + <tr>
4480 + <td><code>endpoint</code></td>
4481 + <td>
4482 + <code>str</code>
4483 + </td>
4484 + <td>
4485 + <div class="doc-md-description">
4486 + <p>The endpoint to send the PUT request to.</p>
4487 + </div>
4488 + </td>
4489 + <td>
4490 + <em>required</em>
4491 + </td>
4492 + </tr>
4493 + <tr>
4494 + <td><code>data</code></td>
4495 + <td>
4496 + <code>str</code>
4497 + </td>
4498 + <td>
4499 + <div class="doc-md-description">
4500 + <p>The data to be updated in the PUT request.</p>
4501 + </div>
4502 + </td>
4503 + <td>
4504 + <em>required</em>
4505 + </td>
4506 + </tr>
4507 + <tr>
4508 + <td><code>params</code></td>
4509 + <td>
4510 + <code><span title="typing.Optional">Optional</span>[<span title="typing.Dict">Dict</span>[str, str]]</code>
4511 + </td>
4512 + <td>
4513 + <div class="doc-md-description">
4514 + <p>Additional parameters to include in the request.</p>
4515 + </div>
4516 + </td>
4517 + <td>
4518 + <code>None</code>
4519 + </td>
4520 + </tr>
4521 + </tbody>
4522 + </table>
4523 +
4524 + <p><strong>Returns:</strong></p>
4525 + <table>
4526 + <thead>
4527 + <tr>
4528 + <th>Type</th>
4529 + <th>Description</th>
4530 + </tr>
4531 + </thead>
4532 + <tbody>
4533 + <tr>
4534 + <td>
4535 + <code><span title="typing.Dict">Dict</span>[str, bool]</code>
4536 + </td>
4537 + <td>
4538 + <div class="doc-md-description">
4539 + <p>Dict[str, bool]: A dictionary indicating the success or failure of the operation.</p>
4540 + </div>
4541 + </td>
4542 + </tr>
4543 + </tbody>
4544 + </table>
4545 +
4546 + <details class="quote">
4547 + <summary>Source code in <code>app\services\WazuhManager\disabled_rule.py</code></summary>
4548 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
4549 +<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
4550 +<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
4551 +<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
4552 +<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
4553 +<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
4554 +<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
4555 +<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
4556 +<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
4557 +<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
4558 +<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
4559 +<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
4560 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
4561 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
4562 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
4563 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
4564 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
4565 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
4566 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
4567 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
4568 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
4569 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
4570 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
4571 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
4572 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
4573 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
4574 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
4575 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
4576 +<span class="normal"><a href="#__codelineno-0-104">104</a></span>
4577 +<span class="normal"><a href="#__codelineno-0-105">105</a></span>
4578 +<span class="normal"><a href="#__codelineno-0-106">106</a></span>
4579 +<span class="normal"><a href="#__codelineno-0-107">107</a></span>
4580 +<span class="normal"><a href="#__codelineno-0-108">108</a></span>
4581 +<span class="normal"><a href="#__codelineno-0-109">109</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="k">def</span> <span class="nf">put_request</span><span class="p">(</span>
4582 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="bp">self</span><span class="p">,</span>
4583 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">endpoint</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
4584 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">data</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
4585 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">params</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
4586 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]:</span>
4587 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4588 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="sd"> Send a PUT request to the specified endpoint.</span>
4589 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a>
4590 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> Args:</span>
4591 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> endpoint (str): The endpoint to send the PUT request to.</span>
4592 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> data (str): The data to be updated in the PUT request.</span>
4593 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> params (Optional[Dict[str, str]]): Additional parameters to include in the request.</span>
4594 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a>
4595 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> Returns:</span>
4596 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Dict[str, bool]: A dictionary indicating the success or failure of the operation.</span>
4597 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> &quot;&quot;&quot;</span>
4598 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">try</span><span class="p">:</span>
4599 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">headers</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">headers</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
4600 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="n">headers</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s2">&quot;Content-Type&quot;</span><span class="p">:</span> <span class="s2">&quot;application/octet-stream&quot;</span><span class="p">})</span>
4601 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a>
4602 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">put</span><span class="p">(</span>
4603 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
4604 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
4605 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
4606 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">,</span>
4607 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
4608 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="p">)</span>
4609 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
4610 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Successfully updated </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
4611 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a>
4612 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
4613 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to update </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4614 +<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Failed to update </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
4615 +</code></pre></div></td></tr></table></div>
4616 + </details>
4617 + </div>
4618 +
4619 +</div>
4620 +
4621 +
4622 +
4623 + </div>
4624 +
4625 + </div>
4626 +
4627 +</div>
4628 +
4629 +
4630 +
4631 +
4632 + </div>
4633 +
4634 + </div>
4635 +
4636 +</div>
4637 +
4638 +<div class="doc doc-object doc-module">
4639 +
4640 +
4641 +<a id="app.services.WazuhManager.enabled_rule"></a>
4642 + <div class="doc doc-contents first">
4643 +
4644 +
4645 +
4646 + <div class="doc doc-children">
4647 +
4648 +
4649 +
4650 +
4651 +
4652 +
4653 +
4654 +
4655 +<div class="doc doc-object doc-class">
4656 +
4657 +
4658 +
4659 +<h2 id="app.services.WazuhManager.enabled_rule.EnableRuleService" class="doc doc-heading">
4660 + <code>EnableRuleService</code>
4661 +
4662 +
4663 +</h2>
4664 +
4665 +
4666 + <div class="doc doc-contents ">
4667 +
4668 +
4669 + <p>A service class to manage rule enabling operations in Wazuh Manager.</p>
4670 +
4671 + <p><strong>Attributes:</strong></p>
4672 + <table>
4673 + <thead>
4674 + <tr>
4675 + <th>Name</th>
4676 + <th>Type</th>
4677 + <th>Description</th>
4678 + </tr>
4679 + </thead>
4680 + <tbody>
4681 + <tr>
4682 + <td><code>universal_service</code></td>
4683 + <td>
4684 + <code><a class="autorefs autorefs-internal" title="app.services.WazuhManager.universal.UniversalService" href="#app.services.WazuhManager.universal.UniversalService">UniversalService</a></code>
4685 + </td>
4686 + <td>
4687 + <div class="doc-md-description">
4688 + <p>An instance of the UniversalService.</p>
4689 + </div>
4690 + </td>
4691 + </tr>
4692 + <tr>
4693 + <td><code>auth_token</code></td>
4694 + <td>
4695 + <code>str</code>
4696 + </td>
4697 + <td>
4698 + <div class="doc-md-description">
4699 + <p>The Wazuh API authentication token.</p>
4700 + </div>
4701 + </td>
4702 + </tr>
4703 + <tr>
4704 + <td><code>wazuh_http_requests</code></td>
4705 + <td>
4706 + <code><a class="autorefs autorefs-internal" title="app.services.WazuhManager.enabled_rule.WazuhHttpRequests" href="#app.services.WazuhManager.enabled_rule.WazuhHttpRequests">WazuhHttpRequests</a></code>
4707 + </td>
4708 + <td>
4709 + <div class="doc-md-description">
4710 + <p>An instance of WazuhHttpRequests.</p>
4711 + </div>
4712 + </td>
4713 + </tr>
4714 + </tbody>
4715 + </table>
4716 +
4717 +
4718 + <details class="quote">
4719 + <summary>Source code in <code>app\services\WazuhManager\enabled_rule.py</code></summary>
4720 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-115">115</a></span>
4721 +<span class="normal"><a href="#__codelineno-0-116">116</a></span>
4722 +<span class="normal"><a href="#__codelineno-0-117">117</a></span>
4723 +<span class="normal"><a href="#__codelineno-0-118">118</a></span>
4724 +<span class="normal"><a href="#__codelineno-0-119">119</a></span>
4725 +<span class="normal"><a href="#__codelineno-0-120">120</a></span>
4726 +<span class="normal"><a href="#__codelineno-0-121">121</a></span>
4727 +<span class="normal"><a href="#__codelineno-0-122">122</a></span>
4728 +<span class="normal"><a href="#__codelineno-0-123">123</a></span>
4729 +<span class="normal"><a href="#__codelineno-0-124">124</a></span>
4730 +<span class="normal"><a href="#__codelineno-0-125">125</a></span>
4731 +<span class="normal"><a href="#__codelineno-0-126">126</a></span>
4732 +<span class="normal"><a href="#__codelineno-0-127">127</a></span>
4733 +<span class="normal"><a href="#__codelineno-0-128">128</a></span>
4734 +<span class="normal"><a href="#__codelineno-0-129">129</a></span>
4735 +<span class="normal"><a href="#__codelineno-0-130">130</a></span>
4736 +<span class="normal"><a href="#__codelineno-0-131">131</a></span>
4737 +<span class="normal"><a href="#__codelineno-0-132">132</a></span>
4738 +<span class="normal"><a href="#__codelineno-0-133">133</a></span>
4739 +<span class="normal"><a href="#__codelineno-0-134">134</a></span>
4740 +<span class="normal"><a href="#__codelineno-0-135">135</a></span>
4741 +<span class="normal"><a href="#__codelineno-0-136">136</a></span>
4742 +<span class="normal"><a href="#__codelineno-0-137">137</a></span>
4743 +<span class="normal"><a href="#__codelineno-0-138">138</a></span>
4744 +<span class="normal"><a href="#__codelineno-0-139">139</a></span>
4745 +<span class="normal"><a href="#__codelineno-0-140">140</a></span>
4746 +<span class="normal"><a href="#__codelineno-0-141">141</a></span>
4747 +<span class="normal"><a href="#__codelineno-0-142">142</a></span>
4748 +<span class="normal"><a href="#__codelineno-0-143">143</a></span>
4749 +<span class="normal"><a href="#__codelineno-0-144">144</a></span>
4750 +<span class="normal"><a href="#__codelineno-0-145">145</a></span>
4751 +<span class="normal"><a href="#__codelineno-0-146">146</a></span>
4752 +<span class="normal"><a href="#__codelineno-0-147">147</a></span>
4753 +<span class="normal"><a href="#__codelineno-0-148">148</a></span>
4754 +<span class="normal"><a href="#__codelineno-0-149">149</a></span>
4755 +<span class="normal"><a href="#__codelineno-0-150">150</a></span>
4756 +<span class="normal"><a href="#__codelineno-0-151">151</a></span>
4757 +<span class="normal"><a href="#__codelineno-0-152">152</a></span>
4758 +<span class="normal"><a href="#__codelineno-0-153">153</a></span>
4759 +<span class="normal"><a href="#__codelineno-0-154">154</a></span>
4760 +<span class="normal"><a href="#__codelineno-0-155">155</a></span>
4761 +<span class="normal"><a href="#__codelineno-0-156">156</a></span>
4762 +<span class="normal"><a href="#__codelineno-0-157">157</a></span>
4763 +<span class="normal"><a href="#__codelineno-0-158">158</a></span>
4764 +<span class="normal"><a href="#__codelineno-0-159">159</a></span>
4765 +<span class="normal"><a href="#__codelineno-0-160">160</a></span>
4766 +<span class="normal"><a href="#__codelineno-0-161">161</a></span>
4767 +<span class="normal"><a href="#__codelineno-0-162">162</a></span>
4768 +<span class="normal"><a href="#__codelineno-0-163">163</a></span>
4769 +<span class="normal"><a href="#__codelineno-0-164">164</a></span>
4770 +<span class="normal"><a href="#__codelineno-0-165">165</a></span>
4771 +<span class="normal"><a href="#__codelineno-0-166">166</a></span>
4772 +<span class="normal"><a href="#__codelineno-0-167">167</a></span>
4773 +<span class="normal"><a href="#__codelineno-0-168">168</a></span>
4774 +<span class="normal"><a href="#__codelineno-0-169">169</a></span>
4775 +<span class="normal"><a href="#__codelineno-0-170">170</a></span>
4776 +<span class="normal"><a href="#__codelineno-0-171">171</a></span>
4777 +<span class="normal"><a href="#__codelineno-0-172">172</a></span>
4778 +<span class="normal"><a href="#__codelineno-0-173">173</a></span>
4779 +<span class="normal"><a href="#__codelineno-0-174">174</a></span>
4780 +<span class="normal"><a href="#__codelineno-0-175">175</a></span>
4781 +<span class="normal"><a href="#__codelineno-0-176">176</a></span>
4782 +<span class="normal"><a href="#__codelineno-0-177">177</a></span>
4783 +<span class="normal"><a href="#__codelineno-0-178">178</a></span>
4784 +<span class="normal"><a href="#__codelineno-0-179">179</a></span>
4785 +<span class="normal"><a href="#__codelineno-0-180">180</a></span>
4786 +<span class="normal"><a href="#__codelineno-0-181">181</a></span>
4787 +<span class="normal"><a href="#__codelineno-0-182">182</a></span>
4788 +<span class="normal"><a href="#__codelineno-0-183">183</a></span>
4789 +<span class="normal"><a href="#__codelineno-0-184">184</a></span>
4790 +<span class="normal"><a href="#__codelineno-0-185">185</a></span>
4791 +<span class="normal"><a href="#__codelineno-0-186">186</a></span>
4792 +<span class="normal"><a href="#__codelineno-0-187">187</a></span>
4793 +<span class="normal"><a href="#__codelineno-0-188">188</a></span>
4794 +<span class="normal"><a href="#__codelineno-0-189">189</a></span>
4795 +<span class="normal"><a href="#__codelineno-0-190">190</a></span>
4796 +<span class="normal"><a href="#__codelineno-0-191">191</a></span>
4797 +<span class="normal"><a href="#__codelineno-0-192">192</a></span>
4798 +<span class="normal"><a href="#__codelineno-0-193">193</a></span>
4799 +<span class="normal"><a href="#__codelineno-0-194">194</a></span>
4800 +<span class="normal"><a href="#__codelineno-0-195">195</a></span>
4801 +<span class="normal"><a href="#__codelineno-0-196">196</a></span>
4802 +<span class="normal"><a href="#__codelineno-0-197">197</a></span>
4803 +<span class="normal"><a href="#__codelineno-0-198">198</a></span>
4804 +<span class="normal"><a href="#__codelineno-0-199">199</a></span>
4805 +<span class="normal"><a href="#__codelineno-0-200">200</a></span>
4806 +<span class="normal"><a href="#__codelineno-0-201">201</a></span>
4807 +<span class="normal"><a href="#__codelineno-0-202">202</a></span>
4808 +<span class="normal"><a href="#__codelineno-0-203">203</a></span>
4809 +<span class="normal"><a href="#__codelineno-0-204">204</a></span>
4810 +<span class="normal"><a href="#__codelineno-0-205">205</a></span>
4811 +<span class="normal"><a href="#__codelineno-0-206">206</a></span>
4812 +<span class="normal"><a href="#__codelineno-0-207">207</a></span>
4813 +<span class="normal"><a href="#__codelineno-0-208">208</a></span>
4814 +<span class="normal"><a href="#__codelineno-0-209">209</a></span>
4815 +<span class="normal"><a href="#__codelineno-0-210">210</a></span>
4816 +<span class="normal"><a href="#__codelineno-0-211">211</a></span>
4817 +<span class="normal"><a href="#__codelineno-0-212">212</a></span>
4818 +<span class="normal"><a href="#__codelineno-0-213">213</a></span>
4819 +<span class="normal"><a href="#__codelineno-0-214">214</a></span>
4820 +<span class="normal"><a href="#__codelineno-0-215">215</a></span>
4821 +<span class="normal"><a href="#__codelineno-0-216">216</a></span>
4822 +<span class="normal"><a href="#__codelineno-0-217">217</a></span>
4823 +<span class="normal"><a href="#__codelineno-0-218">218</a></span>
4824 +<span class="normal"><a href="#__codelineno-0-219">219</a></span>
4825 +<span class="normal"><a href="#__codelineno-0-220">220</a></span>
4826 +<span class="normal"><a href="#__codelineno-0-221">221</a></span>
4827 +<span class="normal"><a href="#__codelineno-0-222">222</a></span>
4828 +<span class="normal"><a href="#__codelineno-0-223">223</a></span>
4829 +<span class="normal"><a href="#__codelineno-0-224">224</a></span>
4830 +<span class="normal"><a href="#__codelineno-0-225">225</a></span>
4831 +<span class="normal"><a href="#__codelineno-0-226">226</a></span>
4832 +<span class="normal"><a href="#__codelineno-0-227">227</a></span>
4833 +<span class="normal"><a href="#__codelineno-0-228">228</a></span>
4834 +<span class="normal"><a href="#__codelineno-0-229">229</a></span>
4835 +<span class="normal"><a href="#__codelineno-0-230">230</a></span>
4836 +<span class="normal"><a href="#__codelineno-0-231">231</a></span>
4837 +<span class="normal"><a href="#__codelineno-0-232">232</a></span>
4838 +<span class="normal"><a href="#__codelineno-0-233">233</a></span>
4839 +<span class="normal"><a href="#__codelineno-0-234">234</a></span>
4840 +<span class="normal"><a href="#__codelineno-0-235">235</a></span>
4841 +<span class="normal"><a href="#__codelineno-0-236">236</a></span>
4842 +<span class="normal"><a href="#__codelineno-0-237">237</a></span>
4843 +<span class="normal"><a href="#__codelineno-0-238">238</a></span>
4844 +<span class="normal"><a href="#__codelineno-0-239">239</a></span>
4845 +<span class="normal"><a href="#__codelineno-0-240">240</a></span>
4846 +<span class="normal"><a href="#__codelineno-0-241">241</a></span>
4847 +<span class="normal"><a href="#__codelineno-0-242">242</a></span>
4848 +<span class="normal"><a href="#__codelineno-0-243">243</a></span>
4849 +<span class="normal"><a href="#__codelineno-0-244">244</a></span>
4850 +<span class="normal"><a href="#__codelineno-0-245">245</a></span>
4851 +<span class="normal"><a href="#__codelineno-0-246">246</a></span>
4852 +<span class="normal"><a href="#__codelineno-0-247">247</a></span>
4853 +<span class="normal"><a href="#__codelineno-0-248">248</a></span>
4854 +<span class="normal"><a href="#__codelineno-0-249">249</a></span>
4855 +<span class="normal"><a href="#__codelineno-0-250">250</a></span>
4856 +<span class="normal"><a href="#__codelineno-0-251">251</a></span>
4857 +<span class="normal"><a href="#__codelineno-0-252">252</a></span>
4858 +<span class="normal"><a href="#__codelineno-0-253">253</a></span>
4859 +<span class="normal"><a href="#__codelineno-0-254">254</a></span>
4860 +<span class="normal"><a href="#__codelineno-0-255">255</a></span>
4861 +<span class="normal"><a href="#__codelineno-0-256">256</a></span>
4862 +<span class="normal"><a href="#__codelineno-0-257">257</a></span>
4863 +<span class="normal"><a href="#__codelineno-0-258">258</a></span>
4864 +<span class="normal"><a href="#__codelineno-0-259">259</a></span>
4865 +<span class="normal"><a href="#__codelineno-0-260">260</a></span>
4866 +<span class="normal"><a href="#__codelineno-0-261">261</a></span>
4867 +<span class="normal"><a href="#__codelineno-0-262">262</a></span>
4868 +<span class="normal"><a href="#__codelineno-0-263">263</a></span>
4869 +<span class="normal"><a href="#__codelineno-0-264">264</a></span>
4870 +<span class="normal"><a href="#__codelineno-0-265">265</a></span>
4871 +<span class="normal"><a href="#__codelineno-0-266">266</a></span>
4872 +<span class="normal"><a href="#__codelineno-0-267">267</a></span>
4873 +<span class="normal"><a href="#__codelineno-0-268">268</a></span>
4874 +<span class="normal"><a href="#__codelineno-0-269">269</a></span>
4875 +<span class="normal"><a href="#__codelineno-0-270">270</a></span>
4876 +<span class="normal"><a href="#__codelineno-0-271">271</a></span>
4877 +<span class="normal"><a href="#__codelineno-0-272">272</a></span>
4878 +<span class="normal"><a href="#__codelineno-0-273">273</a></span>
4879 +<span class="normal"><a href="#__codelineno-0-274">274</a></span>
4880 +<span class="normal"><a href="#__codelineno-0-275">275</a></span>
4881 +<span class="normal"><a href="#__codelineno-0-276">276</a></span>
4882 +<span class="normal"><a href="#__codelineno-0-277">277</a></span>
4883 +<span class="normal"><a href="#__codelineno-0-278">278</a></span>
4884 +<span class="normal"><a href="#__codelineno-0-279">279</a></span>
4885 +<span class="normal"><a href="#__codelineno-0-280">280</a></span>
4886 +<span class="normal"><a href="#__codelineno-0-281">281</a></span>
4887 +<span class="normal"><a href="#__codelineno-0-282">282</a></span>
4888 +<span class="normal"><a href="#__codelineno-0-283">283</a></span>
4889 +<span class="normal"><a href="#__codelineno-0-284">284</a></span>
4890 +<span class="normal"><a href="#__codelineno-0-285">285</a></span>
4891 +<span class="normal"><a href="#__codelineno-0-286">286</a></span>
4892 +<span class="normal"><a href="#__codelineno-0-287">287</a></span>
4893 +<span class="normal"><a href="#__codelineno-0-288">288</a></span>
4894 +<span class="normal"><a href="#__codelineno-0-289">289</a></span>
4895 +<span class="normal"><a href="#__codelineno-0-290">290</a></span>
4896 +<span class="normal"><a href="#__codelineno-0-291">291</a></span>
4897 +<span class="normal"><a href="#__codelineno-0-292">292</a></span>
4898 +<span class="normal"><a href="#__codelineno-0-293">293</a></span>
4899 +<span class="normal"><a href="#__codelineno-0-294">294</a></span>
4900 +<span class="normal"><a href="#__codelineno-0-295">295</a></span>
4901 +<span class="normal"><a href="#__codelineno-0-296">296</a></span>
4902 +<span class="normal"><a href="#__codelineno-0-297">297</a></span>
4903 +<span class="normal"><a href="#__codelineno-0-298">298</a></span>
4904 +<span class="normal"><a href="#__codelineno-0-299">299</a></span>
4905 +<span class="normal"><a href="#__codelineno-0-300">300</a></span>
4906 +<span class="normal"><a href="#__codelineno-0-301">301</a></span>
4907 +<span class="normal"><a href="#__codelineno-0-302">302</a></span>
4908 +<span class="normal"><a href="#__codelineno-0-303">303</a></span>
4909 +<span class="normal"><a href="#__codelineno-0-304">304</a></span>
4910 +<span class="normal"><a href="#__codelineno-0-305">305</a></span>
4911 +<span class="normal"><a href="#__codelineno-0-306">306</a></span>
4912 +<span class="normal"><a href="#__codelineno-0-307">307</a></span>
4913 +<span class="normal"><a href="#__codelineno-0-308">308</a></span>
4914 +<span class="normal"><a href="#__codelineno-0-309">309</a></span>
4915 +<span class="normal"><a href="#__codelineno-0-310">310</a></span>
4916 +<span class="normal"><a href="#__codelineno-0-311">311</a></span>
4917 +<span class="normal"><a href="#__codelineno-0-312">312</a></span>
4918 +<span class="normal"><a href="#__codelineno-0-313">313</a></span>
4919 +<span class="normal"><a href="#__codelineno-0-314">314</a></span>
4920 +<span class="normal"><a href="#__codelineno-0-315">315</a></span>
4921 +<span class="normal"><a href="#__codelineno-0-316">316</a></span>
4922 +<span class="normal"><a href="#__codelineno-0-317">317</a></span>
4923 +<span class="normal"><a href="#__codelineno-0-318">318</a></span>
4924 +<span class="normal"><a href="#__codelineno-0-319">319</a></span>
4925 +<span class="normal"><a href="#__codelineno-0-320">320</a></span>
4926 +<span class="normal"><a href="#__codelineno-0-321">321</a></span>
4927 +<span class="normal"><a href="#__codelineno-0-322">322</a></span>
4928 +<span class="normal"><a href="#__codelineno-0-323">323</a></span>
4929 +<span class="normal"><a href="#__codelineno-0-324">324</a></span>
4930 +<span class="normal"><a href="#__codelineno-0-325">325</a></span>
4931 +<span class="normal"><a href="#__codelineno-0-326">326</a></span>
4932 +<span class="normal"><a href="#__codelineno-0-327">327</a></span>
4933 +<span class="normal"><a href="#__codelineno-0-328">328</a></span>
4934 +<span class="normal"><a href="#__codelineno-0-329">329</a></span>
4935 +<span class="normal"><a href="#__codelineno-0-330">330</a></span>
4936 +<span class="normal"><a href="#__codelineno-0-331">331</a></span>
4937 +<span class="normal"><a href="#__codelineno-0-332">332</a></span>
4938 +<span class="normal"><a href="#__codelineno-0-333">333</a></span>
4939 +<span class="normal"><a href="#__codelineno-0-334">334</a></span>
4940 +<span class="normal"><a href="#__codelineno-0-335">335</a></span>
4941 +<span class="normal"><a href="#__codelineno-0-336">336</a></span>
4942 +<span class="normal"><a href="#__codelineno-0-337">337</a></span>
4943 +<span class="normal"><a href="#__codelineno-0-338">338</a></span>
4944 +<span class="normal"><a href="#__codelineno-0-339">339</a></span>
4945 +<span class="normal"><a href="#__codelineno-0-340">340</a></span>
4946 +<span class="normal"><a href="#__codelineno-0-341">341</a></span>
4947 +<span class="normal"><a href="#__codelineno-0-342">342</a></span>
4948 +<span class="normal"><a href="#__codelineno-0-343">343</a></span>
4949 +<span class="normal"><a href="#__codelineno-0-344">344</a></span>
4950 +<span class="normal"><a href="#__codelineno-0-345">345</a></span>
4951 +<span class="normal"><a href="#__codelineno-0-346">346</a></span>
4952 +<span class="normal"><a href="#__codelineno-0-347">347</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-115" name="__codelineno-0-115"></a><span class="k">class</span> <span class="nc">EnableRuleService</span><span class="p">:</span>
4953 +<a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4954 +<a id="__codelineno-0-117" name="__codelineno-0-117"></a><span class="sd"> A service class to manage rule enabling operations in Wazuh Manager.</span>
4955 +<a id="__codelineno-0-118" name="__codelineno-0-118"></a>
4956 +<a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="sd"> Attributes:</span>
4957 +<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="sd"> universal_service (UniversalService): An instance of the UniversalService.</span>
4958 +<a id="__codelineno-0-121" name="__codelineno-0-121"></a><span class="sd"> auth_token (str): The Wazuh API authentication token.</span>
4959 +<a id="__codelineno-0-122" name="__codelineno-0-122"></a><span class="sd"> wazuh_http_requests (WazuhHttpRequests): An instance of WazuhHttpRequests.</span>
4960 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a><span class="sd"> &quot;&quot;&quot;</span>
4961 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a>
4962 +<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">universal_service</span><span class="p">:</span> <span class="n">UniversalService</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
4963 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4964 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> Initialize an EnableRuleService instance.</span>
4965 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a>
4966 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> Args:</span>
4967 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a><span class="sd"> universal_service (UniversalService): An instance of the UniversalService.</span>
4968 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a><span class="sd"> &quot;&quot;&quot;</span>
4969 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">universal_service</span>
4970 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span> <span class="o">=</span> <span class="n">universal_service</span><span class="o">.</span><span class="n">get_auth_token</span><span class="p">()</span>
4971 +<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span> <span class="o">=</span> <span class="n">WazuhHttpRequests</span><span class="p">(</span>
4972 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
4973 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span><span class="p">,</span>
4974 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="p">)</span>
4975 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a>
4976 +<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="k">def</span> <span class="nf">enable_rule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]:</span>
4977 +<a id="__codelineno-0-140" name="__codelineno-0-140"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4978 +<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="sd"> Enable a rule in Wazuh Manager.</span>
4979 +<a id="__codelineno-0-142" name="__codelineno-0-142"></a>
4980 +<a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="sd"> Args:</span>
4981 +<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> request (Dict[str, str]): A request to enable a rule.</span>
4982 +<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
4983 +<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Returns:</span>
4984 +<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> Dict[str, Union[str, bool]]: A dictionary indicating the success of the operation.</span>
4985 +<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> &quot;&quot;&quot;</span>
4986 +<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="k">try</span><span class="p">:</span>
4987 +<a id="__codelineno-0-150" name="__codelineno-0-150"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_validate_request</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
4988 +<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="n">rule_id</span> <span class="o">=</span> <span class="n">request</span><span class="p">[</span><span class="s2">&quot;rule_id&quot;</span><span class="p">]</span>
4989 +<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="n">filename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fetch_filename</span><span class="p">(</span><span class="n">rule_id</span><span class="p">)</span>
4990 +<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Getting file content of </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
4991 +<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="n">file_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fetch_file_content</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
4992 +<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="n">previous_level</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_previous_level</span><span class="p">(</span><span class="n">rule_id</span><span class="p">)</span>
4993 +<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="n">updated_file_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_level_previous</span><span class="p">(</span>
4994 +<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="n">file_content</span><span class="p">,</span>
4995 +<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="n">rule_id</span><span class="p">,</span>
4996 +<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="n">previous_level</span><span class="p">,</span>
4997 +<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="p">)</span>
4998 +<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_json_to_xml</span><span class="p">(</span><span class="n">updated_file_content</span><span class="p">)</span>
4999 +<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_delete_rule_from_db</span><span class="p">(</span><span class="n">rule_id</span><span class="p">)</span>
5000 +<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_put_updated_rule</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">xml_content</span><span class="p">)</span>
5001 +<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">restart_service</span><span class="p">()</span>
5002 +<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="k">return</span> <span class="p">{</span>
5003 +<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Rule </span><span class="si">{</span><span class="n">rule_id</span><span class="si">}</span><span class="s2"> successfully enabled in file </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">,</span>
5004 +<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
5005 +<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="p">}</span>
5006 +<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
5007 +<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
5008 +<a id="__codelineno-0-171" name="__codelineno-0-171"></a>
5009 +<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="k">def</span> <span class="nf">_validate_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
5010 +<a id="__codelineno-0-173" name="__codelineno-0-173"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
5011 +<a id="__codelineno-0-174" name="__codelineno-0-174"></a><span class="sd"> Validate a request to enable a rule.</span>
5012 +<a id="__codelineno-0-175" name="__codelineno-0-175"></a>
5013 +<a id="__codelineno-0-176" name="__codelineno-0-176"></a><span class="sd"> Args:</span>
5014 +<a id="__codelineno-0-177" name="__codelineno-0-177"></a><span class="sd"> request (Dict[str, str]): A request to enable a rule.</span>
5015 +<a id="__codelineno-0-178" name="__codelineno-0-178"></a>
5016 +<a id="__codelineno-0-179" name="__codelineno-0-179"></a><span class="sd"> Raises:</span>
5017 +<a id="__codelineno-0-180" name="__codelineno-0-180"></a><span class="sd"> ValueError: If &#39;rule_id&#39; is not in the request.</span>
5018 +<a id="__codelineno-0-181" name="__codelineno-0-181"></a>
5019 +<a id="__codelineno-0-182" name="__codelineno-0-182"></a><span class="sd"> Returns:</span>
5020 +<a id="__codelineno-0-183" name="__codelineno-0-183"></a><span class="sd"> str: The rule id from the request.</span>
5021 +<a id="__codelineno-0-184" name="__codelineno-0-184"></a><span class="sd"> &quot;&quot;&quot;</span>
5022 +<a id="__codelineno-0-185" name="__codelineno-0-185"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Validating enable rule request: </span><span class="si">{</span><span class="n">request</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
5023 +<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="k">if</span> <span class="s2">&quot;rule_id&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">request</span><span class="p">:</span>
5024 +<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Request missing rule_id&quot;</span><span class="p">)</span>
5025 +<a id="__codelineno-0-188" name="__codelineno-0-188"></a> <span class="k">return</span> <span class="n">request</span><span class="p">[</span><span class="s2">&quot;rule_id&quot;</span><span class="p">]</span>
5026 +<a id="__codelineno-0-189" name="__codelineno-0-189"></a>
5027 +<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="k">def</span> <span class="nf">_fetch_filename</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
5028 +<a id="__codelineno-0-191" name="__codelineno-0-191"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
5029 +<a id="__codelineno-0-192" name="__codelineno-0-192"></a><span class="sd"> Fetch the filename containing the rule to be enabled.</span>
5030 +<a id="__codelineno-0-193" name="__codelineno-0-193"></a>
5031 +<a id="__codelineno-0-194" name="__codelineno-0-194"></a><span class="sd"> Args:</span>
5032 +<a id="__codelineno-0-195" name="__codelineno-0-195"></a><span class="sd"> rule_id (str): The id of the rule to be enabled.</span>
5033 +<a id="__codelineno-0-196" name="__codelineno-0-196"></a>
5034 +<a id="__codelineno-0-197" name="__codelineno-0-197"></a><span class="sd"> Raises:</span>
5035 +<a id="__codelineno-0-198" name="__codelineno-0-198"></a><span class="sd"> ValueError: If the filename could not be fetched.</span>
5036 +<a id="__codelineno-0-199" name="__codelineno-0-199"></a>
5037 +<a id="__codelineno-0-200" name="__codelineno-0-200"></a><span class="sd"> Returns:</span>
5038 +<a id="__codelineno-0-201" name="__codelineno-0-201"></a><span class="sd"> str: The filename containing the rule.</span>
5039 +<a id="__codelineno-0-202" name="__codelineno-0-202"></a><span class="sd"> &quot;&quot;&quot;</span>
5040 +<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="n">filename_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">get_request</span><span class="p">(</span>
5041 +<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="s2">&quot;rules&quot;</span><span class="p">,</span>
5042 +<a id="__codelineno-0-205" name="__codelineno-0-205"></a> <span class="p">{</span><span class="s2">&quot;rule_ids&quot;</span><span class="p">:</span> <span class="n">rule_id</span><span class="p">},</span>
5043 +<a id="__codelineno-0-206" name="__codelineno-0-206"></a> <span class="p">)</span>
5044 +<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">filename_data</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
5045 +<a id="__codelineno-0-208" name="__codelineno-0-208"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">filename_data</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">])</span>
5046 +<a id="__codelineno-0-209" name="__codelineno-0-209"></a> <span class="k">return</span> <span class="n">filename_data</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">][</span><span class="s2">&quot;data&quot;</span><span class="p">][</span><span class="s2">&quot;affected_items&quot;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;filename&quot;</span><span class="p">]</span>
5047 +<a id="__codelineno-0-210" name="__codelineno-0-210"></a>
5048 +<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="k">def</span> <span class="nf">_fetch_file_content</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
5049 +<a id="__codelineno-0-212" name="__codelineno-0-212"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
5050 +<a id="__codelineno-0-213" name="__codelineno-0-213"></a><span class="sd"> Fetch the content of the file containing the rule to be enabled.</span>
5051 +<a id="__codelineno-0-214" name="__codelineno-0-214"></a>
5052 +<a id="__codelineno-0-215" name="__codelineno-0-215"></a><span class="sd"> Args:</span>
5053 +<a id="__codelineno-0-216" name="__codelineno-0-216"></a><span class="sd"> filename (str): The filename containing the rule to be enabled.</span>
5054 +<a id="__codelineno-0-217" name="__codelineno-0-217"></a>
5055 +<a id="__codelineno-0-218" name="__codelineno-0-218"></a><span class="sd"> Raises:</span>
5056 +<a id="__codelineno-0-219" name="__codelineno-0-219"></a><span class="sd"> ValueError: If the file content could not be fetched.</span>
5057 +<a id="__codelineno-0-220" name="__codelineno-0-220"></a>
5058 +<a id="__codelineno-0-221" name="__codelineno-0-221"></a><span class="sd"> Returns:</span>
5059 +<a id="__codelineno-0-222" name="__codelineno-0-222"></a><span class="sd"> Any: The content of the file.</span>
5060 +<a id="__codelineno-0-223" name="__codelineno-0-223"></a><span class="sd"> &quot;&quot;&quot;</span>
5061 +<a id="__codelineno-0-224" name="__codelineno-0-224"></a> <span class="n">file_content_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">get_request</span><span class="p">(</span>
5062 +<a id="__codelineno-0-225" name="__codelineno-0-225"></a> <span class="sa">f</span><span class="s2">&quot;rules/files/</span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
5063 +<a id="__codelineno-0-226" name="__codelineno-0-226"></a> <span class="p">)</span>
5064 +<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">file_content_data</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
5065 +<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">file_content_data</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">])</span>
5066 +<a id="__codelineno-0-229" name="__codelineno-0-229"></a> <span class="k">return</span> <span class="n">file_content_data</span><span class="p">[</span><span class="s2">&quot;data&quot;</span><span class="p">][</span><span class="s2">&quot;data&quot;</span><span class="p">][</span><span class="s2">&quot;affected_items&quot;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;group&quot;</span><span class="p">]</span>
5067 +<a id="__codelineno-0-230" name="__codelineno-0-230"></a>
5068 +<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="k">def</span> <span class="nf">_get_previous_level</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
5069 +<a id="__codelineno-0-232" name="__codelineno-0-232"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
5070 +<a id="__codelineno-0-233" name="__codelineno-0-233"></a><span class="sd"> Fetch the previous level of a rule from the `disabled_rules` table.</span>
5071 +<a id="__codelineno-0-234" name="__codelineno-0-234"></a>
5072 +<a id="__codelineno-0-235" name="__codelineno-0-235"></a><span class="sd"> Args:</span>
5073 +<a id="__codelineno-0-236" name="__codelineno-0-236"></a><span class="sd"> rule_id (str): The id of the rule.</span>
5074 +<a id="__codelineno-0-237" name="__codelineno-0-237"></a>
5075 +<a id="__codelineno-0-238" name="__codelineno-0-238"></a><span class="sd"> Raises:</span>
5076 +<a id="__codelineno-0-239" name="__codelineno-0-239"></a><span class="sd"> ValueError: If the rule was not previously disabled.</span>
5077 +<a id="__codelineno-0-240" name="__codelineno-0-240"></a>
5078 +<a id="__codelineno-0-241" name="__codelineno-0-241"></a><span class="sd"> Returns:</span>
5079 +<a id="__codelineno-0-242" name="__codelineno-0-242"></a><span class="sd"> str: The previous level of the rule.</span>
5080 +<a id="__codelineno-0-243" name="__codelineno-0-243"></a><span class="sd"> &quot;&quot;&quot;</span>
5081 +<a id="__codelineno-0-244" name="__codelineno-0-244"></a> <span class="n">disabled_rule</span> <span class="o">=</span> <span class="n">DisabledRules</span><span class="o">.</span><span class="n">query</span><span class="o">.</span><span class="n">filter_by</span><span class="p">(</span><span class="n">rule_id</span><span class="o">=</span><span class="n">rule_id</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
5082 +<a id="__codelineno-0-245" name="__codelineno-0-245"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">disabled_rule</span><span class="p">:</span>
5083 +<a id="__codelineno-0-246" name="__codelineno-0-246"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Rule </span><span class="si">{</span><span class="n">rule_id</span><span class="si">}</span><span class="s2"> is not disabled.&quot;</span><span class="p">)</span>
5084 +<a id="__codelineno-0-247" name="__codelineno-0-247"></a> <span class="k">return</span> <span class="n">disabled_rule</span><span class="o">.</span><span class="n">previous_level</span>
5085 +<a id="__codelineno-0-248" name="__codelineno-0-248"></a>
5086 +<a id="__codelineno-0-249" name="__codelineno-0-249"></a> <span class="k">def</span> <span class="nf">_set_level_previous</span><span class="p">(</span>
5087 +<a id="__codelineno-0-250" name="__codelineno-0-250"></a> <span class="bp">self</span><span class="p">,</span>
5088 +<a id="__codelineno-0-251" name="__codelineno-0-251"></a> <span class="n">file_content</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
5089 +<a id="__codelineno-0-252" name="__codelineno-0-252"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
5090 +<a id="__codelineno-0-253" name="__codelineno-0-253"></a> <span class="n">previous_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
5091 +<a id="__codelineno-0-254" name="__codelineno-0-254"></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
5092 +<a id="__codelineno-0-255" name="__codelineno-0-255"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
5093 +<a id="__codelineno-0-256" name="__codelineno-0-256"></a><span class="sd"> Set the level of a rule to its previous level in the file content.</span>
5094 +<a id="__codelineno-0-257" name="__codelineno-0-257"></a>
5095 +<a id="__codelineno-0-258" name="__codelineno-0-258"></a><span class="sd"> Args:</span>
5096 +<a id="__codelineno-0-259" name="__codelineno-0-259"></a><span class="sd"> file_content (Any): The content of the file containing the rule.</span>
5097 +<a id="__codelineno-0-260" name="__codelineno-0-260"></a><span class="sd"> rule_id (str): The id of the rule.</span>
5098 +<a id="__codelineno-0-261" name="__codelineno-0-261"></a><span class="sd"> previous_level (str): The previous level of the rule.</span>
5099 +<a id="__codelineno-0-262" name="__codelineno-0-262"></a>
5100 +<a id="__codelineno-0-263" name="__codelineno-0-263"></a><span class="sd"> Returns:</span>
5101 +<a id="__codelineno-0-264" name="__codelineno-0-264"></a><span class="sd"> Any: The updated file content with the level of the rule set to the previous level.</span>
5102 +<a id="__codelineno-0-265" name="__codelineno-0-265"></a><span class="sd"> &quot;&quot;&quot;</span>
5103 +<a id="__codelineno-0-266" name="__codelineno-0-266"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
5104 +<a id="__codelineno-0-267" name="__codelineno-0-267"></a> <span class="sa">f</span><span class="s2">&quot;Setting rule </span><span class="si">{</span><span class="n">rule_id</span><span class="si">}</span><span class="s2"> level to </span><span class="si">{</span><span class="n">previous_level</span><span class="si">}</span><span class="s2"> for file_content: </span><span class="si">{</span><span class="n">file_content</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
5105 +<a id="__codelineno-0-268" name="__codelineno-0-268"></a> <span class="p">)</span>
5106 +<a id="__codelineno-0-269" name="__codelineno-0-269"></a> <span class="c1"># If &#39;file_content&#39; is a dictionary (representing a single group), make it a list of one group</span>
5107 +<a id="__codelineno-0-270" name="__codelineno-0-270"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">file_content</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
5108 +<a id="__codelineno-0-271" name="__codelineno-0-271"></a> <span class="n">file_content</span> <span class="o">=</span> <span class="p">[</span><span class="n">file_content</span><span class="p">]</span>
5109 +<a id="__codelineno-0-272" name="__codelineno-0-272"></a>
5110 +<a id="__codelineno-0-273" name="__codelineno-0-273"></a> <span class="k">for</span> <span class="n">group_block</span> <span class="ow">in</span> <span class="n">file_content</span><span class="p">:</span>
5111 +<a id="__codelineno-0-274" name="__codelineno-0-274"></a> <span class="n">rule_block</span> <span class="o">=</span> <span class="n">group_block</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;rule&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
5112 +<a id="__codelineno-0-275" name="__codelineno-0-275"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">rule_block</span><span class="p">:</span>
5113 +<a id="__codelineno-0-276" name="__codelineno-0-276"></a> <span class="k">continue</span>
5114 +<a id="__codelineno-0-277" name="__codelineno-0-277"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">rule_block</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
5115 +<a id="__codelineno-0-278" name="__codelineno-0-278"></a> <span class="n">rule_block</span> <span class="o">=</span> <span class="p">[</span><span class="n">rule_block</span><span class="p">]</span>
5116 +<a id="__codelineno-0-279" name="__codelineno-0-279"></a>
5117 +<a id="__codelineno-0-280" name="__codelineno-0-280"></a> <span class="k">for</span> <span class="n">rule</span> <span class="ow">in</span> <span class="n">rule_block</span><span class="p">:</span>
5118 +<a id="__codelineno-0-281" name="__codelineno-0-281"></a> <span class="k">if</span> <span class="n">rule</span><span class="p">[</span><span class="s2">&quot;@id&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">rule_id</span><span class="p">:</span>
5119 +<a id="__codelineno-0-282" name="__codelineno-0-282"></a> <span class="c1"># Set the rule level to the previous level.</span>
5120 +<a id="__codelineno-0-283" name="__codelineno-0-283"></a> <span class="n">rule</span><span class="p">[</span><span class="s2">&quot;@level&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">previous_level</span>
5121 +<a id="__codelineno-0-284" name="__codelineno-0-284"></a> <span class="k">break</span>
5122 +<a id="__codelineno-0-285" name="__codelineno-0-285"></a>
5123 +<a id="__codelineno-0-286" name="__codelineno-0-286"></a> <span class="k">return</span> <span class="n">file_content</span>
5124 +<a id="__codelineno-0-287" name="__codelineno-0-287"></a>
5125 +<a id="__codelineno-0-288" name="__codelineno-0-288"></a> <span class="k">def</span> <span class="nf">_json_to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file_content</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
5126 +<a id="__codelineno-0-289" name="__codelineno-0-289"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
5127 +<a id="__codelineno-0-290" name="__codelineno-0-290"></a><span class="sd"> Convert file content from JSON to XML format.</span>
5128 +<a id="__codelineno-0-291" name="__codelineno-0-291"></a>
5129 +<a id="__codelineno-0-292" name="__codelineno-0-292"></a><span class="sd"> Args:</span>
5130 +<a id="__codelineno-0-293" name="__codelineno-0-293"></a><span class="sd"> file_content (Any): The content of the file containing the rule.</span>
5131 +<a id="__codelineno-0-294" name="__codelineno-0-294"></a>
5132 +<a id="__codelineno-0-295" name="__codelineno-0-295"></a><span class="sd"> Returns:</span>
5133 +<a id="__codelineno-0-296" name="__codelineno-0-296"></a><span class="sd"> str: The file content in XML format.</span>
5134 +<a id="__codelineno-0-297" name="__codelineno-0-297"></a><span class="sd"> &quot;&quot;&quot;</span>
5135 +<a id="__codelineno-0-298" name="__codelineno-0-298"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Converting file_content to XML: </span><span class="si">{</span><span class="n">file_content</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
5136 +<a id="__codelineno-0-299" name="__codelineno-0-299"></a>
5137 +<a id="__codelineno-0-300" name="__codelineno-0-300"></a> <span class="n">xml_content_list</span> <span class="o">=</span> <span class="p">[]</span>
5138 +<a id="__codelineno-0-301" name="__codelineno-0-301"></a> <span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="n">file_content</span><span class="p">:</span>
5139 +<a id="__codelineno-0-302" name="__codelineno-0-302"></a> <span class="n">xml_dict</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;group&quot;</span><span class="p">:</span> <span class="n">group</span><span class="p">}</span>
5140 +<a id="__codelineno-0-303" name="__codelineno-0-303"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="n">xmltodict</span><span class="o">.</span><span class="n">unparse</span><span class="p">(</span><span class="n">xml_dict</span><span class="p">,</span> <span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
5141 +<a id="__codelineno-0-304" name="__codelineno-0-304"></a> <span class="c1"># Remove the `&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;` from the</span>
5142 +<a id="__codelineno-0-305" name="__codelineno-0-305"></a> <span class="c1"># beginning of the XML string.</span>
5143 +<a id="__codelineno-0-306" name="__codelineno-0-306"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="n">xml_content</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span>
5144 +<a id="__codelineno-0-307" name="__codelineno-0-307"></a> <span class="s1">&#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;&#39;</span><span class="p">,</span>
5145 +<a id="__codelineno-0-308" name="__codelineno-0-308"></a> <span class="s2">&quot;&quot;</span><span class="p">,</span>
5146 +<a id="__codelineno-0-309" name="__codelineno-0-309"></a> <span class="p">)</span>
5147 +<a id="__codelineno-0-310" name="__codelineno-0-310"></a> <span class="n">xml_content_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">xml_content</span><span class="p">)</span>
5148 +<a id="__codelineno-0-311" name="__codelineno-0-311"></a>
5149 +<a id="__codelineno-0-312" name="__codelineno-0-312"></a> <span class="c1"># Concatenate all XML strings</span>
5150 +<a id="__codelineno-0-313" name="__codelineno-0-313"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">xml_content_list</span><span class="p">)</span>
5151 +<a id="__codelineno-0-314" name="__codelineno-0-314"></a> <span class="c1"># Remove top and bottom line breaks</span>
5152 +<a id="__codelineno-0-315" name="__codelineno-0-315"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="n">xml_content</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
5153 +<a id="__codelineno-0-316" name="__codelineno-0-316"></a>
5154 +<a id="__codelineno-0-317" name="__codelineno-0-317"></a> <span class="k">return</span> <span class="n">xml_content</span>
5155 +<a id="__codelineno-0-318" name="__codelineno-0-318"></a>
5156 +<a id="__codelineno-0-319" name="__codelineno-0-319"></a> <span class="k">def</span> <span class="nf">_delete_rule_from_db</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
5157 +<a id="__codelineno-0-320" name="__codelineno-0-320"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
5158 +<a id="__codelineno-0-321" name="__codelineno-0-321"></a><span class="sd"> Delete a rule from the `disabled_rules` table.</span>
5159 +<a id="__codelineno-0-322" name="__codelineno-0-322"></a>
5160 +<a id="__codelineno-0-323" name="__codelineno-0-323"></a><span class="sd"> Args:</span>
5161 +<a id="__codelineno-0-324" name="__codelineno-0-324"></a><span class="sd"> rule_id (str): The id of the rule to be deleted.</span>
5162 +<a id="__codelineno-0-325" name="__codelineno-0-325"></a><span class="sd"> &quot;&quot;&quot;</span>
5163 +<a id="__codelineno-0-326" name="__codelineno-0-326"></a> <span class="n">disabled_rule</span> <span class="o">=</span> <span class="n">DisabledRules</span><span class="o">.</span><span class="n">query</span><span class="o">.</span><span class="n">filter_by</span><span class="p">(</span><span class="n">rule_id</span><span class="o">=</span><span class="n">rule_id</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
5164 +<a id="__codelineno-0-327" name="__codelineno-0-327"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">disabled_rule</span><span class="p">)</span>
5165 +<a id="__codelineno-0-328" name="__codelineno-0-328"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
5166 +<a id="__codelineno-0-329" name="__codelineno-0-329"></a>
5167 +<a id="__codelineno-0-330" name="__codelineno-0-330"></a> <span class="k">def</span> <span class="nf">_put_updated_rule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">xml_content</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
5168 +<a id="__codelineno-0-331" name="__codelineno-0-331"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
5169 +<a id="__codelineno-0-332" name="__codelineno-0-332"></a><span class="sd"> Upload the updated rule to the Wazuh Manager.</span>
5170 +<a id="__codelineno-0-333" name="__codelineno-0-333"></a>
5171 +<a id="__codelineno-0-334" name="__codelineno-0-334"></a><span class="sd"> Args:</span>
5172 +<a id="__codelineno-0-335" name="__codelineno-0-335"></a><span class="sd"> filename (str): The filename containing the rule.</span>
5173 +<a id="__codelineno-0-336" name="__codelineno-0-336"></a><span class="sd"> xml_content (str): The updated rule in XML format.</span>
5174 +<a id="__codelineno-0-337" name="__codelineno-0-337"></a>
5175 +<a id="__codelineno-0-338" name="__codelineno-0-338"></a><span class="sd"> Raises:</span>
5176 +<a id="__codelineno-0-339" name="__codelineno-0-339"></a><span class="sd"> RuntimeError: If the PUT operation fails.</span>
5177 +<a id="__codelineno-0-340" name="__codelineno-0-340"></a><span class="sd"> &quot;&quot;&quot;</span>
5178 +<a id="__codelineno-0-341" name="__codelineno-0-341"></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">put_request</span><span class="p">(</span>
5179 +<a id="__codelineno-0-342" name="__codelineno-0-342"></a> <span class="sa">f</span><span class="s2">&quot;rules/files/</span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
5180 +<a id="__codelineno-0-343" name="__codelineno-0-343"></a> <span class="n">xml_content</span><span class="p">,</span>
5181 +<a id="__codelineno-0-344" name="__codelineno-0-344"></a> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;overwrite&quot;</span><span class="p">:</span> <span class="s2">&quot;true&quot;</span><span class="p">},</span>
5182 +<a id="__codelineno-0-345" name="__codelineno-0-345"></a> <span class="p">)</span>
5183 +<a id="__codelineno-0-346" name="__codelineno-0-346"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">response</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
5184 +<a id="__codelineno-0-347" name="__codelineno-0-347"></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Could not PUT rule </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
5185 +</code></pre></div></td></tr></table></div>
5186 + </details>
5187 +
5188 +
5189 +
5190 + <div class="doc doc-children">
5191 +
5192 +
5193 +
5194 +
5195 +
5196 +
5197 +
5198 +
5199 +
5200 +<div class="doc doc-object doc-function">
5201 +
5202 +
5203 +
5204 +<h3 id="app.services.WazuhManager.enabled_rule.EnableRuleService.__init__" class="doc doc-heading">
5205 +<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">universal_service</span><span class="p">)</span></code>
5206 +
5207 +</h3>
5208 +
5209 +
5210 + <div class="doc doc-contents ">
5211 +
5212 + <p>Initialize an EnableRuleService instance.</p>
5213 +
5214 + <p><strong>Parameters:</strong></p>
5215 + <table>
5216 + <thead>
5217 + <tr>
5218 + <th>Name</th>
5219 + <th>Type</th>
5220 + <th>Description</th>
5221 + <th>Default</th>
5222 + </tr>
5223 + </thead>
5224 + <tbody>
5225 + <tr>
5226 + <td><code>universal_service</code></td>
5227 + <td>
5228 + <code><a class="autorefs autorefs-internal" title="app.services.WazuhManager.universal.UniversalService" href="#app.services.WazuhManager.universal.UniversalService">UniversalService</a></code>
5229 + </td>
5230 + <td>
5231 + <div class="doc-md-description">
5232 + <p>An instance of the UniversalService.</p>
5233 + </div>
5234 + </td>
5235 + <td>
5236 + <em>required</em>
5237 + </td>
5238 + </tr>
5239 + </tbody>
5240 + </table>
5241 +
5242 + <details class="quote">
5243 + <summary>Source code in <code>app\services\WazuhManager\enabled_rule.py</code></summary>
5244 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-125">125</a></span>
5245 +<span class="normal"><a href="#__codelineno-0-126">126</a></span>
5246 +<span class="normal"><a href="#__codelineno-0-127">127</a></span>
5247 +<span class="normal"><a href="#__codelineno-0-128">128</a></span>
5248 +<span class="normal"><a href="#__codelineno-0-129">129</a></span>
5249 +<span class="normal"><a href="#__codelineno-0-130">130</a></span>
5250 +<span class="normal"><a href="#__codelineno-0-131">131</a></span>
5251 +<span class="normal"><a href="#__codelineno-0-132">132</a></span>
5252 +<span class="normal"><a href="#__codelineno-0-133">133</a></span>
5253 +<span class="normal"><a href="#__codelineno-0-134">134</a></span>
5254 +<span class="normal"><a href="#__codelineno-0-135">135</a></span>
5255 +<span class="normal"><a href="#__codelineno-0-136">136</a></span>
5256 +<span class="normal"><a href="#__codelineno-0-137">137</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-125" name="__codelineno-0-125"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">universal_service</span><span class="p">:</span> <span class="n">UniversalService</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
5257 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
5258 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> Initialize an EnableRuleService instance.</span>
5259 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a>
5260 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> Args:</span>
5261 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a><span class="sd"> universal_service (UniversalService): An instance of the UniversalService.</span>
5262 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a><span class="sd"> &quot;&quot;&quot;</span>
5263 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">universal_service</span>
5264 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span> <span class="o">=</span> <span class="n">universal_service</span><span class="o">.</span><span class="n">get_auth_token</span><span class="p">()</span>
5265 +<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span> <span class="o">=</span> <span class="n">WazuhHttpRequests</span><span class="p">(</span>
5266 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
5267 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span><span class="p">,</span>
5268 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="p">)</span>
5269 +</code></pre></div></td></tr></table></div>
5270 + </details>
5271 + </div>
5272 +
5273 +</div>
5274 +
5275 +<div class="doc doc-object doc-function">
5276 +
5277 +
5278 +
5279 +<h3 id="app.services.WazuhManager.enabled_rule.EnableRuleService.enable_rule" class="doc doc-heading">
5280 +<code class="highlight language-python"><span class="n">enable_rule</span><span class="p">(</span><span class="n">request</span><span class="p">)</span></code>
5281 +
5282 +</h3>
5283 +
5284 +
5285 + <div class="doc doc-contents ">
5286 +
5287 + <p>Enable a rule in Wazuh Manager.</p>

This file is too large to show in full.