modified file enshrined
This commit is contained in:
@ -154,4 +154,98 @@ class Http {
|
||||
public static function generate_cache_key( $url ) {
|
||||
return 'activitypub_http_' . \md5( $url );
|
||||
}
|
||||
|
||||
/**
|
||||
* Requests the Data from the Object-URL or Object-Array
|
||||
*
|
||||
* @param array|string $url_or_object The Object or the Object URL.
|
||||
* @param bool $cached If the result should be cached.
|
||||
*
|
||||
* @return array|WP_Error The Object data as array or WP_Error on failure.
|
||||
*/
|
||||
public static function get_remote_object( $url_or_object, $cached = true ) {
|
||||
if ( is_array( $url_or_object ) ) {
|
||||
if ( array_key_exists( 'id', $url_or_object ) ) {
|
||||
$url = $url_or_object['id'];
|
||||
} elseif ( array_key_exists( 'url', $url_or_object ) ) {
|
||||
$url = $url_or_object['url'];
|
||||
} else {
|
||||
return new WP_Error(
|
||||
'activitypub_no_valid_actor_identifier',
|
||||
\__( 'The "actor" identifier is not valid', 'activitypub' ),
|
||||
array(
|
||||
'status' => 404,
|
||||
'object' => $url_or_object,
|
||||
)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$url = $url_or_object;
|
||||
}
|
||||
|
||||
if ( preg_match( '/^@?' . ACTIVITYPUB_USERNAME_REGEXP . '$/i', $url ) ) {
|
||||
$url = Webfinger::resolve( $url );
|
||||
}
|
||||
|
||||
if ( ! $url ) {
|
||||
return new WP_Error(
|
||||
'activitypub_no_valid_actor_identifier',
|
||||
\__( 'The "actor" identifier is not valid', 'activitypub' ),
|
||||
array(
|
||||
'status' => 404,
|
||||
'object' => $url,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if ( is_wp_error( $url ) ) {
|
||||
return $url;
|
||||
}
|
||||
|
||||
$transient_key = self::generate_cache_key( $url );
|
||||
|
||||
// only check the cache if needed.
|
||||
if ( $cached ) {
|
||||
$data = \get_transient( $transient_key );
|
||||
|
||||
if ( $data ) {
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! \wp_http_validate_url( $url ) ) {
|
||||
return new WP_Error(
|
||||
'activitypub_no_valid_object_url',
|
||||
\__( 'The "object" is/has no valid URL', 'activitypub' ),
|
||||
array(
|
||||
'status' => 400,
|
||||
'object' => $url,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$response = self::get( $url );
|
||||
|
||||
if ( \is_wp_error( $response ) ) {
|
||||
return $response;
|
||||
}
|
||||
|
||||
$data = \wp_remote_retrieve_body( $response );
|
||||
$data = \json_decode( $data, true );
|
||||
|
||||
if ( ! $data ) {
|
||||
return new WP_Error(
|
||||
'activitypub_invalid_json',
|
||||
\__( 'No valid JSON data', 'activitypub' ),
|
||||
array(
|
||||
'status' => 400,
|
||||
'object' => $url,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
\set_transient( $transient_key, $data, WEEK_IN_SECONDS );
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user