From e6bb08535407c0c1c25c27493f4870ba8c5d1b2c Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Wed, 18 Oct 2023 11:26:42 +0200 Subject: [PATCH] add CLI to re-send Accept activities This is mostly for debugging purposes --- activitypub.php | 8 +++++ includes/class-cli.php | 74 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 includes/class-cli.php diff --git a/activitypub.php b/activitypub.php index 521a379..86fd4a3 100644 --- a/activitypub.php +++ b/activitypub.php @@ -15,6 +15,8 @@ namespace Activitypub; +use WP_CLI; + use function Activitypub\is_blog_public; use function Activitypub\site_supports_blocks; @@ -213,3 +215,9 @@ function get_plugin_version() { return $meta['Version']; } + +// Check for CLI env, to add the CLI commands +if ( defined( 'WP_CLI' ) && WP_CLI ) { + require_once __DIR__ . '/includes/class-cli.php'; + WP_CLI::add_command( 'activitypub', __NAMESPACE__ . '\Cli' ); +} diff --git a/includes/class-cli.php b/includes/class-cli.php new file mode 100644 index 0000000..9e4be4b --- /dev/null +++ b/includes/class-cli.php @@ -0,0 +1,74 @@ +] + * : The Follower ID, this is generally a URL + * + * [--user_id=] + * : The ActivityPub User ID + * + * ## EXAMPLES + * + * # Re-Send Accept Activity as response to a Follow + * $ wp activitypub accept --follower=https://mastodon.social/@pfefferle --user=1 + */ + public function accept( $args, $assoc_args ) { + $user_id = (int) $assoc_args['user_id']; + $user = Users::get_by_id( $user_id ); + + if ( ! $user ) { + WP_CLI::error( __( 'User is not allow to send Activities', 'activitypub' ) ); + } + + $follower = esc_url( $assoc_args['follower'] ); + $follower = Followers::get_follower( $user->get__id(), $follower ); + + if ( ! $follower ) { + WP_CLI::error( __( 'Unknown Follower', 'activitypub' ) ); + } + + // get inbox + $inbox = $follower->get_shared_inbox(); + + $object = array( + 'id' => $follower->get_id(), + 'type' => 'Follow', + 'actor' => $follower->get_id(), + 'object' => $user->get_id(), + ); + + // send "Accept" activity + $activity = new Activity(); + $activity->set_type( 'Accept' ); + $activity->set_object( $object ); + $activity->set_actor( $user->get_id() ); + $activity->set_to( $follower->get_id() ); + $activity->set_id( $user->get_id() . '#follow-' . \preg_replace( '~^https?://~', '', $follower->get_id() ) . '-' . \time() ); + + $activity = $activity->to_json(); + + $response = Http::post( $inbox, $activity, $user_id ); + + if ( is_wp_error( $response ) ) { + WP_CLI::error( $response->get_error_message() ); + } else { + WP_CLI::success( __( 'Activity sent', 'activitypub' ) ); + } + } +}