PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.2
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.2
16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 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 / jetpack_vendor / automattic / jetpack-publicize / src / rest-api / class-keyring-result-controller.php
jetpack / jetpack_vendor / automattic / jetpack-publicize / src / rest-api Last commit date
class-base-controller.php 9 months ago class-connections-controller.php 3 weeks ago class-connections-post-field.php 4 weeks ago class-keyring-result-controller.php 2 months ago class-message-templates-placeholders-controller.php 3 months ago class-proxy-requests.php 9 months ago class-render-messages-controller.php 4 weeks ago class-scheduled-actions-controller.php 9 months ago class-services-controller.php 3 weeks ago class-share-post-controller.php 9 months ago class-share-status-controller.php 9 months ago class-social-image-generator-controller.php 9 months ago
class-keyring-result-controller.php
137 lines
1 <?php
2 /**
3 * The Publicize Keyring Result Controller class.
4 *
5 * @package automattic/jetpack-publicize
6 */
7
8 namespace Automattic\Jetpack\Publicize\REST_API;
9
10 use Automattic\Jetpack\Connection\Traits\WPCOM_REST_API_Proxy_Request;
11 use Automattic\Jetpack\Publicize\Publicize_Utils;
12 use WP_REST_Request;
13 use WP_REST_Response;
14 use WP_REST_Server;
15
16 if ( ! defined( 'ABSPATH' ) ) {
17 exit( 0 );
18 }
19
20 /**
21 * Keyring Result Controller.
22 *
23 * Returns the verified keyring connection item for a just-completed connect request
24 * (auth_flow=v2). The connect popup no longer posts the result back through
25 * window.opener; instead the same-origin completion page broadcasts the request_id and the
26 * client fetches the result here once.
27 *
28 * @phan-constructor-used-for-side-effects
29 */
30 class Keyring_Result_Controller extends Base_Controller {
31
32 use WPCOM_REST_API_Proxy_Request;
33
34 /**
35 * Constructor.
36 */
37 public function __construct() {
38 parent::__construct();
39
40 $this->base_api_path = 'wpcom';
41 $this->version = 'v2';
42
43 $this->namespace = "{$this->base_api_path}/{$this->version}";
44 $this->rest_base = 'publicize/keyring-result';
45
46 add_action( 'rest_api_init', array( $this, 'register_routes' ) );
47 }
48
49 /**
50 * Register the routes.
51 */
52 public function register_routes() {
53 register_rest_route(
54 $this->namespace,
55 '/' . $this->rest_base,
56 array(
57 array(
58 'methods' => WP_REST_Server::READABLE,
59 'callback' => array( $this, 'get_keyring_result' ),
60 'permission_callback' => array( $this, 'get_keyring_result_permissions_check' ),
61 'args' => array(
62 'request_id' => array(
63 'type' => 'string',
64 'required' => true,
65 'description' => __( 'ID of the connect request.', 'jetpack-publicize-pkg' ),
66 ),
67 ),
68 ),
69 )
70 );
71 }
72
73 /**
74 * Verify that the request has access to the keyring result.
75 *
76 * @param WP_REST_Request $request Full details about the request.
77 * @return true|\WP_Error
78 */
79 public function get_keyring_result_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
80 return $this->publicize_permissions_check() && (bool) get_current_user_id();
81 }
82
83 /**
84 * Get the keyring result for a completed connect request.
85 *
86 * @param WP_REST_Request $request Full details about the request.
87 *
88 * @return WP_REST_Response The response object: { code, data }.
89 */
90 public function get_keyring_result( $request ) {
91 if ( ! Publicize_Utils::is_wpcom() ) {
92 return rest_ensure_response( $this->proxy_request_to_wpcom_as_user( $request ) );
93 }
94
95 $response = array(
96 'code' => 'unknown',
97 'data' => null,
98 );
99
100 require_lib( 'external-connections' );
101
102 $external_connections = \WPCOM_External_Connections::init();
103
104 $request_id = $request->get_param( 'request_id' );
105
106 // The transient is keyed by current user + request_id, so a hit already proves ownership.
107 $data = $external_connections->get_last_keyring_token_details( $request_id );
108
109 if ( ! $data ) {
110 $response['code'] = 'no_data_found';
111 return rest_ensure_response( $response );
112 }
113
114 $token_id = $data['token_id'] ?? null;
115
116 if ( ! $token_id ) {
117 $response['code'] = 'token_id_missing';
118 return rest_ensure_response( $response );
119 }
120
121 // On reconnect of a broken connection, re-test so the cached failure is overwritten.
122 $force_connection_test = $external_connections->has_failing_cached_connection_test( $token_id );
123
124 $item = $external_connections->get_keyring_connection_item( $token_id, false, $force_connection_test );
125
126 if ( ! $item ) {
127 $response['code'] = 'token_not_found';
128 return rest_ensure_response( $response );
129 }
130
131 $response['code'] = 'success';
132 $response['data'] = $item;
133
134 return rest_ensure_response( $response );
135 }
136 }
137