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

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