| 
<?phpnamespace Aws\S3;
 
 use Aws\CommandInterface;
 use Aws\ResultInterface;
 use Aws\S3\Exception\PermanentRedirectException;
 use Psr\Http\Message\RequestInterface;
 
 /**
 * Throws a PermanentRedirectException exception when a 301 redirect is
 * encountered.
 *
 * @internal
 */
 class PermanentRedirectMiddleware
 {
 /** @var callable  */
 private $nextHandler;
 
 /**
 * Create a middleware wrapper function.
 *
 * @return callable
 */
 public static function wrap()
 {
 return function (callable $handler) {
 return new self($handler);
 };
 }
 
 /**
 * @param callable $nextHandler Next handler to invoke.
 */
 public function __construct(callable $nextHandler)
 {
 $this->nextHandler = $nextHandler;
 }
 
 public function __invoke(CommandInterface $command, RequestInterface $request = null)
 {
 $next = $this->nextHandler;
 return $next($command, $request)->then(
 function (ResultInterface $result) use ($command) {
 $status = isset($result['@metadata']['statusCode'])
 ? $result['@metadata']['statusCode']
 : null;
 if ($status == 301) {
 throw new PermanentRedirectException(
 'Encountered a permanent redirect while requesting '
 . $result->search('"@metadata".effectiveUri') . '. '
 . 'Are you sure you are using the correct region for '
 . 'this bucket?',
 $command,
 ['result' => $result]
 );
 }
 return $result;
 }
 );
 }
 }
 
 |