diff options
author | Anthony G. Basile <blueness@gentoo.org> | 2017-09-20 09:54:07 -0400 |
---|---|---|
committer | Anthony G. Basile <blueness@gentoo.org> | 2017-09-20 09:54:07 -0400 |
commit | bb31fa2d44dbbe425fa9ce92d4e7be61a1146dfb (patch) | |
tree | 33456f5889d315ad2a520fcd33fe491e612588b4 /plugins/jetpack/class.jetpack-xmlrpc-server.php | |
parent | akismet 4.0 (diff) | |
download | blogs-gentoo-bb31fa2d44dbbe425fa9ce92d4e7be61a1146dfb.tar.gz blogs-gentoo-bb31fa2d44dbbe425fa9ce92d4e7be61a1146dfb.tar.bz2 blogs-gentoo-bb31fa2d44dbbe425fa9ce92d4e7be61a1146dfb.zip |
jetpack 5.3
Signed-off-by: Anthony G. Basile <blueness@gentoo.org>
Diffstat (limited to 'plugins/jetpack/class.jetpack-xmlrpc-server.php')
-rw-r--r-- | plugins/jetpack/class.jetpack-xmlrpc-server.php | 56 |
1 files changed, 43 insertions, 13 deletions
diff --git a/plugins/jetpack/class.jetpack-xmlrpc-server.php b/plugins/jetpack/class.jetpack-xmlrpc-server.php index 54e311b8..bb7ad458 100644 --- a/plugins/jetpack/class.jetpack-xmlrpc-server.php +++ b/plugins/jetpack/class.jetpack-xmlrpc-server.php @@ -84,18 +84,20 @@ class Jetpack_XMLRPC_Server { } function remote_authorize( $request ) { + JetpackTracking::record_user_event( 'jpc_remote_authorize_begin' ); + foreach( array( 'secret', 'state', 'redirect_uri', 'code' ) as $required ) { if ( ! isset( $request[ $required ] ) || empty( $request[ $required ] ) ) { - return $this->error( new Jetpack_Error( 'missing_parameter', 'One or more parameters is missing from the request.', 400 ) ); + return $this->error( new Jetpack_Error( 'missing_parameter', 'One or more parameters is missing from the request.', 400 ), 'jpc_remote_authorize_fail' ); } } if ( ! get_user_by( 'id', $request['state'] ) ) { - return $this->error( new Jetpack_Error( 'user_unknown', 'User not found.', 404 ) ); + return $this->error( new Jetpack_Error( 'user_unknown', 'User not found.', 404 ), 'jpc_remote_authorize_fail' ); } if ( Jetpack::is_active() && Jetpack::is_user_connected( $request['state'] ) ) { - return $this->error( new Jetpack_Error( 'already_connected', 'User already connected.', 400 ) ); + return $this->error( new Jetpack_Error( 'already_connected', 'User already connected.', 400 ), 'jpc_remote_authorize_fail' ); } $verified = $this->verify_action( array( 'authorize', $request['secret'], $request['state'] ) ); @@ -110,19 +112,38 @@ class Jetpack_XMLRPC_Server { $result = $client_server->authorize( $request ); if ( is_wp_error( $result ) ) { - return $this->error( $result ); + return $this->error( $result, 'jpc_remote_authorize_fail' ); } + JetpackTracking::record_user_event( 'jpc_remote_authorize_success' ); + $response = array( 'result' => $result, ); return $response; } + private function tracks_record_error( $name, $error ) { + if ( is_wp_error( $error ) ) { + JetpackTracking::record_user_event( $name, array( + 'error_code' => $error->get_error_code(), + 'error_message' => $error->get_error_message() + ) ); + } elseif( is_a( $error, 'IXR_Error' ) ) { + JetpackTracking::record_user_event( $name, array( + 'error_code' => $error->code, + 'error_message' => $error->message + ) ); + } + + return $error; + } + /** * Verifies that Jetpack.WordPress.com received a registration request from this site */ function verify_registration( $data ) { + // failure modes will be recorded in tracks in the verify_action method return $this->verify_action( array( 'register', $data[0], $data[1] ) ); } @@ -151,41 +172,45 @@ class Jetpack_XMLRPC_Server { $action = $params[0]; $verify_secret = $params[1]; $state = isset( $params[2] ) ? $params[2] : ''; + JetpackTracking::record_user_event( 'jpc_verify_' . $action . '_begin' ); + $tracks_failure_event_name = 'jpc_verify_' . $action . '_fail'; if ( empty( $verify_secret ) ) { - return $this->error( new Jetpack_Error( 'verify_secret_1_missing', sprintf( 'The required "%s" parameter is missing.', 'secret_1' ), 400 ) ); + return $this->error( new Jetpack_Error( 'verify_secret_1_missing', sprintf( 'The required "%s" parameter is missing.', 'secret_1' ), 400 ), $tracks_failure_event_name ); } else if ( ! is_string( $verify_secret ) ) { - return $this->error( new Jetpack_Error( 'verify_secret_1_malformed', sprintf( 'The required "%s" parameter is malformed.', 'secret_1' ), 400 ) ); + return $this->error( new Jetpack_Error( 'verify_secret_1_malformed', sprintf( 'The required "%s" parameter is malformed.', 'secret_1' ), 400 ), $tracks_failure_event_name ); } else if ( empty( $state ) ) { - return $this->error( new Jetpack_Error( 'state_missing', sprintf( 'The required "%s" parameter is missing.', 'state' ), 400 ) ); + return $this->error( new Jetpack_Error( 'state_missing', sprintf( 'The required "%s" parameter is missing.', 'state' ), 400 ), $tracks_failure_event_name ); } else if ( ! ctype_digit( $state ) ) { - return $this->error( new Jetpack_Error( 'state_malformed', sprintf( 'The required "%s" parameter is malformed.', 'state' ), 400 ) ); + return $this->error( new Jetpack_Error( 'state_malformed', sprintf( 'The required "%s" parameter is malformed.', 'state' ), 400 ), $tracks_failure_event_name ); } $secrets = Jetpack::get_secrets( $action, $state ); if ( ! $secrets ) { Jetpack::delete_secrets( $action, $state ); - return $this->error( new Jetpack_Error( 'verify_secrets_missing', 'Verification secrets not found', 400 ) ); + return $this->error( new Jetpack_Error( 'verify_secrets_missing', 'Verification secrets not found', 400 ), $tracks_failure_event_name ); } if ( is_wp_error( $secrets ) ) { Jetpack::delete_secrets( $action, $state ); - return $this->error( new Jetpack_Error( $secrets->get_error_code(), $secrets->get_error_message(), 400 ) ); + return $this->error( new Jetpack_Error( $secrets->get_error_code(), $secrets->get_error_message(), 400 ), $tracks_failure_event_name ); } if ( empty( $secrets['secret_1'] ) || empty( $secrets['secret_2'] ) || empty( $secrets['exp'] ) ) { Jetpack::delete_secrets( $action, $state ); - return $this->error( new Jetpack_Error( 'verify_secrets_incomplete', 'Verification secrets are incomplete', 400 ) ); + return $this->error( new Jetpack_Error( 'verify_secrets_incomplete', 'Verification secrets are incomplete', 400 ), $tracks_failure_event_name ); } if ( ! hash_equals( $verify_secret, $secrets['secret_1'] ) ) { Jetpack::delete_secrets( $action, $state ); - return $this->error( new Jetpack_Error( 'verify_secrets_mismatch', 'Secret mismatch', 400 ) ); + return $this->error( new Jetpack_Error( 'verify_secrets_mismatch', 'Secret mismatch', 400 ), $tracks_failure_event_name ); } Jetpack::delete_secrets( $action, $state ); + JetpackTracking::record_user_event( 'jpc_verify_' . $action . '_success' ); + return $secrets['secret_2']; } @@ -217,7 +242,12 @@ class Jetpack_XMLRPC_Server { * * @return bool|IXR_Error */ - function error( $error = null ) { + function error( $error = null, $tracks_event_name = null ) { + // record using Tracks + if ( null !== $tracks_event_name ) { + $this->tracks_record_error( $tracks_event_name, $error ); + } + if ( !is_null( $error ) ) { $this->error = $error; } |