/** * @covers Aws\Common\Exception\InstanceProfileCredentialsException::getStatusCode * @covers Aws\Common\Exception\InstanceProfileCredentialsException::setStatusCode */ public function testOwnsStatusCode() { $e = new InstanceProfileCredentialsException('Foo'); $this->assertNull($e->getStatusCode()); $e->setStatusCode('Bar'); $this->assertEquals('Bar', $e->getStatusCode()); }
/** * Get instance profile credentials * * @return Credentials * @throws InstanceProfileCredentialsException */ public function getInstanceProfileCredentials() { try { $request = $this->get('meta-data/iam/security-credentials/'); $credentials = trim($request->send()->getBody(true)); $result = $this->get("meta-data/iam/security-credentials/{$credentials}")->send()->json(); } catch (\Exception $e) { $message = sprintf('Error retrieving credentials from the instance profile metadata server. When you are' . ' not running inside of Amazon EC2, you must provide your AWS access key ID and secret access key in' . ' the "key" and "secret" options when creating a client or provide an instantiated' . ' Aws\\Common\\Credentials\\CredentialsInterface object. (%s)', $e->getMessage()); throw new InstanceProfileCredentialsException($message, $e->getCode()); } // Ensure that the status code was successful if ($result['Code'] !== 'Success') { $e = new InstanceProfileCredentialsException('Unexpected response code: ' . $result['Code']); $e->setStatusCode($result['Code']); throw $e; } return new Credentials($result['AccessKeyId'], $result['SecretAccessKey'], $result['Token'], strtotime($result['Expiration'])); }
/** * Attempt to get new credentials from the instance profile * * @throws InstanceProfileCredentialsException On error */ protected function refresh() { try { $request = $this->client->get('meta-data/iam/security-credentials/'); $request->getCurlOptions()->set(CURLOPT_TIMEOUT, 1)->set(CURLOPT_CONNECTTIMEOUT, 1); $credentials = trim($request->send()->getBody(true)); $json = $this->client->get("meta-data/iam/security-credentials/{$credentials}")->send()->getBody(true); $result = json_decode($json, true); } catch (\Exception $e) { $message = 'Error retrieving credentials from the instance profile metadata server. When you are not' . ' running inside of Amazon EC2, you must provide your AWS access key ID and secret access key in' . ' the "key" and "secret" options when creating a client or provide an instantiated' . ' Aws\\Common\\Credentials\\CredentialsInterface object.'; throw new InstanceProfileCredentialsException($message, $e->getCode(), $e); } // Ensure that the status code was successful if ($result['Code'] !== 'Success') { $e = new InstanceProfileCredentialsException('Unexpected response code: ' . $result['Code']); $e->setStatusCode($result['Code']); throw $e; } $this->credentials->setAccessKeyId($result['AccessKeyId'])->setSecretKey($result['SecretAccessKey'])->setSecurityToken($result['Token'])->setExpiration(strtotime($result['Expiration'])); }