WordPress.org

Making WordPress.org

Changeset 9873


Ignore:
Timestamp:
05/13/2020 06:43:14 PM (3 months ago)
Author:
coreymckrill
Message:

Official WP Events: Attempt to reset oauth token when response is auth_fail

The Meetup API sometimes sends auth_fail errors in the middle of a batch of
requests where all the previous ones succeeded. This might be because the token
has expired, so this tries to reset the token without canceling the entire
current batch of requests.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/official-wordpress-events/meetup/class-meetup-client.php

    r9765 r9873  
    102102        $body = json_decode( wp_remote_retrieve_body( $response ), true );
    103103
    104         if ( 400 === $code && ! empty( $body['error'] ) && 'invalid_grant' === $body['error'] ) {
     104        $parsed_error = $this->parse_error( $body );
     105
     106        if (
     107            ( 400 === $code && $parsed_error->get_error_message( 'invalid_grant' ) )
     108            || ( 401 === $code && $parsed_error->get_error_message( 'auth_fail' ) )
     109        ) {
    105110            $this->oauth_client->reset_oauth_token();
    106111
     
    219224        $oauth_token = $this->oauth_client->get_oauth_token();
    220225
     226        if ( ! empty( $this->oauth_client->error->get_error_messages() ) ) {
     227            $this->error = $this->merge_errors( $this->error, $this->oauth_client->error );
     228        }
     229
    221230        return array(
    222231            'headers' => array(
     
    321330        $data          = json_decode( wp_remote_retrieve_body( $response ), true );
    322331
    323         if ( isset( $data['errors'] ) ) {
    324             foreach ( $data['errors'] as $error ) {
    325                 $this->error->add(
    326                     $error['code'],
    327                     $error['message']
    328                 );
    329             }
    330         } elseif ( isset( $data['error'], $data['error_description'] ) ) {
    331             $this->error->add(
    332                 $data['error'],
    333                 $data['error_description']
    334             );
    335         } elseif ( isset( $data['code'] ) && isset( $data['details'] ) ) {
    336             $this->error->add(
    337                 $data['code'],
    338                 $data['details']
    339             );
    340         } elseif ( $response_code ) {
    341             $this->error->add(
    342                 'http_response_code',
    343                 sprintf( 'HTTP Status: %d', absint( $response_code ) )
    344             );
     332        $parsed_error = $this->parse_error( $data, $response_code );
     333
     334        if ( ! empty( $parsed_error->get_error_messages() ) ) {
     335            $this->error = self::merge_errors( $this->error, $parsed_error );
    345336        } else {
    346337            $this->error->add(
     
    352343
    353344    /**
     345     * Attempt to extract codes and messages from a suspected error response.
     346     *
     347     * @param array $data          The data in the response body, parsed as an array.
     348     * @param int   $response_code Optional. The HTTP status code from the response.
     349     *
     350     * @return WP_Error
     351     */
     352    protected function parse_error( array $data, $response_code = 0 ) {
     353        $error = new WP_Error();
     354
     355        if ( isset( $data['errors'] ) ) {
     356            foreach ( $data['errors'] as $error ) {
     357                $error->add(
     358                    $error['code'],
     359                    $error['message']
     360                );
     361            }
     362        } elseif ( isset( $data['error'], $data['error_description'] ) ) {
     363            $error->add(
     364                $data['error'],
     365                $data['error_description']
     366            );
     367        } elseif ( isset( $data['code'], $data['details'] ) ) {
     368            $error->add(
     369                $data['code'],
     370                $data['details']
     371            );
     372        } elseif ( $response_code ) {
     373            $error->add(
     374                'http_response_code',
     375                sprintf( 'HTTP Status: %d', absint( $response_code ) )
     376            );
     377        }
     378
     379        return $error;
     380    }
     381
     382    /**
    354383     * Retrieve data about groups in the Chapter program.
    355384     *
Note: See TracChangeset for help on using the changeset viewer.