service = new SystemStatusService(); } public static function instance(): self { return self::$instance ??= new self(); } /** * Register REST routes. * * @return void */ public function register_routes(): void { register_rest_route( 'ipscmi-corekit-system/v1', '/status', array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_status' ), 'permission_callback' => array( $this, 'can_view' ), ) ); register_rest_route( 'ipscmi-corekit-system/v1', '/phpinfo', array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_php_info' ), 'permission_callback' => array( $this, 'can_view' ), ) ); register_rest_route( 'ipscmi-corekit-system/v1', '/dbinfo', array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_db_info' ), 'permission_callback' => array( $this, 'can_view' ), ) ); register_rest_route( 'ipscmi-corekit-system/v1', '/logs', array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_logs' ), 'permission_callback' => array( $this, 'can_view' ), ) ); } /** * REST callback: return system data. * * @param WP_REST_Request $request Request. * * @return WP_REST_Response|WP_Error */ public function get_status( WP_REST_Request $request ) { $data = $this->service->get_status(); return rest_ensure_response( $data ); } /** * REST callback: return PHP info (safe subset). * * @param WP_REST_Request $request Request. * * @return WP_REST_Response|WP_Error */ public function get_php_info( WP_REST_Request $request ) { $data = $this->service->get_php_info(); return rest_ensure_response( $data ); } /** * REST callback: return DB info. * * @param WP_REST_Request $request Request. * * @return WP_REST_Response|WP_Error */ public function get_db_info( WP_REST_Request $request ) { $data = $this->service->get_db_info(); return rest_ensure_response( $data ); } /** * REST callback: return log metadata. * * @param WP_REST_Request $request Request. * * @return WP_REST_Response|WP_Error */ public function get_logs( WP_REST_Request $request ) { $data = $this->service->get_logs(); return rest_ensure_response( $data ); } /** * Permission check. * * @return bool */ public function can_view(): bool { $cap = apply_filters( 'ipscmi_corekit_system_status_capability', 'manage_options' ); return current_user_can( $cap ); } }