PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 15.5.1
Jetpack – WP Security, Backup, Speed, & Growth v15.5.1
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 All 500 releases
jetpack / _inc / site-switcher-endpoint.php
site-switcher-endpoint.php
97 lines 2.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Site Switcher REST API Endpoint
4 * Jetpack-only endpoint for fetching compact sites list
5 *
6 * @package automattic/jetpack
7 */
8
9 use Automattic\Jetpack\Connection\Client;
10 use Automattic\Jetpack\Connection\Manager as Connection_Manager;
11
12 if ( ! defined( 'ABSPATH' ) ) {
13 exit( 0 );
14 }
15
16 /**
17 * Register REST API endpoint to fetch compact sites list from WordPress.com
18 */
19 function jetpack_site_switcher_register_rest_routes() {
20 register_rest_route(
21 'jetpack/v4',
22 '/sites/compact',
23 array(
24 'methods' => WP_REST_Server::READABLE,
25 'callback' => 'jetpack_site_switcher_get_sites',
26 'permission_callback' => 'jetpack_site_switcher_permission_check',
27 )
28 );
29 }
30
31 /**
32 * Check if the current user is connected to WordPress.com
33 *
34 * @return bool True if user is connected, false otherwise
35 */
36 function jetpack_site_switcher_permission_check() {
37 if ( ! is_user_logged_in() ) {
38 return false;
39 }
40
41 $connection_manager = new Connection_Manager();
42 return $connection_manager->is_user_connected();
43 }
44 add_action( 'rest_api_init', 'jetpack_site_switcher_register_rest_routes' );
45
46 /**
47 * Fetch compact sites list from WordPress.com API
48 *
49 * @return WP_REST_Response|WP_Error
50 */
51 function jetpack_site_switcher_get_sites() {
52 $response = Client::wpcom_json_api_request_as_user(
53 '/me/sites/compact',
54 'v1.1',
55 array( 'method' => 'GET' ),
56 null,
57 'rest'
58 );
59
60 if ( is_wp_error( $response ) ) {
61 return new WP_Error(
62 'jetpack_site_switcher_request_failed',
63 sprintf(
64 /* translators: %s: Error message from the API request */
65 __( 'Failed to connect to WordPress.com: %s', 'jetpack' ),
66 $response->get_error_message()
67 ),
68 array( 'status' => 500 )
69 );
70 }
71
72 $response_code = wp_remote_retrieve_response_code( $response );
73 if ( 200 !== $response_code ) {
74 return new WP_Error(
75 'jetpack_site_switcher_api_error',
76 sprintf(
77 /* translators: %d: HTTP status code */
78 __( 'WordPress.com API returned error (HTTP %d)', 'jetpack' ),
79 $response_code
80 ),
81 array( 'status' => $response_code )
82 );
83 }
84
85 $body = json_decode( wp_remote_retrieve_body( $response ), true );
86
87 if ( ! isset( $body['sites'] ) ) {
88 return new WP_Error(
89 'jetpack_site_switcher_invalid_response',
90 __( 'WordPress.com API response missing sites data', 'jetpack' ),
91 array( 'status' => 500 )
92 );
93 }
94
95 return rest_ensure_response( $body );
96 }
97