Making WordPress.org


Ignore:
Timestamp:
03/07/2018 01:45:42 AM (7 years ago)
Author:
iandunn
Message:

WordCamp QBO: Apply coding standards.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordcamp.org/public_html/wp-content/plugins/wordcamp-qbo/class-wordcamp-qbo-oauth-client.php

    r2325 r6834  
    33 * WordCamp QBO Oauth Client
    44 *
    5  * Note: This is NOT a general-purpose OAuth client, it is only suitable
     5 * SECURITY WARNING: This is NOT a general-purpose OAuth client, it is only suitable
    66 * for the WordCamp QBO plugin.
    77 */
    88class WordCamp_QBO_OAuth_Client {
    9     private $consumer_key;
    10     private $consumer_secret;
    11     private $oauth_token;
    12     private $oauth_token_secret;
     9    private $consumer_key;
     10    private $consumer_secret;
     11    private $oauth_token;
     12    private $oauth_token_secret;
    1313
    14     /**
    15      * @param string $consumer_key The OAuth consumer key
    16     * @param string $consumer_secret The secret
    17     */
    18     public function __construct( $consumer_key, $consumer_secret ) {
    19         $this->consumer_key = $consumer_key;
    20         $this->consumer_secret = $consumer_secret;
    21     }
     14    /**
     15     * @param string $consumer_key    The OAuth consumer key
     16    * @param string $consumer_secret The secret
     17    */
     18    public function __construct( $consumer_key, $consumer_secret ) {
     19        $this->consumer_key    = $consumer_key;
     20        $this->consumer_secret = $consumer_secret;
     21    }
    2222
    23     /**
    24     * Set current OAuth token
    25     *
    26      * @param string $oauth_token An OAuth token.
    27     * @param string $oauth_token_secret The OAuth token secret.
    28     */
    29     public function set_token( $oauth_token, $oauth_token_secret ) {
    30         $this->oauth_token = $oauth_token;
    31         $this->oauth_token_secret = $oauth_token_secret;
    32     }
     23    /**
     24    * Set current OAuth token
     25    *
     26     * @param string $oauth_token        An OAuth token.
     27    * @param string $oauth_token_secret The OAuth token secret.
     28    */
     29    public function set_token( $oauth_token, $oauth_token_secret ) {
     30        $this->oauth_token        = $oauth_token;
     31        $this->oauth_token_secret = $oauth_token_secret;
     32    }
    3333
    34     /**
    35     * Get a request token.
    36     *
    37     * @param string $callback_url The URL to which a successful authentication will return.
    38     *
    39      * @return array An array with the tokens.
    40     */
    41     public function get_request_token( $request_url, $callback_url ) {
    42         $args = array_merge( $this->_get_default_args(), array(
    43             'oauth_callback' => $callback_url,
    44         ) );
     34    /**
     35    * Get a request token.
     36    *
     37    * @param string $callback_url The URL to which a successful authentication will return.
     38    *
     39     * @return array|WP_Error An array with the tokens.
     40    */
     41    public function get_request_token( $request_url, $callback_url ) {
     42        $args = array_merge( $this->_get_default_args(), array(
     43            'oauth_callback' => $callback_url,
     44        ) );
    4545
    46         $args['oauth_signature'] = $this->_get_signature( 'POST', $request_url, $args );
    47         $args = array_map( 'rawurlencode', $args );
     46        $args['oauth_signature'] = $this->_get_signature( 'POST', $request_url, $args );
     47        $args                    = array_map( 'rawurlencode', $args );
    4848
    49         $response = wp_remote_post( add_query_arg( $args, $request_url ) );
    50         if ( is_wp_error( $response ) )
    51             return $response;
     49        $response = wp_remote_post( add_query_arg( $args, $request_url ) );
    5250
    53         if ( wp_remote_retrieve_response_code( $response ) != 200 )
    54             return new WP_Error( 'error', 'Could not get OAuth request token.' );
     51        if ( is_wp_error( $response ) ) {
     52            return $response;
     53        }
    5554
    56         $result = wp_parse_args( wp_remote_retrieve_body( $response ), array(
    57             'oauth_token' => '',
    58             'oauth_token_secret' => '',
    59             'oauth_callback_confirmed' => '',
    60         ) );
     55        if ( wp_remote_retrieve_response_code( $response ) != 200 ) {
     56            return new WP_Error( 'error', 'Could not get OAuth request token.' );
     57        }
    6158
    62         return $result;
    63     }
     59        $result = wp_parse_args( wp_remote_retrieve_body( $response ), array(
     60            'oauth_token'              => '',
     61            'oauth_token_secret'       => '',
     62            'oauth_callback_confirmed' => '',
     63        ) );
    6464
    65     /**
    66      * Get an OAuth access token.
    67      *
    68      * @param string $verifier A verifier token from the authentication flow.
    69      *
    70      * @return array The access token.
    71      */
    72     public function get_access_token( $request_url, $verifier ) {
    73         $args = array_merge( $this->_get_default_args(), array(
    74             'oauth_verifier' => $verifier,
    75             'oauth_token' => $this->oauth_token,
    76         ) );
     65        return $result;
     66    }
    7767
    78         $args['oauth_signature'] = $this->_get_signature( 'POST', $request_url, $args );
    79         $args = array_map( 'rawurlencode', $args );
     68    /**
     69     * Get an OAuth access token.
     70     *
     71     * @param string $verifier A verifier token from the authentication flow.
     72     *
     73     * @return array|WP_Error The access token.
     74     */
     75    public function get_access_token( $request_url, $verifier ) {
     76        $args = array_merge( $this->_get_default_args(), array(
     77            'oauth_verifier' => $verifier,
     78            'oauth_token'    => $this->oauth_token,
     79        ) );
    8080
    81         $response = wp_remote_post( add_query_arg( $args, $request_url ) );
     81        $args['oauth_signature'] = $this->_get_signature( 'POST', $request_url, $args );
     82        $args                    = array_map( 'rawurlencode', $args );
    8283
    83         if ( is_wp_error( $response ) )
    84             return $response;
     84        $response = wp_remote_post( add_query_arg( $args, $request_url ) );
    8585
    86         if ( wp_remote_retrieve_response_code( $response ) != 200 )
    87             return new WP_Error( 'error', 'Could not get OAuth access token.' );
     86        if ( is_wp_error( $response ) ) {
     87            return $response;
     88        }
    8889
    89         $result = wp_parse_args( wp_remote_retrieve_body( $response ), array(
    90             'oauth_token' => '',
    91             'oauth_token_secret' => '',
    92         ) );
     90        if ( wp_remote_retrieve_response_code( $response ) != 200 ) {
     91            return new WP_Error( 'error', 'Could not get OAuth access token.' );
     92        }
    9393
    94         return $result;
    95     }
     94        $result = wp_parse_args( wp_remote_retrieve_body( $response ), array(
     95            'oauth_token'        => '',
     96            'oauth_token_secret' => '',
     97        ) );
    9698
    97     /**
    98      * Get a string suitable for the Authorization header.
    99      *
    100      * @see http://oauth.net/core/1.0a/#auth_header
    101      *
    102      * @param string $method The request method.
    103      * @param string $request_url The request URL (without query)
    104      * @param array|string $request_args Any additional query/body args.
    105      *
    106      * @return string An OAuth string ready for the Authorization header.
    107      */
    108     public function get_oauth_header( $method, $request_url, $request_args = array() ) {
    109         $oauth_args = array_merge( $this->_get_default_args(), array(
    110             'oauth_token' => $this->oauth_token,
    111         ) );
     99        return $result;
     100    }
    112101
    113         $all_args = $oauth_args;
    114         if ( is_array( $request_args ) && ! empty( $request_args ) )
    115             $all_args = array_merge( $oauth_args, $request_args );
     102    /**
     103     * Get a string suitable for the Authorization header.
     104     *
     105     * @see http://oauth.net/core/1.0a/#auth_header
     106     *
     107     * @param string       $method The request method.
     108     * @param string       $request_url The request URL (without query)
     109     * @param array|string $request_args Any additional query/body args.
     110     *
     111     * @return string An OAuth string ready for the Authorization header.
     112     */
     113    public function get_oauth_header( $method, $request_url, $request_args = array() ) {
     114        $oauth_args = array_merge( $this->_get_default_args(), array(
     115            'oauth_token' => $this->oauth_token,
     116        ) );
    116117
    117         $oauth_args['oauth_signature'] = $this->_get_signature( $method, $request_url, $all_args );
     118        $all_args = $oauth_args;
    118119
    119         $header_parts = array();
    120         foreach ( $oauth_args as $key => $value )
    121             $header_parts[] = sprintf( '%s="%s"', rawurlencode( $key ), rawurlencode( $value ) );
     120        if ( is_array( $request_args ) && ! empty( $request_args ) ) {
     121            $all_args = array_merge( $oauth_args, $request_args );
     122        }
    122123
    123         $header = 'OAuth ' . implode( ',', $header_parts );
    124         return $header;
    125     }
     124        $oauth_args['oauth_signature'] = $this->_get_signature( $method, $request_url, $all_args );
    126125
    127     /**
    128      * Get a default set of OAuth arguments.
    129      *
    130      * @return array Default OAuth arguments.
    131      */
    132     private function _get_default_args() {
    133         return array(
    134             'oauth_nonce' => md5( wp_generate_password( 12 ) ),
    135             'oauth_consumer_key' => $this->consumer_key,
    136             'oauth_signature_method' => 'HMAC-SHA1',
    137             'oauth_timestamp' => time(),
    138             'oauth_version' => '1.0',
    139         );
    140     }
     126        $header_parts = array();
    141127
    142     /**
    143      * Get an OAuth signature.
    144      *
    145      * @see http://oauth.net/core/1.0a/#signing_process
    146      *
    147      * @param string $method The request method, GET, POST, etc.
    148      * @param string $url The request URL (without any query)
    149      * @param array $args An optional array of query or body args.
    150      *
    151      * @return string A base64-encoded hmac-sha1 signature.
    152      */
    153     private function _get_signature( $method, $url, $args ) {
    154         ksort( $args );
     128        foreach ( $oauth_args as $key => $value ) {
     129            $header_parts[] = sprintf( '%s="%s"', rawurlencode( $key ), rawurlencode( $value ) );
     130        }
    155131
    156         // Don't sign a signature.
    157         unset( $args['oauth_signature'] );
     132        $header = 'OAuth ' . implode( ',', $header_parts );
     133        return $header;
     134    }
    158135
    159         $parameter_string = '';
    160         foreach ( $args as $key => $value )
    161             $parameter_string .= sprintf( '&%s=%s', rawurlencode( $key ), rawurlencode( $value ) );
     136    /**
     137     * Get a default set of OAuth arguments.
     138     *
     139     * @return array Default OAuth arguments.
     140     */
     141    private function _get_default_args() {
     142        return array(
     143            'oauth_nonce'            => md5( wp_generate_password( 12 ) ),
     144            'oauth_consumer_key'     => $this->consumer_key,
     145            'oauth_signature_method' => 'HMAC-SHA1',
     146            'oauth_timestamp'        => time(),
     147            'oauth_version'          => '1.0',
     148        );
     149    }
    162150
    163         $parameter_string = trim( $parameter_string, '&' );
    164         $signature_base = strtoupper( $method ) . '&' . rawurlencode( $url ) . '&' . rawurlencode( $parameter_string );
    165         $signing_key = rawurlencode( $this->consumer_secret ) . '&' . rawurlencode( $this->oauth_token_secret );
     151    /**
     152     * Get an OAuth signature.
     153     *
     154     * @see http://oauth.net/core/1.0a/#signing_process
     155     *
     156     * @param string $method The request method, GET, POST, etc.
     157     * @param string $url    The request URL (without any query)
     158     * @param array  $args   An optional array of query or body args.
     159     *
     160     * @return string A base64-encoded hmac-sha1 signature.
     161     */
     162    private function _get_signature( $method, $url, $args ) {
     163        ksort( $args );
    166164
    167         return base64_encode( hash_hmac( 'sha1', $signature_base, $signing_key, true ) );
    168     }
     165        // Don't sign a signature.
     166        unset( $args['oauth_signature'] );
     167
     168        $parameter_string = '';
     169
     170        foreach ( $args as $key => $value ) {
     171            $parameter_string .= sprintf( '&%s=%s', rawurlencode( $key ), rawurlencode( $value ) );
     172        }
     173
     174        $parameter_string = trim( $parameter_string, '&' );
     175        $signature_base   = strtoupper( $method ) . '&' . rawurlencode( $url ) . '&' . rawurlencode( $parameter_string );
     176        $signing_key      = rawurlencode( $this->consumer_secret ) . '&' . rawurlencode( $this->oauth_token_secret );
     177
     178        return base64_encode( hash_hmac( 'sha1', $signature_base, $signing_key, true ) );
     179    }
    169180}
Note: See TracChangeset for help on using the changeset viewer.