WordPress.org

Make WordPress Core

Ticket #20276: 20276.get-session-by-token-and-new-public-api.diff

File 20276.get-session-by-token-and-new-public-api.diff, 10.0 KB (added by mdawaffe, 5 years ago)
  • src/wp-includes/pluggable.php

     
    684684        }
    685685
    686686        $manager = WP_Session_Tokens::get_instance( $user->ID );
    687         if ( ! $manager->verify_token( $token ) ) {
     687        if ( ! $manager->verify( $token ) ) {
    688688                do_action( 'auth_cookie_bad_session_token', $cookie_elements );
    689689                return false;
    690690        }
     
    728728
    729729        if ( ! $token ) {
    730730                $manager = WP_Session_Tokens::get_instance( $user_id );
    731                 $token = $manager->create_token( $expiration );
     731                $token = $manager->create( $expiration );
    732732        }
    733733
    734734        $pass_frag = substr($user->user_pass, 8, 4);
     
    877877        }
    878878
    879879        $manager = WP_Session_Tokens::get_instance( $user_id );
    880         $token = $manager->create_token( $expiration );
     880        $token = $manager->create( $expiration );
    881881
    882882        $auth_cookie = wp_generate_auth_cookie( $user_id, $expiration, $scheme, $token );
    883883        $logged_in_cookie = wp_generate_auth_cookie( $user_id, $expiration, 'logged_in', $token );
  • src/wp-includes/session.php

     
    5050        }
    5151
    5252        /**
    53          * Hashes a token for storage.
     53         * Hashes a session token for storage.
    5454         *
    5555         * @since 4.0.0
    5656         * @access private
    5757         *
    58          * @param string $token Token to hash.
    59          * @return string A hash of the token (a verifier).
     58         * @param string $token Session token to hash.
     59         * @return string A hash of the session token (a verifier).
    6060         */
    6161        final private function hash_token( $token ) {
    6262                return hash( 'sha256', $token );
    6363        }
    6464
    6565        /**
     66         * Get a user's session.
     67         *
     68         * @since 4.0.0
     69         * @access public
     70         *
     71         * @param string $token Session token
     72         * @return array User session
     73         */
     74        final public function get( $token ) {
     75                $verifier = $this->hash_token( $token );
     76                return $this->get_session( $verifier );
     77        }
     78
     79        /**
    6680         * Validate a user's session token as authentic.
    6781         *
    6882         * Checks that the given token is present and hasn't expired.
     
    7387         * @param string $token Token to verify.
    7488         * @return bool Whether the token is valid for the user.
    7589         */
    76         final public function verify_token( $token ) {
     90        final public function verify( $token ) {
    7791                $verifier = $this->hash_token( $token );
    7892                return (bool) $this->get_session( $verifier );
    7993        }
    8094
    8195        /**
    82          * Generate a cookie session identification token.
     96         * Generate a session token and attach session information to it.
    8397         *
    84          * A session identification token is a long, random string. It is used to
    85          * link a cookie to an expiration time and to ensure that cookies become
    86          * invalidated upon logout. This function generates a token and stores it
    87          * with the associated expiration time.
     98         * A session token is a long, random string. It is used in a cookie
     99         * link that cookie to an expiration time and to ensure the cookie
     100         * becomes invalidated upon logout.
    88101         *
     102         * This function generates a token and stores it with the associated
     103         * expiration time (and potentially other session information via the
     104         * `attach_session_information` filter).
     105         *
    89106         * @since 4.0.0
    90107         * @access public
    91108         *
    92109         * @param int $expiration Session expiration timestamp.
    93          * @return string Session identification token.
     110         * @return string Session token.
    94111         */
    95         final public function create_token( $expiration ) {
     112        final public function create( $expiration ) {
    96113                /**
    97114                 * Filter the information attached to the newly created session.
    98115                 *
     
    109126
    110127                $token = wp_generate_password( 43, false, false );
    111128
    112                 $this->update_token( $token, $session );
     129                $this->update( $token, $session );
    113130
    114131                return $token;
    115132        }
    116133
    117134        /**
    118          * Updates a session based on its token.
     135         * Update a session token.
    119136         *
    120137         * @since 4.0.0
    121138         * @access public
    122139         *
    123          * @param string $token Token to update.
     140         * @param string $token Session token to update.
    124141         * @param array  $session Session information.
    125142         */
    126         final public function update_token( $token, $session ) {
     143        final public function update( $token, $session ) {
    127144                $verifier = $this->hash_token( $token );
    128145                $this->update_session( $verifier, $session );
    129146        }
     
    134151         * @since 4.0.0
    135152         * @access public
    136153         *
    137          * @param string $token Token to destroy.
     154         * @param string $token Session token to destroy.
    138155         */
    139         final public function destroy_token( $token ) {
     156        final public function destroy( $token ) {
    140157                $verifier = $this->hash_token( $token );
    141158                $this->update_session( $verifier, null );
    142159        }
     
    148165         * @since 4.0.0
    149166         * @access public
    150167         *
    151          * @param string $token_to_keep Token to keep.
     168         * @param string $token_to_keep Session token to keep.
    152169         */
    153         final public function destroy_other_tokens( $token_to_keep ) {
     170        final public function destroy_others( $token_to_keep ) {
    154171                $verifier = $this->hash_token( $token_to_keep );
    155172                $session = $this->get_session( $verifier );
    156173                if ( $session ) {
    157174                        $this->destroy_other_sessions( $verifier );
    158175                } else {
    159                         $this->destroy_all_tokens();
     176                        $this->destroy_all_sessions();
    160177                }
    161178        }
    162179
     
    175192        }
    176193
    177194        /**
    178          * Destroy all tokens for a user.
     195         * Destroy all session tokens for a user.
    179196         *
    180197         * @since 4.0.0
    181198         * @access public
    182199         */
    183         final public function destroy_all_tokens() {
     200        final public function destroy_all() {
    184201                $this->destroy_all_sessions();
    185202        }
    186203
    187204        /**
    188          * Destroy all tokens for all users.
     205         * Destroy all session tokens for all users.
    189206         *
    190207         * @since 4.0.0
    191208         * @access public
    192209         * @static
    193210         */
    194         final public static function destroy_all_tokens_for_all_users() {
     211        final public static function destroy_all_for_all_users() {
    195212                $manager = apply_filters( 'session_token_manager', 'WP_User_Meta_Session_Tokens' );
    196213                call_user_func( array( $manager, 'drop_sessions' ) );
    197214        }
     
    204221         *
    205222         * @return array Sessions of a user.
    206223         */
    207         final public function get_all_sessions() {
     224        final public function get_all() {
    208225                return array_values( $this->get_sessions() );
    209226        }
    210227
  • src/wp-includes/user.php

     
    22072207 */
    22082208function wp_get_all_sessions() {
    22092209        $manager = WP_Session_Tokens::get_instance( get_current_user_id() );
    2210         return $manager->get_all_sessions();
     2210        return $manager->get_all();
    22112211}
    22122212
    22132213/**
     
    22192219        $token = wp_get_session_token();
    22202220        if ( $token ) {
    22212221                $manager = WP_Session_Tokens::get_instance( get_current_user_id() );
    2222                 $manager->destroy_token( $token );
     2222                $manager->destroy( $token );
    22232223        }
    22242224}
    22252225
     
    22322232        $token = wp_get_session_token();
    22332233        if ( $token ) {
    22342234                $manager = WP_Session_Tokens::get_instance( get_current_user_id() );
    2235                 $manager->destroy_other_tokens( $token );
     2235                $manager->destroy_others( $token );
    22362236        }
    22372237}
    22382238
     
    22432243 */
    22442244function wp_destroy_all_sessions() {
    22452245        $manager = WP_Session_Tokens::get_instance( get_current_user_id() );
    2246         $manager->destroy_all_tokens();
     2246        $manager->destroy_all();
    22472247}
  • tests/phpunit/tests/user/session.php

     
    1818
    1919        function test_verify_and_destroy_token() {
    2020                $expiration = time() + DAY_IN_SECONDS;
    21                 $token = $this->manager->create_token( $expiration );
    22                 $this->assertFalse( $this->manager->verify_token( 'foo' ) );
    23                 $this->assertTrue( $this->manager->verify_token( $token ) );
    24                 $this->manager->destroy_token( $token );
    25                 $this->assertFalse( $this->manager->verify_token( $token ) );
     21                $token = $this->manager->create( $expiration );
     22                $this->assertFalse( $this->manager->verify( 'foo' ) );
     23                $this->assertTrue( $this->manager->verify( $token ) );
     24                $this->manager->destroy( $token );
     25                $this->assertFalse( $this->manager->verify( $token ) );
    2626        }
    2727
    2828        function test_destroy_other_tokens() {
    2929                $expiration = time() + DAY_IN_SECONDS;
    30                 $token_1 = $this->manager->create_token( $expiration );
    31                 $token_2 = $this->manager->create_token( $expiration );
    32                 $token_3 = $this->manager->create_token( $expiration );
    33                 $this->assertTrue( $this->manager->verify_token( $token_1 ) );
    34                 $this->assertTrue( $this->manager->verify_token( $token_2 ) );
    35                 $this->assertTrue( $this->manager->verify_token( $token_3 ) );
    36                 $this->manager->destroy_other_tokens( $token_2 );
    37                 $this->assertFalse( $this->manager->verify_token( $token_1 ) );
    38                 $this->assertTrue( $this->manager->verify_token( $token_2 ) );
    39                 $this->assertFalse( $this->manager->verify_token( $token_3 ) );
     30                $token_1 = $this->manager->create( $expiration );
     31                $token_2 = $this->manager->create( $expiration );
     32                $token_3 = $this->manager->create( $expiration );
     33                $this->assertTrue( $this->manager->verify( $token_1 ) );
     34                $this->assertTrue( $this->manager->verify( $token_2 ) );
     35                $this->assertTrue( $this->manager->verify( $token_3 ) );
     36                $this->manager->destroy_others( $token_2 );
     37                $this->assertFalse( $this->manager->verify( $token_1 ) );
     38                $this->assertTrue( $this->manager->verify( $token_2 ) );
     39                $this->assertFalse( $this->manager->verify( $token_3 ) );
    4040        }
    4141
    4242        function test_destroy_all_tokens() {
    4343                $expiration = time() + DAY_IN_SECONDS;
    44                 $token_1 = $this->manager->create_token( $expiration );
    45                 $token_2 = $this->manager->create_token( $expiration );
    46                 $this->assertTrue( $this->manager->verify_token( $token_1 ) );
    47                 $this->assertTrue( $this->manager->verify_token( $token_2 ) );
    48                 $this->manager->destroy_all_tokens();
    49                 $this->assertFalse( $this->manager->verify_token( $token_1 ) );
    50                 $this->assertFalse( $this->manager->verify_token( $token_2 ) );
     44                $token_1 = $this->manager->create( $expiration );
     45                $token_2 = $this->manager->create( $expiration );
     46                $this->assertTrue( $this->manager->verify( $token_1 ) );
     47                $this->assertTrue( $this->manager->verify( $token_2 ) );
     48                $this->manager->destroy_all();
     49                $this->assertFalse( $this->manager->verify( $token_1 ) );
     50                $this->assertFalse( $this->manager->verify( $token_2 ) );
    5151        }
    5252}