diff --git a/inc/admin/options.php b/inc/admin/options.php index 3bdb7e7aa8..d86fe0bfde 100644 --- a/inc/admin/options.php +++ b/inc/admin/options.php @@ -475,7 +475,8 @@ function rocket_display_options() { 'minify_css_key', 'minify_js_key', 'version', - 'cloudflare_old_settings' + 'cloudflare_old_settings', + 'cloudflare_zone_id' ) ); @@ -1089,12 +1090,27 @@ function rocket_pre_main_option( $newvalue, $oldvalue ) { $newvalue['minify_js_key'] = create_rocket_uniqid(); } + // Update CloudFlare zone ID if CloudFlare domain was changed + if ( isset( $newvalue['cloudflare_domain'], $oldvalue['cloudflare_domain'] ) && $newvalue['cloudflare_domain'] != $oldvalue['cloudflare_domain'] && phpversion() >= '5.4' ) { + $cf_instance = get_rocket_cloudflare_api_instance(); + if ( ! is_wp_error( $cf_instance ) ) { + try { + $zone_instance = new CloudFlare\Zone( $cf_instance ); + $zone = $zone_instance->zones( $newvalue['cloudflare_domain'] ); + + if ( isset( $zone->result[0]->id ) ) { + $newvalue['cloudflare_zone_id'] = $zone->result[0]->id; + } + } catch ( Exception $e ) {} + } + } + // Save old CloudFlare settings if ( ( isset( $newvalue['cloudflare_auto_settings'], $oldvalue['cloudflare_auto_settings'] ) && $newvalue['cloudflare_auto_settings'] != $oldvalue['cloudflare_auto_settings'] && $newvalue['cloudflare_auto_settings'] == 1 ) ) { $cf_settings = get_rocket_cloudflare_settings(); - $cf_settings = array_filter( $cf_settings ); - - $newvalue['cloudflare_old_settings'] = ( isset ( $cf_settings ) ) ? implode( ',' , $cf_settings ) : ''; + if ( ( bool ) $cf_settings ) { + $newvalue['cloudflare_old_settings'] = ( isset ( $cf_settings ) ) ? implode( ',' , array_filter( $cf_settings ) ) : ''; + } } // Checked the SSL option if the whole website is on SSL diff --git a/inc/admin/ui/modules/basic.php b/inc/admin/ui/modules/basic.php index 877dfaff5b..8b6948c937 100755 --- a/inc/admin/ui/modules/basic.php +++ b/inc/admin/ui/modules/basic.php @@ -101,6 +101,7 @@ 'WP-Mobilizer', 'WP Mobile Edition', 'Device Theme Switcher', + 'WP Mobile Detect', 'Easy Social Share Buttons', ); diff --git a/inc/admin/upgrader.php b/inc/admin/upgrader.php index 07dfc0564d..a83710224f 100644 --- a/inc/admin/upgrader.php +++ b/inc/admin/upgrader.php @@ -132,6 +132,7 @@ function rocket_first_install() { 'cloudflare_email' => '', 'cloudflare_api_key' => '', 'cloudflare_domain' => '', + 'cloudflare_zone_id' => '', 'cloudflare_devmode' => 0, 'cloudflare_protocol_rewrite' => 0, 'cloudflare_auto_settings' => 0, @@ -303,4 +304,23 @@ function rocket_new_upgrade( $wp_rocket_version, $actual_version ) { update_option( WP_ROCKET_SLUG, $options ); } + + // Add a value to the new CF zone_id field if the CF domain is set + if ( version_compare( $actual_version, '2.8.21', '<' ) && phpversion() < '5.4' ) { + $options = get_option( WP_ROCKET_SLUG ); + if ( 0 < $options['do_cloudflare'] && $options['cloudflare_domain'] !== '' ) { + $cf_instance = get_rocket_cloudflare_api_instance(); + if ( ! is_wp_error( $cf_instance ) ) { + try { + $zone_instance = new CloudFlare\Zone( $cf_instance ); + $zone = $zone_instance->zones( $options['cloudflare_domain'] ); + + if ( isset( $zone->result[0]->id ) ) { + $options['cloudflare_zone_id'] = $zone->result[0]->id; + update_option( WP_ROCKET_SLUG, $options ); + } + } catch ( Exception $e ) {} + } + } + } } \ No newline at end of file diff --git a/inc/functions/cloudflare.php b/inc/functions/cloudflare.php index 3d705a37bc..5c9a6bca31 100644 --- a/inc/functions/cloudflare.php +++ b/inc/functions/cloudflare.php @@ -1,9 +1,28 @@ new Cloudflare\Api( $cf_email, $cf_api_key ) ]; - - try { - $zone_instance = new CloudFlare\Zone( $cf_instance->auth ); - $cf_domain = get_rocket_option( 'cloudflare_domain', null ); - $zone = $zone_instance->zones( $cf_domain ); + $cf_api_instance = get_rocket_cloudflare_api_instance(); + if ( is_wp_error( $cf_api_instance ) ) { + return false; + } - if ( isset( $zone->result[0]->id ) ) { - $cf_instance->zone_id = $zone->result[0]->id; - return $cf_instance; - } - } catch ( Exception $e ) {} + $cf_zone_id = get_rocket_option( 'cloudflare_zone_id', null ); - return false; - } + if ( ! isset( $cf_zone_id ) ) { + return false; + } + + $cf_instance = ( object ) [ 'auth' => $cf_api_instance, 'zone_id' => $cf_zone_id ]; - return false; + return $cf_instance; } /** @@ -203,19 +215,63 @@ function rocket_purge_cloudflare() { /** * Get CloudFlare IPs. * + * @since 2.8.21 Save IPs in a transient to prevent calling the API everytime * @since 2.8.16 * - * @return Object Result of API request + * @author Remy Perona + * + * @return mixed Bool|Object Result of API request, false otherwise */ function rocket_get_cloudflare_ips() { - if( ! is_object( $GLOBALS['rocket_cloudflare'] ) ) { + $cf_instance = get_rocket_cloudflare_api_instance(); + + if ( is_wp_error( $cf_instance ) ) { return false; } - try { - $cf_ips_instance = new CloudFlare\IPs( $GLOBALS['rocket_cloudflare']->auth ); - return $cf_ips_instance->ips(); - } catch ( Exception $e ) { - return false; + if ( false === ( $cf_ips = get_transient( 'rocket_cloudflare_ips' ) ) ) { + try { + $cf_ips_instance = new CloudFlare\IPs( $cf_instance ); + $cf_ips = $cf_ips_instance->ips(); + + if ( isset( $cf_ips->success ) && $cf_ips->success ) { + set_transient( 'rocket_cloudflare_ips', $cf_ips, 2 * WEEK_IN_SECONDS ); + } else { + throw new Exception( 'Error connecting to CloudFlare' ); + } + } catch ( Exception $e ) { + $cf_ips = ( object ) [ 'success' => true, 'result' => ( object ) [] ]; + $cf_ips->result->ipv4_cidrs = array( + '103.21.244.0/22', + '103.22.200.0/22', + '103.31.4.0/22', + '104.16.0.0/12', + '108.162.192.0/18', + '131.0.72.0/22', + '141.101.64.0/18', + '162.158.0.0/15', + '172.64.0.0/13', + '173.245.48.0/20', + '188.114.96.0/20', + '190.93.240.0/20', + '197.234.240.0/22', + '198.41.128.0/17', + '199.27.128.0/21', + ); + + $cf_ips->result->ipv6_cidrs = array( + '2400:cb00::/32', + '2405:8100::/32', + '2405:b500::/32', + '2606:4700::/32', + '2803:f800::/32', + '2c0f:f248::/32', + '2a06:98c0::/29', + ); + + return $cf_ips; + } } + + return $cf_ips; } \ No newline at end of file diff --git a/inc/vendors/CloudFlare/Api.php b/inc/vendors/CloudFlare/Api.php index b17267afd2..f1b2da2cf9 100644 --- a/inc/vendors/CloudFlare/Api.php +++ b/inc/vendors/CloudFlare/Api.php @@ -187,7 +187,7 @@ protected function request($path, array $data = null, $method = null) CURLOPT_RETURNTRANSFER => 1, CURLOPT_HEADER => false, CURLOPT_TIMEOUT => 30, - CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYPEER => true, ]; $curl_options = $default_curl_options; @@ -195,7 +195,8 @@ protected function request($path, array $data = null, $method = null) $curl_options = array_replace($default_curl_options, $this->curl_options); } - $headers = ["X-Auth-Email: {$this->email}", "X-Auth-Key: {$this->auth_key}"]; + $wp_rocket_version = WP_ROCKET_VERSION; + $headers = ["X-Auth-Email: {$this->email}", "X-Auth-Key: {$this->auth_key}", "User-Agent: wp-rocket/{$wp_rocket_version}"]; $ch = curl_init(); curl_setopt_array($ch, $curl_options); diff --git a/uninstall.php b/uninstall.php index 29766da08b..18330884a1 100755 --- a/uninstall.php +++ b/uninstall.php @@ -9,6 +9,7 @@ delete_transient( 'wp_rocket_settings' ); delete_transient( 'rocket_check_licence_30' ); delete_transient( 'rocket_check_licence_1' ); +delete_transient( 'rocket_cloudflare_ips' ); // Delete WP Rocket options delete_option( 'wp_rocket_settings' ); diff --git a/wp-rocket.php b/wp-rocket.php index 13207e6732..f879399f9d 100755 --- a/wp-rocket.php +++ b/wp-rocket.php @@ -3,7 +3,7 @@ Plugin Name: WP Rocket Plugin URI: https://wp-rocket.me Description: The best WordPress performance plugin. -Version: 2.8.20 +Version: 2.8.21 Code Name: Ilum Author: WP Media Contributors: Jonathan Buttigieg, Julio Potier, Remy Perona @@ -19,7 +19,7 @@ defined( 'ABSPATH' ) or die( 'Cheatin’ uh?' ); // Rocket defines -define( 'WP_ROCKET_VERSION' , '2.8.20' ); +define( 'WP_ROCKET_VERSION' , '2.8.21' ); define( 'WP_ROCKET_PRIVATE_KEY' , false ); define( 'WP_ROCKET_SLUG' , 'wp_rocket_settings' ); define( 'WP_ROCKET_WEB_MAIN' , 'http://support.wp-rocket.me/' ); @@ -95,16 +95,6 @@ function rocket_init() // Call defines, classes and functions require( WP_ROCKET_FUNCTIONS_PATH . 'options.php' ); - if ( phpversion() >= '5.4' ) { - require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Exception/AuthenticationException.php' ); - require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Exception/UnauthorizedException.php' ); - require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Api.php' ); - require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/IPs.php' ); - require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Zone.php' ); - require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Zone/Cache.php' ); - require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Zone/Settings.php' ); - require( WP_ROCKET_FUNCTIONS_PATH . 'cloudflare.php' ); - } // Last constants define( 'WP_ROCKET_PLUGIN_NAME', get_rocket_option( 'wl_plugin_name', 'WP Rocket' ) ); define( 'WP_ROCKET_PLUGIN_SLUG', sanitize_key( WP_ROCKET_PLUGIN_NAME ) ); @@ -140,6 +130,14 @@ function rocket_init() } if ( 0 < (int) get_rocket_option( 'do_cloudflare' ) && phpversion() >= '5.4' ) { + require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Exception/AuthenticationException.php' ); + require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Exception/UnauthorizedException.php' ); + require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Api.php' ); + require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/IPs.php' ); + require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Zone.php' ); + require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Zone/Cache.php' ); + require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Zone/Settings.php' ); + require( WP_ROCKET_FUNCTIONS_PATH . 'cloudflare.php' ); require( WP_ROCKET_VENDORS_PATH . 'ip_in_range.php' ); require( WP_ROCKET_COMMON_PATH . 'cloudflare.php' ); }