get( Ban_Hosts\REST::class )->register_routes(); ITSEC_Modules::get_container()->get( Modules_Controller::class )->register_routes(); ITSEC_Modules::get_container()->get( Settings_Controller::class )->register_routes(); ITSEC_Modules::get_container()->get( Site_Types_Controller::class )->register_routes(); ITSEC_Modules::get_container()->get( Tools_Controller::class )->register_routes(); } /** * Register the CURIE to shorten link refs. * * @param array $curies * * @return array */ public function register_curie( $curies ) { ITSEC_Lib::load( 'rest' ); $curies[] = array( 'name' => 'ithemes-security', 'href' => ITSEC_Lib_REST::LINK_REL . '{rel}', 'templated' => true, ); return $curies; } /** * Modify the ithemes-security/v1 index to include some additional global information we need. * * @param WP_REST_Response $response * * @return WP_REST_Response */ public function modify_index( $response ) { if ( ITSEC_Core::current_user_can_manage() || current_user_can( 'create_users' ) || current_user_can( 'edit_users' ) || current_user_can( 'promote_users' ) ) { $roles = []; foreach ( wp_roles()->get_names() as $role => $label ) { $roles[ $role ] = [ 'label' => translate_user_role( $label ), 'canonical' => ITSEC_Lib_Canonical_Roles::get_canonical_role_from_role( $role ), ]; } $response->data['roles'] = $roles; } $response->data['supports'] = apply_filters( 'itsec_rest_supports', [] ); return $response; } /** * Registers the "itsec_global" query parameter for the users endpoint. * * @param array $params * * @return array */ public function register_global_users_query( $params ) { if ( is_multisite() ) { $params['itsec_global'] = [ 'description' => __( 'Return results for users across the entire network, not just the current site.', 'it-l10n-ithemes-security-pro' ), 'type' => 'boolean', 'default' => false, ]; } return $params; } /** * Applies the "itsec_global" query parameter. * * @param array $prepared_args * @param WP_REST_Request $request * * @return array */ public function apply_global_users_query( $prepared_args, $request ) { if ( is_multisite() && $request['itsec_global'] && current_user_can( 'manage_network_users' ) ) { $prepared_args['blog_id'] = null; } return $prepared_args; } /** * Retain the authorization header when doing internal embed requests. * * @param WP_REST_Request $request * * @return WP_REST_Request */ public function retain_auth_header_from_embeds( $request ) { $headers = rest_get_server()->get_headers( $_SERVER ); if ( isset( $headers['AUTHORIZATION'] ) && 0 === strpos( $request->get_route(), '/ithemes-security/v1/' ) ) { $request->add_header( 'Authorization', $headers['AUTHORIZATION'] ); } return $request; } /** * Adds larger avatar sizes to the REST API responses. * * @param int[] $sizes The existing sizes. * * @return array */ public function add_avatar_size( $sizes ) { $sizes[] = 128; return $sizes; } public function add_htaccess_authorization_header( $rules ) { $rules .= "\n"; $rules .= "\t# " . __( 'Pass through Authorization header.', 'it-l10n-ithemes-security-pro' ) . "\n"; $rules .= <<<'APACHE' RewriteEngine On RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] APACHE; $rules .= "\n"; return $rules; } }