PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 8.2.1
Jetpack – WP Security, Backup, Speed, & Growth v8.2.1
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 / class.wpcom-json-api-site-user-endpoint.php
jetpack / json-endpoints Last commit date
jetpack 6 years ago class.wpcom-json-api-add-widget-endpoint.php 8 years ago class.wpcom-json-api-autosave-post-v1-1-endpoint.php 6 years ago class.wpcom-json-api-bulk-delete-post-endpoint.php 8 years ago class.wpcom-json-api-bulk-restore-post-endpoint.php 8 years ago class.wpcom-json-api-bulk-update-comments-endpoint.php 7 years ago class.wpcom-json-api-comment-endpoint.php 7 years ago class.wpcom-json-api-delete-media-endpoint.php 8 years ago class.wpcom-json-api-delete-media-v1-1-endpoint.php 8 years ago class.wpcom-json-api-edit-media-v1-2-endpoint.php 6 years ago class.wpcom-json-api-get-autosave-v1-1-endpoint.php 6 years ago class.wpcom-json-api-get-comment-counts-endpoint.php 7 years ago class.wpcom-json-api-get-comment-endpoint.php 8 years ago class.wpcom-json-api-get-comment-history-endpoint.php 8 years ago class.wpcom-json-api-get-comments-tree-endpoint.php 8 years ago class.wpcom-json-api-get-comments-tree-v1-1-endpoint.php 8 years ago class.wpcom-json-api-get-comments-tree-v1-2-endpoint.php 8 years ago class.wpcom-json-api-get-customcss.php 8 years ago class.wpcom-json-api-get-media-endpoint.php 8 years ago class.wpcom-json-api-get-media-v1-1-endpoint.php 8 years ago class.wpcom-json-api-get-media-v1-2-endpoint.php 8 years ago class.wpcom-json-api-get-post-counts-v1-1-endpoint.php 6 years ago class.wpcom-json-api-get-post-endpoint.php 8 years ago class.wpcom-json-api-get-post-v1-1-endpoint.php 8 years ago class.wpcom-json-api-get-site-endpoint.php 6 years ago class.wpcom-json-api-get-site-v1-2-endpoint.php 6 years ago class.wpcom-json-api-get-taxonomies-endpoint.php 8 years ago class.wpcom-json-api-get-taxonomy-endpoint.php 8 years ago class.wpcom-json-api-get-term-endpoint.php 8 years ago class.wpcom-json-api-list-comments-endpoint.php 7 years ago class.wpcom-json-api-list-embeds-endpoint.php 8 years ago class.wpcom-json-api-list-media-endpoint.php 8 years ago class.wpcom-json-api-list-media-v1-1-endpoint.php 8 years ago class.wpcom-json-api-list-media-v1-2-endpoint.php 8 years ago class.wpcom-json-api-list-post-type-taxonomies-endpoint.php 8 years ago class.wpcom-json-api-list-post-types-endpoint.php 7 years ago class.wpcom-json-api-list-posts-endpoint.php 6 years ago class.wpcom-json-api-list-posts-v1-1-endpoint.php 6 years ago class.wpcom-json-api-list-posts-v1-2-endpoint.php 6 years ago class.wpcom-json-api-list-roles-endpoint.php 8 years ago class.wpcom-json-api-list-shortcodes-endpoint.php 8 years ago class.wpcom-json-api-list-terms-endpoint.php 8 years ago class.wpcom-json-api-list-users-endpoint.php 8 years ago class.wpcom-json-api-menus-v1-1-endpoint.php 8 years ago class.wpcom-json-api-post-endpoint.php 6 years ago class.wpcom-json-api-post-v1-1-endpoint.php 6 years ago class.wpcom-json-api-render-embed-endpoint.php 6 years ago class.wpcom-json-api-render-embed-reversal-endpoint.php 8 years ago class.wpcom-json-api-render-endpoint.php 9 years ago class.wpcom-json-api-render-shortcode-endpoint.php 8 years ago class.wpcom-json-api-sharing-buttons-endpoint.php 8 years ago class.wpcom-json-api-site-settings-endpoint.php 7 years ago class.wpcom-json-api-site-settings-v1-2-endpoint.php 7 years ago class.wpcom-json-api-site-settings-v1-3-endpoint.php 7 years ago class.wpcom-json-api-site-settings-v1-4-endpoint.php 7 years ago class.wpcom-json-api-site-user-endpoint.php 8 years ago class.wpcom-json-api-taxonomy-endpoint.php 7 years ago class.wpcom-json-api-update-comment-endpoint.php 8 years ago class.wpcom-json-api-update-customcss.php 8 years ago class.wpcom-json-api-update-media-endpoint.php 8 years ago class.wpcom-json-api-update-media-v1-1-endpoint.php 8 years ago class.wpcom-json-api-update-post-endpoint.php 6 years ago class.wpcom-json-api-update-post-v1-1-endpoint.php 6 years ago class.wpcom-json-api-update-post-v1-2-endpoint.php 6 years ago class.wpcom-json-api-update-site-homepage-endpoint.php 8 years ago class.wpcom-json-api-update-site-logo-endpoint.php 8 years ago class.wpcom-json-api-update-taxonomy-endpoint.php 8 years ago class.wpcom-json-api-update-term-endpoint.php 7 years ago class.wpcom-json-api-update-user-endpoint.php 7 years ago class.wpcom-json-api-upload-media-endpoint.php 8 years ago class.wpcom-json-api-upload-media-v1-1-endpoint.php 8 years ago
class.wpcom-json-api-site-user-endpoint.php
222 lines
1 <?php
2
3 new WPCOM_JSON_API_Site_User_Endpoint( array(
4 'description' => 'Get details of a user of a site by ID.',
5 'group' => '__do_not_document', //'users'
6 'stat' => 'sites:1:user',
7 'method' => 'GET',
8 'path' => '/sites/%s/users/%d',
9 'path_labels' => array(
10 '$site' => '(int|string) Site ID or domain',
11 '$user_id' => '(int) User ID',
12 ),
13 'response_format' => WPCOM_JSON_API_Site_User_Endpoint::$user_format,
14 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/user/23',
15 'example_request_data' => array(
16 'headers' => array(
17 'authorization' => 'Bearer YOUR_API_TOKEN'
18 ),
19 ),
20 'example_response' => '{
21 "ID": 18342963,
22 "login": "binarysmash",
23 "email": false,
24 "name": "binarysmash",
25 "URL": "http:\/\/binarysmash.wordpress.com",
26 "avatar_URL": "http:\/\/0.gravatar.com\/avatar\/a178ebb1731d432338e6bb0158720fcc?s=96&d=identicon&r=G",
27 "profile_URL": "http:\/\/en.gravatar.com\/binarysmash",
28 "roles": [ "administrator" ]
29 }'
30 ) );
31
32 new WPCOM_JSON_API_Site_User_Endpoint( array(
33 'description' => 'Get details of a user of a site by login.',
34 'group' => 'users',
35 'stat' => 'sites:1:user',
36 'method' => 'GET',
37 'path' => '/sites/%s/users/login:%s',
38 'path_labels' => array(
39 '$site' => '(int|string) The site ID or domain.',
40 '$user_id' => '(string) The user\'s login.',
41 ),
42 'response_format' => WPCOM_JSON_API_Site_User_Endpoint::$user_format,
43 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/user/login:binarysmash',
44 'example_request_data' => array(
45 'headers' => array(
46 'authorization' => 'Bearer YOUR_API_TOKEN'
47 ),
48 ),
49 'example_response' => '{
50 "ID": 18342963,
51 "login": "binarysmash",
52 "email": false,
53 "name": "binarysmash",
54 "URL": "http:\/\/binarysmash.wordpress.com",
55 "avatar_URL": "http:\/\/0.gravatar.com\/avatar\/a178ebb1731d432338e6bb0158720fcc?s=96&d=identicon&r=G",
56 "profile_URL": "http:\/\/en.gravatar.com\/binarysmash",
57 "roles": [ "administrator" ]
58 }'
59 ) );
60
61 new WPCOM_JSON_API_Site_User_Endpoint( array(
62 'description' => 'Update details of a user of a site.',
63 'group' => 'users',
64 'stat' => 'sites:1:user',
65 'method' => 'POST',
66 'path' => '/sites/%s/users/%d',
67 'path_labels' => array(
68 '$site' => '(int|string) The site ID or domain.',
69 '$user_id' => '(int) The user\'s ID.',
70 ),
71 'request_format' => WPCOM_JSON_API_Site_User_Endpoint::$user_format,
72 'response_format' => WPCOM_JSON_API_Site_User_Endpoint::$user_format,
73 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/user/23',
74 'example_request_data' => array(
75 'headers' => array(
76 'authorization' => 'Bearer YOUR_API_TOKEN'
77 ),
78 'body' => array(
79 'roles' => array(
80 array(
81 'administrator',
82 )
83 ),
84 'first_name' => 'Rocco',
85 'last_name' => 'Tripaldi',
86 )
87 ),
88 'example_response' => '{
89 "ID": 18342963,
90 "login": "binarysmash",
91 "email": false,
92 "name": "binarysmash",
93 "URL": "http:\/\/binarysmash.wordpress.com",
94 "avatar_URL": "http:\/\/0.gravatar.com\/avatar\/a178ebb1731d432338e6bb0158720fcc?s=96&d=identicon&r=G",
95 "profile_URL": "http:\/\/en.gravatar.com\/binarysmash",
96 "roles": [ "administrator" ]
97 }'
98 ) );
99
100 class WPCOM_JSON_API_Site_User_Endpoint extends WPCOM_JSON_API_Endpoint {
101
102 public static $user_format = array(
103 'ID' => '(int) The ID of the user',
104 'login' => '(string) The login username of the user',
105 'email' => '(string) The email of the user',
106 'name' => '(string) The name to display for the user',
107 'first_name' => '(string) The first name of the user',
108 'last_name' => '(string) The last name of the user',
109 'nice_name' => '(string) The nice_name to display for the user',
110 'URL' => '(string) The primary blog of the user',
111 'avatar_URL' => '(url) Gravatar image URL',
112 'profile_URL' => '(url) Gravatar Profile URL',
113 'site_ID' => '(int) ID of the user\'s primary blog',
114 'roles' => '(array|string) The role or roles of the user',
115 );
116
117 // /sites/%s/users/%d -> $blog_id, $user_id
118 function callback( $path = '', $blog_id = 0, $user_id = 0 ) {
119 $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
120 if ( is_wp_error( $blog_id ) ) {
121 return $blog_id;
122 }
123 if ( ! current_user_can_for_blog( $blog_id, 'list_users' ) ) {
124 return new WP_Error( 'unauthorized', 'User cannot view users for specified site', 403 );
125 }
126
127 // Get the user by ID or login
128 $get_by = false !== strpos( $path, '/users/login:' ) ? 'login' : 'id';
129 $user = get_user_by( $get_by, $user_id );
130
131 if ( ! $user ) {
132 return new WP_Error( 'unknown_user', 'Unknown user', 404 );
133 }
134
135 if ( ! is_user_member_of_blog( $user->ID, $blog_id ) ) {
136 return new WP_Error( 'unknown_user_for_site', 'Unknown user for site', 404 );
137 }
138
139 if ( 'GET' === $this->api->method ) {
140 return $this->get_user( $user->ID );
141 } else if ( 'POST' === $this->api->method ) {
142 if ( ! current_user_can_for_blog( $blog_id, 'promote_users' ) ) {
143 return new WP_Error( 'unauthorized_no_promote_cap', 'User cannot promote users for specified site', 403 );
144 }
145 return $this->update_user( $user_id, $blog_id );
146 } else {
147 return new WP_Error( 'bad_request', 'An unsupported request method was used.' );
148 }
149 }
150
151 public function get_user( $user_id ) {
152 $the_user = $this->get_author( $user_id, true );
153 if ( $the_user && ! is_wp_error( $the_user ) ) {
154 $userdata = get_userdata( $user_id );
155 $the_user->roles = ! is_wp_error( $userdata ) ? array_values( $userdata->roles ) : array();
156 }
157
158 return $the_user;
159 }
160
161 /**
162 * Updates user data
163 *
164 * @return array
165 */
166 public function update_user( $user_id, $blog_id ) {
167 $input = $this->input();
168 $user['ID'] = $user_id;
169 $is_wpcom = defined( 'IS_WPCOM' ) && IS_WPCOM;
170
171 if ( get_current_user_id() == $user_id && isset( $input['roles'] ) ) {
172 return new WP_Error( 'unauthorized', 'You cannot change your own role', 403 );
173 }
174
175 if ( $is_wpcom && $user_id !== get_current_user_id() && $user_id == wpcom_get_blog_owner( $blog_id ) ) {
176 return new WP_Error( 'unauthorized_edit_owner', 'Current user can not edit blog owner', 403 );
177 }
178
179 if ( ! $is_wpcom ) {
180 foreach ( $input as $key => $value ) {
181 if ( ! is_array( $value ) ) {
182 $value = trim( $value );
183 }
184 $value = wp_unslash( $value );
185 switch ( $key ) {
186 case 'first_name':
187 case 'last_name':
188 $user[ $key ] = $value;
189 break;
190 case 'display_name':
191 case 'name':
192 $user[ 'display_name' ] = $value;
193 break;
194 }
195 }
196 }
197
198 if ( isset( $input[ 'roles' ] ) ) {
199 // For now, we only use the first role in the array.
200 if ( is_array( $input['roles'] ) ) {
201 $user['role'] = $input['roles'][0];
202 } else if ( is_string( $input['roles'] ) ) {
203 $user['role'] = $input['roles'];
204 } else {
205 return new WP_Error( 'invalid_input', __( 'The roles property must be a string or an array.', 'jetpack' ), 400 );
206 }
207
208 $editable_roles = array_keys( get_editable_roles() );
209 if ( ! in_array( $user['role'], $editable_roles ) ) {
210 return new WP_Error( 'invalid_input', sprintf( __( '%s is not a valid role.', 'jetpack' ), $editable_roles ), 400 );
211 }
212 }
213
214 $result = wp_update_user( $user );
215 if ( is_wp_error( $result ) ) {
216 return $result;
217 }
218 return $this->get_user( $user_id );
219 }
220
221 }
222