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' );
}