From a0471a9eefd64d61925136d09d413b5bf0a918c7 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Tue, 12 Mar 2019 22:20:04 +0100 Subject: [PATCH] added following endpoint --- activitypub.php | 3 + includes/rest/class-following.php | 98 +++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 includes/rest/class-following.php diff --git a/activitypub.php b/activitypub.php index 3b206da..aed4feb 100644 --- a/activitypub.php +++ b/activitypub.php @@ -42,6 +42,9 @@ function init() { require_once dirname( __FILE__ ) . '/includes/rest/class-followers.php'; \Activitypub\Rest\Followers::init(); + require_once dirname( __FILE__ ) . '/includes/rest/class-following.php'; + \Activitypub\Rest\Following::init(); + require_once dirname( __FILE__ ) . '/includes/rest/class-webfinger.php'; \Activitypub\Rest\Webfinger::init(); diff --git a/includes/rest/class-following.php b/includes/rest/class-following.php new file mode 100644 index 0000000..232ba47 --- /dev/null +++ b/includes/rest/class-following.php @@ -0,0 +1,98 @@ +\d+)/following', array( + array( + 'methods' => \WP_REST_Server::READABLE, + 'callback' => array( '\Activitypub\Rest\Following', 'get' ), + 'args' => self::request_parameters(), + ), + ) + ); + } + + /** + * Handle GET request + * + * @param WP_REST_Request $request + * + * @return WP_REST_Response + */ + public static function get( $request ) { + $user_id = $request->get_param( 'id' ); + $user = get_user_by( 'ID', $user_id ); + + if ( ! $user ) { + return new \WP_Error( 'rest_invalid_param', __( 'User not found', 'activitypub' ), array( + 'status' => 404, + 'params' => array( + 'user_id' => __( 'User not found', 'activitypub' ), + ), + ) ); + } + + $page = $request->get_param( 'page', 0 ); + + /* + * Action triggerd prior to the ActivityPub profile being created and sent to the client + */ + do_action( 'activitypub_outbox_pre' ); + + $json = new \stdClass(); + + $json->{'@context'} = \Activitypub\get_context(); + + $json->partOf = get_rest_url( null, "/activitypub/1.0/users/$user_id/following" ); // phpcs:ignore + $json->totalItems = 0; // phpcs:ignore + $json->orderedItems = array(); // phpcs:ignore + + $json->first = $json->partOf; // phpcs:ignore + + $json->first = get_rest_url( null, "/activitypub/1.0/users/$user_id/following" ); + + $response = new \WP_REST_Response( $json, 200 ); + $response->header( 'Content-Type', 'application/activity+json' ); + + return $response; + } + + /** + * The supported parameters + * + * @return array list of parameters + */ + public static function request_parameters() { + $params = array(); + + $params['page'] = array( + 'type' => 'integer', + ); + + $params['id'] = array( + 'required' => true, + 'type' => 'integer', + ); + + return $params; + } +}