summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/jetpack/jetpack_vendor/automattic/jetpack-connection/src/class-webhooks.php')
-rw-r--r--plugins/jetpack/jetpack_vendor/automattic/jetpack-connection/src/class-webhooks.php127
1 files changed, 127 insertions, 0 deletions
diff --git a/plugins/jetpack/jetpack_vendor/automattic/jetpack-connection/src/class-webhooks.php b/plugins/jetpack/jetpack_vendor/automattic/jetpack-connection/src/class-webhooks.php
new file mode 100644
index 00000000..72225d19
--- /dev/null
+++ b/plugins/jetpack/jetpack_vendor/automattic/jetpack-connection/src/class-webhooks.php
@@ -0,0 +1,127 @@
+<?php
+/**
+ * Connection Webhooks class.
+ *
+ * @package automattic/jetpack-connection
+ */
+
+namespace Automattic\Jetpack\Connection;
+
+use Automattic\Jetpack\Roles;
+use Automattic\Jetpack\Tracking;
+use Jetpack_Options;
+
+/**
+ * Connection Webhooks class.
+ */
+class Webhooks {
+
+ /**
+ * The Connection Manager object.
+ *
+ * @var Manager
+ */
+ private $connection;
+
+ /**
+ * Webhooks constructor.
+ *
+ * @param Manager $connection The Connection Manager object.
+ */
+ public function __construct( $connection ) {
+ $this->connection = $connection;
+ }
+
+ /**
+ * Initialize the webhooks.
+ *
+ * @param Manager $connection The Connection Manager object.
+ */
+ public static function init( $connection ) {
+ $webhooks = new static( $connection );
+
+ add_action( 'init', array( $webhooks, 'controller' ) );
+ }
+
+ /**
+ * The "controller" decides which handler we need to run.
+ */
+ public function controller() {
+ // The nonce is verified in specific handlers.
+ // phpcs:ignore WordPress.Security.NonceVerification.Recommended
+ if ( empty( $_GET['handler'] ) || empty( $_GET['action'] ) || 'jetpack-connection-webhooks' !== $_GET['handler'] ) {
+ return;
+ }
+
+ // The nonce is verified in specific handlers.
+ // phpcs:ignore WordPress.Security.NonceVerification.Recommended
+ switch ( $_GET['action'] ) {
+ case 'authorize':
+ $this->handle_authorize();
+ break;
+ }
+
+ $this->do_exit();
+ }
+
+ /**
+ * Perform the authorization action.
+ */
+ public function handle_authorize() {
+ if ( $this->connection->is_connected() && $this->connection->is_user_connected() ) {
+ $redirect_url = apply_filters( 'jetpack_client_authorize_already_authorized_url', admin_url() );
+ wp_safe_redirect( $redirect_url );
+
+ return;
+ }
+ do_action( 'jetpack_client_authorize_processing' );
+
+ $data = stripslashes_deep( $_GET );
+ $data['auth_type'] = 'client';
+ $roles = new Roles();
+ $role = $roles->translate_current_user_to_role();
+ $redirect = isset( $data['redirect'] ) ? esc_url_raw( (string) $data['redirect'] ) : '';
+
+ check_admin_referer( "jetpack-authorize_{$role}_{$redirect}" );
+
+ $tracking = new Tracking();
+
+ $result = $this->connection->authorize( $data );
+
+ if ( is_wp_error( $result ) ) {
+ do_action( 'jetpack_client_authorize_error', $result );
+
+ $tracking->record_user_event(
+ 'jpc_client_authorize_fail',
+ array(
+ 'error_code' => $result->get_error_code(),
+ 'error_message' => $result->get_error_message(),
+ )
+ );
+ } else {
+ /**
+ * Fires after the Jetpack client is authorized to communicate with WordPress.com.
+ *
+ * @param int Jetpack Blog ID.
+ *
+ * @since 1.7.0
+ * @since-jetpack 4.2.0
+ */
+ do_action( 'jetpack_client_authorized', Jetpack_Options::get_option( 'id' ) );
+
+ $tracking->record_user_event( 'jpc_client_authorize_success' );
+ }
+
+ $fallback_redirect = apply_filters( 'jetpack_client_authorize_fallback_url', admin_url() );
+ $redirect = wp_validate_redirect( $redirect ) ? $redirect : $fallback_redirect;
+
+ wp_safe_redirect( $redirect );
+ }
+
+ /**
+ * The `exit` is wrapped into a method so we could mock it.
+ */
+ protected function do_exit() {
+ exit;
+ }
+}