Move creating inboxes directory to register_client function

This commit is contained in:
aniampio
2019-12-17 11:49:22 +01:00
parent 0b3ce4739b
commit 63f30bf9d0
2 changed files with 20 additions and 9 deletions
+20 -6
View File
@@ -66,7 +66,7 @@ impl ClientRequestProcessor {
println!("Received the following request: {:?}", client_request);
match client_request {
ProviderRequests::Register(req) => {
Ok(ClientRequestProcessor::register_new_client(req, &mut processing_data.read().unwrap().registered_clients_ledger.clone())?.to_bytes())
Ok(ClientRequestProcessor::register_new_client(req, processing_data.read().unwrap().store_dir.as_path(),&mut processing_data.read().unwrap().registered_clients_ledger.clone())?.to_bytes())
},
ProviderRequests::PullMessages(req) => {
Ok(ClientRequestProcessor::process_pull_messages_request(
@@ -88,14 +88,26 @@ impl ClientRequestProcessor {
Ok(PullResponse::new(retrieved_messages))
}
fn register_new_client(req:RegisterRequest, registered_client_ledger: &mut HashMap<Vec<u8>, Vec<u8>>) -> Result<RegisterResponse, ClientProcessingError>{
fn register_new_client(req:RegisterRequest, store_dir: &Path, registered_client_ledger: &mut HashMap<Vec<u8>, Vec<u8>>) -> Result<RegisterResponse, ClientProcessingError>{
println!("Processing register new client request!");
let auth_token = ClientRequestProcessor::generate_new_auth_token(req.destination_address.to_vec());
registered_client_ledger.insert(auth_token.value.clone(), req.destination_address.to_vec());
ClientRequestProcessor::create_storage_dir(req.destination_address, store_dir);
Ok(RegisterResponse::new(auth_token.value))
}
fn create_storage_dir(client_address : sphinx::route::DestinationAddressBytes, store_dir: &Path) -> io::Result<()>{
let client_dir_name = hex::encode(client_address);
let full_store_dir = store_dir.join(client_dir_name);
let full_store_path = full_store_dir.join(ClientStorage::generate_random_file_name());
std::fs::create_dir_all(full_store_dir)?;
Ok(())
}
fn generate_new_auth_token(data: Vec<u8>) -> AuthToken{
// TODO: We can use hmac with providers secret key to have HMAC instead of SHA
let mut sha256Hasher = Sha256::new();
@@ -114,12 +126,13 @@ mod register_new_client {
fn registers_new_auth_token_for_each_new_client(){
let req1 = RegisterRequest{destination_address: [1u8; 32]};
let mut registered_client_ledger: HashMap<Vec<u8>, Vec<u8>> = HashMap::new();
let store_dir = Path::new("./foo/bar.txt");
assert_eq!(0, registered_client_ledger.len());
ClientRequestProcessor::register_new_client(req1, &mut registered_client_ledger);
ClientRequestProcessor::register_new_client(req1, &store_dir, &mut registered_client_ledger);
assert_eq!(1, registered_client_ledger.len());
let req2 = RegisterRequest{destination_address: [2u8; 32]};
ClientRequestProcessor::register_new_client(req2, &mut registered_client_ledger);
ClientRequestProcessor::register_new_client(req2, &store_dir, &mut registered_client_ledger);
assert_eq!(2, registered_client_ledger.len());
}
@@ -127,9 +140,10 @@ mod register_new_client {
fn registers_given_token_only_once() {
let req1 = RegisterRequest{destination_address: [1u8; 32]};
let mut registered_client_ledger: HashMap<Vec<u8>, Vec<u8>> = HashMap::new();
ClientRequestProcessor::register_new_client(req1, &mut registered_client_ledger);
let store_dir = Path::new("./foo/bar.txt");
ClientRequestProcessor::register_new_client(req1, &store_dir, &mut registered_client_ledger);
let req2 = RegisterRequest{destination_address: [1u8; 32]};
ClientRequestProcessor::register_new_client(req2, &mut registered_client_ledger);
ClientRequestProcessor::register_new_client(req2, &store_dir, &mut registered_client_ledger);
assert_eq!(1, registered_client_ledger.len())
}
}
-3
View File
@@ -68,9 +68,6 @@ impl ClientStorage {
// TODO: what to do with surbIDs??
// TODO: this should be called when client sends 'register' request!
std::fs::create_dir_all(full_store_dir)?;
// we can use normal io here, no need for tokio as it's all happening in one thread per connection
let mut file = File::create(full_store_path)?;
file.write_all(store_data.message.as_ref())?;