PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-connection / src / class-user-account-status.php
jetpack / jetpack_vendor / automattic / jetpack-connection / src Last commit date
abilities 3 days ago connectors 3 days ago health 3 days ago identity-crisis 1 month ago sso 1 month ago traits 8 months ago webhooks 8 months ago class-authorize-json-api.php 1 month ago class-client.php 3 days ago class-connection-assets.php 1 year ago class-connection-notice.php 8 months ago class-error-handler.php 3 days ago class-external-storage.php 4 months ago class-heartbeat.php 1 month ago class-initial-state.php 3 weeks ago class-manager.php 3 days ago class-nonce-handler.php 8 months ago class-package-version-tracker.php 1 month ago class-package-version.php 3 days ago class-partner-coupon.php 2 months ago class-partner.php 2 years ago class-plugin-storage.php 8 months ago class-plugin.php 8 months ago class-rest-authentication.php 3 days ago class-rest-connector.php 3 days ago class-secrets.php 8 months ago class-server-sandbox.php 2 months ago class-site-health.php 3 days ago class-terms-of-service.php 3 days ago class-tokens-locks.php 8 months ago class-tokens.php 3 days ago class-tracking.php 3 days ago class-urls.php 6 months ago class-user-account-status.php 3 days ago class-users-connection-admin.php 2 months ago class-utils.php 2 years ago class-webhooks.php 1 month ago class-xmlrpc-async-call.php 2 years ago class-xmlrpc-connector.php 8 months ago interface-manager.php 4 years ago interface-storage-provider.php 6 months ago
class-user-account-status.php
138 lines
1 <?php
2 /**
3 * Class to check for account errors in the Jetpack Connection.
4 *
5 * @package automattic/jetpack-connection
6 * @since 6.11.0
7 */
8
9 namespace Automattic\Jetpack\Connection;
10
11 /**
12 * Class User_Account_Status
13 */
14 class User_Account_Status {
15 /**
16 * Check for possible account errors between the local user and WPCOM account.
17 *
18 * @since 6.11.0
19 *
20 * @param string $current_user_email The email of the current WordPress user.
21 * @param string $wpcom_user_email The email of the connected WordPress.com account.
22 *
23 * @return array An array of possible account errors, empty if no errors.
24 */
25 public function check_account_errors( $current_user_email, $wpcom_user_email ) {
26 $errors = array();
27
28 // Check for email mismatch error.
29 $has_mismatch = $this->possible_account_mismatch( $current_user_email, $wpcom_user_email );
30 if ( $has_mismatch ) {
31 $errors['mismatch'] = array(
32 'type' => 'mismatch',
33 'message' => __( 'Your WordPress.com email is also used by another user account. This won’t affect functionality but may cause confusion about which user account is connected.', 'jetpack-connection' ),
34 'details' => array(
35 'site_email' => $current_user_email,
36 'wpcom_email' => $wpcom_user_email,
37 ),
38 );
39 }
40
41 /**
42 * Filters the account errors.
43 *
44 * @since 6.11.0
45 *
46 * @param array $errors The array of account errors.
47 * @param string $current_user_email The email of the current WordPress user.
48 * @param string $wpcom_user_email The email of the connected WordPress.com account.
49 */
50 return apply_filters( 'jetpack_connection_account_errors', $errors, $current_user_email, $wpcom_user_email );
51 }
52
53 /**
54 * Check if there is a possible account mismatch between the local user and WPCOM account.
55 *
56 * @since 6.11.0
57 *
58 * @param string $current_user_email The email of the current WordPress user.
59 * @param string $wpcom_user_email The email of the connected WordPress.com account.
60 *
61 * @return bool Whether there is a possible account mismatch.
62 */
63 public function possible_account_mismatch( $current_user_email, $wpcom_user_email ) {
64 if ( ! $wpcom_user_email ) {
65 return false;
66 }
67
68 $normalized_wpcom_email = self::normalize_email( $wpcom_user_email );
69
70 // WordPress.com preserves the casing an address was registered with, while WordPress
71 // stores addresses lowercased, so the two can represent the same address. Compare them
72 // case-insensitively, the same way the get_user_by() lookup below matches.
73 if ( self::normalize_email( $current_user_email ) === $normalized_wpcom_email ) {
74 return false;
75 }
76
77 // The result depends only on the WordPress.com address, so it is cached per address
78 // rather than per user.
79 $transient_key = 'jetpack_account_mismatch_' . md5( $normalized_wpcom_email );
80
81 $cached_result = get_transient( $transient_key );
82
83 if ( false !== $cached_result ) {
84 return (bool) $cached_result;
85 }
86
87 // Check if there's a WordPress user with the WPCOM email .
88 $wpcom_email_user = get_user_by( 'email', $wpcom_user_email );
89 $mismatch_exists = false !== $wpcom_email_user;
90
91 // Store the result in a transient for 24 hours.
92 set_transient( $transient_key, $mismatch_exists, DAY_IN_SECONDS );
93
94 return $mismatch_exists;
95 }
96
97 /**
98 * Clears account mismatch transients for a user when they update their email or are deleted.
99 *
100 * @since 6.11.0
101 *
102 * @param string|int $user_id_or_email User ID or email address.
103 * @return void
104 */
105 public function clean_account_mismatch_transients( $user_id_or_email ) {
106 $email = null;
107
108 if ( is_numeric( $user_id_or_email ) ) {
109 $user = get_userdata( $user_id_or_email );
110 if ( $user && isset( $user->user_email ) ) {
111 $email = $user->user_email;
112 }
113 } else {
114 $email = $user_id_or_email;
115 }
116
117 if ( ! $email || ! is_email( $email ) ) {
118 return;
119 }
120
121 $transient_key = 'jetpack_account_mismatch_' . md5( self::normalize_email( $email ) );
122 delete_transient( $transient_key );
123 }
124
125 /**
126 * Normalize an email address so that addresses differing only in case are treated as equal.
127 *
128 * @since 8.10.3
129 *
130 * @param string $email The email address to normalize.
131 *
132 * @return string The normalized email address.
133 */
134 private static function normalize_email( $email ) {
135 return strtolower( trim( (string) $email ) );
136 }
137 }
138