casdoor_sdk_rust/user/
mod.rs

1mod models;
2
3pub use models::*;
4
5use crate::{Body, Method, QueryResult, Sdk, SdkError, SdkResult, StatusCode, NO_BODY};
6
7impl Sdk {
8    /// Query and return some models and the total number of models.
9    pub async fn get_users(&self, query_args: UserQueryArgs) -> SdkResult<QueryResult<User>> {
10        self.get_models(None, query_args).await
11    }
12
13    pub async fn get_user_groups(&self, query_args: UserGroupQueryArgs) -> SdkResult<QueryResult<UserGroup>> {
14        self.get_models(None, query_args).await
15    }
16
17    pub async fn get_user_count(&self, is_online: QueryUserSet) -> SdkResult<i64> {
18        self.request_data(
19            Method::GET,
20            self.get_url_path("get-user-count", true, [("isOnline", is_online.to_string())])?,
21            NO_BODY,
22        )
23        .await?
24        .into_data_default()
25    }
26
27    pub async fn get_user(&self, args: GetUserArgs) -> SdkResult<Option<User>> {
28        match (args.user_id, args.name, args.email, args.phone) {
29            (Some(user_id), None, None, None) => self.get_user_by_user_id(user_id).await,
30            (None, Some(name), None, None) => self.get_model_by_name(name).await,
31            (None, None, Some(email), None) => self.get_user_by_email(email).await,
32            (None, None, None, Some(phone)) => self.get_user_by_phone(phone).await,
33            _ => Err(SdkError::new(
34                StatusCode::BAD_REQUEST,
35                r##"The parameters "uid", "name", "email" and "phone" can and must only pass one."##,
36            )),
37        }
38    }
39
40    pub async fn get_user_by_email(&self, email: String) -> SdkResult<Option<User>> {
41        self.request_data(Method::GET, format!("/api/get-user?owner={}&email={}", self.org_name, email), NO_BODY)
42            .await?
43            .into_data()
44    }
45
46    pub async fn get_user_by_phone(&self, phone: String) -> SdkResult<Option<User>> {
47        self.request_data(Method::GET, format!("/api/get-user?owner={}&phone={}", self.org_name, phone), NO_BODY)
48            .await?
49            .into_data()
50    }
51
52    pub async fn get_user_by_user_id(&self, user_id: String) -> SdkResult<Option<User>> {
53        self.request_data(
54            Method::GET,
55            format!("/api/get-user?owner={}&userId={}", self.org_name, user_id),
56            NO_BODY,
57        )
58        .await?
59        .into_data()
60    }
61
62    /// NOTE: oldPassword is not required, if you don't need, just pass a empty string
63    pub async fn set_user_password(&self, mut args: SetPasswordArgs) -> SdkResult<()> {
64        args.user_owner.get_or_insert(self.org_name.to_owned());
65        self.request_data(Method::POST, "/api/set-password", Body::Form(&serde_urlencoded::to_string(args)?))
66            .await?
67            .into_data_default()
68    }
69}