PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 15.9-a.7
Jetpack – WP Security, Backup, Speed, & Growth v15.9-a.7
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 / class-jetpack-xmlrpc-methods.php
jetpack Last commit date
3rd-party 1 week ago _inc 2 days ago css 2 weeks ago extensions 2 days ago images 1 month ago jetpack_vendor 2 days ago json-endpoints 1 week ago modules 2 days ago sal 1 week ago src 2 days ago vendor 2 days ago views 1 month ago CHANGELOG.md 2 days ago LICENSE.txt 5 months ago SECURITY.md 2 days ago class-jetpack-connection-status.php 2 years ago class-jetpack-gallery-settings.php 6 months ago class-jetpack-newsletter-dashboard-widget.php 6 months ago class-jetpack-pre-connection-jitms.php 2 years ago class-jetpack-stats-dashboard-widget.php 3 months ago class-jetpack-xmlrpc-methods.php 1 week ago class.frame-nonce-preview.php 6 months ago class.jetpack-admin.php 2 days ago class.jetpack-autoupdate.php 6 months ago class.jetpack-cli.php 2 days ago class.jetpack-client-server.php 2 years ago class.jetpack-gutenberg.php 1 week ago class.jetpack-heartbeat.php 3 months ago class.jetpack-modules-list-table.php 6 months ago class.jetpack-network-sites-list-table.php 6 months ago class.jetpack-network.php 1 month ago class.jetpack-plan.php 2 years ago class.jetpack-post-images.php 2 months ago class.jetpack-twitter-cards.php 3 months ago class.jetpack-user-agent.php 2 years ago class.jetpack.php 2 days ago class.json-api-endpoints.php 1 week ago class.json-api.php 2 weeks ago class.photon.php 3 years ago composer.json 2 days ago enhanced-open-graph.php 1 week ago functions.compat.php 3 months ago functions.cookies.php 2 years ago functions.global.php 2 days ago functions.is-mobile.php 2 years ago functions.opengraph.php 2 months ago functions.photon.php 2 years ago jetpack.php 2 days ago json-api-config.php 3 years ago json-endpoints.php 2 years ago load-jetpack.php 1 week ago locales.php 6 months ago readme.txt 2 days ago unauth-file-upload.php 6 months ago uninstall.php 6 months ago wpml-config.xml 3 years ago
class-jetpack-xmlrpc-methods.php
252 lines
1 <?php
2 /**
3 * Jetpack XMLRPC Methods.
4 *
5 * Registers the Jetpack specific XMLRPC methods
6 *
7 * @package jetpack
8 */
9
10 use Automattic\Jetpack\Connection\Manager as Connection_Manager;
11 use Automattic\Jetpack\Connection\Tokens;
12
13 /**
14 * XMLRPC Methods registration and callbacks
15 */
16 class Jetpack_XMLRPC_Methods {
17
18 /**
19 * Initialize the main hooks.
20 */
21 public static function init() {
22 add_filter( 'jetpack_xmlrpc_unauthenticated_methods', array( __CLASS__, 'xmlrpc_methods' ) );
23 add_filter( 'jetpack_xmlrpc_test_connection_response', array( __CLASS__, 'test_connection' ) );
24 add_action( 'jetpack_xmlrpc_server_event', array( __CLASS__, 'jetpack_xmlrpc_server_event' ), 10, 4 );
25 add_action( 'jetpack_remote_connect_end', array( __CLASS__, 'remote_connect_end' ) );
26 add_filter( 'jetpack_xmlrpc_remote_register_redirect_uri', array( __CLASS__, 'remote_register_redirect_uri' ) );
27 }
28
29 /**
30 * Adds Jetpack specific methods to the methods added by the Connection package.
31 *
32 * @param array $methods Methods added by the Connection package.
33 */
34 public static function xmlrpc_methods( $methods ) {
35
36 $methods['jetpack.featuresAvailable'] = array( __CLASS__, 'features_available' );
37 $methods['jetpack.featuresEnabled'] = array( __CLASS__, 'features_enabled' );
38 $methods['jetpack.disconnectBlog'] = array( __CLASS__, 'disconnect_blog' );
39 $methods['jetpack.jsonAPI'] = array( __CLASS__, 'json_api' );
40
41 return $methods;
42 }
43
44 /**
45 * Returns what features are available. Uses the slug of the module files.
46 *
47 * @deprecated 13.9
48 * @see Jetpack_Core_Json_Api_Endpoints::get_features_available()
49 * @return array
50 */
51 public static function features_available() {
52 $raw_modules = Jetpack::get_available_modules();
53 $modules = array();
54 foreach ( $raw_modules as $module ) {
55 $modules[] = Jetpack::get_module_slug( $module );
56 }
57
58 return $modules;
59 }
60
61 /**
62 * Returns what features are enabled. Uses the slug of the modules files.
63 *
64 * @deprecated 13.9
65 * @see Jetpack_Core_Json_Api_Endpoints::get_features_enabled()
66 * @return array
67 */
68 public static function features_enabled() {
69 $raw_modules = Jetpack::get_active_modules();
70 $modules = array();
71 foreach ( $raw_modules as $module ) {
72 $modules[] = Jetpack::get_module_slug( $module );
73 }
74
75 return $modules;
76 }
77
78 /**
79 * Filters the result of test_connection XMLRPC method
80 *
81 * @return string The current Jetpack version number
82 */
83 public static function test_connection() {
84 return JETPACK__VERSION;
85 }
86
87 /**
88 * Disconnect this blog from the connected wordpress.com account
89 *
90 * @return boolean
91 */
92 public static function disconnect_blog() {
93
94 /**
95 * Fired when we want to log an event to the Jetpack event log.
96 *
97 * @since 7.7.0
98 *
99 * @param string $code Unique name for the event.
100 * @param string $data Optional data about the event.
101 */
102 do_action( 'jetpack_event_log', 'disconnect' );
103 ( new Connection_Manager( 'jetpack' ) )->disconnect_site();
104
105 return true;
106 }
107
108 /**
109 * Serve a JSON API request.
110 *
111 * @param array $args request arguments.
112 */
113 public static function json_api( $args = array() ) {
114 $json_api_args = $args[0];
115 $verify_api_user_args = $args[1];
116
117 $method = (string) $json_api_args[0];
118 $url = (string) $json_api_args[1];
119 $post_body = $json_api_args[2] === null ? null : (string) $json_api_args[2];
120 $user_details = (array) $json_api_args[4];
121 $locale = (string) $json_api_args[5];
122
123 if ( ! $verify_api_user_args ) {
124 $user_id = 0;
125 } elseif ( 'internal' === $verify_api_user_args[0] ) {
126 $user_id = (int) $verify_api_user_args[1];
127 if ( $user_id ) {
128 $user = get_user_by( 'id', $user_id );
129 if ( ! $user || is_wp_error( $user ) ) {
130 return false;
131 }
132 }
133 } else {
134 $user_id = call_user_func( array( new Jetpack_XMLRPC_Server(), 'test_api_user_code' ), $verify_api_user_args );
135 if ( ! $user_id ) {
136 return false;
137 }
138 }
139
140 $old_user = wp_get_current_user();
141 wp_set_current_user( $user_id );
142
143 if ( $user_id ) {
144 $token_key = false;
145 } else {
146 $verified = ( new Connection_Manager() )->verify_xml_rpc_signature();
147 $token_key = $verified['token_key'];
148 }
149
150 $token = ( new Tokens() )->get_access_token( $user_id, $token_key );
151 if ( ! $token || is_wp_error( $token ) ) {
152 return false;
153 }
154
155 define( 'REST_API_REQUEST', true );
156 define( 'WPCOM_JSON_API__BASE', 'public-api.wordpress.com/rest/v1' );
157
158 require_once JETPACK__PLUGIN_DIR . 'class.json-api.php';
159 $api = WPCOM_JSON_API::init( $method, $url, $post_body );
160 $api->token_details['user'] = $user_details;
161
162 $api->init_locale( $locale );
163
164 require_once JETPACK__PLUGIN_DIR . 'class.json-api-endpoints.php';
165
166 $display_errors = ini_set( 'display_errors', 0 ); // phpcs:ignore WordPress.PHP.IniSet
167 ob_start();
168 $api->serve( false );
169 $output = ob_get_clean();
170 ini_set( 'display_errors', $display_errors ); // phpcs:ignore WordPress.PHP.IniSet
171
172 $nonce = wp_generate_password( 10, false );
173 $hmac = hash_hmac( 'md5', $nonce . $output, $token->secret );
174
175 wp_set_current_user( $old_user->ID ?? 0 );
176
177 return array(
178 (string) $output,
179 (string) $nonce,
180 $hmac,
181 );
182 }
183
184 /**
185 * Filters the response of the remote_provision XMLRPC method
186 *
187 * @param array $response The response.
188 * @param array $request An array containing at minimum a nonce key and a local_username key.
189 *
190 * @since 9.8.0
191 * @deprecated since 13.9
192 *
193 * @return array
194 */
195 public static function remote_provision_response( $response, $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
196 _deprecated_function( __METHOD__, '13.9' );
197 return $response;
198 }
199
200 /**
201 * Runs Jetpack specific action in xmlrpc server events
202 *
203 * @param String $action the action name, i.e., 'remote_authorize'.
204 * @param String $stage the execution stage, can be 'begin', 'success', 'error', etc.
205 * @param array $parameters extra parameters from the event.
206 * @param WP_User $user the acting user.
207 * @return void
208 */
209 public static function jetpack_xmlrpc_server_event( $action, $stage, $parameters = array(), $user = null ) { //phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
210 if ( 'remote_register' === $action && 'begin' === $stage ) {
211 Jetpack::maybe_set_version_option();
212 }
213 }
214
215 /**
216 * Hooks into the remote_connect XMLRPC endpoint and triggers Jetpack::handle_post_authorization_actions
217 *
218 * @since 9.8.0
219 * @return void
220 */
221 public static function remote_connect_end() {
222 /** This filter is documented in class.jetpack-cli.php */
223 $enable_sso = apply_filters( 'jetpack_start_enable_sso', true );
224 Jetpack::handle_post_authorization_actions( $enable_sso, false, false );
225 }
226
227 /**
228 * Filters the Redirect URI returned by the remote_register XMLRPC method
229 *
230 * @since 9.8.0
231 *
232 * @param string $redirect_uri The Redirect URI.
233 * @return string
234 */
235 public static function remote_register_redirect_uri( $redirect_uri ) {
236 $auto_enable_sso = ( ! ( new Connection_Manager() )->has_connected_owner() || Jetpack::is_module_active( 'sso' ) );
237
238 /** This filter is documented in class.jetpack-cli.php */
239 if ( apply_filters( 'jetpack_start_enable_sso', $auto_enable_sso ) ) {
240 $redirect_uri = add_query_arg(
241 array(
242 'action' => 'jetpack-sso',
243 'redirect_to' => rawurlencode( admin_url() ),
244 ),
245 wp_login_url() // TODO: come back to Jetpack dashboard?
246 );
247 }
248
249 return $redirect_uri;
250 }
251 }
252