| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | <?phpnamespace Aws\Sts;use Aws\AwsClient;use Aws\CacheInterface;use Aws\Credentials\Credentials;use Aws\Result;use Aws\Sts\RegionalEndpoints\ConfigurationProvider;/** * This client is used to interact with the **AWS Security Token Service (AWS STS)**. * * @method \Aws\Result assumeRole(array $args = []) * @method \GuzzleHttp\Promise\Promise assumeRoleAsync(array $args = []) * @method \Aws\Result assumeRoleWithSAML(array $args = []) * @method \GuzzleHttp\Promise\Promise assumeRoleWithSAMLAsync(array $args = []) * @method \Aws\Result assumeRoleWithWebIdentity(array $args = []) * @method \GuzzleHttp\Promise\Promise assumeRoleWithWebIdentityAsync(array $args = []) * @method \Aws\Result decodeAuthorizationMessage(array $args = []) * @method \GuzzleHttp\Promise\Promise decodeAuthorizationMessageAsync(array $args = []) * @method \Aws\Result getAccessKeyInfo(array $args = []) * @method \GuzzleHttp\Promise\Promise getAccessKeyInfoAsync(array $args = []) * @method \Aws\Result getCallerIdentity(array $args = []) * @method \GuzzleHttp\Promise\Promise getCallerIdentityAsync(array $args = []) * @method \Aws\Result getFederationToken(array $args = []) * @method \GuzzleHttp\Promise\Promise getFederationTokenAsync(array $args = []) * @method \Aws\Result getSessionToken(array $args = []) * @method \GuzzleHttp\Promise\Promise getSessionTokenAsync(array $args = []) */class StsClient extends AwsClient{    /**     * {@inheritdoc}     *     * In addition to the options available to     * {@see \Aws\AwsClient::__construct}, StsClient accepts the following     * options:     *     * - sts_regional_endpoints:     *   (Aws\Sts\RegionalEndpoints\ConfigurationInterface|Aws\CacheInterface\|callable|string|array)     *   Specifies whether to use regional or legacy endpoints for legacy regions.     *   Provide an Aws\Sts\RegionalEndpoints\ConfigurationInterface object, an     *   instance of Aws\CacheInterface, a callable configuration provider used     *   to create endpoint configuration, a string value of `legacy` or     *   `regional`, or an associative array with the following keys:     *   endpoint_types (string)  Set to `legacy` or `regional`, defaults to     *   `legacy`     *     * @param array $args     */    public function __construct(array $args)    {        if (            !isset($args['sts_regional_endpoints'])            || $args['sts_regional_endpoints'] instanceof CacheInterface        ) {            $args['sts_regional_endpoints'] = ConfigurationProvider::defaultProvider($args);        }        $this->addBuiltIns($args);        parent::__construct($args);    }    /**     * Creates credentials from the result of an STS operations     *     * @param Result $result Result of an STS operation     *     * @return Credentials     * @throws \InvalidArgumentException if the result contains no credentials     */    public function createCredentials(Result $result)    {        if (!$result->hasKey('Credentials')) {            throw new \InvalidArgumentException('Result contains no credentials');        }        $c = $result['Credentials'];        return new Credentials(            $c['AccessKeyId'],            $c['SecretAccessKey'],            isset($c['SessionToken']) ? $c['SessionToken'] : null,            isset($c['Expiration']) && $c['Expiration'] instanceof \DateTimeInterface                ? (int) $c['Expiration']->format('U')                : null        );    }    /**     * Adds service-specific client built-in value     *     * @return void     */    private function addBuiltIns($args)    {        $key = 'AWS::STS::UseGlobalEndpoint';        $result = $args['sts_regional_endpoints'] instanceof \Closure ?            $args['sts_regional_endpoints']()->wait() : $args['sts_regional_endpoints'];        if (is_string($result)) {            if ($result === 'regional') {                $value = false;            } else if ($result === 'legacy') {                $value = true;            } else {                return;            }        } else {            if ($result->getEndpointsType() === 'regional') {                $value = false;            } else {                $value = true;            }        }        $this->clientBuiltIns[$key] = $value;    }}
 |