PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0.1
Jetpack – WP Security, Backup, Speed, & Growth v16.0.1
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 / json-endpoints / jetpack / class.jetpack-json-api-endpoint.php
jetpack / json-endpoints / jetpack Last commit date
class-jetpack-json-api-attachment-ownership-trait.php 2 months ago class-jetpack-json-api-delete-backup-helper-script-endpoint.php 7 months ago class-jetpack-json-api-install-backup-helper-script-endpoint.php 7 months ago class-jetpack-json-api-modules-list-v1-2-endpoint.php 7 months ago class.jetpack-json-api-check-capabilities-endpoint.php 7 months ago class.jetpack-json-api-core-endpoint.php 7 months ago class.jetpack-json-api-core-modify-endpoint.php 1 month ago class.jetpack-json-api-cron-endpoint.php 7 months ago class.jetpack-json-api-endpoint.php 1 month ago class.jetpack-json-api-get-comment-backup-endpoint.php 7 months ago class.jetpack-json-api-get-database-object-backup-endpoint.php 7 months ago class.jetpack-json-api-get-option-backup-endpoint.php 7 months ago class.jetpack-json-api-get-post-backup-endpoint.php 7 months ago class.jetpack-json-api-get-term-backup-endpoint.php 7 months ago class.jetpack-json-api-get-user-backup-endpoint.php 7 months ago class.jetpack-json-api-jps-woocommerce-connect-endpoint.php 7 months ago class.jetpack-json-api-log-endpoint.php 7 months ago class.jetpack-json-api-maybe-auto-update-endpoint.php 7 months ago class.jetpack-json-api-modules-endpoint.php 7 months ago class.jetpack-json-api-modules-get-endpoint.php 7 months ago class.jetpack-json-api-modules-list-endpoint.php 7 months ago class.jetpack-json-api-modules-modify-endpoint.php 7 months ago class.jetpack-json-api-plugins-delete-endpoint.php 7 months ago class.jetpack-json-api-plugins-endpoint.php 1 month ago class.jetpack-json-api-plugins-get-endpoint.php 7 months ago class.jetpack-json-api-plugins-install-endpoint.php 7 months ago class.jetpack-json-api-plugins-list-endpoint.php 3 weeks ago class.jetpack-json-api-plugins-modify-endpoint.php 7 months ago class.jetpack-json-api-plugins-modify-v1-2-endpoint.php 7 months ago class.jetpack-json-api-plugins-new-endpoint.php 7 months ago class.jetpack-json-api-plugins-replace-endpoint.php 2 months ago class.jetpack-json-api-sync-endpoint.php 1 month ago class.jetpack-json-api-themes-active-endpoint.php 7 months ago class.jetpack-json-api-themes-delete-endpoint.php 7 months ago class.jetpack-json-api-themes-endpoint.php 1 month ago class.jetpack-json-api-themes-get-endpoint.php 7 months ago class.jetpack-json-api-themes-install-endpoint.php 7 months ago class.jetpack-json-api-themes-list-endpoint.php 7 months ago class.jetpack-json-api-themes-modify-endpoint.php 7 months ago class.jetpack-json-api-themes-new-endpoint.php 7 months ago class.jetpack-json-api-themes-replace-endpoint.php 2 months ago class.jetpack-json-api-translations-endpoint.php 7 months ago class.jetpack-json-api-translations-modify-endpoint.php 7 months ago class.jetpack-json-api-updates-status-endpoint.php 1 month ago class.jetpack-json-api-user-connect-endpoint.php 7 months ago class.jetpack-json-api-user-create-endpoint.php 1 month ago class.wpcom-json-api-get-option-endpoint.php 1 month ago class.wpcom-json-api-update-option-endpoint.php 7 months ago json-api-jetpack-endpoints.php 2 months ago
class.jetpack-json-api-endpoint.php
182 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2
3 if ( ! defined( 'ABSPATH' ) ) {
4 exit( 0 );
5 }
6
7 require JETPACK__PLUGIN_DIR . '/modules/module-info.php';
8
9 /**
10 * Base class for Jetpack Endpoints, has the validate_call helper function.
11 */
12 abstract class Jetpack_JSON_API_Endpoint extends WPCOM_JSON_API_Endpoint {
13
14 /**
15 * Needed capabilities.
16 *
17 * @var string
18 */
19 protected $needed_capabilities;
20
21 /**
22 * Expected actions.
23 *
24 * @var array
25 */
26 protected $expected_actions = array();
27
28 /**
29 * The action.
30 *
31 * @var string
32 */
33 protected $action;
34
35 /**
36 * Callback function.
37 *
38 * @param string $path - the path.
39 * @param int $blog_id - the blog ID.
40 * @param object $object - parameter is for making the method signature compatible with its parent class method.
41 */
42 public function callback( $path = '', $blog_id = 0, $object = null ) {
43 $error = $this->validate_call( $blog_id, $this->needed_capabilities );
44 if ( is_wp_error( $error ) ) {
45 return $error;
46 }
47
48 $error = $this->validate_input( $object );
49 if ( is_wp_error( $error ) ) {
50 return $error;
51 }
52
53 if ( ! empty( $this->action ) ) {
54 $error = call_user_func( array( $this, $this->action ) );
55 if ( is_wp_error( $error ) ) {
56 return $error;
57 }
58 }
59
60 return $this->result();
61 }
62
63 /**
64 * The result function.
65 */
66 abstract protected function result();
67
68 /**
69 * Validate input.
70 *
71 * @param object $object - unused, for parent class compatability.
72 *
73 * @return bool
74 */
75 protected function validate_input( $object ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
76 $args = $this->input();
77
78 if ( isset( $args['action'] ) && $args['action'] === 'update' ) {
79 $this->action = 'update';
80 }
81
82 if ( preg_match( '!/update/?$!', $this->path ) ) {
83 $this->action = 'update';
84
85 } elseif ( preg_match( '/\/install\/?$/', $this->path ) ) {
86 $this->action = 'install';
87
88 } elseif ( ! empty( $args['action'] ) ) {
89 if ( ! in_array( $args['action'], $this->expected_actions, true ) ) {
90 return new WP_Error( 'invalid_action', __( 'You must specify a valid action', 'jetpack' ) );
91 }
92 $this->action = $args['action'];
93 }
94 return true;
95 }
96
97 /**
98 * Switches to the blog and checks current user capabilities.
99 *
100 * @param int $_blog_id - the blog ID.
101 * @param array $capability - the capabilities of the user.
102 * @param bool $check_validation - if we're checking the validation.
103 *
104 * @return bool|WP_Error a WP_Error object or true if things are good.
105 */
106 protected function validate_call( $_blog_id, $capability, $check_validation = true ) {
107 $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $_blog_id ) );
108 if ( is_wp_error( $blog_id ) ) {
109 return $blog_id;
110 }
111
112 $error = $this->check_capability( $capability );
113 if ( is_wp_error( $error ) ) {
114 return $error;
115 }
116
117 if (
118 $check_validation &&
119 'GET' !== $this->method &&
120 /**
121 * Filter to disallow JSON API requests to the site.
122 * Setting to false disallows you to manage your site remotely from WordPress.com
123 * and disallows plugin auto-updates.
124 *
125 * @since 7.3.0
126 *
127 * @param bool $check_validation Whether to allow API requests to manage the site
128 */
129 ! apply_filters( 'jetpack_json_manage_api_enabled', $check_validation )
130 ) {
131 return new WP_Error( 'unauthorized_full_access', __( 'Full management mode is off for this site.', 'jetpack' ), 403 );
132 }
133
134 return true;
135 }
136
137 /**
138 * Check capability.
139 *
140 * @param array $capability - the compatability.
141 *
142 * @return bool|WP_Error
143 */
144 protected function check_capability( $capability ) {
145 // If this endpoint accepts site based authentication, skip capabilities check.
146 if ( $this->accepts_site_based_authentication() ) {
147 return true;
148 }
149 if ( is_array( $capability ) ) {
150 // the idea is that the we can pass in an array of capabilitie that the user needs to have before we allowing them to do something
151 $capabilities = ( $capability['capabilities'] ?? $capability );
152
153 // We can pass in the number of conditions we must pass by default it is all.
154 $must_pass = ( isset( $capability['must_pass'] ) && is_int( $capability['must_pass'] ) ? $capability['must_pass'] : count( $capabilities ) );
155
156 $failed = array(); // store the failed capabilities
157 $passed = 0;
158 foreach ( $capabilities as $cap ) {
159 if ( current_user_can( $cap ) ) {
160 ++$passed;
161 } else {
162 $failed[] = $cap;
163 }
164 }
165 // Check if all conditions have passed.
166 if ( $passed < $must_pass ) {
167 return new WP_Error(
168 'unauthorized',
169 /* translators: %s: comma-separated list of capabilities */
170 sprintf( __( 'This user is not authorized to %s on this blog.', 'jetpack' ), implode( ', ', $failed ) ),
171 403
172 );
173 }
174 } elseif ( ! current_user_can( $capability ) ) {
175 // Translators: the capability that the user is not authorized for.
176 return new WP_Error( 'unauthorized', sprintf( __( 'This user is not authorized to %s on this blog.', 'jetpack' ), $capability ), 403 );
177 }
178
179 return true;
180 }
181 }
182