timeout = (float) $timeout; $this->client = isset($config['client']) ? $config['client'] : \Aws\default_http_handler(); } /** * Load ECS credentials * * @return PromiseInterface */ public function __invoke() { $client = $this->client; $request = new Request('GET', self::getEcsUri()); $headers = $this->setHeaderForAuthToken(); return $client( $request, [ 'timeout' => $this->timeout, 'proxy' => '', 'headers' => $headers ] )->then(function (ResponseInterface $response) { $result = $this->decodeResult((string) $response->getBody()); return new Credentials( $result['AccessKeyId'], $result['SecretAccessKey'], $result['Token'], strtotime($result['Expiration']) ); })->otherwise(function ($reason) { $reason = is_array($reason) ? $reason['exception'] : $reason; $msg = $reason->getMessage(); throw new CredentialsException( "Error retrieving credential from ECS ($msg)" ); }); } private function getEcsAuthToken() { return getenv(self::ENV_AUTH_TOKEN); } public function setHeaderForAuthToken(){ $authToken = self::getEcsAuthToken(); $headers = []; if(!empty($authToken)) $headers = ['Authorization' => $authToken]; return $headers; } /** * Fetch credential URI from ECS environment variable * * @return string Returns ECS URI */ private function getEcsUri() { $credsUri = getenv(self::ENV_URI); if ($credsUri === false) { $credsUri = isset($_SERVER[self::ENV_URI]) ? $_SERVER[self::ENV_URI] : ''; } if(empty($credsUri)){ $credFullUri = getenv(self::ENV_FULL_URI); if($credFullUri === false){ $credFullUri = isset($_SERVER[self::ENV_FULL_URI]) ? $_SERVER[self::ENV_FULL_URI] : ''; } if(!empty($credFullUri)) return $credFullUri; } return self::SERVER_URI . $credsUri; } private function decodeResult($response) { $result = json_decode($response, true); if (!isset($result['AccessKeyId'])) { throw new CredentialsException('Unexpected ECS credential value'); } return $result; } }