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