PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta
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-agents-manager / src / class-wp-rest-jetpack-ai-jwt.php
jetpack / jetpack_vendor / automattic / jetpack-agents-manager / src Last commit date
js 3 weeks ago class-agents-manager.php 3 weeks ago class-open-state-store.php 2 months ago class-sidebar-open-preservation.php 3 weeks ago class-wp-rest-agents-manager-persisted-open-state.php 2 months ago class-wp-rest-jetpack-ai-jwt.php 2 months ago
class-wp-rest-jetpack-ai-jwt.php
115 lines
1 <?php
2 /**
3 * WP_REST_Jetpack_AI_JWT file.
4 *
5 * @package automattic/jetpack-agents-manager
6 */
7
8 namespace Automattic\Jetpack\Agents_Manager;
9
10 use Automattic\Jetpack\Connection\Client;
11 use Automattic\Jetpack\Connection\Manager as Connection_Manager;
12 use Jetpack_Options;
13
14 /**
15 * Class WP_REST_Jetpack_AI_JWT.
16 */
17 class WP_REST_Jetpack_AI_JWT extends \WP_REST_Controller {
18
19 /**
20 * WP_REST_Jetpack_AI_JWT constructor.
21 */
22 public function __construct() {
23 $this->namespace = 'jetpack/v4';
24 $this->rest_base = '/jetpack-ai-jwt';
25 }
26
27 /**
28 * Register available routes.
29 */
30 public function register_rest_route() {
31 /*
32 * Check if the `jetpack/v4/jetpack-ai-jwt` endpoint is registered
33 * by the Jetpack plugin to avoid registering it again.
34 * In case it's not registered, register it
35 * to make it available for Jetpack products that depend on it.
36 */
37 if ( $this->is_rest_endpoint_registered() ) {
38 return;
39 }
40
41 register_rest_route(
42 $this->namespace,
43 $this->rest_base,
44 array(
45 array(
46 'methods' => \WP_REST_Server::EDITABLE,
47 'callback' => array( $this, 'get_jwt' ),
48 'permission_callback' => array( $this, 'permission_callback' ),
49 ),
50 )
51 );
52 }
53
54 /**
55 * Check if this REST endpoint is already registered.
56 *
57 * @return bool True if the endpoint is registered, false otherwise.
58 */
59 private function is_rest_endpoint_registered() {
60 $server = rest_get_server();
61 $routes = $server->get_routes();
62 $full_endpoint = '/' . trim( $this->namespace, '/' ) . $this->rest_base;
63
64 return isset( $routes[ $full_endpoint ] );
65 }
66
67 /**
68 * Permission callback for the JWT endpoint.
69 *
70 * @return bool
71 */
72 public function permission_callback() {
73 return ( new Connection_Manager( 'jetpack' ) )->is_user_connected() && current_user_can( 'edit_posts' );
74 }
75
76 /**
77 * Ask WPCOM for a JWT token to use for OpenAI completion.
78 */
79 public function get_jwt() {
80 $blog_id = Jetpack_Options::get_option( 'id' );
81
82 $response = Client::wpcom_json_api_request_as_user(
83 "/sites/$blog_id/jetpack-openai-query/jwt",
84 '2',
85 array(
86 'method' => 'POST',
87 'headers' => array( 'Content-Type' => 'application/json; charset=utf-8' ),
88 ),
89 wp_json_encode( array(), JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ),
90 'wpcom'
91 );
92
93 if ( is_wp_error( $response ) ) {
94 return $response;
95 }
96
97 $json = json_decode( wp_remote_retrieve_body( $response ) );
98
99 if ( ! isset( $json->token ) ) {
100 return new \WP_Error(
101 'no-token',
102 'No token returned from WPCOM',
103 array( 'status' => 500 )
104 );
105 }
106
107 return rest_ensure_response(
108 array(
109 'token' => $json->token,
110 'blog_id' => $blog_id,
111 )
112 );
113 }
114 }
115