Merge branch 'master' into fix/accept-follow
This commit is contained in:
commit
bf35836245
10 changed files with 41 additions and 28 deletions
|
@ -210,7 +210,7 @@ Project maintained on GitHub at [automattic/wordpress-activitypub](https://githu
|
||||||
* Use shortcodes instead of custom templates, to setup the Activity Post-Content ([#250](https://github.com/pfefferle/wordpress-activitypub/pull/250)) props [@toolstack](https://github.com/toolstack)
|
* Use shortcodes instead of custom templates, to setup the Activity Post-Content ([#250](https://github.com/pfefferle/wordpress-activitypub/pull/250)) props [@toolstack](https://github.com/toolstack)
|
||||||
* Remove custom REST Server, because the needed changes are now merged into Core.
|
* Remove custom REST Server, because the needed changes are now merged into Core.
|
||||||
* Fix hashtags ([#261](https://github.com/pfefferle/wordpress-activitypub/pull/261)) props [@akirk](https://github.com/akirk)
|
* Fix hashtags ([#261](https://github.com/pfefferle/wordpress-activitypub/pull/261)) props [@akirk](https://github.com/akirk)
|
||||||
* Change priorites, to maybe fix the hashtag issue
|
* Change priorities, to maybe fix the hashtag issue
|
||||||
|
|
||||||
### 0.15.0 ###
|
### 0.15.0 ###
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,6 @@ function plugin_init() {
|
||||||
\add_action( 'init', array( __NAMESPACE__ . '\Collection\Followers', 'init' ) );
|
\add_action( 'init', array( __NAMESPACE__ . '\Collection\Followers', 'init' ) );
|
||||||
\add_action( 'init', array( __NAMESPACE__ . '\Admin', 'init' ) );
|
\add_action( 'init', array( __NAMESPACE__ . '\Admin', 'init' ) );
|
||||||
\add_action( 'init', array( __NAMESPACE__ . '\Hashtag', 'init' ) );
|
\add_action( 'init', array( __NAMESPACE__ . '\Hashtag', 'init' ) );
|
||||||
\add_action( 'init', array( __NAMESPACE__ . '\Shortcodes', 'init' ) );
|
|
||||||
\add_action( 'init', array( __NAMESPACE__ . '\Mention', 'init' ) );
|
\add_action( 'init', array( __NAMESPACE__ . '\Mention', 'init' ) );
|
||||||
\add_action( 'init', array( __NAMESPACE__ . '\Health_Check', 'init' ) );
|
\add_action( 'init', array( __NAMESPACE__ . '\Health_Check', 'init' ) );
|
||||||
\add_action( 'init', array( __NAMESPACE__ . '\Scheduler', 'init' ) );
|
\add_action( 'init', array( __NAMESPACE__ . '\Scheduler', 'init' ) );
|
||||||
|
|
|
@ -5,14 +5,9 @@ use function Activitypub\esc_hashtag;
|
||||||
|
|
||||||
class Shortcodes {
|
class Shortcodes {
|
||||||
/**
|
/**
|
||||||
* Class constructor, registering WordPress then Shortcodes
|
* Register the shortcodes
|
||||||
*/
|
*/
|
||||||
public static function init() {
|
public static function register() {
|
||||||
// do not load on admin pages
|
|
||||||
if ( is_admin() ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ( get_class_methods( self::class ) as $shortcode ) {
|
foreach ( get_class_methods( self::class ) as $shortcode ) {
|
||||||
if ( 'init' !== $shortcode ) {
|
if ( 'init' !== $shortcode ) {
|
||||||
add_shortcode( 'ap_' . $shortcode, array( self::class, $shortcode ) );
|
add_shortcode( 'ap_' . $shortcode, array( self::class, $shortcode ) );
|
||||||
|
@ -20,6 +15,17 @@ class Shortcodes {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregister the shortcodes
|
||||||
|
*/
|
||||||
|
public static function unregister() {
|
||||||
|
foreach ( get_class_methods( self::class ) as $shortcode ) {
|
||||||
|
if ( 'init' !== $shortcode ) {
|
||||||
|
remove_shortcode( 'ap_' . $shortcode );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates output for the 'ap_hashtags' shortcode
|
* Generates output for the 'ap_hashtags' shortcode
|
||||||
*
|
*
|
||||||
|
|
|
@ -173,8 +173,6 @@ class Followers {
|
||||||
return new WP_Error( 'activitypub_invalid_follower', __( 'Invalid Follower', 'activitypub' ), array( 'status' => 400 ) );
|
return new WP_Error( 'activitypub_invalid_follower', __( 'Invalid Follower', 'activitypub' ), array( 'status' => 400 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
$error = null;
|
|
||||||
|
|
||||||
$follower = new Follower();
|
$follower = new Follower();
|
||||||
$follower->from_array( $meta );
|
$follower->from_array( $meta );
|
||||||
|
|
||||||
|
@ -184,14 +182,10 @@ class Followers {
|
||||||
return $id;
|
return $id;
|
||||||
}
|
}
|
||||||
|
|
||||||
$meta = get_post_meta( $id, 'activitypub_user_id' );
|
$post_meta = get_post_meta( $id, 'activitypub_user_id' );
|
||||||
|
|
||||||
if ( $error ) {
|
|
||||||
self::add_error( $id, $error );
|
|
||||||
}
|
|
||||||
|
|
||||||
// phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict
|
// phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict
|
||||||
if ( is_array( $meta ) && ! in_array( $user_id, $meta ) ) {
|
if ( is_array( $post_meta ) && ! in_array( $user_id, $post_meta ) ) {
|
||||||
add_post_meta( $id, 'activitypub_user_id', $user_id );
|
add_post_meta( $id, 'activitypub_user_id', $user_id );
|
||||||
wp_cache_delete( sprintf( self::CACHE_KEY_INBOXES, $user_id ), 'activitypub' );
|
wp_cache_delete( sprintf( self::CACHE_KEY_INBOXES, $user_id ), 'activitypub' );
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,32 +74,25 @@ function get_remote_metadata_by_actor( $actor, $cached = true ) {
|
||||||
|
|
||||||
if ( ! \wp_http_validate_url( $actor ) ) {
|
if ( ! \wp_http_validate_url( $actor ) ) {
|
||||||
$metadata = new WP_Error( 'activitypub_no_valid_actor_url', \__( 'The "actor" is no valid URL', 'activitypub' ), array( 'status' => 400, 'actor' => $actor ) );
|
$metadata = new WP_Error( 'activitypub_no_valid_actor_url', \__( 'The "actor" is no valid URL', 'activitypub' ), array( 'status' => 400, 'actor' => $actor ) );
|
||||||
\set_transient( $transient_key, $metadata, HOUR_IN_SECONDS ); // Cache the error for a shorter period.
|
|
||||||
return $metadata;
|
return $metadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
$short_timeout = function() {
|
|
||||||
return 10;
|
|
||||||
};
|
|
||||||
add_filter( 'activitypub_remote_get_timeout', $short_timeout );
|
|
||||||
$response = Http::get( $actor );
|
$response = Http::get( $actor );
|
||||||
remove_filter( 'activitypub_remote_get_timeout', $short_timeout );
|
|
||||||
if ( \is_wp_error( $response ) ) {
|
if ( \is_wp_error( $response ) ) {
|
||||||
\set_transient( $transient_key, $response, HOUR_IN_SECONDS ); // Cache the error for a shorter period.
|
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
$metadata = \wp_remote_retrieve_body( $response );
|
$metadata = \wp_remote_retrieve_body( $response );
|
||||||
$metadata = \json_decode( $metadata, true );
|
$metadata = \json_decode( $metadata, true );
|
||||||
|
|
||||||
\set_transient( $transient_key, $metadata, WEEK_IN_SECONDS );
|
|
||||||
|
|
||||||
if ( ! $metadata ) {
|
if ( ! $metadata ) {
|
||||||
$metadata = new WP_Error( 'activitypub_invalid_json', \__( 'No valid JSON data', 'activitypub' ), array( 'status' => 400, 'actor' => $actor ) );
|
$metadata = new WP_Error( 'activitypub_invalid_json', \__( 'No valid JSON data', 'activitypub' ), array( 'status' => 400, 'actor' => $actor ) );
|
||||||
\set_transient( $transient_key, $metadata, HOUR_IN_SECONDS ); // Cache the error for a shorter period.
|
|
||||||
return $metadata;
|
return $metadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
\set_transient( $transient_key, $metadata, WEEK_IN_SECONDS );
|
||||||
|
|
||||||
return $metadata;
|
return $metadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,4 +69,8 @@ class Application_User extends Blog_User {
|
||||||
public function get_moderators() {
|
public function get_moderators() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function get_indexable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -416,7 +416,7 @@ class Inbox {
|
||||||
$recipient_items = array_merge( $recipient_items, $recipient );
|
$recipient_items = array_merge( $recipient_items, $recipient );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( array_key_exists( $i, $data['object'] ) ) {
|
if ( is_array( $data['object'] ) && array_key_exists( $i, $data['object'] ) ) {
|
||||||
if ( is_array( $data['object'][ $i ] ) ) {
|
if ( is_array( $data['object'][ $i ] ) ) {
|
||||||
$recipient = $data['object'][ $i ];
|
$recipient = $data['object'][ $i ];
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -74,6 +74,10 @@ class Server {
|
||||||
* @return mixed|WP_Error The response, error, or modified response.
|
* @return mixed|WP_Error The response, error, or modified response.
|
||||||
*/
|
*/
|
||||||
public static function authorize_activitypub_requests( $response, $handler, $request ) {
|
public static function authorize_activitypub_requests( $response, $handler, $request ) {
|
||||||
|
if ( 'HEAD' === $request->get_method() ) {
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
$route = $request->get_route();
|
$route = $request->get_route();
|
||||||
|
|
||||||
// check if it is an activitypub request and exclude webfinger and nodeinfo endpoints
|
// check if it is an activitypub request and exclude webfinger and nodeinfo endpoints
|
||||||
|
|
|
@ -5,6 +5,7 @@ use WP_Post;
|
||||||
use Activitypub\Collection\Users;
|
use Activitypub\Collection\Users;
|
||||||
use Activitypub\Model\Blog_User;
|
use Activitypub\Model\Blog_User;
|
||||||
use Activitypub\Activity\Base_Object;
|
use Activitypub\Activity\Base_Object;
|
||||||
|
use Activitypub\Shortcodes;
|
||||||
|
|
||||||
use function Activitypub\esc_hashtag;
|
use function Activitypub\esc_hashtag;
|
||||||
use function Activitypub\is_single_user;
|
use function Activitypub\is_single_user;
|
||||||
|
@ -466,6 +467,8 @@ class Post {
|
||||||
$post = $this->wp_post;
|
$post = $this->wp_post;
|
||||||
$content = $this->get_post_content_template();
|
$content = $this->get_post_content_template();
|
||||||
|
|
||||||
|
// Register our shortcodes just in time.
|
||||||
|
Shortcodes::register();
|
||||||
// Fill in the shortcodes.
|
// Fill in the shortcodes.
|
||||||
setup_postdata( $post );
|
setup_postdata( $post );
|
||||||
$content = do_shortcode( $content );
|
$content = do_shortcode( $content );
|
||||||
|
@ -477,6 +480,9 @@ class Post {
|
||||||
|
|
||||||
$content = \apply_filters( 'activitypub_the_content', $content, $post );
|
$content = \apply_filters( 'activitypub_the_content', $content, $post );
|
||||||
|
|
||||||
|
// Don't need these any more, should never appear in a post.
|
||||||
|
Shortcodes::unregister();
|
||||||
|
|
||||||
return $content;
|
return $content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
|
use Activitypub\Shortcodes;
|
||||||
|
|
||||||
class Test_Activitypub_Shortcodes extends WP_UnitTestCase {
|
class Test_Activitypub_Shortcodes extends WP_UnitTestCase {
|
||||||
|
|
||||||
public function test_content() {
|
public function test_content() {
|
||||||
|
Shortcodes::register();
|
||||||
global $post;
|
global $post;
|
||||||
|
|
||||||
$post_id = -99; // negative ID, to avoid clash with a valid post
|
$post_id = -99; // negative ID, to avoid clash with a valid post
|
||||||
|
@ -26,9 +30,11 @@ class Test_Activitypub_Shortcodes extends WP_UnitTestCase {
|
||||||
wp_reset_postdata();
|
wp_reset_postdata();
|
||||||
|
|
||||||
$this->assertEquals( '<p>hallo</p>', $content );
|
$this->assertEquals( '<p>hallo</p>', $content );
|
||||||
|
Shortcodes::unregister();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_password_protected_content() {
|
public function test_password_protected_content() {
|
||||||
|
Shortcodes::register();
|
||||||
global $post;
|
global $post;
|
||||||
|
|
||||||
$post_id = -98; // negative ID, to avoid clash with a valid post
|
$post_id = -98; // negative ID, to avoid clash with a valid post
|
||||||
|
@ -54,5 +60,6 @@ class Test_Activitypub_Shortcodes extends WP_UnitTestCase {
|
||||||
wp_reset_postdata();
|
wp_reset_postdata();
|
||||||
|
|
||||||
$this->assertEquals( '', $content );
|
$this->assertEquals( '', $content );
|
||||||
|
Shortcodes::unregister();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue