/**
  * Authenication for Amazon CloudFront
  *
  * @return boolean | WP_Error
  * @since 4.0.0
  * @access public
  */
 public function auth($options)
 {
     if (!isset($options['distribution_id']) || !$options['distribution_id']) {
         return new WP_Error('C3 Notice', "CloudFront Distribution ID is not defined.");
     }
     if (c3_is_later_than_php_55()) {
         $sdk = C3_Client_V3::get_instance();
     } else {
         $sdk = C3_Client_V2::get_instance();
         //@TODO: for php ~5.4, do not Authenication now.
         return true;
     }
     $cf_client = $sdk->create_cloudfront_client($options);
     if (is_wp_error($cf_client)) {
         return $cf_client;
     }
     try {
         $result = $cf_client->getDistribution(array('Id' => $options['distribution_id']));
         return true;
     } catch (Exception $e) {
         if ('NoSuchDistribution' === $e->getAwsErrorCode()) {
             $e = new WP_Error('C3 Auth Error', "Can not find CloudFront Distribution ID: {$options['distribution_id']} is not found.");
         } elseif ('InvalidClientTokenId' == $e->getAwsErrorCode()) {
             $e = new WP_Error('C3 Auth Error', "AWS AWS Access Key or AWS Secret Key is invalid.");
         } else {
             $e = new WP_Error('C3 Auth Error', $e->getMessage());
         }
         error_log($e->get_error_messages(), 0);
         return $e;
     }
 }
 /**
  * Sends a response, but also makes sure to attach headers that
  * are handy for debugging.
  * Specifically, we assume folks will want to know what exactly was the DB query that got run,
  * what exactly was the Models query that got run, what capabilities came into play, what fields were omitted from
  * the response, others?
  *
  * @param array|\WP_Error|\Exception $response
  * @return \WP_REST_Response
  */
 public function send_response($response)
 {
     if ($response instanceof \Exception) {
         $response = new \WP_Error($response->getCode(), $response->getMessage());
     }
     if ($response instanceof \WP_Error) {
         $response = $this->_add_ee_errors_to_response($response);
         $rest_response = $this->_create_rest_response_from_wp_error($response);
     } else {
         $rest_response = new \WP_REST_Response($response, 200);
     }
     $headers = array();
     if ($this->_debug_mode && is_array($this->_debug_info)) {
         foreach ($this->_debug_info as $debug_key => $debug_info) {
             if (is_array($debug_info)) {
                 $debug_info = json_encode($debug_info);
             }
             $headers['X-EE4-Debug-' . ucwords($debug_key)] = $debug_info;
         }
     }
     $headers = array_merge($headers, $this->_get_headers_from_ee_notices());
     $rest_response->set_headers($headers);
     return $rest_response;
 }
 /**
  * Invalidation
  *
  * @param object $cf_client
  * @param array $query
  * @access private
  * @since 4.3.0
  * @return boolean | WP_Error
  **/
 private function _do_invalidation($cf_client, $query)
 {
     try {
         set_transient(self::C3_INVALIDATION_KEY, true, 5 * 60);
         $result = $cf_client->createInvalidation($query);
         return true;
     } catch (Aws\CloudFront\Exception\TooManyInvalidationsInProgressException $e) {
         error_log($e->__toString(), 0);
         $e = new WP_Error('C3 Invalidation Error', $e->__toString());
         return $e;
     } catch (Aws\CloudFront\Exception\AccessDeniedException $e) {
         error_log($e->__toString(), 0);
         $e = new WP_Error('C3 Invalidation Error', $e->__toString());
         return $e;
     } catch (Exception $e) {
         $e = new WP_Error('C3 Invalidation Error', $e->getMessage());
         error_log($e->get_error_messages(), 0);
         return $e;
     }
 }
Example #4
-2
 /**
  * Sends a response, but also makes sure to attach headers that
  * are handy for debugging.
  * Specifically, we assume folks will want to know what exactly was the DB query that got run,
  * what exactly was the Models query that got run, what capabilities came into play, what fields were omitted from
  * the response, others?
  *
  * @param array|\WP_Error|\Exception $response
  * @return \WP_REST_Response
  */
 public function send_response($response)
 {
     if ($response instanceof \Exception) {
         $response = new \WP_Error($response->getCode(), $response->getMessage());
     }
     if ($response instanceof \WP_Error) {
         //we want to send a "normal"-looking WP error response, but we also
         //want to add headers. It doesn't seem WP API 1.2 supports this.
         //I'd like to use WP_JSON_Server::error_to_response() but its protected
         //so here's most of it copy-and-pasted :P
         $error_data = $response->get_error_data();
         if (is_array($error_data) && isset($error_data['status'])) {
             $status = $error_data['status'];
         } else {
             $status = 500;
         }
         $errors = array();
         foreach ((array) $response->errors as $code => $messages) {
             foreach ((array) $messages as $message) {
                 $errors[] = array('code' => $code, 'message' => $message, 'data' => $response->get_error_data($code));
             }
         }
         $data = isset($errors[0]) ? $errors[0] : array();
         if (count($errors) > 1) {
             // Remove the primary error.
             array_shift($errors);
             $data['additional_errors'] = $errors;
         }
         $rest_response = new \WP_REST_Response($data, $status);
     } else {
         $rest_response = new \WP_REST_Response($response, 200);
     }
     $headers = array();
     if ($this->_debug_mode && is_array($this->_debug_info)) {
         foreach ($this->_debug_info as $debug_key => $debug_info) {
             if (is_array($debug_info)) {
                 $debug_info = json_encode($debug_info);
             }
             $headers['X-EE4-Debug-' . ucwords($debug_key)] = $debug_info;
         }
     }
     $rest_response->set_headers($headers);
     return $rest_response;
 }