PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.1
16.3-a.3 16.3-a.1 16.2 16.2-beta 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 All 504 releases
jetpack / jetpack_vendor / automattic / jetpack-blaze / src / class-rest-controller.php

class-rest-controller.php in Jetpack – WP Security, Backup, Speed, & Growth 16.3-a.1, at jetpack_vendor/automattic/jetpack-blaze/src/class-rest-controller.php

186 lines 4.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * The Blaze Rest Controller class.
4 * Registers the REST routes for Blaze Dashboard.
5 *
6 * @package automattic/jetpack-blaze
7 */
8
9 namespace Automattic\Jetpack\Blaze;
10
11 use Automattic\Jetpack\Blaze;
12 use Automattic\Jetpack\Connection\Manager as Connection_Manager;
13 use Automattic\Jetpack\Status\Host;
14 use WP_Error;
15 use WP_REST_Server;
16
17 /**
18 * Registers general REST routes for Blaze.
19 */
20 class REST_Controller {
21 /**
22 * Namespace for the REST API.
23 *
24 * @var string
25 */
26 public static $namespace = 'jetpack/v4/blaze';
27
28 /**
29 * Connection manager object.
30 *
31 * @var \Automattic\Jetpack\Connection\Manager
32 */
33 private $connection;
34
35 /**
36 * Creates the REST_Controller object.
37 *
38 * @param \Automattic\Jetpack\Connection\Manager $connection The connection manager object.
39 */
40 public function __construct( $connection = null ) {
41 $this->connection = $connection ?? new Connection_Manager();
42 }
43
44 /**
45 * Registers the REST routes on the `rest_api_init` hook.
46 *
47 * Instantiated here, rather than eagerly, so the controller class only loads
48 * on requests that reach `rest_api_init`. Static so the callback can be
49 * unregistered.
50 *
51 * @access public
52 */
53 public static function register() {
54 ( new self() )->register_rest_routes();
55 }
56
57 /**
58 * Registers the REST routes.
59 *
60 * @access public
61 */
62 public function register_rest_routes() {
63 $site_id = $this->get_site_id();
64
65 if ( ! is_wp_error( $site_id ) ) {
66 register_rest_route(
67 static::$namespace,
68 'eligibility',
69 array(
70 'methods' => WP_REST_Server::READABLE,
71 'callback' => array( $this, 'blaze_eligibility' ),
72 'permission_callback' => array( $this, 'can_user_view_blaze_settings' ),
73 )
74 );
75
76 register_rest_route(
77 static::$namespace,
78 'dashboard',
79 array(
80 'methods' => WP_REST_Server::READABLE,
81 'callback' => array( $this, 'is_dashboard_enabled' ),
82 'permission_callback' => array( $this, 'can_user_view_blaze_settings' ),
83 )
84 );
85 }
86
87 register_rest_route(
88 static::$namespace,
89 'active-campaigns',
90 array(
91 'methods' => WP_REST_Server::READABLE,
92 'callback' => array( $this, 'get_active_campaigns' ),
93 'permission_callback' => array( $this, 'can_user_view_blaze_settings' ),
94 )
95 );
96 }
97
98 /**
99 * Only administrators can access the API.
100 *
101 * @return bool|WP_Error True if a blog token was used to sign the request, WP_Error otherwise.
102 */
103 public function can_user_view_blaze_settings() {
104 if (
105 $this->is_user_connected()
106 && current_user_can( 'manage_options' )
107 ) {
108 return true;
109 }
110
111 return $this->get_forbidden_error();
112 }
113
114 /**
115 * Get the eligibility for Blaze.
116 *
117 * @return bool
118 */
119 public function blaze_eligibility() {
120 $site_id = $this->get_site_id();
121 if ( is_wp_error( $site_id ) ) {
122 return false;
123 }
124
125 return (bool) Blaze::site_supports_blaze( $site_id );
126 }
127
128 /**
129 * Check if the dashboard is enabled.
130 *
131 * @return bool
132 */
133 public function is_dashboard_enabled() {
134 return (bool) Blaze::is_dashboard_enabled();
135 }
136
137 /**
138 * Get active Blaze campaign status for the site.
139 *
140 * @return array
141 */
142 public function get_active_campaigns() {
143 $site_id = $this->get_site_id();
144 if ( is_wp_error( $site_id ) ) {
145 return Blaze::get_active_campaigns_status( 0 );
146 }
147
148 return Blaze::get_active_campaigns_status( $site_id );
149 }
150
151 /**
152 * Check if the current user is connected.
153 * On WordPress.com Simple, it is always connected.
154 *
155 * @return true
156 */
157 private function is_user_connected() {
158 if ( ( new Host() )->is_wpcom_simple() ) {
159 return true;
160 }
161
162 return $this->connection->is_connected() && $this->connection->is_user_connected();
163 }
164
165 /**
166 * Return a WP_Error object with a forbidden error.
167 */
168 protected function get_forbidden_error() {
169 $error_msg = esc_html__(
170 'You are not allowed to perform this action.',
171 'jetpack-blaze'
172 );
173
174 return new WP_Error( 'rest_forbidden', $error_msg, array( 'status' => rest_authorization_required_code() ) );
175 }
176
177 /**
178 * Get the site ID.
179 *
180 * @return int|WP_Error
181 */
182 private function get_site_id() {
183 return Connection_Manager::get_site_id();
184 }
185 }
186