summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/jetpack/class.jetpack-xmlrpc-server.php')
-rw-r--r--plugins/jetpack/class.jetpack-xmlrpc-server.php38
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 {