Exemplo n.º 1
0
 /**
  * @covers Guzzle\Aws\S3\S3Client::getEndpoints
  */
 public function testReturnsEndpoints()
 {
     $this->assertEquals(array('us-east-1' => 's3.amazonaws.com', 'us-west-1' => 's3-us-west-1.amazonaws.com', 'EU' => 's3-eu-west-1.amazonaws.com', 'ap-southeast-1' => 's3-ap-southeast-1.amazonaws.com', 'ap-northeast-1' => 's3-ap-northeast-1.amazonaws.com'), S3Client::getEndpoints());
 }
Exemplo n.º 2
0
 /**
  * Create a canonicalized Resource string for a signature.
  *
  * @param array $headers Associative array of request headers.
  * @param string $path Path part of the URL.
  *
  * @return string Returns a canonicalized resource string.
  */
 public function createCanonicalizedResource(array $headers, $path)
 {
     $subResource = '';
     $parts = parse_url($path);
     $path = $parts['path'];
     $needsEndingSlash = false;
     if (!empty($headers)) {
         $headers = array_change_key_case($headers, CASE_LOWER);
         if ($headers['host']) {
             $matches = array();
             $usesS3 = preg_match('/^([a-zA-Z0-9_\\-\\.]+)\\.(?:' . implode('|', array_map('preg_quote', S3Client::getEndpoints())) . ').*$/', $headers['host'], $matches);
             // If this is a CNAME, then just use the Host header
             $host = $usesS3 ? $matches[1] : str_replace(S3Client::getEndpoints(), '', $headers['host']);
             if ($host) {
                 if (preg_match('/^[A-Za-z0-9._\\-]+$/', $host)) {
                     $bucket = $host . '/';
                     if ($path && $path[0] == '/') {
                         $path = substr($path, 1);
                     }
                 } else {
                     $bucket = parse_url($host, PHP_URL_HOST);
                 }
                 $path = '/' . $bucket . $path;
             }
         }
     }
     // Add an ending slash to the bucket if it was omitted
     if (preg_match('/^\\/[A-Za-z0-9._\\-]+$/', $path)) {
         $path .= '/';
     }
     // Add the sub resource if a valid sub resource is present
     if (array_key_exists('query', $parts)) {
         $q = array();
         parse_str($parts['query'], $q);
         $subs = array();
         foreach ($q as $key => $value) {
             if (in_array($key, $this->subResources)) {
                 $subs[$key] = $value;
             }
         }
         if (count($subs)) {
             $subResource .= '?';
             ksort($subs);
             $first = true;
             foreach ($subs as $key => $value) {
                 if (!$first) {
                     $subResource .= '&';
                 }
                 $subResource .= $key;
                 if ($value) {
                     $subResource .= '=' . $value;
                 }
                 $first = false;
             }
             $needsEndingSlash = false;
         }
     }
     $result = ($path ? $path : '/') . $subResource;
     // @codeCoverageIgnoreStart
     if ($needsEndingSlash) {
         $result .= '/';
     }
     // @codeCoverageIgnoreEnd
     return $result;
 }