bios_iam/basic/serv/clients/
sms_client.rs1use 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 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}