PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-waf / src / class-waf-initializer.php
jetpack / jetpack_vendor / automattic / jetpack-waf / src Last commit date
brute-force-protection 8 months ago exceptions 8 months ago abstract-blocked-login-page.php 2 months ago class-brute-force-protection.php 1 month ago class-compatibility.php 1 month ago class-rest-controller.php 8 months ago class-waf-blocked-login-page.php 8 months ago class-waf-blocklog-manager.php 8 months ago class-waf-cli.php 8 months ago class-waf-constants.php 1 year ago class-waf-initializer.php 1 month ago class-waf-operators.php 2 years ago class-waf-request.php 6 months ago class-waf-rules-manager.php 1 year ago class-waf-runner.php 1 month ago class-waf-runtime.php 2 months ago class-waf-standalone-bootstrap.php 1 month ago class-waf-stats.php 1 year ago class-waf-transforms.php 2 years ago functions.php 1 year ago
class-waf-initializer.php
246 lines
1 <?php
2 /**
3 * Class use to initialize the WAF module.
4 *
5 * @package automattic/jetpack-waf
6 */
7
8 namespace Automattic\Jetpack\Waf;
9
10 use Automattic\Jetpack\Waf\Brute_Force_Protection\Brute_Force_Protection;
11 use WP_Error;
12 use WP_Upgrader;
13
14 /**
15 * Initializes the module
16 */
17 class Waf_Initializer {
18
19 /**
20 * Option for storing whether the WAF files are potentially out of date.
21 *
22 * @var string NEEDS_UPDATE_OPTION_NAME
23 */
24 const NEEDS_UPDATE_OPTION_NAME = 'jetpack_waf_needs_update';
25
26 /**
27 * Initializes the configurations needed for the waf module.
28 *
29 * @return void
30 */
31 public static function init() {
32 // Do not run in unsupported environments
33 add_action( 'jetpack_get_available_modules', __CLASS__ . '::remove_module_on_unsupported_environments' );
34 add_action( 'jetpack_get_available_standalone_modules', __CLASS__ . '::remove_standalone_module_on_unsupported_environments' );
35
36 // Ensure backwards compatibility
37 Waf_Compatibility::add_compatibility_hooks();
38
39 // Register REST routes. Use a static callable so the controller class is not
40 // loaded into memory/opcache on requests that never reach `rest_api_init`.
41 add_action( 'rest_api_init', array( REST_Controller::class, 'register_rest_routes' ) );
42
43 // Update the WAF after installing or upgrading a relevant Jetpack plugin
44 add_action( 'upgrader_process_complete', __CLASS__ . '::update_waf_after_plugin_upgrade', 10, 2 );
45
46 // Check for compatibility updates
47 add_action( 'admin_init', __CLASS__ . '::check_for_updates' );
48
49 // WAF activation/deactivation hooks
50 add_action( 'jetpack_activate_module_waf', __CLASS__ . '::on_waf_activation' );
51 add_action( 'jetpack_deactivate_module_waf', __CLASS__ . '::on_waf_deactivation' );
52
53 // Brute force protection activation/deactivation hooks
54 add_action( 'jetpack_activate_module_protect', __CLASS__ . '::on_brute_force_protection_activation' );
55 add_action( 'jetpack_deactivate_module_protect', __CLASS__ . '::on_brute_force_protection_deactivation' );
56
57 // Run brute force protection
58 Brute_Force_Protection::initialize();
59
60 // Run the WAF
61 if ( Waf_Runner::is_supported_environment() ) {
62 Waf_Runner::initialize();
63 }
64 }
65
66 /**
67 * Activate the WAF on module activation.
68 *
69 * @return bool|WP_Error True if the WAF activation is successful, WP_Error otherwise.
70 */
71 public static function on_waf_activation() {
72 update_option( Waf_Runner::MODE_OPTION_NAME, 'normal' );
73 add_option( Waf_Rules_Manager::AUTOMATIC_RULES_ENABLED_OPTION_NAME, false );
74
75 try {
76 Waf_Runner::activate();
77 ( new Waf_Standalone_Bootstrap() )->generate();
78 } catch ( Waf_Exception $e ) {
79 return $e->get_wp_error();
80 }
81
82 return true;
83 }
84
85 /**
86 * Activate the Brute force protection on module activation.
87 *
88 * @return bool True if the Brute force protection activation is successful
89 */
90 public static function on_brute_force_protection_activation() {
91 $brute_force_protection = Brute_Force_Protection::instance();
92 $brute_force_protection->on_activation();
93
94 return true;
95 }
96
97 /**
98 * Deactivate the WAF on module deactivation.
99 *
100 * @return bool|WP_Error True if the WAF deactivation is successful, WP_Error otherwise.
101 */
102 public static function on_waf_deactivation() {
103 try {
104 Waf_Runner::deactivate();
105 } catch ( Waf_Exception $e ) {
106 return $e->get_wp_error();
107 }
108
109 return true;
110 }
111
112 /**
113 * Deactivate the Brute force protection on module deactivation.
114 *
115 * @return bool True if the Brute force protection deactivation is successful.
116 */
117 public static function on_brute_force_protection_deactivation() {
118 $brute_force_protection = Brute_Force_Protection::instance();
119 $brute_force_protection->on_deactivation();
120
121 return true;
122 }
123
124 /**
125 * Updates the WAF after upgrader process is complete.
126 *
127 * @param WP_Upgrader $upgrader WP_Upgrader instance. In other contexts this might be a Theme_Upgrader, Plugin_Upgrader, Core_Upgrade, or Language_Pack_Upgrader instance.
128 * @param array $hook_extra Array of bulk item update data.
129 *
130 * @return void
131 */
132 public static function update_waf_after_plugin_upgrade( $upgrader, $hook_extra ) {
133 $jetpack_text_domains_with_waf = array( 'jetpack', 'jetpack-protect' );
134 $jetpack_plugins_with_waf = array( 'jetpack/jetpack.php', 'jetpack-protect/jetpack-protect.php' );
135
136 $hook_extra['type'] = $hook_extra['type'] ?? null;
137 $hook_extra['action'] = $hook_extra['action'] ?? null;
138 $hook_extra['plugins'] = $hook_extra['plugins'] ?? array();
139
140 // Only run on upgrades affecting plugins
141 if ( 'plugin' !== $hook_extra['type'] ) {
142 return;
143 }
144
145 // Only run on updates and installations
146 if ( 'update' !== $hook_extra['action'] && 'install' !== $hook_extra['action'] ) {
147 return;
148 }
149
150 // Only run when Jetpack plugins were affected
151 if ( 'update' === $hook_extra['action'] &&
152 ! empty( $hook_extra['plugins'] ) &&
153 empty( array_intersect( $jetpack_plugins_with_waf, $hook_extra['plugins'] ) )
154 ) {
155 return;
156 }
157 if ( 'install' === $hook_extra['action'] &&
158 ! empty( $upgrader->new_plugin_data['TextDomain'] ) &&
159 empty( in_array( $upgrader->new_plugin_data['TextDomain'] ?? null, $jetpack_text_domains_with_waf, true ) )
160 ) {
161 return;
162 }
163
164 update_option( self::NEEDS_UPDATE_OPTION_NAME, true );
165 }
166
167 /**
168 * Check for WAF update
169 *
170 * Updates the WAF when the "needs update" option is enabled.
171 *
172 * @return bool|WP_Error True if the WAF is up-to-date or was sucessfully updated, WP_Error if the update failed.
173 */
174 public static function check_for_updates() {
175 if ( get_option( self::NEEDS_UPDATE_OPTION_NAME ) ) {
176 if ( Waf_Runner::is_supported_environment() ) {
177 // Compatiblity patch for cases where an outdated WAF_Constants class has been
178 // autoloaded by the standalone bootstrap execution at the beginning of the current request.
179 if ( ! method_exists( Waf_Constants::class, 'define_mode' ) ) {
180 try {
181 ( new Waf_Standalone_Bootstrap() )->generate();
182 } catch ( Waf_Exception $e ) {
183 return $e->get_wp_error();
184 }
185 }
186
187 Waf_Compatibility::run_compatibility_migrations();
188
189 try {
190 Waf_Rules_Manager::generate_ip_rules();
191 Waf_Rules_Manager::generate_rules();
192 ( new Waf_Standalone_Bootstrap() )->generate();
193 } catch ( Waf_Exception $e ) {
194 return $e->get_wp_error();
195 }
196 } else {
197 // If the site doesn't support the request firewall,
198 // just migrate the IP allow list used by brute force protection.
199 Waf_Compatibility::migrate_brute_force_protection_ip_allow_list();
200 }
201
202 update_option( self::NEEDS_UPDATE_OPTION_NAME, false );
203 }
204
205 return true;
206 }
207
208 /**
209 * Disables the WAF module when on an unsupported platform in Jetpack.
210 *
211 * @param array $modules Filterable value for `jetpack_get_available_modules`.
212 *
213 * @return array Array of module slugs.
214 */
215 public static function remove_module_on_unsupported_environments( $modules ) {
216 if ( ! Waf_Runner::is_supported_environment() ) {
217 // WAF should never be available on unsupported platforms.
218 unset( $modules['waf'] );
219 }
220
221 return $modules;
222 }
223
224 /**
225 * Disables the WAF module when on an unsupported platform in a standalone plugin.
226 *
227 * @param array $modules Filterable value for `jetpack_get_available_standalone_modules`.
228 *
229 * @return array Array of module slugs.
230 */
231 public static function remove_standalone_module_on_unsupported_environments( $modules ) {
232 if ( ! Waf_Runner::is_supported_environment() ) {
233 // WAF should never be available on unsupported platforms.
234 $modules = array_filter(
235 $modules,
236 function ( $module ) {
237 return $module !== 'waf';
238 }
239 );
240
241 }
242
243 return $modules;
244 }
245 }
246