S3ExpressSignature.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <?php
  2. namespace Aws\Signature;
  3. use Aws\Credentials\Credentials;
  4. use Aws\Credentials\CredentialsInterface;
  5. use Psr\Http\Message\RequestInterface;
  6. class S3ExpressSignature extends S3SignatureV4
  7. {
  8. public function signRequest(
  9. RequestInterface $request,
  10. CredentialsInterface $credentials,
  11. $signingService = 's3express'
  12. ) {
  13. $request = $this->modifyTokenHeaders($request, $credentials);
  14. $credentials = $this->getSigningCredentials($credentials);
  15. return parent::signRequest($request, $credentials, $signingService);
  16. }
  17. public function presign(RequestInterface $request, CredentialsInterface $credentials, $expires, array $options = [])
  18. {
  19. $request = $this->modifyTokenHeaders($request, $credentials);
  20. $credentials = $this->getSigningCredentials($credentials);
  21. return parent::presign($request, $credentials, $expires, $options);
  22. }
  23. private function modifyTokenHeaders(
  24. RequestInterface $request,
  25. CredentialsInterface $credentials
  26. ) {
  27. //The x-amz-security-token header is not supported by s3 express
  28. $request = $request->withoutHeader('X-Amz-Security-Token');
  29. return $request->withHeader(
  30. 'x-amz-s3session-token',
  31. $credentials->getSecurityToken()
  32. );
  33. }
  34. private function getSigningCredentials(CredentialsInterface $credentials)
  35. {
  36. return new Credentials(
  37. $credentials->getAccessKeyId(),
  38. $credentials->getSecretKey()
  39. );
  40. }
  41. }