/**
  * @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());
 }
Ejemplo n.º 2
0
 /**
  * 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']));
 }