WordPress.org

Make WordPress Core

Ticket #46349: 46349.diff

File 46349.diff, 7.2 KB (added by andraganescu, 2 years ago)
  • src/wp-admin/css/login.css

    diff --git a/src/wp-admin/css/login.css b/src/wp-admin/css/login.css
    index 329cf01f60..08e35b03ce 100644
    a b p { 
    134134        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
    135135}
    136136
     137.login-action-confirm_admin_email #login {
     138        width: 60vw;
     139        margin-top: -2vh;
     140
     141}
     142
     143@media screen and (max-width: 700px) {
     144        .login-action-confirm_admin_email #login {
     145                width: 100vw;
     146                margin-top: -2vh;
     147        }
     148}
     149
    137150.login form .forgetmenot {
    138151        font-weight: 400;
    139152        float: left;
    p { 
    144157        float: right;
    145158}
    146159
     160.login .adminemailconfirmform .submit {
     161        text-align: center;
     162}
     163
     164.admin-email__later {
     165        text-align: left;
     166}
     167
     168#login form p.admin-email__details {
     169        margin-bottom: 20px;
     170        margin-top: 20px;
     171}
     172
     173.admin-email__details--small {
     174        margin-top: 20px;
     175        margin-bottom: 20px;
     176        font-size: .9em;
     177}
     178
     179.login h1.admin-email__heading {
     180        border-bottom: 1px rgb(241, 241, 241) solid;
     181        color: rgb(95, 95, 95);
     182        font-weight: normal;
     183        padding-bottom: 2%;
     184        text-align: left;
     185}
     186
     187.login h2.admin-email__heading {
     188        font-weight: normal;
     189        padding-bottom: 1%;
     190        padding-top: 3%;
     191}
     192
     193.admin-email__actions div {
     194        padding-top: 2em;
     195}
     196
     197.login .adminemailconfirmform .button-primary {
     198        float: none;
     199}
     200
    147201#login form p {
    148202        margin-bottom: 0;
    149203}
  • src/wp-includes/user.php

    diff --git a/src/wp-includes/user.php b/src/wp-includes/user.php
    index 3819f21f6f..64457b0eba 100644
    a b function wp_authenticate_username_password( $user, $username, $password ) { 
    187187        return $user;
    188188}
    189189
     190function wp_confirm_admin_email( $redirect_to, $requested_redirect_to, $user ) {
     191
     192        if ( ! is_a ( $user , 'WP_User' ) || ! $user->exists() ) {
     193                return $redirect_to;
     194        }
     195
     196        if ( ! $user->has_cap( 'manage_options' ) ) {
     197                return $redirect_to;
     198        }
     199
     200        $admin_email_lifespan = get_option( 'admin_email_lifespan' );
     201
     202        if ( ! empty( $admin_email_lifespan ) ) {
     203                if ( time() < $admin_email_lifespan ) {
     204                        return $redirect_to;
     205                }
     206        }
     207
     208        return wp_login_url( $redirect_to ) . '&' . 'action=confirm_admin_email';
     209
     210}
     211
    190212/**
    191213 * Authenticates a user using the email and password.
    192214 *
  • src/wp-login.php

    diff --git a/src/wp-login.php b/src/wp-login.php
    index 5ecf5f0dbf..a2fd229480 100644
    a b function retrieve_password() { 
    444444}
    445445
    446446// Validate action so as to default to the login screen.
    447 if ( ! in_array( $action, array( 'postpass', 'logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register', 'login', 'confirmaction', WP_Recovery_Mode_Link_Service::LOGIN_ACTION_ENTERED ), true ) && false === has_filter( 'login_form_' . $action ) ) {
     447if ( ! in_array( $action, array( 'confirm_admin_email', 'postpass', 'logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register', 'login', 'confirmaction', WP_Recovery_Mode_Link_Service::LOGIN_ACTION_ENTERED ), true ) && false === has_filter( 'login_form_' . $action ) ) {
    448448        $action = 'login';
    449449}
    450450
    function retrieve_password() { 
    502502
    503503switch ( $action ) {
    504504
     505        case 'confirm_admin_email':
     506
     507                if( ! is_user_logged_in() ) {
     508                        wp_safe_redirect( wp_login_url( $redirect_to ) );
     509                }
     510
     511                if ( ! empty( $_REQUEST['redirect_to'] ) ) {
     512                        $redirect_to = $_REQUEST['redirect_to'];
     513                } else {
     514                        $redirect_to           = admin_url();
     515                }
     516
     517                if ( current_user_can( 'manage_options' ) ) {
     518                        $admin_email = get_option( 'admin_email' );
     519                } else {
     520                        wp_safe_redirect( $redirect_to );
     521                }
     522
     523        $admin_email_max_age = apply_filters( 'admin_email_max_age', 180 * DAY_IN_SECONDS );
     524
     525        $admin_email_lifespan = time() + $admin_email_max_age;
     526                $admin_email_remind_in = time() + round ( $admin_email_max_age/4 );
     527
     528                if ( ! empty( $_GET[ 'remind_me_later' ] ) ) {
     529                        update_option( 'admin_email_lifespan', $admin_email_remind_in );
     530                        wp_safe_redirect( $redirect_to );
     531                }
     532
     533                if ( ! empty( $_POST[ 'correct_email' ] ) ) {
     534                        update_option( 'admin_email_lifespan', $admin_email_lifespan );
     535                        wp_safe_redirect( $redirect_to );
     536                }
     537
     538                /**
     539                * Fires before the admin email confirm form.
     540                *
     541                * @since 5.2.0
     542                *
     543                * @param WP_Error $errors A `WP_Error` object containing any errors generated by using invalid credentials. Note that the error object may not contain any errors.
     544                *
     545                */
     546                do_action( 'confirm_admin_email' );
     547
     548                login_header( __( 'Confirm your admin email' ), '', $errors );
     549                ?>
     550
     551                <form class='adminemailconfirmform' name="adminemailconfirmform" id="adminemailconfirmform" action="<?php echo esc_url( network_site_url( 'wp-login.php?action=confirm_admin_email', 'login_post' ) ); ?>" method="post">
     552
     553                        <input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" />
     554                        <?php
     555                        /**
     556                        * Fires inside the lostpassword form tags, before the hidden fields.
     557                        *
     558                        * @since 2.1.0
     559                        */
     560                        do_action( 'admin_email_confirm_form' );
     561                        ?>
     562                        <h1 class="admin-email__heading">
     563                                <?php
     564                                        _e( 'Admin email verification' );
     565                                ?>
     566                        </h1>
     567                        <p class="admin-email__details">
     568                                <?php
     569                                        _e( 'We\'d like to verify that the <strong>general admin email</strong> for this website is still correct.' );
     570                                ?>
     571                                <a href="">
     572                                        <?php
     573                                                _e( 'Why is this important?' );
     574                                        ?>
     575                                </a>
     576                        </p>
     577                        <h2 class="admin-email__heading">
     578                                <?php
     579                                        _e( 'Current general admin email' );
     580                                ?>
     581                        </h2>
     582                        <p class="admin-email__details">
     583                                <?php _e( 'We have the following email address registered as your <strong>general admin email</strong>:' ); ?>
     584                        </p>
     585
     586                        <h2 class="admin-email__heading">
     587                                <?php
     588                                        echo esc_html( $admin_email );
     589                                ?>
     590                        </h2>
     591                        <p class="admin-email__details--small">
     592                                <?php _e( 'This can be different from the email address you just logged in with.' ); ?>
     593                                <a href="">
     594                                        <?php
     595                                                _e( 'Learn more' );
     596                                        ?>
     597                                </a>
     598                        </p>
     599
     600                        <div class="admin-email__actions">
     601                                <div class="admin-email__actions-primary">
     602                                        <?php
     603
     604                                        $change_link = admin_url( 'options-general.php?highlight=confirm_admin_email' );
     605                                        ?>
     606                                        <a class="button button-large" href="<?php echo $change_link ?>">
     607                                                <?php esc_attr_e( 'Please change' ); ?>
     608                                        </a>
     609                                        <input type="submit" name="correct_email" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e( 'Yes it\'s correct' ); ?>" />
     610                                </div>
     611                                <div class="admin-email__actions-secondary">
     612                                        <p class="admin-email__later">
     613                                        <?php
     614
     615                                                $remind_me_link = wp_login_url( $redirect_to ) .
     616                                                        '&' . 'action=confirm_admin_email' .
     617                                                        '&' . 'remind_me_later=true';
     618                                        ?>
     619                                                <a href="<?php echo $remind_me_link ?>"><?php _e( 'Remind me later' ) ?></a>
     620                                        </p>
     621                                </div>
     622
     623                        </div>
     624                </form>
     625
     626                <?php
     627                login_footer();
     628
     629        break;
     630
     631
     632
    505633        case 'postpass':
    506634                if ( ! array_key_exists( 'post_password', $_POST ) ) {
    507635                        wp_safe_redirect( wp_get_referer() );
    function retrieve_password() { 
    9691097                 */
    9701098                $redirect_to = apply_filters( 'login_redirect', $redirect_to, $requested_redirect_to, $user );
    9711099
     1100        $redirect_to = wp_confirm_admin_email( $redirect_to, $requested_redirect_to, $user );
     1101
    9721102                if ( ! is_wp_error( $user ) && ! $reauth ) {
    9731103                        if ( $interim_login ) {
    9741104                                $message       = '<p class="message">' . __( 'You have logged in successfully.' ) . '</p>';