PluginProbe
Defender Security – Malware Scanner, Login Security & Firewall / 5.7.1
Defender Security – Malware Scanner, Login Security & Firewall v5.7.1
6.3.0 6.2.3 6.2.4 6.2.0 6.2.1 6.2.2 6.1.0 5.3.1 5.4.0 5.4.1 5.5.0 5.5.1 5.6.0 5.6.1 5.6.2 5.7.0 5.7.1 5.7.2 5.8.0 5.8.1 5.9.0 6.0.0 6.0.1 3.0.1 3.1.0 All 141 releases
defender-security / src / controller / class-advanced-tools.php

class-advanced-tools.php in Defender Security – Malware Scanner, Login Security & Firewall 5.7.1, at src/controller/class-advanced-tools.php

247 lines 6.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * The advanced tools class.
4 *
5 * @package WP_Defender\Controller
6 */
7
8 namespace WP_Defender\Controller;
9
10 use WP_Defender\Event;
11 use WP_Defender\Integrations\MaxMind_Geolocation;
12 use WP_Defender\Model\Setting\Session_Protection as Model_Session_Protection;
13 use WP_Filesystem_Base;
14
15 /**
16 * Since advanced tools will have many submodules, this just using for render.
17 *
18 * Class Advanced_Tools
19 */
20 class Advanced_Tools extends Event {
21 /**
22 * Menu slug name.
23 *
24 * @var string
25 */
26 public $slug = 'wdf-advanced-tools';
27
28 /**
29 * Constructor method
30 */
31 public function __construct() {
32 $this->register_page(
33 $this->get_title(),
34 $this->slug,
35 array( $this, 'main_view' ),
36 $this->parent_slug
37 );
38 $this->register_routes();
39 add_action( 'defender_enqueue_assets', array( $this, 'enqueue_assets' ) );
40 }
41
42 /**
43 * Enqueue assets.
44 */
45 public function enqueue_assets() {
46 if ( ! $this->is_page_active() ) {
47 return;
48 }
49
50 $data = array_merge(
51 array(
52 'hub_connector' => wd_di()->get( Hub_Connector::class )->data_frontend(),
53 'antibot' => wd_di()->get( Antibot_Global_Firewall::class )->data_frontend(),
54 ),
55 $this->dump_routes_and_nonces()
56 );
57 wp_enqueue_script( 'clipboard' );
58 $data = (array) apply_filters( 'wp_defender_advanced_tools_data', $data );
59 wp_localize_script( 'def-advancedtools', 'advanced_tools', $data );
60 wp_enqueue_script( 'def-advancedtools' );
61 $this->enqueue_main_assets();
62 }
63
64 /**
65 * Render the main view for this page.
66 */
67 public function main_view() {
68 $this->render( 'main' );
69 }
70
71 /**
72 * Remove settings for all submodules.
73 */
74 public function remove_settings() {
75 ( new \WP_Defender\Model\Setting\Mask_Login() )->delete();
76 ( new \WP_Defender\Model\Setting\Security_Headers() )->delete();
77 ( new \WP_Defender\Model\Setting\Password_Protection() )->delete();
78 ( new \WP_Defender\Model\Setting\Password_Reset() )->delete();
79 ( new \WP_Defender\Model\Setting\Captcha() )->delete();
80 ( new \WP_Defender\Model\Setting\Strong_Password() )->delete();
81 ( new Model_Session_Protection() )->delete();
82 }
83
84 /**
85 * Delete all the data & the cache.
86 *
87 * @since 2.4.6
88 */
89 public function remove_data() {
90 wd_di()->get( \WP_Defender\Controller\Mask_Login::class )->remove_data();
91 // Remove data of all Password features.
92 wd_di()->get( \WP_Defender\Controller\Password_Protection::class )->remove_data();
93 wd_di()->get( \WP_Defender\Controller\Password_Reset::class )->remove_data();
94 wd_di()->get( \WP_Defender\Controller\Strong_Password::class )->remove_data();
95 wd_di()->get( \WP_Defender\Controller\Session_Protection::class )->remove_data();
96 // End.
97 wd_di()->get( \WP_Defender\Controller\Captcha::class )->remove_data();
98
99 global $wp_filesystem;
100 // Initialize the WP filesystem, no more using 'file-put-contents' function.
101 if ( ! $wp_filesystem instanceof WP_Filesystem_Base ) {
102 require_once ABSPATH . '/wp-admin/includes/file.php';
103 WP_Filesystem();
104 }
105
106 $service_geo = wd_di()->get( MaxMind_Geolocation::class );
107 $maxmind_dir = $service_geo->get_db_base_path();
108 $wp_filesystem->delete( $maxmind_dir, true );
109 $arr_deleted_files = array(
110 \WP_Defender\Component\Audit::AUDIT_LOG,
111 \WP_Defender\Controller\Firewall::FIREWALL_LOG,
112 wd_internal_log(),
113 \WP_Defender\Behavior\Scan\Malware_Scan::MALWARE_LOG,
114 \WP_Defender\Controller\Scan::SCAN_LOG,
115 \WP_Defender\Component\Password_Protection::PASSWORD_LOG,
116 \WP_Defender\Component\IP\Antibot_Global_Firewall::LOG_FILE_NAME,
117 \WP_Defender\Component\Security_Tweak::LOG_FILE_NAME,
118 // Outdated logs.
119 'defender.log',
120 );
121
122 foreach ( $arr_deleted_files as $deleted_file ) {
123 $wp_filesystem->delete( $deleted_file );
124 }
125
126 $this->handle_log_file_deletion();
127 }
128
129 /**
130 * Handle log file deletion.
131 *
132 * @since 4.7.2
133 * @return void
134 */
135 public function handle_log_file_deletion(): void {
136 if ( is_multisite() ) {
137 global $wpdb;
138
139 $offset = 0;
140 $limit = 100;
141 $blogs = $wpdb->get_results( // phpcs:ignore WordPress.DB.DirectDatabaseQuery
142 $wpdb->prepare(
143 "SELECT blog_id FROM {$wpdb->blogs} LIMIT %d, %d",
144 $offset,
145 $limit
146 ),
147 ARRAY_A
148 );
149 while ( ! empty( $blogs ) && is_array( $blogs ) ) {
150 foreach ( $blogs as $blog ) {
151 switch_to_blog( $blog['blog_id'] );
152
153 $this->delete_log_files();
154
155 restore_current_blog();
156 }
157 $offset += $limit;
158 $blogs = $wpdb->get_results( // phpcs:ignore WordPress.DB.DirectDatabaseQuery
159 $wpdb->prepare(
160 "SELECT blog_id FROM {$wpdb->blogs} LIMIT %d, %d",
161 $offset,
162 $limit
163 ),
164 ARRAY_A
165 );
166 }
167 } else {
168 $this->delete_log_files();
169 }
170 }
171
172 /**
173 * Delete log files.
174 *
175 * @since 4.7.2
176 * @return void
177 */
178 private function delete_log_files(): void {
179 global $wp_filesystem;
180
181 // Initialize the WP filesystem, no more using 'file-put-contents' function.
182 if ( ! $wp_filesystem instanceof WP_Filesystem_Base ) {
183 require_once ABSPATH . '/wp-admin/includes/file.php';
184 WP_Filesystem();
185 }
186
187 $upload_dir = wp_upload_dir();
188 $upload_path = $upload_dir['basedir'] . DIRECTORY_SEPARATOR . 'wp-defender';
189
190 if ( is_dir( $upload_path ) ) {
191 $files = glob( $upload_path . '/*.log' );
192
193 foreach ( $files as $file ) {
194 if ( $wp_filesystem->is_file( $file ) ) {
195 $wp_filesystem->delete( $file );
196 }
197 }
198 }
199 }
200
201 /**
202 * Get data for frontend
203 *
204 * @return array
205 */
206 public function data_frontend(): array {
207 return array(
208 'mask_login' => wd_di()->get( Mask_Login::class )->data_frontend(),
209 'security_headers' => wd_di()->get( Security_Headers::class )->data_frontend(),
210 'pwned_passwords' => wd_di()->get( Password_Protection::class )->data_frontend(),
211 'captcha' => wd_di()->get( Recaptcha::class )->data_frontend(),
212 'strong_password' => wd_di()->get( Strong_Password::class )->data_frontend(),
213 'session_protection' => wd_di()->get( Session_Protection::class )->data_frontend(),
214 );
215 }
216
217 /**
218 * Export to array
219 */
220 public function to_array() {}
221
222 /**
223 * Import data
224 *
225 * @param array $data The data to import.
226 */
227 public function import_data( $data ) {}
228
229 /**
230 * Export strings
231 *
232 * @return array
233 */
234 public function export_strings() {
235 return array();
236 }
237
238 /**
239 * Return the title of the page.
240 *
241 * @return string The title of the page.
242 */
243 public function get_title(): string {
244 return esc_html__( 'Tools', 'defender-security' );
245 }
246 }
247