PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-connection / src / class-urls.php
jetpack / jetpack_vendor / automattic / jetpack-connection / src Last commit date
abilities 2 days ago connectors 2 days ago health 2 days ago identity-crisis 1 month ago sso 1 month ago traits 8 months ago webhooks 8 months ago class-authorize-json-api.php 1 month ago class-client.php 2 days ago class-connection-assets.php 1 year ago class-connection-notice.php 8 months ago class-error-handler.php 2 days ago class-external-storage.php 4 months ago class-heartbeat.php 1 month ago class-initial-state.php 3 weeks ago class-manager.php 2 days ago class-nonce-handler.php 8 months ago class-package-version-tracker.php 1 month ago class-package-version.php 2 days ago class-partner-coupon.php 2 months ago class-partner.php 2 years ago class-plugin-storage.php 8 months ago class-plugin.php 8 months ago class-rest-authentication.php 2 days ago class-rest-connector.php 2 days ago class-secrets.php 8 months ago class-server-sandbox.php 2 months ago class-site-health.php 2 days ago class-terms-of-service.php 2 days ago class-tokens-locks.php 8 months ago class-tokens.php 2 days ago class-tracking.php 2 days ago class-urls.php 6 months ago class-user-account-status.php 2 days ago class-users-connection-admin.php 2 months ago class-utils.php 2 years ago class-webhooks.php 1 month ago class-xmlrpc-async-call.php 2 years ago class-xmlrpc-connector.php 8 months ago interface-manager.php 4 years ago interface-storage-provider.php 6 months ago
class-urls.php
217 lines
1 <?php
2 /**
3 * The Jetpack Connection package Urls class file.
4 *
5 * @package automattic/jetpack-connection
6 */
7
8 namespace Automattic\Jetpack\Connection;
9
10 use Automattic\Jetpack\Constants;
11
12 /**
13 * Provides Url methods for the Connection package.
14 */
15 class Urls {
16
17 const HTTPS_CHECK_OPTION_PREFIX = 'jetpack_sync_https_history_';
18 const HTTPS_CHECK_HISTORY = 5;
19
20 /**
21 * Return URL from option or PHP constant.
22 *
23 * @param string $option_name (e.g. 'home').
24 *
25 * @return mixed|null URL.
26 */
27 public static function get_raw_url( $option_name ) {
28 $value = null;
29 $constant = ( 'home' === $option_name )
30 ? 'WP_HOME'
31 : 'WP_SITEURL';
32
33 // Since we disregard the constant for multisites in ms-default-filters.php,
34 // let's also use the db value if this is a multisite.
35 if ( ! is_multisite() && Constants::is_defined( $constant ) ) {
36 $value = Constants::get_constant( $constant );
37 } else {
38 // Let's get the option from the database so that we can bypass filters. This will help
39 // ensure that we get more uniform values.
40 $value = \Jetpack_Options::get_raw_option( $option_name );
41 }
42
43 return $value;
44 }
45
46 /**
47 * Normalize domains by removing www unless declared in the site's option.
48 *
49 * @param string $option Option value from the site.
50 * @param callable $url_function Function retrieving the URL to normalize.
51 * @return mixed|string URL.
52 */
53 public static function normalize_www_in_url( $option, $url_function ) {
54 $url = wp_parse_url( call_user_func( $url_function ) );
55 $option_url = wp_parse_url( get_option( $option ) );
56
57 if ( ! $option_url || ! $url ) {
58 return $url;
59 }
60
61 if ( "www.{$option_url[ 'host' ]}" === $url['host'] ) {
62 // remove www if not present in option URL.
63 $url['host'] = $option_url['host'];
64 }
65 if ( "www.{$url[ 'host' ]}" === $option_url['host'] ) {
66 // add www if present in option URL.
67 $url['host'] = $option_url['host'];
68 }
69
70 $normalized_url = "{$url['scheme']}://{$url['host']}";
71 if ( isset( $url['path'] ) ) {
72 $normalized_url .= "{$url['path']}";
73 }
74
75 if ( isset( $url['query'] ) ) {
76 $normalized_url .= "?{$url['query']}";
77 }
78
79 return $normalized_url;
80 }
81
82 /**
83 * Return URL with a normalized protocol.
84 *
85 * @param string $callable Function name that was used to retrieve URL option.
86 * @param string $new_value URL Protocol to set URLs to.
87 * @return string Normalized URL.
88 */
89 public static function get_protocol_normalized_url( $callable, $new_value ) {
90 $option_key = self::HTTPS_CHECK_OPTION_PREFIX . $callable;
91
92 $parsed_url = wp_parse_url( $new_value );
93
94 if ( ! $parsed_url ) {
95 return $new_value;
96 }
97 if ( array_key_exists( 'scheme', $parsed_url ) ) {
98 $scheme = $parsed_url['scheme'];
99 } else {
100 $scheme = '';
101 }
102 $scheme_history = get_option( $option_key, array() );
103
104 if ( ! is_array( $scheme_history ) ) {
105 $scheme_history = array();
106 }
107
108 $scheme_history[] = $scheme;
109
110 // Limit length to self::HTTPS_CHECK_HISTORY.
111 $scheme_history = array_slice( $scheme_history, ( self::HTTPS_CHECK_HISTORY * -1 ) );
112
113 update_option( $option_key, $scheme_history );
114
115 $forced_scheme = in_array( 'https', $scheme_history, true ) ? 'https' : 'http';
116
117 return set_url_scheme( $new_value, $forced_scheme );
118 }
119
120 /**
121 * Helper function that is used when getting home or siteurl values. Decides
122 * whether to get the raw or filtered value.
123 *
124 * @param string $url_type URL to get, home or siteurl.
125 * @return string
126 */
127 public static function get_raw_or_filtered_url( $url_type ) {
128 $url_function = ( 'home' === $url_type )
129 ? 'home_url'
130 : 'site_url';
131
132 if (
133 ! Constants::is_defined( 'JETPACK_SYNC_USE_RAW_URL' ) ||
134 Constants::get_constant( 'JETPACK_SYNC_USE_RAW_URL' )
135 ) {
136 $scheme = is_ssl() ? 'https' : 'http';
137 $url = (string) self::get_raw_url( $url_type );
138 $url = set_url_scheme( $url, $scheme );
139 } else {
140 $url = self::normalize_www_in_url( $url_type, $url_function );
141 }
142
143 return self::get_protocol_normalized_url( $url_function, $url );
144 }
145
146 /**
147 * Return the escaped home_url.
148 *
149 * @return string
150 */
151 public static function home_url() {
152 $url = self::get_raw_or_filtered_url( 'home' );
153
154 /**
155 * Allows overriding of the home_url value that is synced back to WordPress.com.
156 *
157 * @since 1.7.0
158 * @since-jetpack 5.2.0
159 *
160 * @param string $home_url
161 */
162 return esc_url_raw( apply_filters( 'jetpack_sync_home_url', $url ) );
163 }
164
165 /**
166 * Return the escaped siteurl.
167 *
168 * @return string
169 */
170 public static function site_url() {
171 $url = self::get_raw_or_filtered_url( 'siteurl' );
172
173 /**
174 * Allows overriding of the site_url value that is synced back to WordPress.com.
175 *
176 * @since 1.7.0
177 * @since-jetpack 5.2.0
178 *
179 * @param string $site_url
180 */
181 return esc_url_raw( apply_filters( 'jetpack_sync_site_url', $url ) );
182 }
183
184 /**
185 * Return main site URL with a normalized protocol.
186 *
187 * @return string
188 */
189 public static function main_network_site_url() {
190 return self::get_protocol_normalized_url( 'main_network_site_url', network_site_url() );
191 }
192
193 /**
194 * Maybe add the origin_site_id query parameter to a URL.
195 *
196 * The parameter is only added for users who are members of the current blog.
197 *
198 * @since 7.1.0
199 *
200 * @param string $url The URL to add the query param to.
201 * @return string The URL with the origin_site_id query parameter maybe added.
202 */
203 public static function maybe_add_origin_site_id( $url ) {
204 $site_id = Manager::get_site_id();
205 if ( is_wp_error( $site_id ) ) {
206 return $url;
207 }
208
209 // Add query param to URL only for users who can access wp-admin.
210 if ( ! is_user_member_of_blog() ) {
211 return $url;
212 }
213
214 return add_query_arg( 'origin_site_id', $site_id, $url );
215 }
216 }
217