| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | <?phpnamespace 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;    }}
 |