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-standalone-bootstrap.php
jetpack / jetpack_vendor / automattic / jetpack-waf / src Last commit date
brute-force-protection 9 months ago exceptions 9 months ago abstract-blocked-login-page.php 2 months ago class-brute-force-protection.php 2 months ago class-compatibility.php 2 months ago class-rest-controller.php 9 months ago class-waf-blocked-login-page.php 9 months ago class-waf-blocklog-manager.php 8 months ago class-waf-cli.php 9 months ago class-waf-constants.php 1 year ago class-waf-initializer.php 2 months 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 2 months ago class-waf-runtime.php 3 months ago class-waf-standalone-bootstrap.php 2 months ago class-waf-stats.php 1 year ago class-waf-transforms.php 2 years ago functions.php 1 year ago
class-waf-standalone-bootstrap.php
185 lines
1 <?php
2 /**
3 * Handles generation and deletion of the bootstrap for the standalone WAF mode.
4 *
5 * @package automattic/jetpack-waf
6 */
7
8 namespace Automattic\Jetpack\Waf;
9
10 use Composer\InstalledVersions;
11
12 /**
13 * Handles the bootstrap.
14 *
15 * @phan-constructor-used-for-side-effects
16 */
17 class Waf_Standalone_Bootstrap {
18
19 /**
20 * Ensures that constants are initialized if this class is used.
21 *
22 * @return void
23 */
24 public function __construct() {
25 $this->guard_against_missing_abspath();
26 $this->initialize_constants();
27 }
28
29 /**
30 * Ensures that this class is not used unless we are in the right context.
31 *
32 * @throws Waf_Exception If we are outside of WordPress.
33 *
34 * @return void
35 */
36 private function guard_against_missing_abspath() {
37
38 if ( ! defined( 'ABSPATH' ) ) {
39 throw new Waf_Exception( 'Cannot generate the WAF bootstrap if we are not running in WordPress context.' );
40 }
41 }
42
43 /**
44 * Initializes the constants required for generating the bootstrap, if they have not been initialized yet.
45 *
46 * @return void
47 */
48 private function initialize_constants() {
49 Waf_Constants::initialize_constants();
50 }
51
52 /**
53 * Initialized the WP filesystem and serves as a mocking hook for tests.
54 *
55 * Should only be implemented after the wp_loaded action hook:
56 *
57 * @link https://developer.wordpress.org/reference/functions/wp_filesystem/#more-information
58 *
59 * @return void
60 */
61 protected function initialize_filesystem() {
62 if ( ! function_exists( '\\WP_Filesystem' ) ) {
63 require_once ABSPATH . 'wp-admin/includes/file.php';
64 }
65
66 WP_Filesystem();
67 }
68
69 /**
70 * Finds the path to the autoloader, which can then be used to require the autoloader in the generated boostrap file.
71 *
72 * @throws Waf_Exception In case the autoloader file cannot be found.
73 *
74 * @return string|null
75 */
76 private function locate_autoloader_file() {
77 global $jetpack_autoloader_loader;
78
79 $autoload_file = null;
80
81 // Try the Jetpack autoloader.
82 if ( isset( $jetpack_autoloader_loader ) ) {
83 $class_file = $jetpack_autoloader_loader->find_class_file( Waf_Runner::class );
84 if ( $class_file ) {
85 $autoload_file = dirname( $class_file, 5 ) . '/vendor/autoload.php';
86 }
87 }
88
89 // Try Composer's autoloader.
90 if ( null === $autoload_file
91 && is_callable( array( InstalledVersions::class, 'getInstallPath' ) )
92 && InstalledVersions::isInstalled( 'automattic/jetpack-waf' )
93 ) {
94 $package_file = InstalledVersions::getInstallPath( 'automattic/jetpack-waf' );
95 if ( substr( $package_file, -23 ) === '/automattic/jetpack-waf' ) {
96 $autoload_file = dirname( $package_file, 3 ) . '/vendor/autoload.php';
97 }
98 }
99
100 // Guess. First look for being in a `vendor/automattic/jetpack-waf/src/', then see if we're standalone with our own vendor dir.
101 if ( null === $autoload_file ) {
102 $autoload_file = dirname( __DIR__, 4 ) . '/vendor/autoload.php';
103 if ( ! file_exists( $autoload_file ) ) {
104 $autoload_file = dirname( __DIR__ ) . '/vendor/autoload.php';
105 }
106 }
107
108 // Check that the determined file actually exists.
109 if ( ! file_exists( $autoload_file ) ) {
110 throw new Waf_Exception( 'Cannot find autoloader, and the WAF standalone boostrap will not work without it.' );
111 }
112
113 return $autoload_file;
114 }
115
116 /**
117 * Gets the path to the bootstrap.php file.
118 *
119 * @return string The bootstrap.php file path.
120 */
121 public function get_bootstrap_file_path() {
122 return trailingslashit( JETPACK_WAF_DIR ) . 'bootstrap.php';
123 }
124
125 /**
126 * Gets the entrypoint file.
127 *
128 * @return string The entrypoint file.
129 */
130 private function get_entrypoint() {
131 return defined( 'JETPACK_WAF_ENTRYPOINT' ) ? JETPACK_WAF_ENTRYPOINT : 'rules/rules.php';
132 }
133
134 /**
135 * Generates the bootstrap file.
136 *
137 * @throws File_System_Exception If the filesystem is not available.
138 * @throws File_System_Exception If the WAF directory cannot be created.
139 * @throws File_System_Exception If the bootstrap file cannot be created.
140 *
141 * @return string Absolute path to the bootstrap file.
142 */
143 public function generate() {
144
145 $this->initialize_filesystem();
146
147 global $wp_filesystem;
148 if ( ! $wp_filesystem ) {
149 throw new File_System_Exception( 'Cannot work without the file system being initialized.' );
150 }
151
152 $autoloader_file = $this->locate_autoloader_file();
153
154 $bootstrap_file = $this->get_bootstrap_file_path();
155 $entrypoint = $this->get_entrypoint();
156 $mode_option = get_option( Waf_Runner::MODE_OPTION_NAME, false );
157 $share_data_option = get_option( Waf_Runner::SHARE_DATA_OPTION_NAME, false );
158 $share_debug_data_option = get_option( Waf_Runner::SHARE_DEBUG_DATA_OPTION_NAME, false );
159
160 $code = "<?php\n"
161 . sprintf( "define( 'DISABLE_JETPACK_WAF', %s );\n", var_export( defined( 'DISABLE_JETPACK_WAF' ) && DISABLE_JETPACK_WAF, true ) )
162 . "if ( defined( 'DISABLE_JETPACK_WAF' ) && DISABLE_JETPACK_WAF ) return;\n"
163 . sprintf( "define( 'JETPACK_WAF_MODE', %s );\n", var_export( $mode_option ? $mode_option : 'silent', true ) )
164 . sprintf( "define( 'JETPACK_WAF_SHARE_DATA', %s );\n", var_export( $share_data_option, true ) )
165 . sprintf( "define( 'JETPACK_WAF_SHARE_DEBUG_DATA', %s );\n", var_export( $share_debug_data_option, true ) )
166 . sprintf( "define( 'JETPACK_WAF_DIR', %s );\n", var_export( JETPACK_WAF_DIR, true ) )
167 . sprintf( "define( 'JETPACK_WAF_WPCONFIG', %s );\n", var_export( JETPACK_WAF_WPCONFIG, true ) )
168 . sprintf( "define( 'JETPACK_WAF_ENTRYPOINT', %s );\n", var_export( $entrypoint, true ) )
169 . 'require_once ' . var_export( $autoloader_file, true ) . ";\n"
170 . "Automattic\Jetpack\Waf\Waf_Runner::initialize();\n";
171
172 if ( ! $wp_filesystem->is_dir( JETPACK_WAF_DIR ) ) {
173 if ( ! $wp_filesystem->mkdir( JETPACK_WAF_DIR ) ) {
174 throw new File_System_Exception( 'Failed creating WAF standalone bootstrap file directory: ' . JETPACK_WAF_DIR );
175 }
176 }
177
178 if ( ! $wp_filesystem->put_contents( $bootstrap_file, $code ) ) {
179 throw new File_System_Exception( 'Failed writing WAF standalone bootstrap file to: ' . $bootstrap_file );
180 }
181
182 return $bootstrap_file;
183 }
184 }
185