diff options
Diffstat (limited to 'plugins/jetpack/jetpack_vendor/automattic/jetpack-waf/src/class-waf-cli.php')
-rw-r--r-- | plugins/jetpack/jetpack_vendor/automattic/jetpack-waf/src/class-waf-cli.php | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/plugins/jetpack/jetpack_vendor/automattic/jetpack-waf/src/class-waf-cli.php b/plugins/jetpack/jetpack_vendor/automattic/jetpack-waf/src/class-waf-cli.php new file mode 100644 index 00000000..5ce887dc --- /dev/null +++ b/plugins/jetpack/jetpack_vendor/automattic/jetpack-waf/src/class-waf-cli.php @@ -0,0 +1,165 @@ +<?php +/** + * CLI handler for Jetpack Waf. + * + * @package automattic/jetpack-waf + */ + +namespace Automattic\Jetpack\Waf; + +use \WP_CLI; +use \WP_CLI_Command; + +/** + * Just a few sample commands to learn how WP-CLI works + */ +class CLI extends WP_CLI_Command { + /** + * View or set the current mode of the WAF. + * ## OPTIONS + * + * [<mode>] + * : The new mode to be set. + * --- + * options: + * - silent + * - normal + * --- + * + * @param array $args Arguments passed to CLI. + * @return void|null + * @throws WP_CLI\ExitException If there is an error switching the mode. + */ + public function mode( $args ) { + if ( count( $args ) > 1 ) { + + return WP_CLI::error( __( 'Only one mode may be specified.', 'jetpack-waf' ) ); + } + if ( count( $args ) === 1 ) { + if ( ! Waf_Runner::is_allowed_mode( $args[0] ) ) { + + return WP_CLI::error( + sprintf( + /* translators: %1$s is the mode that was actually found. Also note that the expected "silent" and "normal" are hard-coded strings and must therefore stay the same in any translation. */ + __( 'Invalid mode: %1$s. Expected "silent" or "normal".', 'jetpack-waf' ), + $args[0] + ) + ); + } + + update_option( Waf_Runner::MODE_OPTION_NAME, $args[0] ); + + try { + ( new Waf_Standalone_Bootstrap() )->generate(); + } catch ( \Exception $e ) { + WP_CLI::warning( + sprintf( + /* translators: %1$s is the unexpected error message. */ + __( 'Unable to generate waf bootstrap - standalone mode may not work properly: %1$s', 'jetpack-waf' ), + $e->getMessage() + ) + ); + } + + return WP_CLI::success( + sprintf( + /* translators: %1$s is the name of the mode that was just switched to. */ + __( 'Jetpack WAF mode switched to "%1$s".', 'jetpack-waf' ), + get_option( Waf_Runner::MODE_OPTION_NAME ) + ) + ); + } + WP_CLI::line( + sprintf( + /* translators: %1$s is the name of the mode that the waf is currently running in. */ + __( 'Jetpack WAF is running in "%1$s" mode.', 'jetpack-waf' ), + get_option( Waf_Runner::MODE_OPTION_NAME ) + ) + ); + } + + /** + * Setup the WAF to run. + * ## OPTIONS + * + * [<mode>] + * : The new mode to be set. + * --- + * options: + * - silent + * - normal + * --- + * + * @param array $args Arguments passed to CLI. + * @return void|null + * @throws WP_CLI\ExitException If there is an error switching the mode. + */ + public function setup( $args ) { + // Let is_allowed_mode know we are running from the CLI + define( 'WAF_CLI_MODE', $args[0] ); + + // Set the mode and generate the bootstrap + $this->mode( array( $args[0] ) ); + + try { + // Add relevant options and generate the rules.php file + Waf_Runner::activate(); + } catch ( \Exception $e ) { + + return WP_CLI::error( + sprintf( + /* translators: %1$s is the unexpected error message. */ + __( 'Jetpack WAF rules file failed to generate: %1$s', 'jetpack-waf' ), + $e->getMessage() + ) + ); + } + + return WP_CLI::success( __( 'Jetpack WAF has successfully been setup.', 'jetpack-waf' ) ); + } + + /** + * Delete the WAF options. + * + * @return void|null + * @throws WP_CLI\ExitException If deactivating has failures. + */ + public function teardown() { + try { + Waf_Runner::deactivate(); + } catch ( \Exception $e ) { + WP_CLI::error( __( 'Jetpack WAF failed to fully deactivate.', 'jetpack-waf' ) ); + } + + return WP_CLI::success( __( 'Jetpack WAF has been deactivated.', 'jetpack-waf' ) ); + } + + /** + * Generate the rules.php file with latest rules for the WAF. + * + * @return void|null + * @throws WP_CLI\ExitException If there is an error switching the mode. + */ + public function generate_rules() { + try { + Waf_Runner::generate_rules(); + } catch ( \Exception $e ) { + + return WP_CLI::error( + sprintf( + /* translators: %1$s is the unexpected error message. */ + __( 'Jetpack WAF rules file failed to generate: %1$s', 'jetpack-waf' ), + $e->getMessage() + ) + ); + } + + return WP_CLI::success( + sprintf( + /* translators: %1$s is the name of the mode that was just switched to. */ + __( 'Jetpack WAF rules successfully created to: "%1$s".', 'jetpack-waf' ), + Waf_Runner::RULES_FILE + ) + ); + } +} |