WordPress.org

Plugin Directory

Changeset 589922


Ignore:
Timestamp:
08/24/12 18:59:16 (20 months ago)
Author:
andy
Message:

jetpack multiuser: add storage for multiple user tokens

File:
1 edited

Legend:

Unmodified
Added
Removed
  • jetpack/branches/multiuser/jetpack.php

    r589515 r589922  
    2222defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) or define( 'JETPACK__GLOTPRESS_LOCALES_PATH', JETPACK__PLUGIN_DIR . 'locales.php' ); 
    2323 
     24define( 'JETPACK_MASTER_USER', true ); 
     25 
    2426/* 
    2527Options: 
     
    136138        } 
    137139 
     140        // Upgrade from a single user token to a user_id-indexed array and a master_user ID 
     141        if ( !Jetpack::get_option( 'user_tokens' ) ) { 
     142            if ( $user_token = Jetpack::get_option( 'user_token' ) ) { 
     143                $token_parts = explode( '.', $user_token ); 
     144                if ( isset( $token_parts[2] ) ) { 
     145                    $master_user = $token_parts[2]; 
     146                    $user_tokens = array( $master_user => $user_token ); 
     147                    Jetpack::update_options( compact( 'master_user', 'user_tokens' ) ); 
     148                    Jetpack::delete_option( 'user_token' ); 
     149                } else { 
     150                    // @todo: is this even possible? 
     151                    trigger_error( sprintf( 'Jetpack::plugin_upgrade found no user_id in user_token "%s"', $user_token ), E_USER_WARNING ); 
     152                } 
     153            } 
     154        } 
     155 
    138156        // Future: switch on version? If so, think twice before updating version/old_version. 
    139157    } 
     
    198216     */ 
    199217    function is_active() { 
    200         return (bool) Jetpack_Data::get_access_token( 1 ); // 1 just means user token 
     218        return (bool) Jetpack_Data::get_access_token( JETPACK_MASTER_USER ); 
    201219    } 
    202220 
    203221    function current_user_is_connection_owner() { 
    204         $user_token = Jetpack_Data::get_access_token( 1 ); 
     222        $user_token = Jetpack_Data::get_access_token( JETPACK_MASTER_USER ); 
    205223        return $user_token && is_object( $user_token ) && isset( $user_token->external_user_id ) && get_current_user_id() === $user_token->external_user_id; 
    206224    } 
     
    270288            'id',                           // (int)    The Client ID/WP.com Blog ID of this site. 
    271289            'blog_token',                   // (string) The Client Secret/Blog Token of this site. 
    272             'user_token',                   // (string) The User Token of this site. 
     290            'user_token',                   // (string) The User Token of this site. (deprecated) 
     291            'master_user',                  // (int)    The local User ID of the user who connected this site to jetpack.wordpress.com. 
     292            'user_tokens',                  // (array)  User Tokens for each user of this site who has connected to jetpack.wordpress.com. 
    273293            'version',                      // (string) Used during upgrade procedure to auto-activate new modules. version:time 
    274294            'old_version',                  // (string) Used to determine which modules are the most recently added. previous_version:time 
     
    10281048            'blog_token', 
    10291049            'user_token', 
     1050            'user_tokens', 
     1051            'master_user', 
    10301052            'time_diff', 
    10311053            'fallback_no_verify_ssl_certs', 
     
    18061828        } 
    18071829 
    1808         $token = Jetpack_Data::get_access_token( 0 ); 
     1830        $token = Jetpack_Data::get_access_token(); 
    18091831        if ( !$token || is_wp_error( $token ) ) { 
    18101832            return false; 
     
    20012023        <ul> 
    20022024        <?php 
     2025        // Extract the current_user's token 
     2026        $user_id = get_current_user_id(); 
     2027        $user_tokens = Jetpack::get_option( 'user_tokens' ); 
     2028        if ( is_array( $user_tokens ) && array_key_exists( $user_id, $user_tokens ) ) { 
     2029            $user_token = $user_tokens[$user_id]; 
     2030        } else { 
     2031            $user_token = '[this user has no token]'; 
     2032        } 
     2033        unset( $user_tokens ); 
     2034 
    20032035        foreach ( array( 
    20042036            'CLIENT_ID'   => 'id', 
    20052037            'BLOG_TOKEN'  => 'blog_token', 
    2006             'USER_TOKEN'  => 'user_token', 
     2038            'MASTER_USER' => 'master_user', 
    20072039            'CERT'        => 'fallback_no_verify_ssl_certs', 
    20082040            'TIME_DIFF'   => 'time_diff', 
     
    20132045            <li><?php echo esc_html( $label ); ?>: <code><?php echo esc_html( Jetpack::get_option( $option_name ) ); ?></code></li> 
    20142046        <?php endforeach; ?> 
     2047            <li>USER_ID: <code><?php echo esc_html( $user_id ); ?></code></li> 
     2048            <li>USER_TOKEN: <code><?php echo esc_html( $user_token ); ?></code></li> 
    20152049            <li>PHP_VERSION: <code><?php echo esc_html( PHP_VERSION ); ?></code></li> 
    20162050            <li>WORDPRESS_VERSION: <code><?php echo esc_html( $GLOBALS['wp_version'] ); ?></code></li> 
     
    26282662        } 
    26292663 
    2630         $token = Jetpack_Data::get_access_token( $args ); 
     2664        $token = Jetpack_Data::get_access_token( $args['user_id'] ); 
    26312665        if ( !$token ) { 
    26322666            return new Jetpack_Error( 'missing_token' ); 
     
    28222856     * @return object|false 
    28232857     */ 
    2824     function get_access_token( $args ) { 
    2825         if ( is_numeric( $args ) ) { 
    2826             $args = array( 'user_id' => $args ); 
    2827         } 
    2828  
    2829         if ( $args['user_id'] ) { 
    2830             if ( !$token = Jetpack::get_option( 'user_token' ) ) { 
     2858    function get_access_token( $user_id = false ) { 
     2859        if ( $user_id ) { 
     2860            if ( !$tokens = Jetpack::get_option( 'user_tokens' ) ) { 
     2861                return false; 
     2862            } 
     2863            if ( $user_id === JETPACK_MASTER_USER ) { 
     2864                if ( !$user_id = Jetpack::get_option( 'master_user' ) ) { 
     2865                    return false; 
     2866                } 
     2867            } 
     2868            if ( !$token = $tokens[$user_id] ) { 
    28312869                return false; 
    28322870            } 
     
    28352873                return false; 
    28362874            } 
    2837             $args['user_id'] = $token_chunks[2]; 
     2875            if ( $user_id != $token_chunks[2] ) { 
     2876                return false; 
     2877            } 
    28382878            $token = "{$token_chunks[0]}.{$token_chunks[1]}"; 
    28392879        } else { 
     
    28462886        return (object) array( 
    28472887            'secret' => $token, 
    2848             'external_user_id' => (int) $args['user_id'], 
     2888            'external_user_id' => (int) $user_id, 
    28492889        ); 
    28502890    } 
     
    29733013        } 
    29743014 
    2975         $client_secret = Jetpack_Data::get_access_token( 0 ); 
     3015        $client_secret = Jetpack_Data::get_access_token(); 
    29763016        if ( !$client_secret ) { 
    29773017            return new Jetpack_Error( 'client_secret', __( 'You need to register your Jetpack before connecting it.', 'jetpack' ) ); 
Note: See TracChangeset for help on using the changeset viewer.