Linux puskom-ProLiant-DL385-Gen10 5.4.0-150-generic #167~18.04.1-Ubuntu SMP Wed May 24 00:51:42 UTC 2023 x86_64
/
home
/
puskom
/
mastur
/
hummingbird-performance
/
core
/
api
/
//home/puskom/mastur/hummingbird-performance/core/api/class-rest.php
<?php /** * Manage Hummingbird REST API endpoints * * @package Hummingbird\Core\Api */ namespace Hummingbird\Core\Api; use Hummingbird\Core\Configs; use Hummingbird\Core\Modules\Minify; use Hummingbird\Core\Utils; use WP_Error; use WP_REST_Request; use WP_REST_Response; use WP_REST_Server; if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Class REST */ class Rest { /** * REST API version. * * @var string */ public $version = '1'; /** * REST API namespace. * * @var string */ public $namespace = 'hummingbird'; /** * REST constructor. */ public function __construct() { add_action( 'rest_api_init', array( $this, 'register_routes' ) ); } /** * Get namespace with version. * * @return string */ protected function get_namespace() { return $this->namespace . '/v' . $this->version; } /** * Register the REST routes. */ public function register_routes() { // Route to return a module status. register_rest_route( $this->get_namespace(), '/status/(?P<module>[\\w-]+)', array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_module_status' ), 'permission_callback' => '__return_true', 'args' => array( 'module' => array( 'required' => true, 'sanitize_callback' => 'sanitize_key', ), ), ) ); // Route to clear a module cache. register_rest_route( $this->get_namespace(), '/clear_cache/(?P<module>[\\w-]+)', array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'clear_module_cache' ), 'permission_callback' => array( $this, 'check_permissions' ), 'module' => array( 'required' => true, 'sanitize_callback' => 'sanitize_key', ), ) ); // Test route used to check if API is working. register_rest_route( $this->get_namespace(), '/test', array( 'methods' => 'POST,GET,PUT,PATCH,DELETE,COPY,HEAD', 'callback' => function() { return true; }, 'permission_callback' => '__return_true', ) ); // Configs route. register_rest_route( $this->get_namespace(), '/preset_configs', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_configs' ), 'permission_callback' => array( $this, 'check_manage_options_permissions' ), ), array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array( $this, 'set_configs' ), 'permission_callback' => array( $this, 'check_manage_options_permissions' ), ), ) ); // Asset optimization - options. register_rest_route( $this->get_namespace(), '/minify/options', array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_minify_settings' ), 'permission_callback' => array( $this, 'check_manage_options_permissions' ), 'module' => array( 'required' => true, 'sanitize_callback' => 'sanitize_key', ), ) ); // Asset optimization - assets. register_rest_route( $this->get_namespace(), '/minify/assets', array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_minify_assets' ), 'permission_callback' => array( $this, 'check_manage_options_permissions' ), 'module' => array( 'required' => true, 'sanitize_callback' => 'sanitize_key', ), ) ); } /** * Check if user has proper permissions (minimum manage_options capability) to use the endpoints. * * @since 3.0.1 * * @return bool */ public function check_manage_options_permissions() { $capability = is_multisite() && ( is_network_admin() || Utils::is_referrer_network_admin() ) ? 'manage_network' : 'manage_options'; return current_user_can( $capability ); } /** * Check if user has proper permissions (minimum edit_posts capability) to use the endpoints. * * @since 2.7.3 * * @return bool|WP_Error */ public function check_permissions() { if ( defined( 'WPHB_SKIP_REST_API_AUTH' ) && WPHB_SKIP_REST_API_AUTH ) { return true; } if ( current_user_can( 'edit_posts' ) ) { return true; } return new WP_Error( 'rest_forbidden', esc_html__( 'Not enough permissions to access the endpoint.', 'wphb' ), array( 'status' => 401 ) ); } /** * Returns the status of a module. * * @param WP_REST_Request $request Request. * * @return WP_Error|WP_REST_Response */ public function get_module_status( $request ) { $module = $request->get_param( 'module' ); $available_modules = array( 'gzip', 'caching' ); if ( ! in_array( $module, $available_modules, true ) ) { return new WP_Error( 'invalid_module', __( 'The requested module status was invalid.', 'wphb' ), array( 'status' => 400, ) ); } $response = array( 'module_active' => Utils::get_module( $module )->is_active(), 'data' => Utils::get_module( $module )->analyze_data(), ); return rest_ensure_response( $response ); } /** * Clears the cache of a module. * * @param WP_REST_Request $request Request. * @return WP_Error|WP_REST_Response */ public function clear_module_cache( $request ) { $module = $request->get_param( 'module' ); $available_modules = array( 'page_cache', 'performance', 'gravatar', 'minify', 'cloudflare', ); // Make sure modules cache can be cleared. if ( ! in_array( $module, $available_modules, true ) ) { return new WP_Error( 'invalid_module', __( 'The requested module was invalid.', 'wphb' ), array( 'status' => 400, ) ); } // Make sure module is active. if ( ! Utils::get_module( $module )->is_active() ) { return new WP_Error( 'inactive_module', __( 'The requested module is inactive.', 'wphb' ), array( 'status' => 400, ) ); } // Clear the cache of module. switch ( $module ) { case 'minify': $response = array( 'cache_cleared' => Utils::get_module( $module )->clear_cache( false ), ); break; default: $response = array( 'cache_cleared' => Utils::get_module( $module )->clear_cache(), ); break; } return rest_ensure_response( $response ); } /** * Gets the local list of configs. * * @since 3.0.1 * * @return array */ public function get_configs() { $stored_configs = get_site_option( 'wphb-preset_configs', false ); if ( false === $stored_configs ) { $configs = new Configs(); $stored_configs = array( $configs->get_basic_config() ); update_site_option( 'wphb-preset_configs', $stored_configs ); } return $stored_configs; } /** * Updates the local list of configs. * * @since 3.0.1 * * @param WP_REST_Request $request Class containing the request data. * * @return array|WP_Error */ public function set_configs( $request ) { $data = json_decode( $request->get_body(), true ); if ( ! is_array( $data ) ) { return new WP_Error( '400', esc_html__( 'Missing configs data', 'wphb' ), array( 'status' => 400 ) ); } foreach ( $data as $key => $value ) { if ( isset( $value['name'] ) ) { $name = sanitize_text_field( $value['name'] ); $data[ $key ]['name'] = empty( $name ) ? __( 'Undefined', 'wphb' ) : $name; } if ( isset( $value['description'] ) ) { $data[ $key ]['description'] = sanitize_text_field( $value['description'] ); } } // We might want to sanitize before this. update_site_option( 'wphb-preset_configs', $data ); return $data; } /** * Get asset optimization settings. * * @sicne 3.4.0 * * @return WP_REST_Response */ public function get_minify_settings() { $options = Utils::get_module( 'minify' )->get_options(); $response = array( 'cdn' => $options['use_cdn'], 'modal' => (bool) get_option( 'wphb-minification-show-advanced_modal' ), 'mode' => $options['view'], 'safeMode' => Minify::get_safe_mode_status(), 'delay_js' => $options['delay_js'], 'critical_css' => $options['critical_css'], ); return rest_ensure_response( $response ); } /** * Get asset optimization files. * * @sicne 3.4.0 * * @return WP_REST_Response */ public function get_minify_assets() { $response = Utils::get_module( 'minify' )->get_processed_collection(); return rest_ensure_response( $response ); } }