diff options
Diffstat (limited to 'plugins/jetpack/modules/sso')
8 files changed, 218 insertions, 107 deletions
diff --git a/plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php b/plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php index 85a683c3..9d9c5477 100644 --- a/plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php +++ b/plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php @@ -227,6 +227,19 @@ class Jetpack_SSO_Helpers { return $user; } + + static function extend_auth_cookie_expiration_for_sso() { + /** + * Determines how long the auth cookie is valid for when a user logs in with SSO. + * + * @module sso + * + * @since 4.4.0 + * + * @param int YEAR_IN_SECONDS + */ + return intval( apply_filters( 'jetpack_sso_auth_cookie_expirtation', YEAR_IN_SECONDS ) ); + } } endif; diff --git a/plugins/jetpack/modules/sso/class.jetpack-sso-notices.php b/plugins/jetpack/modules/sso/class.jetpack-sso-notices.php new file mode 100644 index 00000000..f89de5ba --- /dev/null +++ b/plugins/jetpack/modules/sso/class.jetpack-sso-notices.php @@ -0,0 +1,203 @@ +<?php + +if ( ! class_exists( 'Jetpack_SSO_Notices' ) ) : + +/** + * A collection of helper functions used in the SSO module. + * + * @since 4.4.0 + */ +class Jetpack_SSO_Notices { + /** + * Error message displayed on the login form when two step is required and + * the user's account on WordPress.com does not have two step enabled. + * + * @since 2.7 + * @param string $message + * @return string + **/ + public static function error_msg_enable_two_step( $message ) { + $error = sprintf( + wp_kses( + __( + 'Two-Step Authentication is required to access this site. Please visit your <a href="%1$s" target="_blank">Security Settings</a> to configure <a href="%2$s" target="_blank">Two-step Authentication</a> for your account.', + 'jetpack' + ), + array( 'a' => array( 'href' => array() ) ) + ), + 'https://wordpress.com/me/security/two-step', + 'https://support.wordpress.com/security/two-step-authentication/' + ); + + $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error ); + + return $message; + } + + /** + * Error message displayed when the user tries to SSO, but match by email + * is off and they already have an account with their email address on + * this site. + * + * @param string $message + * @return string + */ + public static function error_msg_email_already_exists( $message ) { + $error = sprintf( + wp_kses( + __( + 'You already have an account on this site. Please <a href="%1$s">sign in</a> with your username and password and then connect to WordPress.com.', + 'jetpack' + ), + array( 'a' => array( 'href' => array() ) ) + ), + esc_url_raw( add_query_arg( 'jetpack-sso-show-default-form', '1', wp_login_url() ) ) + ); + + $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error ); + + return $message; + } + + /** + * Error message that is displayed when the current site is in an identity crisis and SSO can not be used. + * + * @since 4.3.2 + * + * @param $message + * + * @return string + */ + public static function error_msg_identity_crisis( $message ) { + $error = esc_html__( 'Logging in with WordPress.com is not currently available because this site is experiencing connection problems.', 'jetpack' ); + $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error ); + return $message; + } + + /** + * Error message that is displayed when we are not able to verify the SSO nonce due to an XML error or + * failed validation. In either case, we prompt the user to try again or log in with username and password. + * + * @since 4.3.2 + * + * @param $message + * + * @return string + */ + public static function error_invalid_response_data( $message ) { + $error = esc_html__( + 'There was an error logging you in via WordPress.com, please try again or try logging in with your username and password.', + 'jetpack' + ); + $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error ); + return $message; + } + + /** + * Error message that is displayed when we were not able to automatically create an account for a user + * after a user has logged in via SSO. By default, this message is triggered after trying to create an account 5 times. + * + * @since 4.3.2 + * + * @param $message + * + * @return string + */ + public static function error_unable_to_create_user( $message ) { + $error = esc_html__( + 'There was an error creating a user for you. Please contact the administrator of your site.', + 'jetpack' + ); + $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error ); + return $message; + } + + /** + * When the default login form is hidden, this method is called on the 'authenticate' filter with a priority of 30. + * This method disables the ability to submit the default login form. + * + * @param $user + * + * @return WP_Error + */ + public static function disable_default_login_form( $user ) { + if ( is_wp_error( $user ) ) { + return $user; + } + + /** + * Since we're returning an error that will be shown as a red notice, let's remove the + * informational "blue" notice. + */ + remove_filter( 'login_message', array( 'Jetpack_SSO_Notices', 'msg_login_by_jetpack' ) ); + return new WP_Error( 'jetpack_sso_required', self::get_sso_required_message() ); + } + + /** + * Message displayed when the site admin has disabled the default WordPress + * login form in Settings > General > Single Sign On + * + * @since 2.7 + * @param string $message + * + * @return string + **/ + public static function msg_login_by_jetpack( $message ) { + $message .= sprintf( '<p class="message">%s</p>', self::get_sso_required_message() ); + return $message; + } + + public static function get_sso_required_message() { + $msg = esc_html__( + 'A WordPress.com account is required to access this site. Click the button below to sign in or create a free WordPress.com account.', + 'jetpack' + ); + + /** + * Filter the message displayed when the default WordPress login form is disabled. + * + * @module sso + * + * @since 2.8.0 + * + * @param string $msg Disclaimer when default WordPress login form is disabled. + */ + return apply_filters( 'jetpack_sso_disclaimer_message', $msg ); + } + + /** + * Message displayed when the user can not be found after approving the SSO process on WordPress.com + * + * @param string $message + * @return string + */ + public static function cant_find_user( $message ) { + $error = esc_html__( + "We couldn't find your account. If you already have an account, make sure you have connected to WordPress.com.", + 'jetpack' + ); + $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error ); + + return $message; + } + + /** + * Error message that is displayed when the current site is in an identity crisis and SSO can not be used. + * + * @since 4.4.0 + * + * @param $message + * + * @return string + */ + public static function sso_not_allowed_in_staging( $message ) { + $error = esc_html__( + 'Logging in with WordPress.com is disabled for sites that are in staging mode.', + 'jetpack' + ); + $message .= sprintf( '<p class="message">%s</p>', $error ); + return $message; + } +} + +endif; diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css b/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css index cd5c8af4..ea07b3ff 100644 --- a/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css +++ b/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css @@ -5,15 +5,6 @@ padding-bottom: 92px; } -.jetpack-sso .message { - margin-top: 20px; -} - -.jetpack-sso #login .message:first-child, -.jetpack-sso #login h1 + .message { - margin-top: 0; -} - .jetpack-sso-repositioned #loginform { padding-bottom: 26px; } diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css b/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css index 77c6aa07..1d92ae00 100644 --- a/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css +++ b/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css @@ -1 +1 @@ -#loginform{position:relative!important;padding-bottom:92px}.jetpack-sso .message{margin-top:20px}.jetpack-sso #login .message:first-child,.jetpack-sso #login h1+.message{margin-top:0}.jetpack-sso-repositioned #loginform{padding-bottom:26px}#loginform #jetpack-sso-wrap,#loginform #jetpack-sso-wrap *{box-sizing:border-box}#jetpack-sso-wrap__action,#jetpack-sso-wrap__user{display:none}.jetpack-sso-form-display #jetpack-sso-wrap__action,.jetpack-sso-form-display #jetpack-sso-wrap__user{display:block}#jetpack-sso-wrap{position:absolute;bottom:20px;padding:0 24px;margin-right:-24px;margin-left:-24px;width:100%}.jetpack-sso-repositioned #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:16px;margin-right:0;margin-left:0}.jetpack-sso-form-display #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:0;margin-right:0;margin-left:0}#loginform #jetpack-sso-wrap p{color:#777;margin-bottom:16px}#jetpack-sso-wrap a{display:block;width:100%;text-align:center;text-decoration:none}#jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:none}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:block}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default,.jetpack-sso-form-display #loginform>div,.jetpack-sso-form-display #loginform>p{display:none}.jetpack-sso-form-display #loginform #jetpack-sso-wrap{display:block}.jetpack-sso-form-display #loginform{padding:26px 24px}.jetpack-sso-or{margin-bottom:16px;position:relative;text-align:center}.jetpack-sso-or:before{background:#E5E5E5;content:'';height:1px;position:absolute;right:0;top:50%;width:100%}.jetpack-sso-or span{background:#fff;color:#777;position:relative;padding:0 8px;text-transform:uppercase}.jetpack-sso.button{height:36px;line-height:34px;float:none;margin-bottom:16px;position:relative;width:100%}.jetpack-sso.button>span{position:relative;padding-right:30px}.jetpack-sso.button .genericon-wordpress{position:absolute;right:0;top:-3px;font-size:24px}@media screen and (max-width:782px){.jetpack-sso.button{line-height:22px}}#jetpack-sso-wrap__user img{border-radius:50%;display:block;margin:0 auto 16px}#jetpack-sso-wrap__user h2{font-size:21px;font-weight:300;margin-bottom:16px;text-align:center}#jetpack-sso-wrap__user h2 span{font-weight:700}.jetpack-sso-wrap__reauth{margin-bottom:16px}.jetpack-sso-form-display #nav{display:none}.jetpack-sso-form-display #backtoblog{margin:24px 0 0}.jetpack-sso-clear:after{content:"";display:table;clear:both}
\ No newline at end of file +#loginform{position:relative!important;padding-bottom:92px}.jetpack-sso-repositioned #loginform{padding-bottom:26px}#loginform #jetpack-sso-wrap,#loginform #jetpack-sso-wrap *{box-sizing:border-box}#jetpack-sso-wrap__action,#jetpack-sso-wrap__user{display:none}.jetpack-sso-form-display #jetpack-sso-wrap__action,.jetpack-sso-form-display #jetpack-sso-wrap__user{display:block}#jetpack-sso-wrap{position:absolute;bottom:20px;padding:0 24px;margin-right:-24px;margin-left:-24px;width:100%}.jetpack-sso-repositioned #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:16px;margin-right:0;margin-left:0}.jetpack-sso-form-display #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:0;margin-right:0;margin-left:0}#loginform #jetpack-sso-wrap p{color:#777;margin-bottom:16px}#jetpack-sso-wrap a{display:block;width:100%;text-align:center;text-decoration:none}#jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:none}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:block}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default,.jetpack-sso-form-display #loginform>div,.jetpack-sso-form-display #loginform>p{display:none}.jetpack-sso-form-display #loginform #jetpack-sso-wrap{display:block}.jetpack-sso-form-display #loginform{padding:26px 24px}.jetpack-sso-or{margin-bottom:16px;position:relative;text-align:center}.jetpack-sso-or:before{background:#E5E5E5;content:'';height:1px;position:absolute;right:0;top:50%;width:100%}.jetpack-sso-or span{background:#fff;color:#777;position:relative;padding:0 8px;text-transform:uppercase}.jetpack-sso.button{height:36px;line-height:34px;float:none;margin-bottom:16px;position:relative;width:100%}.jetpack-sso.button>span{position:relative;padding-right:30px}.jetpack-sso.button .genericon-wordpress{position:absolute;right:0;top:-3px;font-size:24px}@media screen and (max-width:782px){.jetpack-sso.button{line-height:22px}}#jetpack-sso-wrap__user img{border-radius:50%;display:block;margin:0 auto 16px}#jetpack-sso-wrap__user h2{font-size:21px;font-weight:300;margin-bottom:16px;text-align:center}#jetpack-sso-wrap__user h2 span{font-weight:700}.jetpack-sso-wrap__reauth{margin-bottom:16px}.jetpack-sso-form-display #nav{display:none}.jetpack-sso-form-display #backtoblog{margin:24px 0 0}.jetpack-sso-clear:after{content:"";display:table;clear:both}
\ No newline at end of file diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login.css b/plugins/jetpack/modules/sso/jetpack-sso-login.css index e79cf1f4..3160bcb6 100644 --- a/plugins/jetpack/modules/sso/jetpack-sso-login.css +++ b/plugins/jetpack/modules/sso/jetpack-sso-login.css @@ -4,15 +4,6 @@ padding-bottom: 92px; } -.jetpack-sso .message { - margin-top: 20px; -} - -.jetpack-sso #login .message:first-child, -.jetpack-sso #login h1 + .message { - margin-top: 0; -} - .jetpack-sso-repositioned #loginform { padding-bottom: 26px; } diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login.js b/plugins/jetpack/modules/sso/jetpack-sso-login.js index 53d1a0e8..9487aef0 100644 --- a/plugins/jetpack/modules/sso/jetpack-sso-login.js +++ b/plugins/jetpack/modules/sso/jetpack-sso-login.js @@ -1,7 +1,5 @@ jQuery( document ).ready( function( $ ) { var body = $( 'body' ), - rememberMe = $( '#rememberme' ), - ssoButton = $( 'a.jetpack-sso.button' ), toggleSSO = $( '.jetpack-sso-toggle' ), userLogin = $( '#user_login' ), ssoWrap = $( '#jetpack-sso-wrap' ), @@ -24,19 +22,6 @@ jQuery( document ).ready( function( $ ) { loginForm.append( ssoWrap ); body.addClass( 'jetpack-sso-repositioned' ); - rememberMe.on( 'change', function() { - var url = ssoButton.prop( 'href' ), - isChecked = rememberMe.prop( 'checked' ) ? 1 : 0; - - if ( url.match( /&rememberme=\d/ ) ) { - url = url.replace( /&rememberme=\d/, '&rememberme=' + isChecked ); - } else { - url += '&rememberme=' + isChecked; - } - - ssoButton.prop( 'href', url ); - } ).change(); - toggleSSO.on( 'click', function( e ) { e.preventDefault(); body.toggleClass( 'jetpack-sso-form-display' ); diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login.min.css b/plugins/jetpack/modules/sso/jetpack-sso-login.min.css index 8902336e..c066b8ae 100644 --- a/plugins/jetpack/modules/sso/jetpack-sso-login.min.css +++ b/plugins/jetpack/modules/sso/jetpack-sso-login.min.css @@ -1,2 +1,2 @@ /* Do not modify this file directly. It is concatenated from individual module CSS files. */ -#loginform{position:relative!important;padding-bottom:92px}.jetpack-sso .message{margin-top:20px}.jetpack-sso #login .message:first-child,.jetpack-sso #login h1+.message{margin-top:0}.jetpack-sso-repositioned #loginform{padding-bottom:26px}#loginform #jetpack-sso-wrap,#loginform #jetpack-sso-wrap *{box-sizing:border-box}#jetpack-sso-wrap__action,#jetpack-sso-wrap__user{display:none}.jetpack-sso-form-display #jetpack-sso-wrap__action,.jetpack-sso-form-display #jetpack-sso-wrap__user{display:block}#jetpack-sso-wrap{position:absolute;bottom:20px;padding:0 24px;margin-left:-24px;margin-right:-24px;width:100%}.jetpack-sso-repositioned #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:16px;margin-left:0;margin-right:0}.jetpack-sso-form-display #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:0;margin-left:0;margin-right:0}#loginform #jetpack-sso-wrap p{color:#777;margin-bottom:16px}#jetpack-sso-wrap a{display:block;width:100%;text-align:center;text-decoration:none}#jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:none}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:block}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default,.jetpack-sso-form-display #loginform>div,.jetpack-sso-form-display #loginform>p{display:none}.jetpack-sso-form-display #loginform #jetpack-sso-wrap{display:block}.jetpack-sso-form-display #loginform{padding:26px 24px}.jetpack-sso-or{margin-bottom:16px;position:relative;text-align:center}.jetpack-sso-or:before{background:#E5E5E5;content:'';height:1px;position:absolute;left:0;top:50%;width:100%}.jetpack-sso-or span{background:#fff;color:#777;position:relative;padding:0 8px;text-transform:uppercase}.jetpack-sso.button{height:36px;line-height:34px;float:none;margin-bottom:16px;position:relative;width:100%}.jetpack-sso.button>span{position:relative;padding-left:30px}.jetpack-sso.button .genericon-wordpress{position:absolute;left:0;top:-3px;font-size:24px}@media screen and (max-width:782px){.jetpack-sso.button{line-height:22px}}#jetpack-sso-wrap__user img{border-radius:50%;display:block;margin:0 auto 16px}#jetpack-sso-wrap__user h2{font-size:21px;font-weight:300;margin-bottom:16px;text-align:center}#jetpack-sso-wrap__user h2 span{font-weight:700}.jetpack-sso-wrap__reauth{margin-bottom:16px}.jetpack-sso-form-display #nav{display:none}.jetpack-sso-form-display #backtoblog{margin:24px 0 0}.jetpack-sso-clear:after{content:"";display:table;clear:both}
\ No newline at end of file +#loginform{position:relative!important;padding-bottom:92px}.jetpack-sso-repositioned #loginform{padding-bottom:26px}#loginform #jetpack-sso-wrap,#loginform #jetpack-sso-wrap *{box-sizing:border-box}#jetpack-sso-wrap__action,#jetpack-sso-wrap__user{display:none}.jetpack-sso-form-display #jetpack-sso-wrap__action,.jetpack-sso-form-display #jetpack-sso-wrap__user{display:block}#jetpack-sso-wrap{position:absolute;bottom:20px;padding:0 24px;margin-left:-24px;margin-right:-24px;width:100%}.jetpack-sso-repositioned #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:16px;margin-left:0;margin-right:0}.jetpack-sso-form-display #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:0;margin-left:0;margin-right:0}#loginform #jetpack-sso-wrap p{color:#777;margin-bottom:16px}#jetpack-sso-wrap a{display:block;width:100%;text-align:center;text-decoration:none}#jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:none}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:block}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default,.jetpack-sso-form-display #loginform>div,.jetpack-sso-form-display #loginform>p{display:none}.jetpack-sso-form-display #loginform #jetpack-sso-wrap{display:block}.jetpack-sso-form-display #loginform{padding:26px 24px}.jetpack-sso-or{margin-bottom:16px;position:relative;text-align:center}.jetpack-sso-or:before{background:#E5E5E5;content:'';height:1px;position:absolute;left:0;top:50%;width:100%}.jetpack-sso-or span{background:#fff;color:#777;position:relative;padding:0 8px;text-transform:uppercase}.jetpack-sso.button{height:36px;line-height:34px;float:none;margin-bottom:16px;position:relative;width:100%}.jetpack-sso.button>span{position:relative;padding-left:30px}.jetpack-sso.button .genericon-wordpress{position:absolute;left:0;top:-3px;font-size:24px}@media screen and (max-width:782px){.jetpack-sso.button{line-height:22px}}#jetpack-sso-wrap__user img{border-radius:50%;display:block;margin:0 auto 16px}#jetpack-sso-wrap__user h2{font-size:21px;font-weight:300;margin-bottom:16px;text-align:center}#jetpack-sso-wrap__user h2 span{font-weight:700}.jetpack-sso-wrap__reauth{margin-bottom:16px}.jetpack-sso-form-display #nav{display:none}.jetpack-sso-form-display #backtoblog{margin:24px 0 0}.jetpack-sso-clear:after{content:"";display:table;clear:both}
\ No newline at end of file diff --git a/plugins/jetpack/modules/sso/jetpack-sso-profile.css b/plugins/jetpack/modules/sso/jetpack-sso-profile.css deleted file mode 100644 index 1d6c1ac3..00000000 --- a/plugins/jetpack/modules/sso/jetpack-sso-profile.css +++ /dev/null @@ -1,72 +0,0 @@ -.jetpack-sso.button { - position: relative; - padding-left: 37px; -} -.jetpack-sso.button:before { - display: block; - box-sizing: border-box; - padding: 7px 0 0; - text-align: center; - position: absolute; - top: -1px; - left: -1px; - border-radius: 2px 0 0 2px; - content: '\f205'; - background: #0074a2; - color: #fff; - -webkit-font-smoothing: antialiased; - width: 30px; - height: 107%; - height: calc( 100% + 2px ); - font: normal 22px/1 Genericons !important; - text-shadow: none; -} -@media screen and (min-width: 783px) { - .jetpack-sso.button:before { - padding-top: 3px; - } -} -.jetpack-sso.button:hover { - border: 1px solid #aaa; -} - -.jetpack-sso-form-table td { - padding-left: 0; -} - -.jetpack-sso-form-table .profile-card { - padding: 10px; - background: #fff; - overflow: hidden; - max-width: 400px; - box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.1 ); - margin-bottom: 1em; -} - -.jetpack-sso-form-table .profile-card img { - float: left; - margin-right: 1em; - width: 48px; - height: 48px; -} - -.jetpack-sso-form-table .profile-card .connected { - float: right; - margin-right: 0.5em; - color: #0a0; -} - -.jetpack-sso-form-table .profile-card p { - margin-top: 0.7em; - font-size: 1.2em; -} - -.jetpack-sso-form-table .profile-card .two_step .enabled a { - float: right; - color: #0a0; -} - -.jetpack-sso-form-table .profile-card .two_step .disabled a { - float: right; - color: red; -} |