Make WordPress Core

Changeset 50725 for branches/5.5


Ignore:
Timestamp:
04/15/2021 01:05:12 AM (5 years ago)
Author:
peterwilsoncc
Message:

Grouped merges for 5.5.4.

  • REST API: Allow authors to read their own password protected posts.
  • About page update

Merges [50717] to the 5.5 branch.

Location:
branches/5.5
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/5.5/src/wp-admin/about.php

    r49458 r50725  
    6565                        <div class="column">
    6666                                <h2><?php _e( 'Maintenance and Security Releases' ); ?></h2>
     67                                <p>
     68                                        <?php
     69                                        printf(
     70                                                /* translators: %s: WordPress version number */
     71                                                __( '<strong>Version %s</strong> addressed some security issues.' ),
     72                                                '5.5.4'
     73                                        );
     74                                        ?>
     75                                        <?php
     76                                        printf(
     77                                                /* translators: %s: HelpHub URL */
     78                                                __( 'For more information, see <a href="%s">the release notes</a>.' ),
     79                                                sprintf(
     80                                                        /* translators: %s: WordPress version */
     81                                                        esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ),
     82                                                        sanitize_title( '5.5.4' )
     83                                                )
     84                                        );
     85                                        ?>
     86                                </p>
    6787                                <p>
    6888                                        <?php
  • branches/5.5/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php

    r48613 r50725  
    3131         */
    3232        protected $meta;
     33
     34        /**
     35         * Passwordless post access permitted.
     36         *
     37         * @since 5.7.1
     38         * @var int[]
     39         */
     40        protected $password_check_passed = array();
    3341
    3442        /**
     
    147155
    148156                return true;
     157        }
     158
     159        /**
     160         * Override the result of the post password check for REST requested posts.
     161         *
     162         * Allow users to read the content of password protected posts if they have
     163         * previously passed a permission check or if they have the `edit_post` capability
     164         * for the post being checked.
     165         *
     166         * @since 5.7.1
     167         *
     168         * @param bool    $required Whether the post requires a password check.
     169         * @param WP_Post $post     The post been password checked.
     170         * @return bool Result of password check taking in to account REST API considerations.
     171         */
     172        public function check_password_required( $required, $post ) {
     173                if ( ! $required ) {
     174                        return $required;
     175                }
     176
     177                $post = get_post( $post );
     178
     179                if ( ! $post ) {
     180                        return $required;
     181                }
     182
     183                if ( ! empty( $this->password_check_passed[ $post->ID ] ) ) {
     184                        // Password previously checked and approved.
     185                        return false;
     186                }
     187
     188                return ! current_user_can( 'edit_post', $post->ID );
    149189        }
    150190
     
    316356                // Allow access to all password protected posts if the context is edit.
    317357                if ( 'edit' === $request['context'] ) {
    318                         add_filter( 'post_password_required', '__return_false' );
     358                        add_filter( 'post_password_required', array( $this, 'check_password_required' ), 10, 2 );
    319359                }
    320360
     
    332372                // Reset filter.
    333373                if ( 'edit' === $request['context'] ) {
    334                         remove_filter( 'post_password_required', '__return_false' );
     374                        remove_filter( 'post_password_required', array( $this, 'check_password_required' ) );
    335375                }
    336376
     
    447487                // Allow access to all password protected posts if the context is edit.
    448488                if ( 'edit' === $request['context'] ) {
    449                         add_filter( 'post_password_required', '__return_false' );
     489                        add_filter( 'post_password_required', array( $this, 'check_password_required' ), 10, 2 );
    450490                }
    451491
     
    475515                }
    476516
    477                 // Edit context always gets access to password-protected posts.
    478                 if ( 'edit' === $request['context'] ) {
     517                /*
     518                 * Users always gets access to password protected content in the edit
     519                 * context if they have the `edit_post` meta capability.
     520                 */
     521                if (
     522                        'edit' === $request['context'] &&
     523                        current_user_can( 'edit_post', $post->ID )
     524                ) {
    479525                        return true;
    480526                }
     
    16671713
    16681714                if ( $this->can_access_password_content( $post, $request ) ) {
     1715                        $this->password_check_passed[ $post->ID ] = true;
    16691716                        // Allow access to the post, permissions already checked before.
    1670                         add_filter( 'post_password_required', '__return_false' );
     1717                        add_filter( 'post_password_required', array( $this, 'check_password_required' ), 10, 2 );
    16711718
    16721719                        $has_password_filter = true;
     
    17061753                if ( $has_password_filter ) {
    17071754                        // Reset filter.
    1708                         remove_filter( 'post_password_required', '__return_false' );
     1755                        remove_filter( 'post_password_required', array( $this, 'check_password_required' ) );
    17091756                }
    17101757
  • branches/5.5/tests/phpunit/tests/rest-api/rest-posts-controller.php

    r48275 r50725  
    16081608
    16091609                $this->assertErrorResponse( 'rest_forbidden', $response, 401 );
     1610        }
     1611
     1612        public function test_get_post_draft_edit_context() {
     1613                $post_content = 'Hello World!';
     1614                $this->factory->post->create(
     1615                        array(
     1616                                'post_title'    => 'Hola',
     1617                                'post_password' => 'password',
     1618                                'post_content'  => $post_content,
     1619                                'post_excerpt'  => $post_content,
     1620                                'post_author'   => self::$editor_id,
     1621                        )
     1622                );
     1623                $draft_id = $this->factory->post->create(
     1624                        array(
     1625                                'post_status'  => 'draft',
     1626                                'post_author'  => self::$contributor_id,
     1627                                'post_content' => '<!-- wp:latest-posts {"displayPostContent":true} /--> <!-- wp:latest-posts {"displayPostContent":true,"displayPostContentRadio":"full_post"} /-->',
     1628                        )
     1629                );
     1630                wp_set_current_user( self::$contributor_id );
     1631                $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $draft_id ) );
     1632                $request->set_param( 'context', 'edit' );
     1633                $response = rest_get_server()->dispatch( $request );
     1634                $data     = $response->get_data();
     1635                $this->assertNotContains( $post_content, $data['content']['rendered'] );
    16101636        }
    16111637
Note: See TracChangeset for help on using the changeset viewer.