public function checkForPermanentRedirect(ProcessEvent $e)
 {
     $res = $e->getResponse();
     if ($res && $res->getStatusCode() == 301) {
         throw new PermanentRedirectException('Encountered a permanent redirect while requesting ' . $e->getRequest()->getUrl(), $e->getTransaction());
     }
 }
 /**
  * @internal
  * @param ProcessEvent $event
  */
 public function handleError(ProcessEvent $event)
 {
     if (!($exception = $event->getException())) {
         return;
     }
     $name = $event->getCommand()->getName();
     $operation = $event->getClient()->getDescription()->getOperation($name);
     $errors = $operation->getErrorResponses();
     $response = $event->getResponse();
     // We iterate through each errors in service description. If the descriptor contains both a phrase and
     // status code, there must be an exact match of both. Otherwise, a match of status code is enough
     $bestException = null;
     foreach ($errors as $error) {
         $code = (int) $error['code'];
         if ($response->getStatusCode() !== $code) {
             continue;
         }
         if (isset($error['phrase']) && !($error['phrase'] === $response->getReasonPhrase())) {
             continue;
         }
         $bestException = $error['class'];
         // If there is an exact match of phrase + code, then we cannot find a more specialized exception in
         // the array, so we can break early instead of iterating the remaining ones
         if (isset($error['phrase'])) {
             break;
         }
     }
     if (null !== $bestException) {
         throw new $bestException($response->getReasonPhrase(), $event->getTransaction(), $exception);
     }
     // If we reach here, no exception could be match from descriptor, and Guzzle exception will propagate
 }
 public function onProcess(ProcessEvent $event)
 {
     if ($event->getCommand()->getName() !== 'ReceiveMessage') {
         return;
     }
     $result = $event->getResult();
     if (isset($result['Messages'])) {
         foreach ($result['Messages'] as $message) {
             if ($message['MD5OfBody'] != md5($message['Body'])) {
                 throw new SqsException('Body MD5 mismatch for ' . var_export($message, true), $event->getTransaction());
             }
         }
     }
 }
 /**
  * @internal
  *
  * @param ProcessEvent $event
  */
 public function onProcess(ProcessEvent $event)
 {
     // Decode the JSON response
     $data = '';
     try {
         $data = $event->getResponse()->getBody()->getContents();
         $json = $event->getResponse()->json();
     } catch (\RuntimeException $e) {
         // Invalid response; make our own error message
         $json = ['ok' => $data === 'ok', 'error' => $data];
     }
     if (!isset($json['ok']) || $json['ok'] === false) {
         throw new SlackApiException($json['error'], $event->getTransaction());
     }
 }
 public function testHasData()
 {
     $command = $this->getMock('GuzzleHttp\\Command\\CommandInterface');
     $client = $this->getMock('GuzzleHttp\\Command\\ServiceClientInterface');
     $trans = new CommandTransaction($client, $command);
     $request = new Request('GET', 'http://httbin.org');
     $response = new Response(200);
     $trans->setRequest($request);
     $trans->setResponse($response);
     $event = new ProcessEvent($trans);
     $this->assertSame($command, $event->getCommand());
     $this->assertSame($client, $event->getClient());
     $this->assertSame($request, $event->getRequest());
     $this->assertSame($response, $event->getResponse());
     $this->assertSame($trans, $event->getTransaction());
     $this->assertNull($event->getResult());
 }
 /**
  * Callback for process event.
  */
 public function onProcess(ProcessEvent $event)
 {
     $response = $event->getResponse();
     // var_dump((string) $event->getRequest());
     // var_dump((string) $response);
     if (!$response) {
         return;
     }
     try {
         $json = $response->json();
     } catch (\RuntimeException $e) {
         return;
     }
     if (NULL === $response || $json['success']) {
         return;
     }
     $command = $event->getCommand();
     $message = '';
     $this->operation = $this->description->getOperation($command->getName());
     // string,
     // simple array,
     // assoc array.
     $errors = $json['errors'];
     $category = $this->operation->getParam('modelName')->getDefault();
     $method = $this->operation->getName();
     $suffix = " on {$category} operation { {$method} }";
     if (is_string($errors)) {
         $message = 'Common error: "' . $errors . '"' . $suffix;
     } elseif (is_array($errors)) {
         $keys = array_keys($errors);
         $message = $errors[$keys[0]];
         $property = $keys[0];
         $alias = $this::getParamBySentAs($keys[0]);
         if ($alias) {
             $message = str_replace($property, $alias, $message);
         }
         $message = 'Error: "' . $message . '"' . $suffix;
     }
     $e = new NpErrorException($message, $event->getTransaction());
     $e->setCategory($category);
     $e->setVerboseMessage($message);
     throw $e;
 }
 public function onProcess(ProcessEvent $event)
 {
     $response = $event->getResponse();
     if (!$response) {
         return;
     }
     try {
         $xml = $response->xml();
     } catch (\RuntimeException $e) {
         return;
     }
     $eanError = $xml->EanError ?: $xml->EanWsError;
     if ($eanError) {
         $e = new EanErrorException((string) $eanError->presentationMessage, $event->getTransaction());
         $e->setHandling((string) $eanError->handling);
         $e->setCategory((string) $eanError->category);
         $e->setVerboseMessage((string) $eanError->verboseMessage);
         $e->setItineraryId((string) $eanError->itineraryId);
         throw $e;
     }
 }