示例#1
0
 /**
  * Return an appropriate signature object for a a client based on a description
  *
  * @param ServiceDescription $description Description that holds a signature option
  * @param Collection         $config      Configuration options
  *
  * @throws InvalidArgumentException
  */
 protected function addSignature(ServiceDescription $description, Collection $config)
 {
     if (!($signature = $config->get(Options::SIGNATURE))) {
         if (!$description->getData('signatureVersion')) {
             throw new InvalidArgumentException('The service description does not specify a signatureVersion');
         }
         switch ($description->getData('signatureVersion')) {
             case 'v2':
                 $signature = new SignatureV2();
                 break;
             case 'v3':
                 $signature = new SignatureV3();
                 break;
             case 'v3https':
                 $signature = new SignatureV3Https();
                 break;
             case 'v4':
                 $signature = new SignatureV4();
                 break;
         }
     }
     // Allow a custom service name or region value to be provided
     if ($signature instanceof EndpointSignatureInterface) {
         $signature->setServiceName($config->get(Options::SIGNATURE_SERVICE) ?: $description->getData('signingName'));
         $signature->setRegionName($config->get(Options::SIGNATURE_REGION));
     }
     $config->set(Options::SIGNATURE, $signature);
 }
示例#2
0
 /**
  * Return an appropriate signature object for a a client based on a description
  *
  * @param ServiceDescription $description Description that holds a signature option
  * @param Collection         $config      Configuration options
  *
  * @return SignatureInterface
  * @throws InvalidArgumentException
  */
 protected function getSignature(ServiceDescription $description, Collection $config)
 {
     if (!($signature = $config->get(Options::SIGNATURE))) {
         switch ($description->getData('signatureVersion')) {
             case 'v2':
                 $signature = new SignatureV2();
                 break;
             case 'v3':
                 $signature = new SignatureV3();
                 break;
             case 'v3https':
                 $signature = new SignatureV3Https();
                 break;
             case 'v4':
                 $signature = new SignatureV4();
                 break;
             default:
                 throw new InvalidArgumentException('Service description does not specify a valid signatureVersion');
         }
     }
     // Allow a custom service name or region value to be provided
     if ($signature instanceof EndpointSignatureInterface) {
         // Determine the service name to use when signing
         if (!($service = $config->get(Options::SIGNATURE_SERVICE))) {
             if (!($service = $description->getData('signingName'))) {
                 $service = $description->getData('endpointPrefix');
             }
         }
         $signature->setServiceName($service);
         // Determine the region to use when signing requests
         if (!($region = $config->get(Options::SIGNATURE_REGION))) {
             $region = $config->get(Options::REGION);
         }
         $signature->setRegionName($region);
     }
     return $signature;
 }
示例#3
0
 public function testSetRegionUpdatesBaseUrlAndSignature()
 {
     // Setup client
     $endpointProvider = new XmlEndpointProvider();
     $signature = new SignatureV4();
     $signature->setRegionName(Region::US_EAST_1);
     $credentials = new Credentials('test', '123');
     $config = new Collection(array(Options::SERVICE => 's3', Options::SCHEME => 'https', Options::BASE_URL => $endpointProvider->getEndpoint('s3', Region::US_EAST_1)->getBaseUrl('https'), Options::ENDPOINT_PROVIDER => $endpointProvider));
     /** @var $client AbstractClient */
     $client = $this->getMockBuilder('Aws\\Common\\Client\\AbstractClient')->setConstructorArgs(array($credentials, $signature, $config))->getMockForAbstractClass();
     // Get the original values
     $baseUrl1 = $client->getBaseUrl();
     $regionName1 = $this->readAttribute($signature, 'regionName');
     $this->assertNotEmpty($baseUrl1);
     $this->assertNotEmpty($regionName1);
     // Change the region, get the new values, and compare with old
     $client->setRegion(Region::US_WEST_1);
     $baseUrl2 = $client->getBaseUrl();
     $regionName2 = $this->readAttribute($signature, 'regionName');
     $this->assertNotEmpty($baseUrl2);
     $this->assertNotEmpty($regionName2);
     $this->assertNotEquals($baseUrl1, $baseUrl2);
     $this->assertNotEquals($regionName1, $regionName2);
 }