1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- <?php
- namespace Aws\Identity\S3;
- use Aws;
- use Aws\LruArrayCache;
- use GuzzleHttp\Promise;
- class S3ExpressIdentityProvider
- {
- private $cache;
- private $region;
- private $config;
- private $s3Client;
- public function __construct($clientRegion, array $config = [])
- {
- $this->cache = new LruArrayCache(100);
- $this->region = $clientRegion;
- $this->config = $config;
- }
- public function __invoke($command)
- {
- $s3Client = $this->getS3Client();
- $bucket = $command['Bucket'];
- if ($identity = $this->cache->get($bucket)) {
- if (!$identity->isExpired()) {
- return Promise\Create::promiseFor($identity);
- }
- }
- $response = $s3Client->createSession(['Bucket' => $bucket]);
- $identity = new Aws\Identity\S3\S3ExpressIdentity(
- $response['Credentials']['AccessKeyId'],
- $response['Credentials']['SecretAccessKey'],
- $response['Credentials']['SessionToken'],
- $response['Credentials']['Expiration']->getTimestamp()
- );
- $this->cache->set($bucket, $identity);
- return Promise\Create::promiseFor($identity);
- }
- private function getS3Client()
- {
- if (is_null($this->s3Client)) {
- $this->s3Client = $this->config['client']
- ?? new Aws\S3\S3Client([
- 'region' => $this->region,
- 'disable_express_session_auth' => true
- ]);
- }
- return $this->s3Client;
- }
- }
|