summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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.php165
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
+ )
+ );
+ }
+}