alfresco_sdk/alfresco/authentication_api/
mod.rs1use reqwest::Client;
2use crate::models::structs::{TicketBodyCreate, TicketEntry, ValidTicketEntry};
3use base64::{Engine as _, engine::general_purpose};
4use crate::models::enums::TicketValidationResult;
5
6pub struct AuthenticationApi {
7 pub base_url: String,
8 pub client: Client,
9}
10
11impl AuthenticationApi {
12 pub fn new(base_url: &str, client: Client) -> Self {
13 AuthenticationApi {
14 base_url: format!("{}/alfresco/api/-default-/public/authentication/versions/1", base_url),
15 client,
16 }
17 }
18
19 pub async fn login(&self, user_id: &str, password: &str) -> Result<TicketEntry, anyhow::Error> {
20 let formatted_url = format!("{}/tickets", self.base_url);
21
22 let body = TicketBodyCreate {
23 user_id: Some(user_id.to_string()),
24 password: Some(password.to_string()),
25 };
26
27 let raw_response = self.client.post(&formatted_url)
28 .json(&body)
29 .send()
30 .await?;
31
32 let parsed = raw_response.json::<TicketEntry>().await?;
33
34 Ok(parsed)
35 }
36
37 pub async fn validate_ticket(&self, ticket: &str) -> Result<TicketValidationResult, anyhow::Error> {
38 let formatted_url = format!("{}/tickets/-me-", self.base_url);
39
40 let b64 = general_purpose::STANDARD.encode(ticket);
41 let raw_response = self.client.get(formatted_url)
42 .header("Authorization", &format!("Basic {}", b64))
43 .send()
44 .await?;
45
46 let status_code = raw_response.status().as_u16();
47
48 match status_code {
49 404 | 401 => Ok(TicketValidationResult::InvalidTicket),
50 _ => {
51 let parsed = raw_response.json::<ValidTicketEntry>().await?;
52 Ok(TicketValidationResult::Valid(parsed))
53 },
54 }
55 }
56
57 pub async fn logout(&self, ticket: &str) -> Result<(), anyhow::Error> {
58 let formatted_url = format!("{}/tickets/-me-", self.base_url);
59
60 let b64 = general_purpose::STANDARD.encode(ticket);
61 self.client.delete(formatted_url)
62 .header("Authorization", &format!("Basic {}", b64))
63 .send()
64 .await?;
65
66 Ok(())
67 }
68}