timeout = (float) $timeout; $this->client = isset($config['client']) ? $config['client'] : \Dudlewebs\WPMCS\s3\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; } }