diff options
Diffstat (limited to 'vendor/guzzle/guzzle/src/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php')
-rw-r--r-- | vendor/guzzle/guzzle/src/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/vendor/guzzle/guzzle/src/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php b/vendor/guzzle/guzzle/src/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php new file mode 100644 index 0000000..8512424 --- /dev/null +++ b/vendor/guzzle/guzzle/src/Guzzle/Plugin/Md5/CommandContentMd5Plugin.php @@ -0,0 +1,57 @@ +<?php + +namespace Guzzle\Plugin\Md5; + +use Guzzle\Common\Event; +use Guzzle\Http\Message\EntityEnclosingRequestInterface; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; + +/** + * Listener used to add a ContentMD5 header to the body of a command and adds ContentMD5 validation if the + * ValidateMD5 option is not set to false on a command + */ +class CommandContentMd5Plugin implements EventSubscriberInterface +{ + /** @var string Parameter used to check if the ContentMD5 value is being added */ + protected $contentMd5Param; + + /** @var string Parameter used to check if validation should occur on the response */ + protected $validateMd5Param; + + /** + * @param string $contentMd5Param Parameter used to check if the ContentMD5 value is being added + * @param string $validateMd5Param Parameter used to check if validation should occur on the response + */ + public function __construct($contentMd5Param = 'ContentMD5', $validateMd5Param = 'ValidateMD5') + { + $this->contentMd5Param = $contentMd5Param; + $this->validateMd5Param = $validateMd5Param; + } + + public static function getSubscribedEvents() + { + return array('command.before_send' => array('onCommandBeforeSend', -255)); + } + + public function onCommandBeforeSend(Event $event) + { + $command = $event['command']; + $request = $command->getRequest(); + + // Only add an MD5 is there is a MD5 option on the operation and it has a payload + if ($request instanceof EntityEnclosingRequestInterface && $request->getBody() + && $command->getOperation()->hasParam($this->contentMd5Param)) { + // Check if an MD5 checksum value should be passed along to the request + if ($command[$this->contentMd5Param] === true) { + if (false !== ($md5 = $request->getBody()->getContentMd5(true, true))) { + $request->setHeader('Content-MD5', $md5); + } + } + } + + // Check if MD5 validation should be used with the response + if ($command[$this->validateMd5Param] === true) { + $request->addSubscriber(new Md5ValidatorPlugin(true, false)); + } + } +} |