diff options
Diffstat (limited to 'plugins/jetpack/class.jetpack-xmlrpc-server.php')
-rw-r--r-- | plugins/jetpack/class.jetpack-xmlrpc-server.php | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/plugins/jetpack/class.jetpack-xmlrpc-server.php b/plugins/jetpack/class.jetpack-xmlrpc-server.php index 9f3ba88a..9fb1c4fb 100644 --- a/plugins/jetpack/class.jetpack-xmlrpc-server.php +++ b/plugins/jetpack/class.jetpack-xmlrpc-server.php @@ -30,6 +30,7 @@ class Jetpack_XMLRPC_Server { 'jetpack.featuresEnabled' => array( $this, 'features_enabled' ), 'jetpack.disconnectBlog' => array( $this, 'disconnect_blog' ), 'jetpack.unlinkUser' => array( $this, 'unlink_user' ), + 'jetpack.syncObject' => array( $this, 'sync_object' ), ) ); if ( isset( $core_methods['metaWeblog.editPost'] ) ) { @@ -147,8 +148,13 @@ class Jetpack_XMLRPC_Server { * * verify_secret_1_missing * verify_secret_1_malformed - * verify_secrets_missing: No longer have verification secrets stored + * verify_secrets_missing: verification secrets are not found in database + * verify_secrets_incomplete: verification secrets are only partially found in database + * verify_secrets_expired: verification secrets have expired * verify_secrets_mismatch: stored secret_1 does not match secret_1 sent by Jetpack.WordPress.com + * state_missing: required parameter of state not found + * state_malformed: state is not a digit + * invalid_state: state in request does not match the stored state * * The 'authorize' and 'register' actions have additional error codes * @@ -168,16 +174,21 @@ class Jetpack_XMLRPC_Server { } $secrets = Jetpack_Options::get_option( $action ); - if ( !$secrets || is_wp_error( $secrets ) ) { + if ( ! $secrets || is_wp_error( $secrets ) ) { Jetpack_Options::delete_option( $action ); - return $this->error( new Jetpack_Error( 'verify_secrets_missing', 'Verification took too long', 400 ) ); + return $this->error( new Jetpack_Error( 'verify_secrets_missing', 'Verification secrets not found', 400 ) ); } @list( $secret_1, $secret_2, $secret_eol, $user_id ) = explode( ':', $secrets ); - if ( empty( $secret_1 ) || empty( $secret_2 ) || empty( $secret_eol ) || $secret_eol < time() ) { + if ( empty( $secret_1 ) || empty( $secret_2 ) || empty( $secret_eol ) ) { Jetpack_Options::delete_option( $action ); - return $this->error( new Jetpack_Error( 'verify_secrets_missing', 'Verification took too long', 400 ) ); + return $this->error( new Jetpack_Error( 'verify_secrets_incomplete', 'Verification secrets are incomplete', 400 ) ); + } + + if ( $secret_eol < time() ) { + Jetpack_Options::delete_option( $action ); + return $this->error( new Jetpack_Error( 'verify_secrets_expired', 'Verification took too long', 400 ) ); } if ( ! hash_equals( $verify_secret, $secret_1 ) ) { @@ -326,6 +337,21 @@ class Jetpack_XMLRPC_Server { } /** + * Returns any object that is able to be synced + */ + function sync_object( $args ) { + // e.g. posts, post, 5 + list( $module_name, $object_type, $id ) = $args; + require_once dirname( __FILE__ ) . '/sync/class.jetpack-sync-modules.php'; + require_once dirname( __FILE__ ) . '/sync/class.jetpack-sync-sender.php'; + + $sync_module = Jetpack_Sync_Modules::get_module( $module_name ); + $codec = Jetpack_Sync_Sender::get_instance()->get_codec(); + + return $codec->encode( $sync_module->get_object_by_id( $object_type, $id ) ); + } + + /** * Returns what features are available. Uses the slug of the module files. * * @return array|IXR_Error @@ -406,7 +432,7 @@ class Jetpack_XMLRPC_Server { // .org mo files are named slightly different from .com, and all we have is this the locale -- try to guess them. $new_locale = $locale; if ( strpos( $locale, '-' ) !== false ) { - $pieces = explode( '-', $locale ); + $locale_pieces = explode( '-', $locale ); $new_locale = $locale_pieces[0]; $new_locale .= ( ! empty( $locale_pieces[1] ) ) ? '_' . strtoupper( $locale_pieces[1] ) : ''; } else { |