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; }
/** * {@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; }