wpmudev = wd_di()->get( WPMUDEV::class ); // Return the constructor and do not register WAF page if Whitelable is enabled. if ( $this->wpmudev->is_whitelabel_enabled() ) { return; } $this->register_page( esc_html__( 'WAF', 'defender-security' ), $this->slug, array( $this, 'main_view' ), $this->parent_slug ); add_action( 'defender_enqueue_assets', array( $this, 'enqueue_assets' ) ); $this->register_routes(); } /** * Enqueues scripts and styles for this page. * Only enqueues assets if the page is active. */ public function enqueue_assets() { if ( ! $this->is_page_active() ) { return; } wp_localize_script( 'def-waf', 'waf', $this->data_frontend() ); wp_enqueue_script( 'def-waf' ); $this->enqueue_main_assets(); } /** * Renders the main view for this page. */ public function main_view() { $this->render( 'main' ); } /** * Retrieves the WAF status for a given site. * * @return bool Returns false on failure, true if WAF is enabled. */ public function get_waf_status(): bool { $status = defender_get_hosting_feature_state( 'waf' ); return '' !== $status && true === (bool) $status; } /** * Remove the cache and return latest data. * * @return Response * @defender_route */ public function recheck(): Response { return new Response( true, array( 'waf' => $this->data_frontend()['waf'] ) ); } /** * Checks if the WAF dashboard widget should be shown. * * @return bool Whether to show the widget or not. */ public function maybe_show_dashboard_widget(): bool { if ( // Not hosted on us. ! $this->wpmudev->is_wpmu_hosting() // Pro. && true === $this->wpmudev->is_pro() // Enable whitelabel. && $this->wpmudev->is_whitelabel_enabled() ) { // Hide it. return false; } return true; } /** * Converts the current object state to an array. * * @return array The array representation of the object. */ public function to_array(): array { return array( 'waf' => array( 'hosted' => $this->wpmudev->is_wpmu_hosting(), 'status' => $this->get_waf_status(), 'maybe_show' => $this->maybe_show_dashboard_widget(), ), ); } /** * Removes settings for all submodules. */ public function remove_settings() { } /** * Delete all the data & the cache. */ public function remove_data() { } /** * Provides data for the frontend. * * @return array An array of data for the frontend. */ public function data_frontend(): array { $site_id = $this->wpmudev->get_site_id(); return array_merge( array( 'site_id' => $site_id, 'waf' => array( 'hosted' => $this->wpmudev->is_wpmu_hosting(), 'status' => $this->get_waf_status(), ), 'hub_connector' => wd_di()->get( Hub_Connector::class )->data_frontend(), 'antibot' => wd_di()->get( Antibot_Global_Firewall::class )->data_frontend(), ), $this->dump_routes_and_nonces() ); } /** * Imports data into the model. * * @param array $data Data to be imported into the model. */ public function import_data( array $data ) { } /** * Exports strings. * * @return array An array of strings. */ public function export_strings(): array { return array(); } }