forked from NationTech/harmony
		
	fix: Make sure directory exists before uploading file in opnsense http
This commit is contained in:
		
							parent
							
								
									da6610c625
								
							
						
					
					
						commit
						2618441de3
					
				| @ -1,5 +1,6 @@ | |||||||
| use std::{ | use std::{ | ||||||
|     net::IpAddr, |     net::IpAddr, | ||||||
|  |     path::Path, | ||||||
|     sync::Arc, |     sync::Arc, | ||||||
|     time::{SystemTime, UNIX_EPOCH}, |     time::{SystemTime, UNIX_EPOCH}, | ||||||
| }; | }; | ||||||
| @ -48,7 +49,6 @@ impl OPNsenseShell for SshOPNSenseShell { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     async fn write_content_to_file(&self, content: &str, filename: &str) -> Result<String, Error> { |     async fn write_content_to_file(&self, content: &str, filename: &str) -> Result<String, Error> { | ||||||
|         // TODO fix this to create the directory before uploading the file
 |  | ||||||
|         let channel = self.get_ssh_channel().await?; |         let channel = self.get_ssh_channel().await?; | ||||||
|         channel |         channel | ||||||
|             .request_subsystem(true, "sftp") |             .request_subsystem(true, "sftp") | ||||||
| @ -58,6 +58,14 @@ impl OPNsenseShell for SshOPNSenseShell { | |||||||
|             .await |             .await | ||||||
|             .expect("Should acquire sftp subsystem"); |             .expect("Should acquire sftp subsystem"); | ||||||
| 
 | 
 | ||||||
|  |         if let Some(parent) = Path::new(filename).parent() { | ||||||
|  |             if let Some(parent_str) = parent.to_str() { | ||||||
|  |                 if !parent_str.is_empty() { | ||||||
|  |                     self.ensure_remote_dir_exists(&sftp, parent_str).await?; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         let mut file = sftp.create(filename).await.unwrap(); |         let mut file = sftp.create(filename).await.unwrap(); | ||||||
|         file.write_all(content.as_bytes()).await?; |         file.write_all(content.as_bytes()).await?; | ||||||
| 
 | 
 | ||||||
| @ -74,10 +82,7 @@ impl OPNsenseShell for SshOPNSenseShell { | |||||||
|             .await |             .await | ||||||
|             .expect("Should acquire sftp subsystem"); |             .expect("Should acquire sftp subsystem"); | ||||||
| 
 | 
 | ||||||
|         if !sftp.try_exists(destination).await? { |         self.ensure_remote_dir_exists(&sftp, destination).await?; | ||||||
|             info!("Creating remote directory {destination}"); |  | ||||||
|             sftp.create_dir(destination).await?; |  | ||||||
|         } |  | ||||||
| 
 | 
 | ||||||
|         info!("Reading local directory {source}"); |         info!("Reading local directory {source}"); | ||||||
|         let mut entries = read_dir(source).await?; |         let mut entries = read_dir(source).await?; | ||||||
| @ -154,6 +159,18 @@ impl SshOPNSenseShell { | |||||||
|         wait_for_completion(&mut channel).await |         wait_for_completion(&mut channel).await | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     async fn ensure_remote_dir_exists( | ||||||
|  |         &self, | ||||||
|  |         sftp: &SftpSession, | ||||||
|  |         path: &str, | ||||||
|  |     ) -> Result<(), Error> { | ||||||
|  |         if !sftp.try_exists(path).await? { | ||||||
|  |             info!("Creating remote directory {path}"); | ||||||
|  |             sftp.create_dir(path).await?; | ||||||
|  |         } | ||||||
|  |         Ok(()) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     pub fn new(host: (IpAddr, u16), credentials: SshCredentials, ssh_config: Arc<Config>) -> Self { |     pub fn new(host: (IpAddr, u16), credentials: SshCredentials, ssh_config: Arc<Config>) -> Self { | ||||||
|         info!("Initializing SshOPNSenseShell on host {host:?}"); |         info!("Initializing SshOPNSenseShell on host {host:?}"); | ||||||
|         Self { |         Self { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user