mirror of
				https://gitlab.com/comunic/comunicapiv3
				synced 2025-10-30 15:14:42 +00:00 
			
		
		
		
	Get information about API client
This commit is contained in:
		
							
								
								
									
										11
									
								
								src/data/api_client.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/data/api_client.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| /// API client information | ||||
| /// | ||||
| /// @author Pierre HUBERT | ||||
|  | ||||
| #[derive(Debug)] | ||||
| pub struct APIClient { | ||||
|     pub id: u32, | ||||
|     pub name: String, | ||||
|     pub token: String, | ||||
|     pub domain: Option<String>, | ||||
| } | ||||
| @@ -5,6 +5,7 @@ use std::error::Error; | ||||
| use serde::Serialize; | ||||
| use crate::data::error::{ResultBoxError, ExecError}; | ||||
| use std::collections::HashMap; | ||||
| use crate::helpers::api_helper; | ||||
|  | ||||
| /// Http request handler | ||||
| /// | ||||
| @@ -82,18 +83,23 @@ impl HttpRequestHandler { | ||||
|         Err(Box::new(ExecError::new(&message))) | ||||
|     } | ||||
|  | ||||
|     /// If result is not OK, return a bad request | ||||
|     pub fn ok_or_bad_request<E>(&mut self, res: ResultBoxError<E>, msg: &str) -> ResultBoxError<E> { | ||||
|         match res { | ||||
|             Ok(e) => Ok(e), | ||||
|             Err(err) => { | ||||
|                 println!("Error leading to bad request: {}", err); | ||||
|                 self.bad_request(msg.to_string())?; | ||||
|                 unreachable!() | ||||
|             }, | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /// Get the path of the request | ||||
|     pub fn request_path(&self) -> String { | ||||
|         self.request.path().to_string() | ||||
|     } | ||||
|  | ||||
|     /// Check login tokens | ||||
|     pub fn check_client_token(&mut self) -> Result<(), Box<dyn Error>> { | ||||
|         println!("me = {}", self.post_string("me")?); | ||||
|  | ||||
|         Ok(()) | ||||
|     } | ||||
|  | ||||
|     /// Check if a POST parameter was present in the request or not | ||||
|     pub fn has_post_parameter(&self, name: &str) -> bool { | ||||
|         self.body.contains_key(name) | ||||
| @@ -116,7 +122,22 @@ impl HttpRequestHandler { | ||||
|             Some(s) => Ok(s.to_string()), | ||||
|             None => { | ||||
|                 Err(self.bad_request(format!("'{}' is not a string!", name)).unwrap_err()) | ||||
|             }, | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /// Check login tokens | ||||
|     pub fn check_client_token(&mut self) -> Result<(), Box<dyn Error>> { | ||||
|         let api_name = self.post_string("serviceName")?; | ||||
|         let api_token = self.post_string("serviceToken")?; | ||||
|  | ||||
|         let client = self.ok_or_bad_request( | ||||
|             api_helper::get_client(&api_name, &api_token), | ||||
|             "Client not recognized!" | ||||
|         )?; | ||||
|  | ||||
|         // TODO  : continue here | ||||
|         println!("{:#?}", client); | ||||
|         Ok(()) | ||||
|     } | ||||
| } | ||||
| @@ -3,3 +3,4 @@ pub mod config; | ||||
|  | ||||
| pub mod http_error; | ||||
| pub mod http_request_handler; | ||||
| pub mod api_client; | ||||
							
								
								
									
										6
									
								
								src/database_structure.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/database_structure.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| /// Database structure information | ||||
| /// | ||||
| /// @author Pierre Hubert | ||||
|  | ||||
| /// API services tokens table | ||||
| pub const SERVICES_TABLES : &str = "comunic_api_services_tokens"; | ||||
							
								
								
									
										27
									
								
								src/helpers/api_helper.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/helpers/api_helper.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| use crate::data::api_client::APIClient; | ||||
| use crate::helpers::database; | ||||
| use crate::helpers::database::QueryInfo; | ||||
| use crate::database_structure::SERVICES_TABLES; | ||||
| use crate::data::error::ResultBoxError; | ||||
|  | ||||
| /// API helper | ||||
| /// | ||||
| /// @author Pierre Hubert | ||||
|  | ||||
| /// Get information about a client | ||||
| pub fn get_client(name: &str, token: &str) -> ResultBoxError<APIClient> { | ||||
|     database::query_row( | ||||
|         QueryInfo::new(SERVICES_TABLES) | ||||
|             .cond("service_name", name) | ||||
|             .cond("token", token), | ||||
|  | ||||
|             |res| { | ||||
|                 Ok(APIClient { | ||||
|                     id: res.get_int64("id")? as u32, | ||||
|                     name: res.get_str("service_name")?, | ||||
|                     token: res.get_str("token")?, | ||||
|                     domain: res.get_optional_str("domain")?, | ||||
|                 }) | ||||
|             } | ||||
|     ) | ||||
| } | ||||
| @@ -125,6 +125,14 @@ impl<'a> RowResult<'a> { | ||||
|             Some(s) => Ok(s) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /// Get an optional string | ||||
|     pub fn get_optional_str(&self, name: &str) -> Result<Option<String>, ExecError> { | ||||
|         match self.find_col(name) { | ||||
|             Ok(col) => Ok(self.row.get(col)), | ||||
|             Err(_) => Ok(None), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -1 +1,3 @@ | ||||
| pub mod database; | ||||
| pub mod database; | ||||
|  | ||||
| pub mod api_helper; | ||||
| @@ -1,3 +1,4 @@ | ||||
| pub mod data; | ||||
| pub mod helpers; | ||||
| pub mod controllers; | ||||
| pub mod controllers; | ||||
| pub mod database_structure; | ||||
		Reference in New Issue
	
	Block a user