merge retrieval_transaction.rs with retrieve_transactions.rs
continuous-integration/drone/push Build is passing Details

- remove src/libtrader/network/cmd folder entirely
- add investigate log discrepancy between server and client to todo
  board
This commit is contained in:
ayham 2021-08-06 10:53:15 +03:00
parent 7c5ebd00c5
commit 7413505375
Signed by: ayham
GPG Key ID: EAB7F5A9DF503678
6 changed files with 38 additions and 65 deletions

View File

@ -1,10 +1,11 @@
use log::warn;
use crate::common::account::transaction::Transaction;
use crate::common::message::inst::DataTransferInst;
use crate::common::message::message::Message;
use crate::common::message::message_builder::message_builder;
use crate::common::message::message_type::MessageType;
use crate::common::misc::return_flags::ReturnFlags;
use crate::common::misc::assert_msg::assert_msg;
use crate::server::network::jwt_wrapper::verify_jwt_token;
@ -14,16 +15,37 @@ use tokio_rustls::server::TlsStream;
pub async fn acc_retrieve_transaction(
sql_conn: &tokio_postgres::Client,
socket: &mut TlsStream<TcpStream>,
tls_connection: &mut TlsStream<TcpStream>,
message: &Message,
) -> Result<(), ReturnFlags> {
) -> std::io::Result<()> {
/* assert recieved message */
if !assert_msg(
message,
MessageType::DataTransfer,
true,
1,
false,
0,
false,
0,
false,
0,
) && message.instruction == DataTransferInst::GetUserTransactionHist as i64
&& message.data.len() != 0
{
warn!("RETRIEVE_TRANSACTION_INVALID_MESSAGE");
return tls_connection.shutdown().await;
}
/* verify JWT token */
let token = match verify_jwt_token(bincode::deserialize(&message.data).unwrap()) {
Ok(token) => token,
Err(_) => {
warn!("ACC_RETRIEVE_TRANSACTION_UNAUTH_TOKEN");
socket.shutdown().await.unwrap();
return Err(ReturnFlags::ServerAccUnauthorized);
tls_connection.shutdown().await.unwrap();
// Unauth aren't big deal,
// maybe later we can make more sophisticated DOS attack detection
return Ok(());
}
};
@ -55,10 +77,14 @@ pub async fn acc_retrieve_transaction(
0,
bincode::serialize(&transactions).unwrap(),
);
socket
match tls_connection
.write_all(&bincode::serialize(&message).unwrap())
.await
.map_err(|_| ReturnFlags::ServerRetrieveTransactionFailed)?;
Ok(())
{
Ok(()) => Ok(()),
Err(err) => {
warn!("Could not write to client! Error: {}", err);
Ok(())
}
}
}

View File

@ -1 +0,0 @@
pub mod retrieve_transactions;

View File

@ -1,51 +0,0 @@
use log::warn;
use std::io;
use crate::common::message::inst::DataTransferInst;
use crate::common::message::message::Message;
use crate::common::message::message_type::MessageType;
use crate::common::misc::assert_msg::assert_msg;
use crate::common::misc::return_flags::ReturnFlags;
use crate::server::account::retrieval_transaction::acc_retrieve_transaction;
use tokio::io::AsyncWriteExt;
use tokio::net::TcpStream;
use tokio_rustls::server::TlsStream;
pub async fn retrieve_transactions(
sql_conn: &tokio_postgres::Client,
tls_connection: &mut TlsStream<TcpStream>,
message: &Message,
) -> std::io::Result<()> {
/* assert recieved message */
if !assert_msg(
message,
MessageType::DataTransfer,
true,
1,
false,
0,
false,
0,
false,
0,
) && message.instruction == DataTransferInst::GetUserTransactionHist as i64
&& message.data.len() != 0
{
warn!("RETRIEVE_TRANSACTION_INVALID_MESSAGE");
return tls_connection.shutdown().await;
}
/* call acc_retrieve_transaction() server version */
match acc_retrieve_transaction(sql_conn, tls_connection, message).await {
Ok(_) => Ok(()),
Err(err) => {
warn!("RETRIEVE_TRANSACTION_FAILED: {}", err);
Err(io::Error::new(
io::ErrorKind::Other,
format!("{}: {}", ReturnFlags::ServerRetrieveTransactionFailed, err),
))
}
}
}

View File

@ -8,8 +8,7 @@ use crate::common::message::message_type::MessageType;
use crate::server::account::authorization::acc_auth;
use crate::server::account::creation::acc_create;
use crate::server::account::retrieval_portfolio::acc_retrieve_portfolio;
use crate::server::network::cmd::retrieve_transactions::retrieve_transactions;
use crate::server::account::retrieval_transaction::acc_retrieve_transaction;
use tokio::io::AsyncWriteExt;
use tokio::net::TcpStream;
@ -125,7 +124,7 @@ pub async fn handle_data(
acc_retrieve_portfolio(socket, &client_msg).await
}
_ if client_msg.instruction == DataTransferInst::GetUserTransactionHist as i64 => {
retrieve_transactions(sql_conn, socket, &client_msg).await
acc_retrieve_transaction(sql_conn, socket, &client_msg).await
}
_ => Ok(()),
}

View File

@ -1,4 +1,3 @@
pub mod cmd;
pub mod gen_tls_server_config;
pub mod handle_data;
pub mod jwt_wrapper;

View File

@ -1,5 +1,6 @@
## To do
- investigate server logging doesn't include location of log method caller
- create correct modules
* [ ] fix weird file naming
* [ ] fix namespace naming