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