PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.7
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.7
16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 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 All 506 releases
jetpack / jetpack_vendor / automattic / jetpack-status / src / class-host.php

class-host.php in Jetpack – WP Security, Backup, Speed, & Growth 16.3-a.7, at jetpack_vendor/automattic/jetpack-status/src/class-host.php

217 lines 5.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * A hosting provide class for Jetpack.
4 *
5 * @package automattic/jetpack-status
6 */
7
8 namespace Automattic\Jetpack\Status;
9
10 use Automattic\Jetpack\Constants;
11
12 /**
13 * Hosting provider class.
14 */
15 class Host {
16 /**
17 * Determine if this site is an WordPress.com on Atomic site or not by looking for presence of the wpcomsh plugin.
18 *
19 * @since 1.9.0
20 *
21 * @return bool
22 */
23 public function is_woa_site() {
24 $ret = Cache::get( 'is_woa_site' );
25 if ( null === $ret ) {
26 $ret = $this->is_atomic_platform() && Constants::is_true( 'WPCOMSH__PLUGIN_FILE' );
27 Cache::set( 'is_woa_site', $ret );
28 }
29 return $ret;
30 }
31
32 /**
33 * Determine if the site is hosted on the Atomic hosting platform.
34 *
35 * @since 1.9.0
36 *
37 * @return bool
38 */
39 public function is_atomic_platform() {
40 return Constants::is_true( 'ATOMIC_SITE_ID' ) && Constants::is_true( 'ATOMIC_CLIENT_ID' );
41 }
42
43 /**
44 * Determine if this is a Newspack site.
45 *
46 * @return bool
47 */
48 public function is_newspack_site() {
49 return Constants::is_defined( 'NEWSPACK_PLUGIN_FILE' );
50 }
51
52 /**
53 * Determine if this is a VIP-hosted site.
54 *
55 * @return bool
56 */
57 public function is_vip_site() {
58 return Constants::is_defined( 'WPCOM_IS_VIP_ENV' ) && true === Constants::get_constant( 'WPCOM_IS_VIP_ENV' );
59 }
60
61 /**
62 * Determine if this is a Simple platform site.
63 *
64 * @return bool
65 */
66 public function is_wpcom_simple() {
67 return Constants::is_defined( 'IS_WPCOM' ) && true === Constants::get_constant( 'IS_WPCOM' );
68 }
69
70 /**
71 * Determine if this is a WordPress.com site.
72 *
73 * Includes both Simple and WoA platforms.
74 *
75 * @return bool
76 */
77 public function is_wpcom_platform() {
78 return $this->is_wpcom_simple() || $this->is_woa_site();
79 }
80
81 /**
82 * Determine if this is a P2 site.
83 * This covers both P2 and P2020 themes.
84 *
85 * @return bool
86 */
87 public function is_p2_site() {
88 $site_id = $this->get_wpcom_site_id();
89 if ( ! $site_id ) {
90 return false;
91 }
92 return str_contains( get_stylesheet(), 'pub/p2' ) || ( function_exists( '\WPForTeams\is_wpforteams_site' ) && \WPForTeams\is_wpforteams_site( $site_id ) );
93 }
94
95 /**
96 * Get the current site's WordPress.com ID.
97 *
98 * @return mixed The site's WordPress.com ID.
99 */
100 public function get_wpcom_site_id() {
101 if ( $this->is_wpcom_simple() ) {
102 return get_current_blog_id();
103 } elseif ( class_exists( 'Jetpack' ) && \Jetpack::is_connection_ready() ) {
104 return \Jetpack_Options::get_option( 'id' );
105 }
106 return false;
107 }
108
109 /**
110 * Add all wordpress.com environments to the safe redirect allowed list.
111 *
112 * To be used with a filter of allowed domains for a redirect.
113 *
114 * @param array $domains Allowed WP.com Environments.
115 */
116 public static function allow_wpcom_environments( $domains ) {
117 $domains[] = 'wordpress.com';
118 $domains[] = 'jetpack.wordpress.com';
119 $domains[] = 'wpcalypso.wordpress.com';
120 $domains[] = 'horizon.wordpress.com';
121 $domains[] = 'calypso.localhost';
122 return $domains;
123 }
124
125 /**
126 * Return Calypso environment value; used for developing Jetpack and pairing
127 * it with different Calypso environments, such as localhost.
128 *
129 * @since 1.18.0
130 *
131 * @return string Calypso environment
132 */
133 public function get_calypso_env() {
134 // phpcs:disable WordPress.Security.NonceVerification.Recommended -- Nonce is not required; only used for changing environments.
135 if ( isset( $_GET['calypso_env'] ) ) {
136 return sanitize_key( $_GET['calypso_env'] );
137 }
138 // phpcs:enable WordPress.Security.NonceVerification.Recommended
139
140 if ( getenv( 'CALYPSO_ENV' ) ) {
141 return sanitize_key( getenv( 'CALYPSO_ENV' ) );
142 }
143
144 if ( defined( 'CALYPSO_ENV' ) && CALYPSO_ENV ) {
145 return sanitize_key( CALYPSO_ENV );
146 }
147
148 return '';
149 }
150
151 /**
152 * Return source query param value from the URL if exists in the allowed sources list.
153 *
154 * @return string "source" query param value
155 */
156 public function get_source_query() {
157 // phpcs:disable WordPress.Security.NonceVerification.Recommended
158 $allowed_sources = array( 'jetpack-manage', 'a8c-for-agencies' );
159 if ( isset( $_GET['source'] ) && in_array( $_GET['source'], $allowed_sources, true ) ) {
160 return sanitize_key( $_GET['source'] );
161 }
162
163 return '';
164 }
165
166 /**
167 * Returns a guess of the hosting provider for the current site based on various checks.
168 *
169 * @since 5.0.4 Added $guess parameter.
170 * @since 6.0.0 Removed $guess parameter.
171 *
172 * @return string
173 */
174 public function get_known_host_guess() {
175 // First, let's check if we can recognize provider manually:
176 switch ( true ) {
177 case $this->is_woa_site():
178 $provider = 'woa';
179 break;
180 case $this->is_atomic_platform():
181 $provider = 'atomic';
182 break;
183 case $this->is_newspack_site():
184 $provider = 'newspack';
185 break;
186 case $this->is_vip_site():
187 $provider = 'vip';
188 break;
189 case $this->is_wpcom_simple():
190 case $this->is_wpcom_platform():
191 $provider = 'wpcom';
192 break;
193 default:
194 $provider = 'unknown';
195 break;
196 }
197
198 return $provider;
199 }
200
201 /**
202 * Add public-api.wordpress.com to the safe redirect allowed list - only added when someone allows API access.
203 *
204 * @since 3.0.2 Ported from Jetpack to the Status package.
205 *
206 * To be used with a filter of allowed domains for a redirect.
207 *
208 * @param array $domains Allowed WP.com Environments.
209 *
210 * @return array
211 */
212 public static function allow_wpcom_public_api_domain( $domains ) {
213 $domains[] = 'public-api.wordpress.com';
214 return $domains;
215 }
216 }
217