/** * Return an appropriate signature object for a a client based on the * "signature" configuration setting, or the default signature specified in * a service description. The signature can be set to a valid signature * version identifier string or an instance of Aws\Common\Signature\SignatureInterface. * * @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 a custom signature has not been provided, then use the default // signature setting specified in the service description. $signature = $config->get(Options::SIGNATURE) ?: $description->getData('signatureVersion'); if (is_string($signature)) { if ($signature == 'v4') { $signature = new SignatureV4(); } elseif ($signature == 'v2') { $signature = new SignatureV2(); } elseif ($signature == 'v3https') { $signature = new SignatureV3Https(); } else { throw new InvalidArgumentException("Invalid signature type: {$signature}"); } } elseif (!$signature instanceof SignatureInterface) { throw new InvalidArgumentException('The provided signature is not ' . 'a signature version string or an instance of ' . 'Aws\\Common\\Signature\\SignatureInterface'); } // Allow a custom service name or region value to be provided if ($signature instanceof EndpointSignatureInterface) { // Determine the service name to use when signing $signature->setServiceName($config->get(Options::SIGNATURE_SERVICE) ?: $description->getData('signingName') ?: $description->getData('endpointPrefix')); // Determine the region to use when signing requests $signature->setRegionName($config->get(Options::SIGNATURE_REGION) ?: $config->get(Options::REGION)); } return $signature; }
public function testPersistsCustomAttributes() { $data = array('operations' => array('foo' => array('class' => 'foo', 'parameters' => array())), 'name' => 'Name', 'description' => 'Test', 'apiVersion' => '1.24', 'auth' => 'foo', 'keyParam' => 'bar'); $d = new ServiceDescription($data); $d->setData('hello', 'baz'); $this->assertEquals('foo', $d->getData('auth')); $this->assertEquals('baz', $d->getData('hello')); $this->assertEquals('bar', $d->getData('keyParam')); // responseClass and responseType are added by default $data['operations']['foo']['responseClass'] = 'array'; $data['operations']['foo']['responseType'] = 'primitive'; $this->assertEquals($data + array('hello' => 'baz'), json_decode($d->serialize(), true)); }
/** * 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; }
/** * 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); }