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

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