kanidm_client/
domain.rs
1use crate::{ClientError, KanidmClient};
2use kanidm_proto::constants::ATTR_DOMAIN_ALLOW_EASTER_EGGS;
3use kanidm_proto::internal::ImageValue;
4use reqwest::multipart;
5
6impl KanidmClient {
7 pub async fn idm_domain_delete_image(&self) -> Result<(), ClientError> {
9 self.perform_delete_request("/v1/domain/_image").await
10 }
11
12 pub async fn idm_set_domain_allow_easter_eggs(&self, enable: bool) -> Result<(), ClientError> {
13 self.perform_put_request(
14 &format!("{}{}", "/v1/domain/_attr/", ATTR_DOMAIN_ALLOW_EASTER_EGGS),
15 vec![enable.to_string()],
16 )
17 .await
18 }
19
20 pub async fn idm_domain_update_image(&self, image: ImageValue) -> Result<(), ClientError> {
22 let file_content_type = image.filetype.as_content_type_str();
23
24 let file_data = match multipart::Part::bytes(image.contents.clone())
25 .file_name(image.filename)
26 .mime_str(file_content_type)
27 {
28 Ok(part) => part,
29 Err(err) => {
30 error!(
31 "Failed to generate multipart body from image data: {:}",
32 err
33 );
34 return Err(ClientError::SystemError);
35 }
36 };
37
38 let form = multipart::Form::new().part("image", file_data);
39
40 let response = self
42 .client
43 .post(self.make_url("/v1/domain/_image"))
44 .multipart(form);
45
46 let response = {
47 let tguard = self.bearer_token.read().await;
48 if let Some(token) = &(*tguard) {
49 response.bearer_auth(token)
50 } else {
51 response
52 }
53 };
54 let response = response
55 .send()
56 .await
57 .map_err(|err| self.handle_response_error(err))?;
58 self.expect_version(&response).await;
59
60 let opid = self.get_kopid_from_response(&response);
61
62 match response.status() {
63 reqwest::StatusCode::OK => {}
64 unexpect => {
65 return Err(ClientError::Http(
66 unexpect,
67 response.json().await.ok(),
68 opid,
69 ))
70 }
71 }
72 response
73 .json()
74 .await
75 .map_err(|e| ClientError::JsonDecode(e, opid))
76 }
77}