PluginProbe
Defender Security – Malware Scanner, Login Security & Firewall / 5.9.0
Defender Security – Malware Scanner, Login Security & Firewall v5.9.0
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.9.0, at src/controller/class-advanced-tools.php

252 lines 6.4 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 $data = apply_filters( 'wp_defender_advanced_tools_data', $data );
58 $data = is_array( $data ) ? $data : (array) $data;
59 wp_enqueue_script( 'clipboard' );
60 wp_localize_script( 'def-advancedtools', 'advanced_tools', $data );
61 wp_enqueue_script( 'def-advancedtools' );
62 $this->enqueue_main_assets();
63 }
64
65 /**
66 * Render the main view for this page.
67 */
68 public function main_view() {
69 $this->render( 'main' );
70 }
71
72 /**
73 * Remove settings for all submodules.
74 */
75 public function remove_settings() {
76 ( new \WP_Defender\Model\Setting\Mask_Login() )->delete();
77 ( new \WP_Defender\Model\Setting\Security_Headers() )->delete();
78 ( new \WP_Defender\Model\Setting\Password_Protection() )->delete();
79 ( new \WP_Defender\Model\Setting\Password_Reset() )->delete();
80 ( new \WP_Defender\Model\Setting\Captcha() )->delete();
81 ( new \WP_Defender\Model\Setting\Strong_Password() )->delete();
82 ( new Model_Session_Protection() )->delete();
83 }
84
85 /**
86 * Delete all the data & the cache.
87 *
88 * @since 2.4.6
89 */
90 public function remove_data() {
91 wd_di()->get( \WP_Defender\Controller\Mask_Login::class )->remove_data();
92 // Remove data of all Password features.
93 wd_di()->get( \WP_Defender\Controller\Password_Protection::class )->remove_data();
94 wd_di()->get( \WP_Defender\Controller\Password_Reset::class )->remove_data();
95 wd_di()->get( \WP_Defender\Controller\Strong_Password::class )->remove_data();
96 wd_di()->get( \WP_Defender\Controller\Session_Protection::class )->remove_data();
97 // End.
98 wd_di()->get( \WP_Defender\Controller\Captcha::class )->remove_data();
99
100 global $wp_filesystem;
101 // Initialize the WP filesystem, no more using 'file-put-contents' function.
102 if ( ! $wp_filesystem instanceof WP_Filesystem_Base ) {
103 require_once ABSPATH . '/wp-admin/includes/file.php';
104 WP_Filesystem();
105 }
106
107 $service_geo = wd_di()->get( MaxMind_Geolocation::class );
108 $maxmind_dir = $service_geo->get_db_base_path();
109 $wp_filesystem->delete( $maxmind_dir, true );
110 $arr_deleted_files = array(
111 \WP_Defender\Component\Audit::AUDIT_LOG,
112 \WP_Defender\Controller\Firewall::FIREWALL_LOG,
113 wd_internal_log(),
114 \WP_Defender\Behavior\Scan\Malware_Scan::MALWARE_LOG,
115 \WP_Defender\Controller\Scan::SCAN_LOG,
116 \WP_Defender\Component\Password_Protection::PASSWORD_LOG,
117 \WP_Defender\Component\IP\Antibot_Global_Firewall::LOG_FILE_NAME,
118 \WP_Defender\Component\Security_Tweak::LOG_FILE_NAME,
119 // Outdated logs.
120 'defender.log',
121 );
122
123 foreach ( $arr_deleted_files as $deleted_file ) {
124 $wp_filesystem->delete( $deleted_file );
125 }
126
127 $this->handle_log_file_deletion();
128 }
129
130 /**
131 * Handle log file deletion.
132 *
133 * @since 4.7.2
134 * @return void
135 */
136 public function handle_log_file_deletion(): void {
137 if ( is_multisite() ) {
138 global $wpdb;
139
140 $offset = 0;
141 $limit = 100;
142 $blogs = $wpdb->get_results( // phpcs:ignore WordPress.DB.DirectDatabaseQuery
143 $wpdb->prepare(
144 "SELECT blog_id FROM {$wpdb->blogs} LIMIT %d, %d",
145 $offset,
146 $limit
147 ),
148 ARRAY_A
149 );
150 while ( is_array( $blogs ) && array() !== $blogs ) {
151 foreach ( $blogs as $blog ) {
152 switch_to_blog( $blog['blog_id'] );
153
154 $this->delete_log_files();
155
156 restore_current_blog();
157 }
158 $offset += $limit;
159 $blogs = $wpdb->get_results( // phpcs:ignore WordPress.DB.DirectDatabaseQuery
160 $wpdb->prepare(
161 "SELECT blog_id FROM {$wpdb->blogs} LIMIT %d, %d",
162 $offset,
163 $limit
164 ),
165 ARRAY_A
166 );
167 }
168 } else {
169 $this->delete_log_files();
170 }
171 }
172
173 /**
174 * Delete log files.
175 *
176 * @since 4.7.2
177 * @return void
178 */
179 private function delete_log_files(): void {
180 global $wp_filesystem;
181
182 // Initialize the WP filesystem, no more using 'file-put-contents' function.
183 if ( ! $wp_filesystem instanceof WP_Filesystem_Base ) {
184 require_once ABSPATH . '/wp-admin/includes/file.php';
185 WP_Filesystem();
186 }
187
188 $upload_dir = wp_upload_dir();
189 $upload_path = $upload_dir['basedir'] . DIRECTORY_SEPARATOR . 'wp-defender';
190
191 if ( is_dir( $upload_path ) ) {
192 $files = glob( $upload_path . '/*.log' );
193
194 foreach ( $files as $file ) {
195 if ( $wp_filesystem->is_file( $file ) ) {
196 $wp_filesystem->delete( $file );
197 }
198 }
199 }
200 }
201
202 /**
203 * Get data for frontend
204 *
205 * @return array
206 */
207 public function data_frontend(): array {
208 return array(
209 'mask_login' => wd_di()->get( Mask_Login::class )->data_frontend(),
210 'security_headers' => wd_di()->get( Security_Headers::class )->data_frontend(),
211 'pwned_passwords' => wd_di()->get( Password_Protection::class )->data_frontend(),
212 'captcha' => wd_di()->get( Captcha::class )->data_frontend(),
213 'strong_password' => wd_di()->get( Strong_Password::class )->data_frontend(),
214 'session_protection' => wd_di()->get( Session_Protection::class )->data_frontend(),
215 );
216 }
217
218 /**
219 * Export to array.
220 *
221 * @return array
222 */
223 public function to_array(): array {
224 return array();
225 }
226
227 /**
228 * Import data.
229 *
230 * @param array $data The data to import.
231 */
232 public function import_data( $data ) {}
233
234 /**
235 * Export strings
236 *
237 * @return array
238 */
239 public function export_strings() {
240 return array();
241 }
242
243 /**
244 * Return the title of the page.
245 *
246 * @return string The title of the page.
247 */
248 public function get_title(): string {
249 return esc_html__( 'Tools', 'defender-security' );
250 }
251 }
252