| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | <?phpnamespace Aws\Credentials;use Aws\Exception\CredentialsException;use Aws\Result;use Aws\Sts\StsClient;use GuzzleHttp\Promise\PromiseInterface;/** * Credential provider that provides credentials via assuming a role * More Information, see: http://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sts-2011-06-15.html#assumerole */class AssumeRoleCredentialProvider{    const ERROR_MSG = "Missing required 'AssumeRoleCredentialProvider' configuration option: ";    /** @var StsClient */    private $client;    /** @var array */    private $assumeRoleParams;    /**     * The constructor requires following configure parameters:     *  - client: a StsClient     *  - assume_role_params: Parameters used to make assumeRole call     *     * @param array $config Configuration options     * @throws \InvalidArgumentException     */    public function __construct(array $config = [])    {        if (!isset($config['assume_role_params'])) {            throw new \InvalidArgumentException(self::ERROR_MSG . "'assume_role_params'.");        }        if (!isset($config['client'])) {            throw new \InvalidArgumentException(self::ERROR_MSG . "'client'.");        }        $this->client = $config['client'];        $this->assumeRoleParams = $config['assume_role_params'];    }    /**     * Loads assume role credentials.     *     * @return PromiseInterface     */    public function __invoke()    {        $client = $this->client;        return $client->assumeRoleAsync($this->assumeRoleParams)            ->then(function (Result $result) {                return $this->client->createCredentials($result);            })->otherwise(function (\RuntimeException $exception) {                throw new CredentialsException(                    "Error in retrieving assume role credentials.",                    0,                    $exception                );            });    }}
 |