| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- <?php
- namespace Aws\S3;
- use Aws\CommandInterface;
- use GuzzleHttp\Psr7;
- use Psr\Http\Message\RequestInterface;
- /**
- * Apply required or optional MD5s to requests before sending.
- *
- * IMPORTANT: This middleware must be added after the "build" step.
- *
- * @internal
- */
- class ApplyChecksumMiddleware
- {
- private static $md5 = [
- 'DeleteObjects',
- 'PutBucketCors',
- 'PutBucketLifecycle',
- 'PutBucketLifecycleConfiguration',
- 'PutBucketPolicy',
- 'PutBucketTagging',
- 'PutBucketReplication',
- ];
- private static $sha256 = [
- 'PutObject',
- 'UploadPart',
- ];
- private $nextHandler;
- /**
- * Create a middleware wrapper function.
- *
- * @return callable
- */
- public static function wrap()
- {
- return function (callable $handler) {
- return new self($handler);
- };
- }
- public function __construct(callable $nextHandler)
- {
- $this->nextHandler = $nextHandler;
- }
- public function __invoke(
- CommandInterface $command,
- RequestInterface $request
- ) {
- $next = $this->nextHandler;
- $name = $command->getName();
- $body = $request->getBody();
- if (in_array($name, self::$md5) && !$request->hasHeader('Content-MD5')) {
- // Set the content MD5 header for operations that require it.
- $request = $request->withHeader(
- 'Content-MD5',
- base64_encode(Psr7\hash($body, 'md5', true))
- );
- } elseif (in_array($name, self::$sha256) && $command['ContentSHA256']) {
- // Set the content hash header if provided in the parameters.
- $request = $request->withHeader(
- 'X-Amz-Content-Sha256',
- $command['ContentSHA256']
- );
- }
- return $next($command, $request);
- }
- }
|