protected function execute(InputInterface $input, OutputInterface $output)
 {
     $configHelper = $this->getHelper('configuration');
     /* @var $configHelper GlobalConfigurationHelper */
     $processHelper = $this->getHelper('process');
     /* @var $processHelper ProcessHelper */
     if ($output instanceof ConsoleOutput) {
         $stderr = $output->getErrorOutput();
     } else {
         $stderr = $output;
     }
     $sshDir = $configHelper->getConfiguration()->getSshDirectory();
     $keyFile = new \SplFileInfo($input->getArgument('key') ?: $sshDir . '/id_rsa-' . sha1(mt_rand() . time()));
     // Check if file already exists
     try {
         $keyFile->getType();
         // Throws if file does not exist.
         throw new FileExistsException($keyFile);
     } catch (\RuntimeException $ex) {
         // noop
     }
     OutsideConfiguredRootDirectoryException::assert($keyFile, 'ssh-dir', $configHelper->getConfiguration()->getSshDirectory());
     $sshKeygen = ProcessBuilder::create(['ssh-keygen', '-q', '-f', $keyFile, '-C', $input->getOption('comment'), '-N', ''])->setTimeout(null)->getProcess();
     $processHelper->mustRun($output, $sshKeygen);
     $stderr->writeln(sprintf('Generated key <info>%s</info>', $keyFile->getPathname()), OutputInterface::VERBOSITY_VERBOSE);
     if ($input->getOption('print-public-key')) {
         $output->write(file_get_contents($keyFile->getPathname() . '.pub'), false, OutputInterface::OUTPUT_RAW | OutputInterface::VERBOSITY_QUIET);
     }
     if ($input->getOption('target-repository')) {
         $this->getApplication()->find('repository:add')->run(new ArrayInput(['repository' => $input->getOption('target-repository'), 'key' => $keyFile->getPathname(), '--alias' => preg_replace('/^id_rsa-/', '', $keyFile->getFilename())]), $output);
     }
 }
 /**
  * @return string
  */
 public function getPath()
 {
     $path = $this->globalConfiguration->getApplicationsDirectory() . '/' . $this->getName();
     OutsideConfiguredRootDirectoryException::assert($path, 'applications-dir', $this->globalConfiguration->getApplicationsDirectory());
     return $path;
 }
 public function getLink()
 {
     $link = new \SplFileInfo($this->globalConfiguration->getVhostsDirectory() . '/' . $this->getName());
     OutsideConfiguredRootDirectoryException::assert($link->getPathname(), 'vhosts-dir', $this->globalConfiguration->getVhostsDirectory());
     return $link;
 }