vendor/kunstmaan/utilities-bundle/Command/CipherCommand.php line 17

Open in your IDE?
  1. <?php
  2. namespace Kunstmaan\UtilitiesBundle\Command;
  3. use Kunstmaan\UtilitiesBundle\Helper\Cipher\CipherInterface;
  4. use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
  5. use Symfony\Component\Console\Input\InputInterface;
  6. use Symfony\Component\Console\Output\OutputInterface;
  7. use Symfony\Component\Console\Question\ChoiceQuestion;
  8. use Symfony\Component\Console\Question\Question;
  9. use Symfony\Component\Filesystem\Filesystem;
  10. /**
  11.  * @final since 5.1
  12.  * NEXT_MAJOR extend from `Command` and remove `$this->getContainer` usages
  13.  */
  14. class CipherCommand extends ContainerAwareCommand
  15. {
  16.     /**
  17.      * @var CipherInterface
  18.      */
  19.     private $cipher;
  20.     private static $methods = [
  21.         => 'Encrypt text',
  22.         => 'Decrypt text',
  23.         => 'Encrypt file',
  24.         => 'Decrypt file',
  25.     ];
  26.     /**
  27.      * @param CipherInterface|null $cipher
  28.      */
  29.     public function __construct(/* CipherInterface */ $cipher null)
  30.     {
  31.         parent::__construct();
  32.         if (!$cipher instanceof CipherInterface) {
  33.             @trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version symfony 3.4 and will be removed in symfony 4.0. If the command was registered by convention, make it a service instead. '__METHOD__), E_USER_DEPRECATED);
  34.             $this->setName(null === $cipher 'kuma:cipher' $cipher);
  35.             return;
  36.         }
  37.         $this->cipher $cipher;
  38.     }
  39.     protected function configure()
  40.     {
  41.         $this->setName('kuma:cipher')->setDescription('Cipher utilities commands.');
  42.     }
  43.     protected function execute(InputInterface $inputOutputInterface $output)
  44.     {
  45.         if (null === $this->cipher) {
  46.             $this->cipher $this->getContainer()->get('kunstmaan_utilities.cipher');
  47.         }
  48.         $helper $this->getHelper('question');
  49.         $question = new ChoiceQuestion(
  50.             'Please select the method you want to use',
  51.             self::$methods,
  52.             0
  53.         );
  54.         $question->setErrorMessage('Method %s is invalid.');
  55.         $method $helper->ask($input$output$question);
  56.         $method array_search($methodself::$methodstrue);
  57.         switch ($method) {
  58.             case 0:
  59.             case 1:
  60.                 $question = new Question('Please enter the text: ');
  61.                 $question->setValidator(function ($value) {
  62.                     if (trim($value) === '') {
  63.                         throw new \Exception('The text cannot be empty');
  64.                     }
  65.                     return $value;
  66.                 });
  67.                 $question->setMaxAttempts(3);
  68.                 $text $helper->ask($input$output$question);
  69.                 $text $method === $this->cipher->encrypt($text) : $this->cipher->decrypt($text);
  70.                 $output->writeln(sprintf('Result: %s'$text));
  71.                 break;
  72.             case 2:
  73.             case 3:
  74.             $fs = new Filesystem();
  75.             $question = new Question('Please enter the input file path: ');
  76.                 $question->setValidator(function ($value) use ($fs) {
  77.                     if (trim($value) === '') {
  78.                         throw new \Exception('The input file path cannot be empty');
  79.                     }
  80.                     if (false === $fs->exists($value)) {
  81.                         throw new \Exception('The input file must exists');
  82.                     }
  83.                     if (is_dir($value)) {
  84.                         throw new \Exception('The input file cannot be a dir');
  85.                     }
  86.                     return $value;
  87.                 });
  88.                 $question->setMaxAttempts(3);
  89.                 $inputFilePath $helper->ask($input$output$question);
  90.                 $question = new Question('Please enter the output file path: ');
  91.                 $question->setValidator(function ($value) {
  92.                     if (trim($value) === '') {
  93.                         throw new \Exception('The output file path cannot be empty');
  94.                     }
  95.                     if (is_dir($value)) {
  96.                         throw new \Exception('The output file path cannot be a dir');
  97.                     }
  98.                     return $value;
  99.                 });
  100.                 $question->setMaxAttempts(3);
  101.                 $outputFilePath $helper->ask($input$output$question);
  102.                 if ($method === 2) {
  103.                     $this->cipher->encryptFile($inputFilePath$outputFilePath);
  104.                 } else {
  105.                     if (false === $fs->exists($outputFilePath)) {
  106.                         $fs->touch($outputFilePath);
  107.                     }
  108.                     $this->cipher->decryptFile($inputFilePath$outputFilePath);
  109.                 }
  110.                 $output->writeln(sprintf('Check "%s" to see result'$outputFilePath));
  111.                 break;
  112.         }
  113.         return 0;
  114.     }
  115. }