| 
					
					
						
							
						
					
					
				 | 
				@ -8,7 +8,7 @@ use std::thread::sleep; | 
			
		
		
	
		
			
				 | 
				 | 
				use std::time::Duration;
 | 
				 | 
				 | 
				use std::time::Duration;
 | 
			
		
		
	
		
			
				 | 
				 | 
				use std::ops::Deref;
 | 
				 | 
				 | 
				use std::ops::Deref;
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				use command_runner::CommandRunner;
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				use command_runner::{CommandRunner, SetuidCommandRunner};
 | 
			
		
		
	
		
			
				 | 
				 | 
				use resources::Resource;
 | 
				 | 
				 | 
				use resources::Resource;
 | 
			
		
		
	
		
			
				 | 
				 | 
				use symbols::Symbol;
 | 
				 | 
				 | 
				use symbols::Symbol;
 | 
			
		
		
	
		
			
				 | 
				 | 
				use symbols::file::File as FileSymbol;
 | 
				 | 
				 | 
				use symbols::file::File as FileSymbol;
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -52,15 +52,15 @@ impl<E: Error> fmt::Display for NodeJsSystemdUserServiceError<E> { | 
			
		
		
	
		
			
				 | 
				 | 
				  }
 | 
				 | 
				 | 
				  }
 | 
			
		
		
	
		
			
				 | 
				 | 
				}
 | 
				 | 
				 | 
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				pub struct NodeJsSystemdUserService<'a, C> where C: Deref<Target=str> {
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				pub struct NodeJsSystemdUserService<'a, C, R> where C: Deref<Target=str>, R: CommandRunner {
 | 
			
		
		
	
		
			
				 | 
				 | 
				  service_name: &'a str,
 | 
				 | 
				 | 
				  service_name: &'a str,
 | 
			
		
		
	
		
			
				 | 
				 | 
				  user_name: &'a str,
 | 
				 | 
				 | 
				  user_name: &'a str,
 | 
			
		
		
	
		
			
				 | 
				 | 
				  command_runner: &'a CommandRunner,
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				  command_runner: R,
 | 
			
		
		
	
		
			
				 | 
				 | 
				  file: FileSymbol<C, String>
 | 
				 | 
				 | 
				  file: FileSymbol<C, String>
 | 
			
		
		
	
		
			
				 | 
				 | 
				}
 | 
				 | 
				 | 
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				impl<'a> NodeJsSystemdUserService<'a, String> {
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				  pub fn new(home: &'a str, user_name: &'a str, name: &'a str, path: &'a str, command_runner: &'a CommandRunner) -> Self {
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				impl<'a, R> NodeJsSystemdUserService<'a, String, SetuidCommandRunner<'a, R>> where R: CommandRunner {
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				  pub fn new(home: &'a str, user_name: &'a str, name: &'a str, path: &'a str, command_runner: &'a R) -> Self {
 | 
			
		
		
	
		
			
				 | 
				 | 
				    let file_path = format!("{}/.config/systemd/user/{}.service", home.trim_right(), name);
 | 
				 | 
				 | 
				    let file_path = format!("{}/.config/systemd/user/{}.service", home.trim_right(), name);
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				    let content = format!("[Service]
 | 
				 | 
				 | 
				    let content = format!("[Service]
 | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -81,13 +81,13 @@ WantedBy=default.target | 
			
		
		
	
		
			
				 | 
				 | 
				    NodeJsSystemdUserService {
 | 
				 | 
				 | 
				    NodeJsSystemdUserService {
 | 
			
		
		
	
		
			
				 | 
				 | 
				      service_name: name,
 | 
				 | 
				 | 
				      service_name: name,
 | 
			
		
		
	
		
			
				 | 
				 | 
				      user_name: user_name,
 | 
				 | 
				 | 
				      user_name: user_name,
 | 
			
		
		
	
		
			
				 | 
				 | 
				      command_runner: command_runner,
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				      command_runner: SetuidCommandRunner::new(user_name, command_runner),
 | 
			
		
		
	
		
			
				 | 
				 | 
				      file: FileSymbol::new(file_path, content)
 | 
				 | 
				 | 
				      file: FileSymbol::new(file_path, content)
 | 
			
		
		
	
		
			
				 | 
				 | 
				    }
 | 
				 | 
				 | 
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
				  }
 | 
				 | 
				 | 
				  }
 | 
			
		
		
	
		
			
				 | 
				 | 
				}
 | 
				 | 
				 | 
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				impl<'a, C> NodeJsSystemdUserService<'a, C> where C: Deref<Target=str> {
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				impl<'a, C, R> NodeJsSystemdUserService<'a, C, R> where C: Deref<Target=str>, R: CommandRunner {
 | 
			
		
		
	
		
			
				 | 
				 | 
				  fn check_if_service(&self) -> Result<bool, Box<Error>> {
 | 
				 | 
				 | 
				  fn check_if_service(&self) -> Result<bool, Box<Error>> {
 | 
			
		
		
	
		
			
				 | 
				 | 
				    loop {
 | 
				 | 
				 | 
				    loop {
 | 
			
		
		
	
		
			
				 | 
				 | 
				      // Check if service is registered
 | 
				 | 
				 | 
				      // Check if service is registered
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -131,7 +131,7 @@ fn wait_for_metadata(file_name: &str) -> Result<Metadata, Box<Error>> { | 
			
		
		
	
		
			
				 | 
				 | 
				  Ok(result)
 | 
				 | 
				 | 
				  Ok(result)
 | 
			
		
		
	
		
			
				 | 
				 | 
				}
 | 
				 | 
				 | 
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				impl<'a, C> Symbol for NodeJsSystemdUserService<'a, C> where C: Deref<Target=str> {
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				impl<'a, C, R> Symbol for NodeJsSystemdUserService<'a, C, R> where C: Deref<Target=str>, R: CommandRunner {
 | 
			
		
		
	
		
			
				 | 
				 | 
				  fn target_reached(&self) -> Result<bool, Box<Error>> {
 | 
				 | 
				 | 
				  fn target_reached(&self) -> Result<bool, Box<Error>> {
 | 
			
		
		
	
		
			
				 | 
				 | 
				    if !(try!(self.file.target_reached())) {
 | 
				 | 
				 | 
				    if !(try!(self.file.target_reached())) {
 | 
			
		
		
	
		
			
				 | 
				 | 
				      return Ok(false);
 | 
				 | 
				 | 
				      return Ok(false);
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -163,7 +163,7 @@ impl<'a, C> Symbol for NodeJsSystemdUserService<'a, C> where C: Deref<Target=str | 
			
		
		
	
		
			
				 | 
				 | 
				  }
 | 
				 | 
				 | 
				  }
 | 
			
		
		
	
		
			
				 | 
				 | 
				}
 | 
				 | 
				 | 
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				impl<'a, C> fmt::Display for NodeJsSystemdUserService<'a, C> where C: Deref<Target=str> {
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				impl<'a, C, R> fmt::Display for NodeJsSystemdUserService<'a, C, R> where C: Deref<Target=str>, R: CommandRunner {
 | 
			
		
		
	
		
			
				 | 
				 | 
				  fn fmt(&self, f: &mut fmt::Formatter) -> Result<(),fmt::Error>{
 | 
				 | 
				 | 
				  fn fmt(&self, f: &mut fmt::Formatter) -> Result<(),fmt::Error>{
 | 
			
		
		
	
		
			
				 | 
				 | 
				    write!(f, "Systemd Node.js user service unit for {}", self.service_name)
 | 
				 | 
				 | 
				    write!(f, "Systemd Node.js user service unit for {}", self.service_name)
 | 
			
		
		
	
		
			
				 | 
				 | 
				  }
 | 
				 | 
				 | 
				  }
 | 
			
		
		
	
	
		
			
				| 
					
					
					
				 | 
				
  |