summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony G. Basile <blueness@gentoo.org>2017-09-20 09:54:07 -0400
committerAnthony G. Basile <blueness@gentoo.org>2017-09-20 09:54:07 -0400
commitbb31fa2d44dbbe425fa9ce92d4e7be61a1146dfb (patch)
tree33456f5889d315ad2a520fcd33fe491e612588b4 /plugins/jetpack/class.jetpack-xmlrpc-server.php
parentakismet 4.0 (diff)
downloadblogs-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.php56
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;
}