chiral_client/api/
token.rs1use tonic::transport::Channel;
2use tonic::{Request, metadata::MetadataValue};
3use std::str::FromStr;
4use crate::api::client::chiral::chiral_client::ChiralClient;
5use crate::api::client::chiral::RequestUserCommunicate;
6
7
8
9pub async fn get_token_api(client: &mut ChiralClient<Channel>, email: &str, token_auth: &str)-> Result<serde_json::Value, Box<dyn std::error::Error>>{
10 let end_point = "GetTokenAPI";
11 let serialized = format!("{{\"{end_point}\": null}}");
12
13 let req_msg = RequestUserCommunicate{
14 serialized_request : serialized.clone(),
15 };
16 let mut request = Request::new(req_msg);
17
18 request.metadata_mut().insert("user_id", MetadataValue::from_str(email)?);
19 request.metadata_mut().insert("auth_token", MetadataValue::from_str(token_auth)?);
20
21 let response = client.user_communicate(request).await?.into_inner();
22 if !response.serialized_reply.trim().is_empty() {
23 let parsed: serde_json::Value = serde_json::from_str(&response.serialized_reply)?;
24 if let Some(result) = parsed.get(end_point) {
25 return Ok(result.clone());
26 } else {
27 return Err("Missing endpoint data in server response".into());
28 }
29 }
30
31 if !response.error.trim().is_empty() {
32 return Err(format!("Server error: {}", response.error).into());
33 }
34
35 Err("Unexpected empty response from server".into())
36}
37
38
39pub async fn refresh_token_api(client: &mut ChiralClient<Channel>, email: &str, token_auth: &str)-> Result<serde_json::Value, Box<dyn std::error::Error>>{
40 let end_point = "RefreshTokenAPI";
41 let serialized = format!("{{\"{end_point}\": null}}");
42
43 let req_msg = RequestUserCommunicate{
44 serialized_request : serialized.clone(),
45 };
46 let mut request = Request::new(req_msg);
47
48 request.metadata_mut().insert("user_id", MetadataValue::from_str(email)?);
49 request.metadata_mut().insert("auth_token", MetadataValue::from_str(token_auth)?);
50
51 let response = client.user_communicate(request).await?.into_inner();
52 if !response.serialized_reply.trim().is_empty() {
53 let parsed: serde_json::Value = serde_json::from_str(&response.serialized_reply)?;
54 if let Some(result) = parsed.get(end_point) {
55 return Ok(result.clone());
56 } else {
57 return Err("Missing endpoint data in server response".into());
58 }
59 }
60
61 if !response.error.trim().is_empty() {
62 return Err(format!("Server error: {}", response.error).into());
63 }
64
65 Err("Unexpected empty response from server".into())
66}
67
68#[cfg(test)]
69mod tests{
70 use super::*;
71 use crate::api::create_client;
72 use dotenvy;
73
74 #[tokio::test]
75 async fn test_get_token_api(){
76 dotenvy::from_filename(".env.staging").ok();
77 let url = std::env::var("CHIRAL_STAGING_API_URL").expect("Missing env").trim() .to_string();
78 let email = std::env::var("TEST_EMAIL").expect("Missing env").trim() .to_string();
79 let token_auth = std::env::var("TEST_TOKEN_AUTH").expect("Missing env").trim() .to_string();
80
81 let mut client = create_client(&url).await.expect("Failed to create API client.");
82 let token_api = get_token_api(&mut client, &email, &token_auth).await.expect("Getting Token Failed");
83 assert!(!token_api.is_null(), "Returned token API is null");
84 }
85
86 #[tokio::test]
87 async fn test_refresh_token_api(){
88 dotenvy::from_filename(".env.staging").ok();
89 let url = std::env::var("CHIRAL_STAGING_API_URL").expect("Missing env").trim() .to_string();
90 let email = std::env::var("TEST_EMAIL").expect("Missing env").trim() .to_string();
91 let token_auth = std::env::var("TEST_TOKEN_AUTH").expect("Missing env").trim() .to_string();
92
93 let mut client = create_client(&url).await.expect("Failed to create API client.");
94 let refreshed_token = refresh_token_api(&mut client, &email, &token_auth).await.expect("Failed to refresh Token");
95 assert!(!refreshed_token.is_null(),"Refreshed token API is null");
96 }
97}