Skip to main content

burn_central_client/user/
mod.rs

1pub mod response;
2
3use reqwest::header::SET_COOKIE;
4
5use crate::{
6    BurnCentralCredentials, Client, ClientError,
7    client::ResponseExt,
8    user::response::{GetUserOrganizationsResponse, UserResponseSchema},
9};
10
11impl Client {
12    /// Log in to the Burn Central server with the given credentials.
13    pub fn login(&self, credentials: &BurnCentralCredentials) -> Result<String, ClientError> {
14        let url = self.join("login/api-key");
15
16        let form = self
17            .http_client
18            .post(url)
19            .form::<BurnCentralCredentials>(credentials);
20
21        tracing::debug!("Requesting login form: {form:?}");
22
23        let res = form.send()?.map_to_burn_central_err()?;
24
25        let cookie_header = res.headers().get(SET_COOKIE);
26        if let Some(cookie) = cookie_header {
27            let cookie_str = cookie
28                .to_str()
29                .expect("Session cookie should be able to convert to str");
30            Ok(cookie_str.to_string())
31        } else {
32            Err(ClientError::BadSessionId)
33        }
34    }
35
36    pub fn get_current_user(&self) -> Result<UserResponseSchema, ClientError> {
37        let url = self.join("user");
38
39        self.get_json::<UserResponseSchema>(url)
40    }
41
42    pub fn get_user_organizations(&self) -> Result<GetUserOrganizationsResponse, ClientError> {
43        let url = self.join("user/organizations");
44
45        self.get_json(url)
46    }
47}