From e5472198244a2d27644ce97c82c2db2d65d04c98 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Mon, 22 Jun 2020 08:42:51 +0200 Subject: [PATCH] Generate new file name --- src/data/http_request_handler.rs | 5 +++-- src/utils/user_data_utils.rs | 26 +++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/data/http_request_handler.rs b/src/data/http_request_handler.rs index d21bdb0..13131b7 100644 --- a/src/data/http_request_handler.rs +++ b/src/data/http_request_handler.rs @@ -15,7 +15,7 @@ use crate::data::error::{ExecError, ResultBoxError}; use crate::data::user::UserID; use crate::helpers::{account_helper, api_helper, conversations_helper, user_helper}; use crate::utils::virtual_directories_utils::check_virtual_directory; -use crate::utils::user_data_utils::prepare_file_creation; +use crate::utils::user_data_utils::{prepare_file_creation, generate_new_user_data_file_name}; /// Http request handler /// @@ -280,8 +280,9 @@ impl HttpRequestHandler { let file = self.post_file(name)?; let target_user_data_folder = prepare_file_creation(self.user_id()?, folder)?; + let target_file_path = generate_new_user_data_file_name(target_user_data_folder.as_path(), "png")?; - Ok(target_user_data_folder.to_str().unwrap().to_string()) + Ok(target_file_path.to_str().unwrap().to_string()) } /// Get an integer included in the POST request diff --git a/src/utils/user_data_utils.rs b/src/utils/user_data_utils.rs index 9b1d854..ee5d448 100644 --- a/src/utils/user_data_utils.rs +++ b/src/utils/user_data_utils.rs @@ -2,12 +2,15 @@ //! //! @author Pierre Hubert -use crate::data::config::conf; -use crate::data::error::ResultBoxError; -use crate::data::user::UserID; use std::path::{Path, PathBuf}; + use serde_json::to_string; +use crate::data::config::conf; +use crate::data::error::{ExecError, ResultBoxError}; +use crate::data::user::UserID; +use crate::utils::crypt_utils::rand_str; + /// Get the full URL to a user data file /// /// `uri` should contain the path to the target resource @@ -41,4 +44,21 @@ pub fn prepare_file_creation(user_id: UserID, folder: &str) -> ResultBoxError ResultBoxError { + let sys_dir = user_data_path(&dir); + + if !sys_dir.exists() { + return Err(ExecError::boxed_string(format!("Directory {:?} does not exists!", dir))); + } + + loop { + let file = format!("{}.{}", rand_str(30), ext); + + if !sys_dir.join(&file).exists() { + return Ok(dir.join(&file)); + } + } } \ No newline at end of file