| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- <?php
- namespace Elastica\Transport;
- use Aws\Credentials\CredentialProvider;
- use Aws\Credentials\Credentials;
- use Aws\Signature\SignatureV4;
- use Elastica\Connection;
- use Elastica\Request;
- use GuzzleHttp;
- use GuzzleHttp\Client;
- use GuzzleHttp\HandlerStack;
- use GuzzleHttp\Middleware;
- use Psr\Http\Message\RequestInterface;
- class AwsAuthV4 extends Guzzle
- {
- protected function _getGuzzleClient($baseUrl, $persistent = true, Request $request)
- {
- if (!$persistent || !self::$_guzzleClientConnection) {
- $stack = HandlerStack::create(GuzzleHttp\choose_handler());
- $stack->push($this->getSigningMiddleware(), 'sign');
- self::$_guzzleClientConnection = new Client([
- 'base_uri' => $baseUrl,
- 'handler' => $stack,
- 'headers' => [
- 'Content-Type' => $request->getContentType(),
- ],
- ]);
- }
- return self::$_guzzleClientConnection;
- }
- protected function _getBaseUrl(Connection $connection)
- {
- $this->initializePortAndScheme();
- return parent::_getBaseUrl($connection);
- }
- private function getSigningMiddleware()
- {
- $region = $this->getConnection()->hasParam('aws_region')
- ? $this->getConnection()->getParam('aws_region')
- : getenv('AWS_REGION');
- $signer = new SignatureV4('es', $region);
- $credProvider = $this->getCredentialProvider();
- return Middleware::mapRequest(function (RequestInterface $req) use (
- $signer,
- $credProvider
- ) {
- return $signer->signRequest($req, $credProvider()->wait());
- });
- }
- private function getCredentialProvider()
- {
- $connection = $this->getConnection();
- if ($connection->hasParam('aws_secret_access_key')) {
- return CredentialProvider::fromCredentials(new Credentials(
- $connection->getParam('aws_access_key_id'),
- $connection->getParam('aws_secret_access_key'),
- $connection->hasParam('aws_session_token')
- ? $connection->getParam('aws_session_token')
- : null
- ));
- }
- return CredentialProvider::defaultProvider();
- }
- private function initializePortAndScheme()
- {
- $connection = $this->getConnection();
- if (true === $this->isSslRequired($connection)) {
- $this->_scheme = 'https';
- $connection->setPort(443);
- } else {
- $this->_scheme = 'http';
- $connection->setPort(80);
- }
- }
- /**
- * @param Connection $conn
- * @param bool $default
- *
- * @return bool
- */
- private function isSslRequired(Connection $conn, $default = false)
- {
- return $conn->hasParam('ssl')
- ? (bool) $conn->getParam('ssl')
- : $default;
- }
- }
|