1use std::collections::HashMap;
2
3use ldap3::SearchEntry;
4use log::trace;
5use serde_json::{json,value::Value};
6use serde::{Deserialize, Serialize};
7
8
9pub trait LdapObject {
11 fn to_json(&self) -> Value;
13
14 fn get_object_identifier(&self) -> &String;
16 fn get_is_acl_protected(&self) -> &bool;
17 fn get_aces(&self) -> &Vec<AceTemplate>;
18 fn get_spntargets(&self) -> &Vec<SPNTarget>;
19 fn get_allowed_to_delegate(&self) -> &Vec<Member>;
20 fn get_links(&self) -> &Vec<Link>;
21 fn get_contained_by(&self) -> &Option<Member>;
22 fn get_child_objects(&self) -> &Vec<Member>;
23 fn get_haslaps(&self) -> &bool;
25
26 fn get_aces_mut(&mut self) -> &mut Vec<AceTemplate>;
28 fn get_spntargets_mut(&mut self) -> &mut Vec<SPNTarget>;
29 fn get_allowed_to_delegate_mut(&mut self) -> &mut Vec<Member>;
30
31 fn set_is_acl_protected(&mut self, is_acl_protected: bool);
33 fn set_aces(&mut self, aces: Vec<AceTemplate>);
34 fn set_spntargets(&mut self, spn_targets: Vec<SPNTarget>);
35 fn set_allowed_to_delegate(&mut self, allowed_to_delegate: Vec<Member>);
36 fn set_links(&mut self, links: Vec<Link>);
37 fn set_contained_by(&mut self, contained_by: Option<Member>);
38 fn set_child_objects(&mut self, child_objects: Vec<Member>);
39}
40
41#[derive(Debug, Clone, Deserialize, Serialize, Default)]
43pub struct LocalGroup {
44 #[serde(rename = "ObjectIdentifier")]
45 object_identifier: String,
46 #[serde(rename = "Results")]
47 results: Vec<Member>,
48 #[serde(rename = "LocalNames")]
49 local_names: Vec<String>,
50 #[serde(rename = "Collected")]
51 collected: bool,
52 #[serde(rename = "FailureReason")]
53 failure_reason: Option<String>,
54}
55
56impl LocalGroup {
57 pub fn new() -> Self {
59 Self {
60 ..Default::default()
61 }
62 }
63
64 pub fn object_identifier(&self) -> &String {
66 &self.object_identifier
67 }
68 pub fn results(&self) -> &Vec<Member> {
69 &self.results
70 }
71 pub fn local_names(&self) -> &Vec<String> {
72 &self.local_names
73 }
74 pub fn collected(&self) -> &bool {
75 &self.collected
76 }
77 pub fn failure_reason(&self) -> &Option<String> {
78 &self.failure_reason
79 }
80
81 pub fn object_identifier_mut(&mut self) -> &mut String {
83 &mut self.object_identifier
84 }
85 pub fn results_mut(&mut self) -> &mut Vec<Member> {
86 &mut self.results
87 }
88 pub fn local_names_mut(&mut self) -> &mut Vec<String> {
89 &mut self.local_names
90 }
91 pub fn collected_mut(&mut self) -> &mut bool {
92 &mut self.collected
93 }
94 pub fn failure_reason_mut(&mut self) -> &mut Option<String> {
95 &mut self.failure_reason
96 }
97}
98
99#[derive(Debug, Clone, Deserialize, Serialize)]
101pub struct Session {
102 #[serde(rename = "Results")]
103 results: Vec<UserComputerSession>,
104 #[serde(rename = "Collected", default = "default_true")]
105 collected: bool,
106 #[serde(rename = "FailureReason")]
107 failure_reason: Option<String>,
108}
109
110impl Default for Session {
111 fn default() -> Session {
113 Session {
114 results: Vec::new(),
115 collected: true,
116 failure_reason: None,
117 }
118 }
119}
120
121impl Session {
122 pub fn new() -> Self {
124 Self {
125 collected: true,
126 ..Default::default()
127 }
128 }
129
130 pub fn results(&self) -> &Vec<UserComputerSession> {
132 &self.results
133 }
134 pub fn collected(&self) -> &bool {
135 &self.collected
136 }
137 pub fn failure_reason(&self) -> &Option<String> {
138 &self.failure_reason
139 }
140
141 pub fn results_mut(&mut self) -> &mut Vec<UserComputerSession> {
143 &mut self.results
144 }
145 pub fn collected_mut(&mut self) -> &mut bool {
146 &mut self.collected
147 }
148 pub fn failure_reason_mut(&mut self) -> &mut Option<String> {
149 &mut self.failure_reason
150 }
151}
152
153#[derive(Debug, Clone, Deserialize, Serialize, Default)]
155pub struct UserComputerSession {
156 #[serde(rename = "UserSID")]
157 user_sid: String,
158 #[serde(rename = "ComputerSID")]
159 computer_sid: String,
160}
161
162impl UserComputerSession {
163 pub fn new() -> Self {
165 Self {
166 ..Default::default()
167 }
168 }
169
170 pub fn user_sid(&self) -> &String {
172 &self.user_sid
173 }
174 pub fn computer_sid(&self) -> &String {
175 &self.computer_sid
176 }
177
178 pub fn user_sid_mut(&mut self) -> &mut String {
180 &mut self.user_sid
181 }
182 pub fn computer_sid_mut(&mut self) -> &mut String {
183 &mut self.computer_sid
184 }
185
186}
187
188#[derive(Debug, Clone, Deserialize, Serialize, Default)]
190pub struct UserRight {
191 #[serde(rename = "Privilege")]
192 privilege: String,
193 #[serde(rename = "Results")]
194 results: Vec<Member>,
195 #[serde(rename = "LocalNames")]
196 local_names: Vec<String>,
197 #[serde(rename = "Collected", default = "default_true")]
198 collected: bool,
199 #[serde(rename = "FailureReason")]
200 failure_reason: Option<String>,
201}
202
203impl UserRight {
204 pub fn new() -> Self {
206 Self {
207 ..Default::default()
208 }
209 }
210
211 pub fn privilege(&self) -> &String {
213 &self.privilege
214 }
215 pub fn results(&self) -> &Vec<Member> {
216 &self.results
217 }
218 pub fn local_names(&self) -> &Vec<String> {
219 &self.local_names
220 }
221 pub fn collected(&self) -> &bool {
222 &self.collected
223 }
224 pub fn failure_reason(&self) -> &Option<String> {
225 &self.failure_reason
226 }
227
228 pub fn privilege_mut(&mut self) -> &mut String {
230 &mut self.privilege
231 }
232 pub fn results_mut(&mut self) -> &mut Vec<Member> {
233 &mut self.results
234 }
235 pub fn local_names_mut(&mut self) -> &mut Vec<String> {
236 &mut self.local_names
237 }
238 pub fn collected_mut(&mut self) -> &mut bool {
239 &mut self.collected
240 }
241 pub fn failure_reason_mut(&mut self) -> &mut Option<String> {
242 &mut self.failure_reason
243 }
244}
245
246
247#[derive(Debug, Clone, Deserialize, Serialize)]
249pub struct DCRegistryData {
250 #[serde(rename = "CertificateMappingMethods")]
251 certificate_mapping_methods: Option<RegistryData>,
252 #[serde(rename = "StrongCertificateBindingEnforcement")]
253 strong_certificate_binding_enforcement: Option<RegistryData>,
254}
255
256impl Default for DCRegistryData {
257 fn default() -> DCRegistryData {
258 DCRegistryData {
259 certificate_mapping_methods: None,
260 strong_certificate_binding_enforcement: None,
261 }
262 }
263}
264
265#[derive(Debug, Clone, Deserialize, Serialize, Default)]
267pub struct RegistryData {
268 #[serde(rename = "Value")]
269 value: i8,
270 #[serde(rename = "Collected", default = "default_true")]
271 collected: bool,
272 #[serde(rename = "FailureReason")]
273 failure_reason: Option<String>,
274}
275
276impl RegistryData {
277 pub fn new() -> Self {
279 Self {
280 collected: true,
281 ..Default::default()
282 }
283 }
284}
285
286pub fn default_true() -> bool {
288 true
289}
290
291#[derive(Debug, Clone, Deserialize, Serialize, Default)]
293pub struct Member {
294 #[serde(rename = "ObjectIdentifier")]
295 object_identifier: String,
296 #[serde(rename = "ObjectType")]
297 object_type: String,
298}
299
300impl Member {
301 pub fn new() -> Self {
303 Self {
304 object_identifier: "SID".to_string(),
305 ..Default::default()
306 }
307 }
308
309 pub fn object_identifier(&self) -> &String {
311 &self.object_identifier
312 }
313 pub fn object_type(&self) -> &String {
314 &self.object_type
315 }
316
317 pub fn object_identifier_mut(&mut self) -> &mut String {
319 &mut self.object_identifier
320 }
321 pub fn object_type_mut(&mut self) -> &mut String {
322 &mut self.object_type
323 }
324}
325
326#[derive(Debug, Clone, Deserialize, Serialize)]
328pub struct AceTemplate {
329 #[serde(rename = "PrincipalSID")]
330 principal_sid: String,
331 #[serde(rename = "PrincipalType")]
332 principal_type: String,
333 #[serde(rename = "RightName")]
334 right_name: String,
335 #[serde(rename = "IsInherited")]
336 is_inherited: bool,
337 #[serde(rename = "InheritanceHash")]
338 inheritance_hash: String,
339}
340
341impl AceTemplate {
342 pub fn new(
344 principal_sid: String,
345 principal_type: String,
346 right_name: String,
347 is_inherited: bool,
348 inheritance_hash: String,
349 ) -> Self {
350 Self { principal_sid, principal_type , right_name, is_inherited, inheritance_hash}
351 }
352
353 pub fn principal_sid(&self) -> &String {
355 &self.principal_sid
356 }
357 pub fn principal_type(&self) -> &String {
358 &self.principal_type
359 }
360 pub fn right_name(&self) -> &String {
361 &self.right_name
362 }
363 pub fn is_inherited(&self) -> &bool {
364 &self.is_inherited
365 }
366 pub fn inheritance_hash(&self) -> &String {
367 &self.inheritance_hash
368 }
369
370 pub fn principal_sid_mut(&mut self) -> &mut String {
372 &mut self.principal_sid
373 }
374 pub fn principal_type_mut(&mut self) -> &mut String {
375 &mut self.principal_type
376 }
377 pub fn right_name_mut(&mut self) -> &mut String {
378 &mut self.right_name
379 }
380 pub fn is_inherited_mut(&mut self) -> &mut bool {
381 &mut self.is_inherited
382 }
383 pub fn inheritance_hash_mut(&mut self) -> &mut String {
384 &mut self.inheritance_hash
385 }
386}
387
388#[derive(Debug, Clone, Deserialize, Serialize)]
390pub struct Link {
391 #[serde(rename = "IsEnforced")]
392 is_enforced: bool,
393 #[serde(rename = "GUID")]
394 guid: String,
395}
396
397impl Link {
398 pub fn new(is_enforced: bool, guid: String) -> Self { Self { is_enforced, guid } }
400
401 pub fn is_enforced(&self) -> &bool {
403 &self.is_enforced
404 }
405 pub fn guid(&self) -> &String {
406 &self.guid
407 }
408
409 pub fn is_enforced_mut(&mut self) -> &mut bool {
411 &mut self.is_enforced
412 }
413 pub fn guid_mut(&mut self) -> &mut String {
414 &mut self.guid
415 }
416}
417
418#[derive(Debug, Clone, Deserialize, Serialize, Default)]
420pub struct GPOChange {
421 #[serde(rename = "LocalAdmins")]
422 local_admins: Vec<Member>,
423 #[serde(rename = "RemoteDesktopUsers")]
424 remote_desktop_users: Vec<Member>,
425 #[serde(rename = "DcomUsers")]
426 dcom_users: Vec<Member>,
427 #[serde(rename = "PSRemoteUsers")]
428 psremote_users: Vec<Member>,
429 #[serde(rename = "AffectedComputers")]
430 affected_computers: Vec<Member>,
431}
432
433impl GPOChange {
434 pub fn new() -> Self {
436 Self {
437 ..Default::default()
438 }
439 }
440
441 pub fn local_admins(&self) -> &Vec<Member> {
443 &self.local_admins
444 }
445 pub fn remote_desktop_users(&self) -> &Vec<Member> {
446 &self.remote_desktop_users
447 }
448 pub fn dcom_users(&self) -> &Vec<Member> {
449 &self.dcom_users
450 }
451 pub fn psremote_users(&self) -> &Vec<Member> {
452 &self.psremote_users
453 }
454 pub fn affected_computers(&self) -> &Vec<Member> {
455 &self.affected_computers
456 }
457
458 pub fn local_admins_mut(&mut self) -> &mut Vec<Member> {
460 &mut self.local_admins
461 }
462 pub fn remote_desktop_users_mut(&mut self) -> &mut Vec<Member> {
463 &mut self.remote_desktop_users
464 }
465 pub fn dcom_users_mut(&mut self) -> &mut Vec<Member> {
466 &mut self.dcom_users
467 }
468 pub fn psremote_users_mut(&mut self) -> &mut Vec<Member> {
469 &mut self.psremote_users
470 }
471 pub fn affected_computers_mut(&mut self) -> &mut Vec<Member> {
472 &mut self.affected_computers
473 }
474}
475
476#[derive(Debug, Clone, Deserialize, Serialize)]
478pub struct SPNTarget {
479 #[serde(rename = "ComputerSID")]
480 computer_sid: String,
481 #[serde(rename = "Port")]
482 port: i32,
483 #[serde(rename = "Service")]
484 service: String,
485}
486
487impl SPNTarget {
488 pub fn new() -> Self {
490 Self {
491 computer_sid: "SID".to_string(),
492 port: 1433,
493 service: "SQLAdmin".to_string()
494 }
495 }
496
497 pub fn computer_sid(&self) -> &String {
499 &self.computer_sid
500 }
501 pub fn port(&self) -> &i32 {
502 &self.port
503 }
504 pub fn service(&self) -> &String {
505 &self.service
506 }
507
508 pub fn computer_sid_mut(&mut self) -> &mut String {
510 &mut self.computer_sid
511 }
512 pub fn port_mut(&mut self) -> &mut i32 {
513 &mut self.port
514 }
515 pub fn service_mut(&mut self) -> &mut String {
516 &mut self.service
517 }
518}
519
520#[derive(Debug, Clone, Deserialize, Serialize, Default)]
522pub struct FinalJson{
523 data: Vec<Value>,
524 meta: Meta,
525}
526
527impl FinalJson {
528 pub fn new(data: Vec<Value>, meta: Meta) -> Self {
530 Self {
531 data,
532 meta
533 }
534 }
535 pub fn data(&self) -> &Vec<Value> {
537 &self.data
538 }
539 pub fn meta(&self) -> &Meta {
540 &self.meta
541 }
542
543 pub fn data_mut(&mut self) -> &mut Vec<Value> {
545 &mut self.data
546 }
547 pub fn meta_mut(&mut self) -> &mut Meta {
548 &mut self.meta
549 }
550}
551
552#[derive(Debug, Clone, Deserialize, Serialize, Default)]
554pub struct Meta {
555 methods: i32,
556 #[serde(rename = "type")]
557 mtype: String,
558 count: i32,
559 version: i8,
560 collectorversion: String
561}
562
563impl Meta {
564 pub fn new(
566 methods: i32,
567 mtype: String,
568 count: i32,
569 version: i8,
570 collectorversion: String
571 ) -> Self {
572 Self {
573 methods,
574 mtype,
575 count,
576 version,
577 collectorversion
578 }
579 }
580
581 pub fn methods(&self) -> &i32 {
583 &self.methods
584 }
585 pub fn mtype(&self) -> &String {
586 &self.mtype
587 }
588 pub fn count(&self) -> &i32 {
589 &self.count
590 }
591 pub fn version(&self) -> &i8 {
592 &self.version
593 }
594
595 pub fn methods_mut(&mut self) -> &mut i32 {
597 &mut self.methods
598 }
599 pub fn mtype_mut(&mut self) -> &mut String {
600 &mut self.mtype
601 }
602 pub fn count_mut(&mut self) -> &mut i32 {
603 &mut self.count
604 }
605 pub fn version_mut(&mut self) -> &mut i8 {
606 &mut self.version
607 }
608}
609
610
611pub fn parse_unknown(result: SearchEntry, _domain: &str) -> serde_json::value::Value {
613
614 let _result_dn = result.dn.to_uppercase();
615 let _result_attrs: HashMap<String, Vec<String>> = result.attrs;
616 let _result_bin: HashMap<String, Vec<Vec<u8>>> = result.bin_attrs;
617
618 let unknown_json = json!({
619 "unknown": null,
620 });
621
622 trace!("Parse Unknown object: {}", _result_dn);
624 unknown_json
633}