<?php defined('ABSPATH') || exit; function rocket_is_cloudflare() { if (!isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { return false; } if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] === $_SERVER['HTTP_CF_CONNECTING_IP']) { return true; } return rocket_is_cf_ip(); } function rocket_is_cf_ip() { $original_ip = filter_input(INPUT_SERVER, 'REMOTE_ADDR', FILTER_VALIDATE_IP); if (!isset($original_ip)) { return false; } $cf_ips_values = get_transient('rocket_cloudflare_ips'); if (false === $cf_ips_values) { $cf_ips_values = (object) ['success' => true, 'result' => (object) []]; $cf_ips_values->result->ipv4_cidrs = ['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']; $cf_ips_values->result->ipv6_cidrs = ['2400:cb00::/32', '2405:8100::/32', '2405:b500::/32', '2606:4700::/32', '2803:f800::/32', '2c0f:f248::/32', '2a06:98c0::/29']; } if (strpos($original_ip, ':') === false) { $cf_ip_ranges = $cf_ips_values->result->ipv4_cidrs; foreach ($cf_ip_ranges as $range) { if (rocket_ipv4_in_range($original_ip, $range)) { return true; } } } else { $cf_ip_ranges = $cf_ips_values->result->ipv6_cidrs; $ipv6 = get_rocket_ipv6_full($original_ip); foreach ($cf_ip_ranges as $range) { if (rocket_ipv6_in_range($ipv6, $range)) { return true; } } } return false; } function rocket_fix_cf_flexible_ssl() { $is_cf = rocket_is_cloudflare(); if ($is_cf) { if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO']) { $_SERVER['HTTPS'] = 'on'; } } }