PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 14.8
Jetpack – WP Security, Backup, Speed, & Growth v14.8
16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 All 501 releases
jetpack / modules / shortcodes / twitter.php

twitter.php in Jetpack – WP Security, Backup, Speed, & Growth 14.8, at modules/shortcodes/twitter.php

83 lines 2.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Twitter/X oEmbed proxy functionality.
4 *
5 * This file handles proxying Twitter/X oEmbed requests through Automattic's infrastructure
6 * to minimize issues with rate limiting with 404 responses from Twitter/X.
7 *
8 * Unlike tweet.php which handles the [tweet] shortcode, this file provides core oEmbed support
9 * and is force-loaded via module-extras.php regardless of module status.
10 *
11 * @package automattic/jetpack
12 * @since 14.5
13 */
14
15 use Automattic\Jetpack\Connection\Client;
16 use Automattic\Jetpack\Constants;
17 use Automattic\Jetpack\Status;
18
19 /**
20 * Update Twitter providers to use Automattic's Twitter/X oEmbed proxy.
21 *
22 * See paFLeq-3QD-p2.
23 *
24 * @param string $provider The URL of the oEmbed provider.
25 *
26 * @return string The modified URL of the oEmbed provider.
27 */
28 function jetpack_proxy_twitter_oembed_provider( $provider ) {
29 if ( ! wp_startswith( $provider, 'https://publish.twitter.com/oembed' ) ) {
30 return $provider;
31 }
32
33 // Allow other plugins to override the proxy URL. This constant should be set on the WordPress.com side
34 // to handle proxying after we're authenticated the request with the Jetpack token.
35 $oembed_proxy_url = Constants::is_defined( 'JETPACK__TWITTER_OEMBED_PROXY_URL' )
36 ? Constants::get_constant( 'JETPACK__TWITTER_OEMBED_PROXY_URL' )
37 : '';
38
39 // If we don't have a proxy URL, then we'll try to proxy through the WordPress.com.
40 // To that end, we need to make sure that we're connected to WP.com and that we're not in offline mode.
41 if ( empty( $oembed_proxy_url ) ) {
42 if ( ! Jetpack::is_connection_ready() || ( new Status() )->is_offline_mode() ) {
43 return $provider;
44 }
45
46 $oembed_proxy_url = esc_url_raw(
47 sprintf(
48 '%s/wpcom/v2/oembed-proxy',
49 JETPACK__WPCOM_JSON_API_BASE,
50 Jetpack_Options::get_option( 'id' )
51 )
52 );
53
54 add_filter( 'oembed_remote_get_args', 'jetpack_twitter_oembed_remote_get_args', 10, 2 );
55 }
56
57 return str_replace( 'https://publish.twitter.com/oembed', $oembed_proxy_url, $provider );
58 }
59 add_filter( 'oembed_fetch_url', 'jetpack_proxy_twitter_oembed_provider', 10 );
60
61 /**
62 * Add JP auth headers if we're proxying through WP.com.
63 *
64 * @param array $args oEmbed remote get arguments.
65 * @param string $url URL to be inspected.
66 */
67 function jetpack_twitter_oembed_remote_get_args( $args, $url ) {
68 if ( ! wp_startswith( $url, Constants::get_constant( 'JETPACK__WPCOM_JSON_API_BASE' ) ) ) {
69 return $args;
70 }
71
72 $method = 'GET';
73 $signed_request = Client::build_signed_request(
74 compact( 'url', 'method' )
75 );
76
77 if ( is_wp_error( $signed_request ) ) {
78 return $args;
79 }
80
81 return $signed_request['request'];
82 }
83