bios_iam/basic/serv/clients/
sms_client.rs

1use crate::iam_config::IamConfig;
2use crate::iam_constants;
3use tardis::basic::dto::TardisContext;
4use tardis::basic::result::TardisResult;
5use tardis::{tokio, TardisFuns, TardisFunsInst};
6
7pub struct SmsClient;
8
9impl SmsClient {
10    //TODO remove?
11    pub async fn async_send_vcode(phone: &str, vcode: &str, _funs: &TardisFunsInst, ctx: &TardisContext) -> TardisResult<()> {
12        let ctx_clone = ctx.clone();
13        let phone_clone = phone.to_string();
14        let vcode_clone = vcode.to_string();
15        ctx.add_async_task(Box::new(|| {
16            Box::pin(async move {
17                let task_handle = tokio::spawn(async move {
18                    let funs = iam_constants::get_tardis_inst();
19                    let _ = SmsClient::send_vcode(&phone_clone, &vcode_clone, &funs, &ctx_clone).await;
20                });
21                task_handle.await.unwrap();
22                Ok(())
23            })
24        }))
25        .await
26    }
27
28    pub async fn send_vcode(phone: &str, vcode: &str, funs: &TardisFunsInst, ctx: &TardisContext) -> TardisResult<()> {
29        let conf = funs.conf::<IamConfig>();
30        let ctx_base64 = TardisFuns::crypto.base64.encode(TardisFuns::json.obj_to_string(&ctx)?);
31        let fw_config = TardisFuns::fw_config();
32        let web_server_config = fw_config.web_server();
33        let header_name = web_server_config.context_conf.context_header_name.to_string();
34        match funs.web_client().put_str_to_str(&format!("{}/{}/{}/{}", conf.sms_base_url, conf.sms_path, phone, vcode), "", vec![(header_name, ctx_base64)]).await {
35            Ok(_) => Ok(()),
36            Err(_) => Err(funs.err().unauthorized("send_code", "activate", "send sms error", "403-iam-cert-valid")),
37        }
38    }
39
40    pub async fn async_send_pwd(phone: &str, pwd: &str, _funs: &TardisFunsInst, ctx: &TardisContext) -> TardisResult<()> {
41        let ctx_clone = ctx.clone();
42        let phone_clone = phone.to_string();
43        let pwd_clone = pwd.to_string();
44        ctx.add_async_task(Box::new(|| {
45            Box::pin(async move {
46                let task_handle = tokio::spawn(async move {
47                    let funs = iam_constants::get_tardis_inst();
48                    let _ = SmsClient::send_pwd(&phone_clone, &pwd_clone, &funs, &ctx_clone).await;
49                });
50                task_handle.await.unwrap();
51                Ok(())
52            })
53        }))
54        .await?;
55        Ok(())
56    }
57
58    pub async fn send_pwd(phone: &str, pwd: &str, funs: &TardisFunsInst, ctx: &TardisContext) -> TardisResult<()> {
59        let conf = funs.conf::<IamConfig>();
60        let ctx_base64 = TardisFuns::crypto.base64.encode(TardisFuns::json.obj_to_string(&ctx)?);
61        let fw_config = TardisFuns::fw_config();
62        let web_server_config = fw_config.web_server();
63        match funs
64            .web_client()
65            .put_str_to_str(
66                &format!("{}/{}/{}/{}", conf.sms_base_url, conf.sms_pwd_path, phone, pwd),
67                "",
68                vec![(web_server_config.context_conf.context_header_name.clone(), ctx_base64.to_string())],
69            )
70            .await
71        {
72            Ok(_) => Ok(()),
73            Err(_) => Err(funs.err().unauthorized("send_pwd", "activate", "send sms error", "403-iam-cert-valid")),
74        }
75    }
76}