示例#1
0
 public function decrypt(ResourceInterface $resource, BackendInterface $backend, array $options = array())
 {
     foreach ($resource as $file) {
         if (!$file->isCrypted()) {
             $file->setSourceFile($file->getTargetFile());
         }
     }
     $files = $resource->getEncryptedPaths();
     $io = $backend->getIo();
     $metadata = $backend->getMetadata();
     $defaultArguments = $this->getDefaultArguments(isset($options['write']) ? $options['write'] : false, $io->isVerbose());
     if (!$metadata->asymmetric) {
         $isOk = false;
         while (!$isOk) {
             $passphrase = $io->askHiddenResponse('Enter passphrase: ');
             $command = sprintf('gpg --no-use-agent %s --passphrase "%s" --decrypt-files %s', $defaultArguments, $passphrase, implode(' ', $files));
             try {
                 $this->exec($io, 'Decrypt files', $command, null, false);
                 $isOk = true;
             } catch (\Exception $e) {
             }
         }
     } else {
         $command = sprintf('gpg %s --decrypt-files %s', $defaultArguments, implode(' ', $files));
         $this->exec($io, 'Decrypt files', $command);
     }
     if (isset($options['write']) && $options['write']) {
         $resource->readTargetContent();
     }
     return $resource;
 }
示例#2
0
文件: File.php 项目: rezzza/vaultage
 /**
  * {@inheritdoc}
  */
 public function decrypt(ResourceInterface $resource, BackendInterface $backend, array $options = array())
 {
     $processed = false;
     $metadata = $backend->getMetadata();
     while (!$processed) {
         if ($metadata->needsPassphrase) {
             $metadata->passphrase = $backend->getIo()->askHiddenResponse('Enter passphrase: ');
         } else {
             // there is no way of misstyping, retry will make a infinite loop.
             $processed = true;
         }
         if (!$resource->isCrypted()) {
             $resource->setSourceFile($resource->getTargetFile());
         }
         $cipher = new Cipher();
         try {
             $resource->setTargetContent($cipher->decrypt($resource->getSourceContent(), $metadata));
             $processed = true;
         } catch (\Exception $e) {
             throw new BadCredentialsException('Bad credentials');
         }
     }
     return $resource;
 }