merge authorization.rs with login_normal.rs
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
- merge authorization.rs with login_normal.rs - make get_user_id.rs return std::io::Result
This commit is contained in:
parent
7cf34e7b9a
commit
1468aa9354
|
@ -1,11 +1,14 @@
|
|||
use data_encoding::HEXUPPER;
|
||||
use ring::pbkdf2;
|
||||
use log::warn;
|
||||
use std::num::NonZeroU32;
|
||||
|
||||
use data_encoding::HEXUPPER;
|
||||
use ring::pbkdf2;
|
||||
|
||||
use crate::common::message::inst::CommandInst;
|
||||
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::db::cmd::get_user_hash::get_user_hash;
|
||||
use crate::server::db::cmd::get_user_id::get_user_id;
|
||||
|
@ -21,7 +24,26 @@ pub async fn acc_auth(
|
|||
sql_conn: &tokio_postgres::Client,
|
||||
tls_connection: &mut TlsStream<TcpStream>,
|
||||
message: &Message,
|
||||
) -> Result<(), ReturnFlags> {
|
||||
) -> std::io::Result<()> {
|
||||
/* assert recieved message */
|
||||
if !assert_msg(
|
||||
message,
|
||||
MessageType::Command,
|
||||
true,
|
||||
3,
|
||||
false,
|
||||
0,
|
||||
false,
|
||||
0,
|
||||
false,
|
||||
0,
|
||||
) && message.instruction == CommandInst::LoginMethod1 as i64
|
||||
&& message.data.len() != 0
|
||||
{
|
||||
warn!("LOGIN_INVALID_MESSAGE");
|
||||
return tls_connection.shutdown().await;
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse account data.
|
||||
* */
|
||||
|
@ -89,7 +111,22 @@ pub async fn acc_auth(
|
|||
);
|
||||
match email_ret.is_ok() {
|
||||
true => {}
|
||||
false => return Err(ReturnFlags::ServerAccUnauthorized),
|
||||
false => {
|
||||
let server_response = message_builder(
|
||||
MessageType::ServerReturn,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
bincode::serialize(&"Email Incorrect").unwrap(),
|
||||
);
|
||||
match tls_connection
|
||||
.write_all(&bincode::serialize(&server_response).unwrap())
|
||||
.await
|
||||
{
|
||||
_ => return Ok(()),
|
||||
};
|
||||
}
|
||||
};
|
||||
let pass_ret = pbkdf2::verify(
|
||||
pbkdf2::PBKDF2_HMAC_SHA512,
|
||||
|
@ -100,7 +137,22 @@ pub async fn acc_auth(
|
|||
);
|
||||
match pass_ret.is_ok() {
|
||||
true => {}
|
||||
false => return Err(ReturnFlags::ServerAccUnauthorized),
|
||||
false => {
|
||||
let server_response = message_builder(
|
||||
MessageType::ServerReturn,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
bincode::serialize(&"Password Incorrect").unwrap(),
|
||||
);
|
||||
match tls_connection
|
||||
.write_all(&bincode::serialize(&server_response).unwrap())
|
||||
.await
|
||||
{
|
||||
_ => return Ok(()),
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -118,7 +170,30 @@ pub async fn acc_auth(
|
|||
.duration_since(UNIX_EPOCH)
|
||||
.unwrap()
|
||||
.as_secs(),
|
||||
)?;
|
||||
);
|
||||
|
||||
/*
|
||||
* server failed to generate JWT token.
|
||||
* inform client about issue
|
||||
* */
|
||||
if jwt_token.is_err() {
|
||||
let server_response = message_builder(
|
||||
MessageType::ServerReturn,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
bincode::serialize(&"Login failed, try again later.").unwrap(),
|
||||
);
|
||||
match tls_connection
|
||||
.write_all(&bincode::serialize(&server_response).unwrap())
|
||||
.await
|
||||
{
|
||||
// We already failed,
|
||||
// we don't care if client doesn't recieve
|
||||
_ => return Ok(()),
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
* Send the JWT token
|
||||
|
@ -129,12 +204,12 @@ pub async fn acc_auth(
|
|||
1,
|
||||
0,
|
||||
0,
|
||||
jwt_token.as_bytes().to_vec(),
|
||||
jwt_token.unwrap().as_bytes().to_vec(),
|
||||
);
|
||||
tls_connection
|
||||
match tls_connection
|
||||
.write_all(bincode::serialize(&message).unwrap().as_slice())
|
||||
.await
|
||||
.expect("could not write to client");
|
||||
|
||||
Ok(())
|
||||
{
|
||||
_ => Ok(()), // Don't care if client doesn't receive
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use log::warn;
|
||||
use data_encoding::HEXUPPER;
|
||||
use log::warn;
|
||||
|
||||
use crate::common::message::inst::CommandInst;
|
||||
use crate::common::message::message_builder::message_builder;
|
||||
|
@ -117,16 +117,21 @@ pub async fn acc_create(
|
|||
* Inform cient that user already exists
|
||||
* Note: figure out if this is a security? issue
|
||||
*/
|
||||
let server_response =
|
||||
message_builder(MessageType::ServerReturn,
|
||||
0, 0, 0, 0,
|
||||
bincode::serialize(
|
||||
&format!("{:#?}", ReturnFlags::ServerAccUserExists)).unwrap());
|
||||
let server_response = message_builder(
|
||||
MessageType::ServerReturn,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
bincode::serialize(&format!("{:#?}", ReturnFlags::ServerAccUserExists)).unwrap(),
|
||||
);
|
||||
match tls_connection
|
||||
.write_all(&bincode::serialize(
|
||||
&server_response).unwrap()).await { // Don't care if user didn't recieve a reply
|
||||
_ => return Ok(())
|
||||
};
|
||||
.write_all(&bincode::serialize(&server_response).unwrap())
|
||||
.await
|
||||
{
|
||||
// Don't care if user didn't recieve a reply
|
||||
_ => return Ok(()),
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -155,15 +160,23 @@ pub async fn acc_create(
|
|||
/*
|
||||
* Send to client SQL result
|
||||
*/
|
||||
let server_response =
|
||||
message_builder(MessageType::ServerReturn,
|
||||
if creation_result.is_ok() { 1 } else { 0 },
|
||||
0, 0, 0,
|
||||
if creation_result.is_ok() { Vec::new() } else {
|
||||
bincode::serialize(&format!("{:#?}", creation_result)).unwrap()});
|
||||
let server_response = message_builder(
|
||||
MessageType::ServerReturn,
|
||||
if creation_result.is_ok() { 1 } else { 0 },
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
if creation_result.is_ok() {
|
||||
Vec::new()
|
||||
} else {
|
||||
bincode::serialize(&format!("{:#?}", creation_result)).unwrap()
|
||||
},
|
||||
);
|
||||
match tls_connection
|
||||
.write_all(&bincode::serialize(
|
||||
&server_response).unwrap()).await { // Don't care if user didn't recieve a reply
|
||||
_ => Ok(())
|
||||
}
|
||||
.write_all(&bincode::serialize(&server_response).unwrap())
|
||||
.await
|
||||
{
|
||||
// Don't care if user didn't recieve a reply
|
||||
_ => Ok(()),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ use crate::common::misc::return_flags::ReturnFlags;
|
|||
pub async fn get_user_id(
|
||||
sql_conn: &tokio_postgres::Client,
|
||||
username: &str,
|
||||
) -> Result<i64, ReturnFlags> {
|
||||
) -> std::io::Result<i64> {
|
||||
/* check that user exists */
|
||||
if user_exists(sql_conn, username).await {
|
||||
for row in sql_conn
|
||||
|
@ -19,5 +19,8 @@ pub async fn get_user_id(
|
|||
return Ok(row.get(0));
|
||||
}
|
||||
}
|
||||
Err(ReturnFlags::ServerGetUserIdNotFound)
|
||||
Err(std::io::Error::new(
|
||||
std::io::ErrorKind::NotFound,
|
||||
format!("{}", ReturnFlags::ServerGetUserIdNotFound),
|
||||
))
|
||||
}
|
||||
|
|
|
@ -1,56 +0,0 @@
|
|||
use log::warn;
|
||||
|
||||
use crate::common::message::inst::CommandInst;
|
||||
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::assert_msg::assert_msg;
|
||||
|
||||
use crate::server::account::authorization::acc_auth;
|
||||
|
||||
use tokio::io::AsyncWriteExt;
|
||||
use tokio::net::TcpStream;
|
||||
use tokio_rustls::server::TlsStream;
|
||||
|
||||
pub async fn login_normal(
|
||||
sql_conn: &tokio_postgres::Client,
|
||||
tls_connection: &mut TlsStream<TcpStream>,
|
||||
message: &Message,
|
||||
) -> std::io::Result<()> {
|
||||
/* assert recieved message */
|
||||
if !assert_msg(
|
||||
message,
|
||||
MessageType::Command,
|
||||
true,
|
||||
3,
|
||||
false,
|
||||
0,
|
||||
false,
|
||||
0,
|
||||
false,
|
||||
0,
|
||||
) && message.instruction == CommandInst::LoginMethod1 as i64
|
||||
&& message.data.len() != 0
|
||||
{
|
||||
warn!("LOGIN_INVALID_MESSAGE");
|
||||
return tls_connection.shutdown().await;
|
||||
}
|
||||
|
||||
/* call acc_auth() server version */
|
||||
match acc_auth(sql_conn, tls_connection, message).await {
|
||||
Ok(_) => Ok(()),
|
||||
Err(err) => {
|
||||
let server_response = message_builder(
|
||||
MessageType::ServerReturn,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
bincode::serialize(&err).unwrap(),
|
||||
);
|
||||
tls_connection
|
||||
.write_all(&bincode::serialize(&server_response).unwrap())
|
||||
.await
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
pub mod get_asset_data;
|
||||
pub mod get_asset_info;
|
||||
pub mod login_normal;
|
||||
pub mod purchase_asset;
|
||||
pub mod retrieve_portfolio;
|
||||
pub mod retrieve_transactions;
|
||||
|
|
|
@ -5,9 +5,9 @@ use crate::common::message::message::Message;
|
|||
use crate::common::message::message_builder::message_builder;
|
||||
use crate::common::message::message_type::MessageType;
|
||||
|
||||
use crate::server::account::authorization::acc_auth;
|
||||
use crate::server::account::creation::acc_create;
|
||||
|
||||
use crate::server::network::cmd::login_normal::login_normal;
|
||||
use crate::server::network::cmd::retrieve_portfolio::retrieve_portfolio;
|
||||
use crate::server::network::cmd::retrieve_transactions::retrieve_transactions;
|
||||
|
||||
|
@ -120,7 +120,7 @@ pub async fn handle_data(
|
|||
acc_create(sql_conn, socket, &client_msg).await
|
||||
}
|
||||
_ if client_msg.instruction == CommandInst::LoginMethod1 as i64 => {
|
||||
login_normal(sql_conn, socket, &client_msg).await
|
||||
acc_auth(sql_conn, socket, &client_msg).await
|
||||
}
|
||||
_ if client_msg.instruction == DataTransferInst::GetUserPortfolio as i64 => {
|
||||
retrieve_portfolio(socket, &client_msg).await
|
||||
|
|
Loading…
Reference in New Issue