<?php 
namespace Aws\CognitoIdentity; 
 
use Aws\Credentials\Credentials; 
use GuzzleHttp\Promise; 
 
class CognitoIdentityProvider 
{ 
    /** @var CognitoIdentityClient */ 
    private $client; 
    /** @var string */ 
    private $identityPoolId; 
    /** @var string|null */ 
    private $accountId; 
    /** @var array */ 
    private $logins; 
 
    public function __construct( 
        $poolId, 
        array $clientOptions, 
        array $logins = [], 
        $accountId = null 
    ) { 
        $this->identityPoolId = $poolId; 
        $this->logins = $logins; 
        $this->accountId = $accountId; 
        $this->client = new CognitoIdentityClient($clientOptions + [ 
            'credentials' => false, 
        ]); 
    } 
 
    public function __invoke() 
    { 
        return Promise\coroutine(function () { 
            $params = $this->logins ? ['Logins' => $this->logins] : []; 
            $getIdParams = $params + ['IdentityPoolId' => $this->identityPoolId]; 
            if ($this->accountId) { 
                $getIdParams['AccountId'] = $this->accountId; 
            } 
 
            $id = (yield $this->client->getId($getIdParams)); 
            $result = (yield $this->client->getCredentialsForIdentity([ 
                'IdentityId' => $id['IdentityId'], 
            ] + $params)); 
 
            yield new Credentials( 
                $result['Credentials']['AccessKeyId'], 
                $result['Credentials']['SecretKey'], 
                $result['Credentials']['SessionToken'], 
                (int) $result['Credentials']['Expiration']->format('U') 
            ); 
        }); 
    } 
 
    public function updateLogin($key, $value) 
    { 
        $this->logins[$key] = $value; 
 
        return $this; 
    } 
} 
 
 |