diff --git a/wp-content/plugins/activitypub/activitypub.php b/wp-content/plugins/activitypub/activitypub.php
index dd7b6737..d802cd7b 100644
--- a/wp-content/plugins/activitypub/activitypub.php
+++ b/wp-content/plugins/activitypub/activitypub.php
@@ -3,7 +3,7 @@
* Plugin Name: ActivityPub
* Plugin URI: https://github.com/pfefferle/wordpress-activitypub/
* Description: The ActivityPub protocol is a decentralized social networking protocol based upon the ActivityStreams 2.0 data format.
- * Version: 0.13.3
+ * Version: 0.13.4
* Author: Matthias Pfefferle
* Author URI: https://notiz.blog/
* License: MIT
@@ -72,9 +72,12 @@ function init() {
\Activitypub\Health_Check::init();
require_once \dirname( __FILE__ ) . '/includes/rest/class-server.php';
- \add_filter( 'wp_rest_server_class', function() {
- return '\Activitypub\Rest\Server';
- } );
+ \add_filter(
+ 'wp_rest_server_class',
+ function() {
+ return '\Activitypub\Rest\Server';
+ }
+ );
if ( \WP_DEBUG ) {
require_once \dirname( __FILE__ ) . '/includes/debug.php';
@@ -82,6 +85,20 @@ function init() {
}
\add_action( 'plugins_loaded', '\Activitypub\init' );
+/**
+ * Add plugin settings link
+ */
+function plugin_settings_link( $actions ) {
+ $settings_link[] = \sprintf(
+ '%2s',
+ \menu_page_url( 'activitypub', false ),
+ \__( 'Settings', 'activitypub' )
+ );
+
+ return \array_merge( $settings_link, $actions );
+}
+\add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), '\Activitypub\plugin_settings_link' );
+
/**
* Add rewrite rules
*/
diff --git a/wp-content/plugins/activitypub/includes/class-admin.php b/wp-content/plugins/activitypub/includes/class-admin.php
index 14ed13c4..9e1eedb8 100644
--- a/wp-content/plugins/activitypub/includes/class-admin.php
+++ b/wp-content/plugins/activitypub/includes/class-admin.php
@@ -54,7 +54,9 @@ class Admin {
*/
public static function register_settings() {
\register_setting(
- 'activitypub', 'activitypub_post_content_type', array(
+ 'activitypub',
+ 'activitypub_post_content_type',
+ array(
'type' => 'string',
'description' => \__( 'Use title and link, summary, full or custom content', 'activitypub' ),
'show_in_rest' => array(
@@ -66,7 +68,9 @@ class Admin {
)
);
\register_setting(
- 'activitypub', 'activitypub_custom_post_content', array(
+ 'activitypub',
+ 'activitypub_custom_post_content',
+ array(
'type' => 'string',
'description' => \__( 'Define your own custom post template', 'activitypub' ),
'show_in_rest' => true,
@@ -74,7 +78,9 @@ class Admin {
)
);
\register_setting(
- 'activitypub', 'activitypub_object_type', array(
+ 'activitypub',
+ 'activitypub_object_type',
+ array(
'type' => 'string',
'description' => \__( 'The Activity-Object-Type', 'activitypub' ),
'show_in_rest' => array(
@@ -86,21 +92,27 @@ class Admin {
)
);
\register_setting(
- 'activitypub', 'activitypub_use_hashtags', array(
+ 'activitypub',
+ 'activitypub_use_hashtags',
+ array(
'type' => 'boolean',
'description' => \__( 'Add hashtags in the content as native tags and replace the #tag with the tag-link', 'activitypub' ),
'default' => 0,
)
);
\register_setting(
- 'activitypub', 'activitypub_allowed_html', array(
+ 'activitypub',
+ 'activitypub_allowed_html',
+ array(
'type' => 'string',
'description' => \__( 'List of HTML elements that are allowed in activities.', 'activitypub' ),
'default' => ACTIVITYPUB_ALLOWED_HTML,
)
);
\register_setting(
- 'activitypub', 'activitypub_support_post_types', array(
+ 'activitypub',
+ 'activitypub_support_post_types',
+ array(
'type' => 'string',
'description' => \esc_html__( 'Enable ActivityPub support for post types', 'activitypub' ),
'show_in_rest' => true,
diff --git a/wp-content/plugins/activitypub/includes/functions.php b/wp-content/plugins/activitypub/includes/functions.php
index a5a84952..3c33664d 100644
--- a/wp-content/plugins/activitypub/includes/functions.php
+++ b/wp-content/plugins/activitypub/includes/functions.php
@@ -123,11 +123,13 @@ function get_remote_metadata_by_actor( $actor ) {
return new \WP_Error( 'activitypub_no_valid_actor_url', \__( 'The "actor" is no valid URL', 'activitypub' ), $actor );
}
- $user = \get_users( array (
- 'number' => 1,
- 'who' => 'authors',
- 'fields' => 'ID',
- ) );
+ $user = \get_users(
+ array(
+ 'number' => 1,
+ 'who' => 'authors',
+ 'fields' => 'ID',
+ )
+ );
// we just need any user to generate a request signature
$user_id = \reset( $user );
diff --git a/wp-content/plugins/activitypub/includes/model/class-activity.php b/wp-content/plugins/activitypub/includes/model/class-activity.php
index b6cc2515..eb96d116 100644
--- a/wp-content/plugins/activitypub/includes/model/class-activity.php
+++ b/wp-content/plugins/activitypub/includes/model/class-activity.php
@@ -30,7 +30,7 @@ class Activity {
}
$this->type = \ucfirst( $type );
- $this->published = \date( 'Y-m-d\TH:i:s\Z', \strtotime( 'now' ) );
+ $this->published = \gmdate( 'Y-m-d\TH:i:s\Z', \strtotime( 'now' ) );
}
public function __call( $method, $params ) {
diff --git a/wp-content/plugins/activitypub/includes/model/class-post.php b/wp-content/plugins/activitypub/includes/model/class-post.php
index 33b9411e..e8851991 100644
--- a/wp-content/plugins/activitypub/includes/model/class-post.php
+++ b/wp-content/plugins/activitypub/includes/model/class-post.php
@@ -46,7 +46,7 @@ class Post {
$array = array(
'id' => $this->id,
'type' => $this->object_type,
- 'published' => \date( 'Y-m-d\TH:i:s\Z', \strtotime( $post->post_date_gmt ) ),
+ 'published' => \gmdate( 'Y-m-d\TH:i:s\Z', \strtotime( $post->post_date_gmt ) ),
'attributedTo' => \get_author_posts_url( $post->post_author ),
'summary' => $this->summary,
'inReplyTo' => null,
diff --git a/wp-content/plugins/activitypub/includes/peer/class-followers.php b/wp-content/plugins/activitypub/includes/peer/class-followers.php
index c1846a48..abc18e32 100644
--- a/wp-content/plugins/activitypub/includes/peer/class-followers.php
+++ b/wp-content/plugins/activitypub/includes/peer/class-followers.php
@@ -50,9 +50,13 @@ class Followers {
$actor = $actor['id'];
}
- return new \WP_Error( 'invalid_actor_object', \__( 'Unknown Actor schema', 'activitypub' ), array(
- 'status' => 404,
- ) );
+ return new \WP_Error(
+ 'invalid_actor_object',
+ \__( 'Unknown Actor schema', 'activitypub' ),
+ array(
+ 'status' => 404,
+ )
+ );
}
if ( ! \is_array( $followers ) ) {
diff --git a/wp-content/plugins/activitypub/includes/rest/class-followers.php b/wp-content/plugins/activitypub/includes/rest/class-followers.php
index f246edd0..34392ce0 100644
--- a/wp-content/plugins/activitypub/includes/rest/class-followers.php
+++ b/wp-content/plugins/activitypub/includes/rest/class-followers.php
@@ -21,7 +21,9 @@ class Followers {
*/
public static function register_routes() {
\register_rest_route(
- 'activitypub/1.0', '/users/(?P\d+)/followers', array(
+ 'activitypub/1.0',
+ '/users/(?P\d+)/followers',
+ array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array( '\Activitypub\Rest\Followers', 'get' ),
@@ -44,12 +46,16 @@ class Followers {
$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' ),
- ),
- ) );
+ return new \WP_Error(
+ 'rest_invalid_param',
+ \__( 'User not found', 'activitypub' ),
+ array(
+ 'status' => 404,
+ 'params' => array(
+ 'user_id' => \__( 'User not found', 'activitypub' ),
+ ),
+ )
+ );
}
/*
diff --git a/wp-content/plugins/activitypub/includes/rest/class-following.php b/wp-content/plugins/activitypub/includes/rest/class-following.php
index 8e375974..06d3f0b3 100644
--- a/wp-content/plugins/activitypub/includes/rest/class-following.php
+++ b/wp-content/plugins/activitypub/includes/rest/class-following.php
@@ -21,7 +21,9 @@ class Following {
*/
public static function register_routes() {
\register_rest_route(
- 'activitypub/1.0', '/users/(?P\d+)/following', array(
+ 'activitypub/1.0',
+ '/users/(?P\d+)/following',
+ array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array( '\Activitypub\Rest\Following', 'get' ),
@@ -44,12 +46,16 @@ class Following {
$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' ),
- ),
- ) );
+ return new \WP_Error(
+ 'rest_invalid_param',
+ \__( 'User not found', 'activitypub' ),
+ array(
+ 'status' => 404,
+ 'params' => array(
+ 'user_id' => \__( 'User not found', 'activitypub' ),
+ ),
+ )
+ );
}
/*
diff --git a/wp-content/plugins/activitypub/includes/rest/class-inbox.php b/wp-content/plugins/activitypub/includes/rest/class-inbox.php
index 11790705..1ffe4514 100644
--- a/wp-content/plugins/activitypub/includes/rest/class-inbox.php
+++ b/wp-content/plugins/activitypub/includes/rest/class-inbox.php
@@ -27,7 +27,9 @@ class Inbox {
*/
public static function register_routes() {
\register_rest_route(
- 'activitypub/1.0', '/inbox', array(
+ 'activitypub/1.0',
+ '/inbox',
+ array(
array(
'methods' => \WP_REST_Server::EDITABLE,
'callback' => array( '\Activitypub\Rest\Inbox', 'shared_inbox_post' ),
@@ -38,7 +40,9 @@ class Inbox {
);
\register_rest_route(
- 'activitypub/1.0', '/users/(?P\d+)/inbox', array(
+ 'activitypub/1.0',
+ '/users/(?P\d+)/inbox',
+ array(
array(
'methods' => \WP_REST_Server::EDITABLE,
'callback' => array( '\Activitypub\Rest\Inbox', 'user_inbox_post' ),
@@ -161,16 +165,20 @@ class Inbox {
$users = self::extract_recipients( $data );
if ( ! $users ) {
- return new \WP_Error( 'rest_invalid_param', \__( 'No recipients found', 'activitypub' ), array(
- 'status' => 404,
- 'params' => array(
- 'to' => \__( 'Please check/validate "to" field', 'activitypub' ),
- 'bto' => \__( 'Please check/validate "bto" field', 'activitypub' ),
- 'cc' => \__( 'Please check/validate "cc" field', 'activitypub' ),
- 'bcc' => \__( 'Please check/validate "bcc" field', 'activitypub' ),
- 'audience' => \__( 'Please check/validate "audience" field', 'activitypub' ),
- ),
- ) );
+ return new \WP_Error(
+ 'rest_invalid_param',
+ \__( 'No recipients found', 'activitypub' ),
+ array(
+ 'status' => 404,
+ 'params' => array(
+ 'to' => \__( 'Please check/validate "to" field', 'activitypub' ),
+ 'bto' => \__( 'Please check/validate "bto" field', 'activitypub' ),
+ 'cc' => \__( 'Please check/validate "cc" field', 'activitypub' ),
+ 'bcc' => \__( 'Please check/validate "bcc" field', 'activitypub' ),
+ 'audience' => \__( 'Please check/validate "audience" field', 'activitypub' ),
+ ),
+ )
+ );
}
foreach ( $users as $user ) {
diff --git a/wp-content/plugins/activitypub/includes/rest/class-nodeinfo.php b/wp-content/plugins/activitypub/includes/rest/class-nodeinfo.php
index acbc6aba..d4b394fa 100644
--- a/wp-content/plugins/activitypub/includes/rest/class-nodeinfo.php
+++ b/wp-content/plugins/activitypub/includes/rest/class-nodeinfo.php
@@ -23,7 +23,9 @@ class Nodeinfo {
*/
public static function register_routes() {
\register_rest_route(
- 'activitypub/1.0', '/nodeinfo/discovery', array(
+ 'activitypub/1.0',
+ '/nodeinfo/discovery',
+ array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array( '\Activitypub\Rest\Nodeinfo', 'discovery' ),
@@ -33,7 +35,9 @@ class Nodeinfo {
);
\register_rest_route(
- 'activitypub/1.0', '/nodeinfo', array(
+ 'activitypub/1.0',
+ '/nodeinfo',
+ array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array( '\Activitypub\Rest\Nodeinfo', 'nodeinfo' ),
@@ -43,7 +47,9 @@ class Nodeinfo {
);
\register_rest_route(
- 'activitypub/1.0', '/nodeinfo2', array(
+ 'activitypub/1.0',
+ '/nodeinfo2',
+ array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array( '\Activitypub\Rest\Nodeinfo', 'nodeinfo2' ),
diff --git a/wp-content/plugins/activitypub/includes/rest/class-ostatus.php b/wp-content/plugins/activitypub/includes/rest/class-ostatus.php
index 4e4dda9b..45ff9010 100644
--- a/wp-content/plugins/activitypub/includes/rest/class-ostatus.php
+++ b/wp-content/plugins/activitypub/includes/rest/class-ostatus.php
@@ -14,7 +14,9 @@ class Ostatus {
*/
public static function register_routes() {
\register_rest_route(
- 'activitypub/1.0', '/ostatus/remote-follow', array(
+ 'activitypub/1.0',
+ '/ostatus/remote-follow',
+ array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array( '\Activitypub\Rest\Ostatus', 'get' ),
diff --git a/wp-content/plugins/activitypub/includes/rest/class-outbox.php b/wp-content/plugins/activitypub/includes/rest/class-outbox.php
index fb1e7813..55bb5237 100644
--- a/wp-content/plugins/activitypub/includes/rest/class-outbox.php
+++ b/wp-content/plugins/activitypub/includes/rest/class-outbox.php
@@ -21,7 +21,9 @@ class Outbox {
*/
public static function register_routes() {
\register_rest_route(
- 'activitypub/1.0', '/users/(?P\d+)/outbox', array(
+ 'activitypub/1.0',
+ '/users/(?P\d+)/outbox',
+ array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array( '\Activitypub\Rest\Outbox', 'user_outbox_get' ),
@@ -43,12 +45,16 @@ class Outbox {
$author = \get_user_by( 'ID', $user_id );
if ( ! $author ) {
- return new \WP_Error( 'rest_invalid_param', \__( 'User not found', 'activitypub' ), array(
- 'status' => 404,
- 'params' => array(
- 'user_id' => \__( 'User not found', 'activitypub' ),
- ),
- ) );
+ 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 );
@@ -78,12 +84,14 @@ class Outbox {
}
if ( $page ) {
- $posts = \get_posts( array(
- 'posts_per_page' => 10,
- 'author' => $user_id,
- 'offset' => ( $page - 1 ) * 10,
- 'post_type' => 'post',
- ) );
+ $posts = \get_posts(
+ array(
+ 'posts_per_page' => 10,
+ 'author' => $user_id,
+ 'offset' => ( $page - 1 ) * 10,
+ 'post_type' => 'post',
+ )
+ );
foreach ( $posts as $post ) {
$activitypub_post = new \Activitypub\Model\Post( $post );
diff --git a/wp-content/plugins/activitypub/includes/rest/class-webfinger.php b/wp-content/plugins/activitypub/includes/rest/class-webfinger.php
index b5d3e4cb..60eb5d2f 100644
--- a/wp-content/plugins/activitypub/includes/rest/class-webfinger.php
+++ b/wp-content/plugins/activitypub/includes/rest/class-webfinger.php
@@ -22,7 +22,9 @@ class Webfinger {
*/
public static function register_routes() {
\register_rest_route(
- 'activitypub/1.0', '/webfinger', array(
+ 'activitypub/1.0',
+ '/webfinger',
+ array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array( '\Activitypub\Rest\Webfinger', 'webfinger' ),
@@ -42,15 +44,16 @@ class Webfinger {
public static function webfinger( $request ) {
$resource = $request->get_param( 'resource' );
- $matches = array();
- $matched = \preg_match( '/^acct:([^@]+)@(.+)$/', $resource, $matches );
+ $matched = \str_contains( $resource, '@' );
if ( ! $matched ) {
return new \WP_Error( 'activitypub_unsupported_resource', \__( 'Resource is invalid', 'activitypub' ), array( 'status' => 400 ) );
}
- $resource_identifier = $matches[1];
- $resource_host = $matches[2];
+ $resource = \str_replace( 'acct:', '', $resource );
+
+ $resource_identifier = \substr( $resource, 0, \strrpos( $resource, '@' ) );
+ $resource_host = \substr( \strrchr( $resource, '@' ), 1 );
if ( \wp_parse_url( \home_url( '/' ), \PHP_URL_HOST ) !== $resource_host ) {
return new \WP_Error( 'activitypub_wrong_host', \__( 'Resource host does not match blog host', 'activitypub' ), array( 'status' => 404 ) );
@@ -95,7 +98,7 @@ class Webfinger {
$params['resource'] = array(
'required' => true,
'type' => 'string',
- 'pattern' => '^acct:([^@]+)@(.+)$',
+ 'pattern' => '^acct:(.+)@(.+)$',
);
return $params;
diff --git a/wp-content/plugins/activitypub/readme.txt b/wp-content/plugins/activitypub/readme.txt
index 244327cf..f2ec63f8 100644
--- a/wp-content/plugins/activitypub/readme.txt
+++ b/wp-content/plugins/activitypub/readme.txt
@@ -3,8 +3,8 @@ Contributors: pfefferle, mediaformat
Donate link: https://notiz.blog/donate/
Tags: OStatus, fediverse, activitypub, activitystream
Requires at least: 4.7
-Tested up to: 5.9
-Stable tag: 0.13.3
+Tested up to: 6.0
+Stable tag: 0.13.4
Requires PHP: 5.6
License: MIT
License URI: http://opensource.org/licenses/MIT
@@ -88,6 +88,10 @@ Where 'blog' is the path to the subdirectory at which your blog resides.
Project maintained on GitHub at [pfefferle/wordpress-activitypub](https://github.com/pfefferle/wordpress-activitypub).
+= 0.13.4 =
+
+* fix webfinger for email identifiers
+
= 0.13.3 =
* fix: Create and Note should not have the same ActivityPub ID