alfresco_sdk/alfresco/core_api/audit/
mod.rs1use reqwest::Client;
2use base64::{Engine as _, engine::general_purpose};
3use serde_json::json;
4use crate::models::structs::{AuditApp, AuditAppPagingList, AuditEntryEntry, AuditEntryPaging};
5
6use anyhow::Result;
7use crate::alfresco::params::QueryParamsBuilder;
8
9pub struct AuditApi {
10 pub base_url: String,
11 pub client: Client,
12}
13
14impl AuditApi {
15 pub fn new(base_url: &str, client: Client) -> Self {
16 AuditApi {
17 base_url: format!("{}/alfresco/api/-default-/public/alfresco/versions/1", base_url),
18 client,
19 }
20 }
21
22 pub async fn list_audit_applications(&self, ticket: &str, skip_count: Option<&u32>, max_items: Option<&u32>, fields: Option<&Vec<String>>) -> Result<AuditAppPagingList> {
23 let formatted_url = format!("{}/audit-applications", self.base_url);
24 let ticket_b64 = general_purpose::STANDARD.encode(ticket);
25
26 let mut params_builder = QueryParamsBuilder::new()
27 .set_skip_count(skip_count)
28 .set_max_items(max_items);
29
30 if let Some(field_list) = fields {
31 for field in field_list {
32 params_builder = params_builder.push_field(Some(field));
33 }
34 }
35
36
37 let raw_response = self.client.get(&formatted_url)
38 .header("Authorization", format!("Basic {}", ticket_b64))
39 .query(¶ms_builder.build())
40 .send()
41 .await?;
42
43 let parsed = raw_response.json::<AuditAppPagingList>().await?;
44
45 Ok(parsed)
46 }
47
48 pub async fn get_audit_application_info(&self, ticket: &str, audit_application_id: &str, fields: Option<&Vec<String>>, include: Option<&Vec<String>>) -> Result<AuditApp> {
49 let formatted_url = format!("{}/audit-applications/{}", self.base_url, audit_application_id);
50 let ticket_b64 = general_purpose::STANDARD.encode(ticket);
51
52 let mut params_builder = QueryParamsBuilder::new();
53
54 if let Some(field_list) = fields {
55 for field in field_list {
56 params_builder = params_builder.push_field(Some(field));
57 }
58 }
59
60 if let Some(include_list) = include {
61 for include_value in include_list {
62 params_builder = params_builder.push_field(Some(include_value));
63 }
64 }
65
66 let raw_response = self.client.get(&formatted_url)
67 .header("Authorization", format!("Basic {}", ticket_b64))
68 .query(¶ms_builder.build())
69 .send()
70 .await?;
71
72 let parsed = raw_response.json::<AuditApp>().await?;
73
74 Ok(parsed)
75 }
76
77 pub async fn update_audit_application_info(&self, ticket: &str, audit_application_id: &str, fields: Option<&Vec<String>>, is_enabled: &bool) -> Result<AuditApp> {
78 let formatted_url = format!("{}/audit-applications/{}", self.base_url, audit_application_id);
79 let ticket_b64 = general_purpose::STANDARD.encode(ticket);
80
81 let mut params_builder = QueryParamsBuilder::new();
82
83 if let Some(field_list) = fields {
84 for field in field_list {
85 params_builder = params_builder.push_field(Some(field));
86 }
87 }
88
89 let body = json!({
90 "isEnabled": &is_enabled,
91 });
92
93 let raw_response = self.client.put(&formatted_url)
94 .header("Authorization", format!("Basic {}", ticket_b64))
95 .query(¶ms_builder.build())
96 .json(&body)
97 .send()
98 .await?;
99
100 let parsed = raw_response.json::<AuditApp>().await?;
101
102 Ok(parsed)
103 }
104
105 pub async fn list_audit_entries_for_audit_app(&self, ticket: &str,audit_application_id: &str, skip_count: Option<&u32>, omit_total_items: Option<&bool>, order_by: Option<&Vec<String>>, max_items: Option<&u32>, where_filter: Option<&String>, include: Option<&Vec<String>>, fields: Option<&Vec<String>>) -> Result<AuditEntryPaging> {
106 let formatted_url = format!("{}/audit-applications/{}/audit-entries", self.base_url, audit_application_id);
107 let ticket_b64 = general_purpose::STANDARD.encode(ticket);
108
109 let mut params_builder = QueryParamsBuilder::new()
110 .set_skip_count(skip_count)
111 .set_omit_total_items(omit_total_items)
112 .set_max_items(max_items)
113 .set_where_filter(where_filter);
114
115 if let Some(order_list) = order_by {
116 for order_value in order_list {
117 params_builder = params_builder.push_order_by(Some(order_value));
118 }
119 }
120
121 if let Some(field_list) = fields {
122 for field in field_list {
123 params_builder = params_builder.push_field(Some(field));
124 }
125 }
126
127 if let Some(include_list) = include {
128 for include_value in include_list {
129 params_builder = params_builder.push_include(Some(include_value));
130 }
131 }
132
133 let raw_response = self.client.get(&formatted_url)
134 .header("Authorization", format!("Basic {}", ticket_b64))
135 .query(¶ms_builder.build())
136 .send()
137 .await?;
138
139 let parsed = raw_response.json::<AuditEntryPaging>().await?;
140
141 Ok(parsed)
142 }
143
144 pub async fn permanently_delete_audit_entries_for_audit_app(&self, ticket: &str, audit_application_id: &str, where_filter: &String, ) -> Result<AuditEntryPaging> {
145 let formatted_url = format!("{}/audit-applications/{}/audit-entries", self.base_url, audit_application_id);
146 let ticket_b64 = general_purpose::STANDARD.encode(ticket);
147
148 let mut params_builder = QueryParamsBuilder::new()
149 .set_where_filter(Some(where_filter));
150
151 let raw_response = self.client.delete(&formatted_url)
152 .header("Authorization", format!("Basic {}", ticket_b64))
153 .query(¶ms_builder.build())
154 .send()
155 .await?;
156
157 let parsed = raw_response.json::<AuditEntryPaging>().await?;
158
159 Ok(parsed)
160 }
161
162 pub async fn get_audit_entry(&self, ticket: &str, audit_application_id: &str, audit_entry_id: &str, fields: Option<&Vec<String>>) -> Result<AuditEntryEntry> {
163 let formatted_url = format!("{}/audit-applications/{}/audit-entries/{}", self.base_url, audit_application_id, audit_entry_id);
164 let ticket_b64 = general_purpose::STANDARD.encode(ticket);
165
166 let mut params_builder = QueryParamsBuilder::new();
167
168 if let Some(field_list) = fields {
169 for field in field_list {
170 params_builder = params_builder.push_field(Some(field));
171 }
172 }
173
174 let raw_response = self.client.get(&formatted_url)
175 .header("Authorization", format!("Basic {}", ticket_b64))
176 .query(¶ms_builder.build())
177 .send()
178 .await?;
179
180 let parsed = raw_response.json::<AuditEntryEntry>().await?;
181
182 Ok(parsed)
183 }
184
185 pub async fn permanently_delete_audit_entry(&self, ticket: &str, audit_application_id: &str, audit_entry_id: &str) -> Result<String> {
186 let formatted_url = format!("{}/audit-applications/{}/audit-entries/{}", self.base_url, audit_application_id, audit_entry_id);
187 let ticket_b64 = general_purpose::STANDARD.encode(ticket);
188
189 let raw_response = self.client.delete(&formatted_url)
190 .header("Authorization", format!("Basic {}", ticket_b64))
191 .send()
192 .await?;
193
194 let status_code = raw_response.status().as_u16();
195
196 match status_code {
197 204 => Ok("Successfully deleted audit entry".to_string()),
198 400 => Ok("Invalid parameter: auditApplicationId or auditEntryId is not a valid format".to_string()),
199 401 => Ok("Authentication failed".to_string()),
200 403 => Ok("Current user does not have permission to delete audit information".to_string()),
201 404 => Ok("auditApplicationId or auditEntryId does not exist".to_string()),
202 501 => Ok("Audit is disabled for the system".to_string()),
203 _ => Err(anyhow::Error::from(std::io::Error::new(std::io::ErrorKind::Other, "Something went wrong and I don't know what it is")))
204 }
205 }
206
207 pub async fn list_audit_entries_for_node(&self, ticket: &str, node_id: &str, skip_count: Option<&u32>, order_by: Option<&Vec<String>>, max_items: Option<&u32>, where_filter: Option<&String>, include: Option<&Vec<String>>, fields: Option<&Vec<String>>) -> Result<AuditEntryPaging> {
208 let formatted_url = format!("{}/nodes/{}/audit-entries", self.base_url, node_id);
209 let ticket_b64 = general_purpose::STANDARD.encode(ticket);
210
211 let mut params_builder = QueryParamsBuilder::new()
212 .set_skip_count(skip_count)
213 .set_max_items(max_items)
214 .set_where_filter(where_filter);
215
216
217 if let Some(order_list) = order_by {
218 for order_value in order_list {
219 params_builder = params_builder.push_order_by(Some(order_value));
220 }
221 }
222
223 if let Some(field_list) = fields {
224 for field in field_list {
225 params_builder = params_builder.push_field(Some(field));
226 }
227 }
228
229 if let Some(include_list) = include {
230 for include_value in include_list {
231 params_builder = params_builder.push_include(Some(include_value));
232 }
233 }
234
235 let raw_response = self.client.get(&formatted_url)
236 .header("Authorization", format!("Basic {}", ticket_b64))
237 .query(¶ms_builder.build())
238 .send()
239 .await?;
240
241 let parsed = raw_response.json::<AuditEntryPaging>().await?;
242
243 Ok(parsed)
244 }
245}