chiral_client/api/
token.rs

1use 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}