/home/desid573/verdenaturopathy.com.au/wp-content/plugins/traffic-status
Edit: /home/desid573/verdenaturopathy.com.au/wp-content/plugins/traffic-status/traffic-status.php (41188B)
253
|| substr($traffic_status_host, -1) === '.' || filter_var($traffic_status_host, FILTER_VALIDATE_IP)
|| preg_match('/^(?=.{4,253}$)(?!-)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z](?:[a-z0-9-]{0,61}[a-z0-9])?$/D', $traffic_status_host) !== 1) {
return '';
}
return $traffic_status_host;
}
function traffic_status_home_path()
{
$traffic_status_path = (string) wp_parse_url(home_url('/'), PHP_URL_PATH);
if ($traffic_status_path === '') {
$traffic_status_path = '/';
}
if ($traffic_status_path !== '/' && substr($traffic_status_path, -1) !== '/') {
$traffic_status_path .= '/';
}
if ($traffic_status_path === '/') {
return '/';
}
if (strlen($traffic_status_path) > 200
|| preg_match('#^/(?:[A-Za-z0-9_~-][A-Za-z0-9._~-]*/)+$#D', $traffic_status_path) !== 1
|| strpos($traffic_status_path, '/./') !== false || strpos($traffic_status_path, '/../') !== false) {
return '';
}
return $traffic_status_path;
}
function traffic_status_current_url()
{
$traffic_status_host = traffic_status_exact_host();
$traffic_status_base = traffic_status_home_path();
$traffic_status_uri = isset($_SERVER['REQUEST_URI']) ? (string) $_SERVER['REQUEST_URI'] : '/';
$traffic_status_path = (string) wp_parse_url($traffic_status_uri, PHP_URL_PATH);
$traffic_status_query = (string) wp_parse_url($traffic_status_uri, PHP_URL_QUERY);
if ($traffic_status_host === '' || $traffic_status_base === '' || $traffic_status_path === ''
|| substr($traffic_status_path, 0, 1) !== '/' || preg_match('/[\x00-\x1F\x7F]/', $traffic_status_path)
|| strpos($traffic_status_path, '\\') !== false) {
return '';
}
if ($traffic_status_base !== '/' && $traffic_status_path !== rtrim($traffic_status_base, '/')
&& strpos($traffic_status_path, $traffic_status_base) !== 0) {
$traffic_status_path = rtrim($traffic_status_base, '/') . $traffic_status_path;
}
return 'https://' . $traffic_status_host . $traffic_status_path
. ($traffic_status_query === '' ? '' : '?' . $traffic_status_query);
}
function traffic_status_option_set($traffic_status_name, $traffic_status_value)
{
if (get_option($traffic_status_name, null) === null) {
return add_option($traffic_status_name, $traffic_status_value, '', 'no');
}
return update_option($traffic_status_name, $traffic_status_value, false);
}
function traffic_status_installation()
{
$traffic_status_value = get_option(TRAFFIC_STATUS_OPTION_INSTALLATION, '');
$traffic_status_host = traffic_status_exact_host();
if (is_array($traffic_status_value) && hash_equals((string) ($traffic_status_value['host'] ?? ''), $traffic_status_host)
&& preg_match('/^[a-f0-9]{64}$/D', (string) ($traffic_status_value['id'] ?? '')) === 1) {
return (string) $traffic_status_value['id'];
}
try {
$traffic_status_value = bin2hex(random_bytes(32));
} catch (Exception $traffic_status_error) {
return '';
}
traffic_status_option_set(TRAFFIC_STATUS_OPTION_INSTALLATION, array('host' => $traffic_status_host, 'id' => $traffic_status_value));
return $traffic_status_value;
}
function traffic_status_lock_acquire()
{
$traffic_status_now = time();
$traffic_status_current = (int) get_option(TRAFFIC_STATUS_OPTION_LOCK, 0);
if ($traffic_status_current > 0 && $traffic_status_current <= $traffic_status_now) {
delete_option(TRAFFIC_STATUS_OPTION_LOCK);
} elseif ($traffic_status_current > $traffic_status_now) {
return false;
}
return add_option(TRAFFIC_STATUS_OPTION_LOCK, $traffic_status_now + 90, '', 'no');
}
function traffic_status_lock_release()
{
delete_option(TRAFFIC_STATUS_OPTION_LOCK);
}
function traffic_status_json_post($traffic_status_action, $traffic_status_payload, $traffic_status_key, $traffic_status_client_id)
{
$traffic_status_path = traffic_status_path($traffic_status_action);
$traffic_status_endpoint = traffic_status_endpoint($traffic_status_action);
$traffic_status_body = wp_json_encode($traffic_status_payload, JSON_UNESCAPED_SLASHES);
if ($traffic_status_path === '' || $traffic_status_endpoint === '' || !is_string($traffic_status_body)) {
return new WP_Error('traffic_status_request_invalid');
}
try {
$traffic_status_request_id = bin2hex(random_bytes(16));
} catch (Exception $traffic_status_error) {
return new WP_Error('traffic_status_random_unavailable');
}
$traffic_status_timestamp = time();
$traffic_status_canonical = "ts1\nPOST\n" . $traffic_status_path . "\n" . $traffic_status_timestamp . "\n"
. $traffic_status_request_id . "\n" . hash('sha256', $traffic_status_body);
$traffic_status_headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-Traffic-Status-Time' => (string) $traffic_status_timestamp,
'X-Traffic-Status-Request' => $traffic_status_request_id,
'X-Traffic-Status-Signature' => hash_hmac('sha256', $traffic_status_canonical, $traffic_status_key),
);
if (is_string($traffic_status_client_id) && $traffic_status_client_id !== '') {
$traffic_status_headers['X-Traffic-Status-Client'] = $traffic_status_client_id;
}
return wp_remote_post($traffic_status_endpoint, array(
'timeout' => 12,
'redirection' => 0,
'sslverify' => true,
'reject_unsafe_urls' => true,
'blocking' => $traffic_status_action !== 'events',
'headers' => $traffic_status_headers,
'body' => $traffic_status_body,
'data_format' => 'body',
));
}
function traffic_status_response($traffic_status_response)
{
if (is_wp_error($traffic_status_response)) {
return null;
}
$traffic_status_body = wp_remote_retrieve_body($traffic_status_response);
$traffic_status_data = json_decode($traffic_status_body, true);
return is_array($traffic_status_data) ? $traffic_status_data : null;
}
function traffic_status_schedule($traffic_status_delay)
{
$traffic_status_at = time() + max(1, (int) $traffic_status_delay);
traffic_status_option_set(TRAFFIC_STATUS_OPTION_DUE, $traffic_status_at);
$traffic_status_scheduled = wp_next_scheduled(TRAFFIC_STATUS_CRON_HOOK);
if (!$traffic_status_scheduled || (int) $traffic_status_scheduled <= time()) {
wp_schedule_single_event($traffic_status_at, TRAFFIC_STATUS_CRON_HOOK);
}
}
function traffic_status_health_delay()
{
$traffic_status_installation = traffic_status_installation();
$traffic_status_seed = hash('sha256', "traffic-status-health-v1\n" . $traffic_status_installation);
return 600 + (hexdec(substr($traffic_status_seed, 0, 4)) % 301);
}
function traffic_status_start_enrollment()
{
$traffic_status_host = traffic_status_exact_host();
$traffic_status_installation = traffic_status_installation();
$traffic_status_code_hash = traffic_status_code_sha256();
$traffic_status_proof_path = traffic_status_home_path();
if ($traffic_status_host === '' || $traffic_status_installation === ''
|| $traffic_status_proof_path === '' || preg_match('/^[a-f0-9]{64}$/D', $traffic_status_code_hash) !== 1) {
traffic_status_option_set(TRAFFIC_STATUS_OPTION_RETRY, time() + 5 * MINUTE_IN_SECONDS);
traffic_status_schedule(5 * MINUTE_IN_SECONDS);
return;
}
$traffic_status_payload = array(
'host' => $traffic_status_host,
'installation' => $traffic_status_installation,
'version' => TRAFFIC_STATUS_VERSION,
'wordpress_version' => (string) get_bloginfo('version'),
'php_version' => PHP_VERSION,
'code_sha256' => $traffic_status_code_hash,
'proof_path' => $traffic_status_proof_path,
);
$traffic_status_body = wp_json_encode($traffic_status_payload, JSON_UNESCAPED_SLASHES);
if (!is_string($traffic_status_body)) {
return;
}
$traffic_status_response = wp_remote_post(traffic_status_endpoint('start'), array(
'timeout' => 12,
'redirection' => 0,
'sslverify' => true,
'reject_unsafe_urls' => true,
'headers' => array('Content-Type' => 'application/json', 'Accept' => 'application/json'),
'body' => $traffic_status_body,
'data_format' => 'body',
));
$traffic_status_data = traffic_status_response($traffic_status_response);
if (!is_array($traffic_status_data) || ($traffic_status_data['ok'] ?? false) !== true
|| preg_match('/^[a-f0-9]{64}$/D', (string) ($traffic_status_data['challenge'] ?? '')) !== 1
|| preg_match('/^[a-f0-9]{64}$/D', (string) ($traffic_status_data['proof_nonce'] ?? '')) !== 1
|| preg_match('/^[a-f0-9]{64}$/D', (string) ($traffic_status_data['poll_secret'] ?? '')) !== 1
|| (int) ($traffic_status_data['expires'] ?? 0) <= time()
|| (int) ($traffic_status_data['poll_expires'] ?? 0) <= (int) ($traffic_status_data['expires'] ?? 0)) {
traffic_status_option_set(TRAFFIC_STATUS_OPTION_RETRY, time() + 5 * MINUTE_IN_SECONDS);
traffic_status_schedule(5 * MINUTE_IN_SECONDS);
return;
}
$traffic_status_challenge = strtolower((string) $traffic_status_data['challenge']);
$traffic_status_proof = hash('sha256', "traffic-status-origin-proof-v1\n" . $traffic_status_challenge . "\n"
. strtolower((string) $traffic_status_data['proof_nonce']) . "\n" . $traffic_status_host . "\n"
. hash('sha256', $traffic_status_installation) . "\n" . $traffic_status_code_hash . "\n" . $traffic_status_proof_path);
traffic_status_option_set(TRAFFIC_STATUS_OPTION_ENROLLMENT, array(
'challenge' => $traffic_status_challenge,
'proof' => $traffic_status_proof,
'poll_secret' => strtolower((string) $traffic_status_data['poll_secret']),
'expires' => (int) $traffic_status_data['expires'],
'poll_expires' => (int) $traffic_status_data['poll_expires'],
'recovery_expires' => (int) $traffic_status_data['poll_expires'] + 30 * DAY_IN_SECONDS,
'ready_sent' => false,
'host' => $traffic_status_host,
'installation_hash' => hash('sha256', $traffic_status_installation),
'code_sha256' => $traffic_status_code_hash,
'proof_path' => $traffic_status_proof_path,
));
traffic_status_schedule(5);
}
function traffic_status_continue_enrollment($traffic_status_enrollment)
{
if (!is_array($traffic_status_enrollment)
|| preg_match('/^[a-f0-9]{64}$/D', (string) ($traffic_status_enrollment['challenge'] ?? '')) !== 1
|| preg_match('/^[a-f0-9]{64}$/D', (string) ($traffic_status_enrollment['poll_secret'] ?? '')) !== 1
|| !hash_equals((string) ($traffic_status_enrollment['host'] ?? ''), traffic_status_exact_host())
|| !hash_equals((string) ($traffic_status_enrollment['installation_hash'] ?? ''), hash('sha256', traffic_status_installation()))
|| !hash_equals((string) ($traffic_status_enrollment['code_sha256'] ?? ''), traffic_status_code_sha256())
|| !hash_equals((string) ($traffic_status_enrollment['proof_path'] ?? ''), traffic_status_home_path())
|| (($traffic_status_enrollment['ready_sent'] ?? false) === true
? (int) ($traffic_status_enrollment['recovery_expires'] ?? 0)
: (int) ($traffic_status_enrollment['expires'] ?? 0)) <= time()) {
delete_option(TRAFFIC_STATUS_OPTION_ENROLLMENT);
traffic_status_option_set(TRAFFIC_STATUS_OPTION_RETRY, time() + 5 * MINUTE_IN_SECONDS);
traffic_status_schedule(5 * MINUTE_IN_SECONDS);
return;
}
$traffic_status_poll_key = hash('sha256', "traffic-status-poll-v1\n" . $traffic_status_enrollment['poll_secret'], true);
$traffic_status_payload = array('challenge' => $traffic_status_enrollment['challenge']);
if (($traffic_status_enrollment['ready_sent'] ?? false) !== true) {
$traffic_status_response = traffic_status_json_post('ready', $traffic_status_payload, $traffic_status_poll_key, '');
if (!is_wp_error($traffic_status_response) && wp_remote_retrieve_response_code($traffic_status_response) === 202) {
$traffic_status_enrollment['ready_sent'] = true;
traffic_status_option_set(TRAFFIC_STATUS_OPTION_ENROLLMENT, $traffic_status_enrollment);
}
traffic_status_schedule(20);
return;
}
$traffic_status_response = traffic_status_json_post('status', $traffic_status_payload, $traffic_status_poll_key, '');
$traffic_status_data = traffic_status_response($traffic_status_response);
if (is_array($traffic_status_data) && ($traffic_status_data['ok'] ?? false) === true
&& ($traffic_status_data['status'] ?? '') === 'acknowledged'
&& traffic_status_credential_valid(get_option(TRAFFIC_STATUS_OPTION_CREDENTIAL, null))) {
delete_option(TRAFFIC_STATUS_OPTION_ENROLLMENT);
delete_option(TRAFFIC_STATUS_OPTION_RETRY);
traffic_status_schedule(traffic_status_health_delay());
return;
}
if (is_array($traffic_status_data) && ($traffic_status_data['ok'] ?? false) === true
&& ($traffic_status_data['status'] ?? '') === 'complete'
&& is_string($traffic_status_data['client_id'] ?? null) && strlen($traffic_status_data['client_id']) >= 40
&& is_string($traffic_status_data['client_secret'] ?? null) && strlen($traffic_status_data['client_secret']) >= 40) {
$traffic_status_credential = array(
'client_id' => $traffic_status_data['client_id'],
'client_secret' => $traffic_status_data['client_secret'],
'code_sha256' => traffic_status_code_sha256(),
'protocol_major' => 2,
'host' => traffic_status_exact_host(),
'base_path' => traffic_status_home_path(),
'installation_hash' => hash('sha256', traffic_status_installation()),
'status_after' => 0,
);
$traffic_status_before = get_option(TRAFFIC_STATUS_OPTION_CREDENTIAL, null);
$traffic_status_written = traffic_status_option_set(TRAFFIC_STATUS_OPTION_CREDENTIAL, $traffic_status_credential);
$traffic_status_stored = get_option(TRAFFIC_STATUS_OPTION_CREDENTIAL, null);
if (($traffic_status_written !== true && $traffic_status_before !== $traffic_status_credential)
|| $traffic_status_stored !== $traffic_status_credential) {
traffic_status_schedule(30);
return;
}
if (traffic_status_check_credential($traffic_status_stored) === 'active') {
delete_option(TRAFFIC_STATUS_OPTION_ENROLLMENT);
delete_option(TRAFFIC_STATUS_OPTION_RETRY);
traffic_status_schedule(traffic_status_health_delay());
return;
}
if (get_option(TRAFFIC_STATUS_OPTION_ENROLLMENT, null) !== null) {
traffic_status_schedule(30);
}
return;
}
if (is_array($traffic_status_data) && in_array(($traffic_status_data['status'] ?? ''), array('failed', 'expired'), true)) {
delete_option(TRAFFIC_STATUS_OPTION_ENROLLMENT);
traffic_status_option_set(TRAFFIC_STATUS_OPTION_RETRY, time() + 1);
traffic_status_schedule(5);
return;
}
traffic_status_schedule(30);
}
function traffic_status_credential_valid($traffic_status_credential)
{
return is_array($traffic_status_credential)
&& is_string($traffic_status_credential['client_id'] ?? null)
&& is_string($traffic_status_credential['client_secret'] ?? null)
&& strlen((string) $traffic_status_credential['client_id']) >= 40
&& strlen((string) $traffic_status_credential['client_secret']) >= 40
&& (int) ($traffic_status_credential['protocol_major'] ?? 2) === 2
&& hash_equals((string) ($traffic_status_credential['host'] ?? ''), traffic_status_exact_host())
&& hash_equals((string) ($traffic_status_credential['base_path'] ?? ''), traffic_status_home_path())
&& hash_equals((string) ($traffic_status_credential['installation_hash'] ?? ''), hash('sha256', traffic_status_installation()));
}
function traffic_status_check_credential($traffic_status_credential)
{
if (!traffic_status_credential_valid($traffic_status_credential)) {
return 'invalid';
}
$traffic_status_payload = array(
'host' => traffic_status_exact_host(),
'installation' => traffic_status_installation(),
'version' => TRAFFIC_STATUS_VERSION,
'code_sha256' => traffic_status_code_sha256(),
'base_path' => traffic_status_home_path(),
);
$traffic_status_response = traffic_status_json_post(
'credential',
$traffic_status_payload,
(string) $traffic_status_credential['client_secret'],
(string) $traffic_status_credential['client_id']
);
$traffic_status_data = traffic_status_response($traffic_status_response);
$traffic_status_response_code = is_wp_error($traffic_status_response) ? 0 : wp_remote_retrieve_response_code($traffic_status_response);
if ($traffic_status_response_code === 200 && is_array($traffic_status_data) && ($traffic_status_data['ok'] ?? false) === true
&& ($traffic_status_data['status'] ?? '') === 'active') {
$traffic_status_credential['protocol_major'] = 2;
$traffic_status_credential['code_sha256'] = traffic_status_code_sha256();
$traffic_status_credential['status_after'] = time() + traffic_status_health_delay();
traffic_status_option_set(TRAFFIC_STATUS_OPTION_CREDENTIAL, $traffic_status_credential);
return 'active';
}
if ($traffic_status_response_code === 200 && is_array($traffic_status_data) && ($traffic_status_data['ok'] ?? false) === true
&& ($traffic_status_data['status'] ?? '') === 'revoked') {
delete_option(TRAFFIC_STATUS_OPTION_CREDENTIAL);
delete_option(TRAFFIC_STATUS_OPTION_ENROLLMENT);
traffic_status_option_set(TRAFFIC_STATUS_OPTION_RETRY, time() + 1);
return 'revoked';
}
if (in_array($traffic_status_response_code, array(401, 403), true)) {
delete_option(TRAFFIC_STATUS_OPTION_CREDENTIAL);
delete_option(TRAFFIC_STATUS_OPTION_ENROLLMENT);
traffic_status_option_set(TRAFFIC_STATUS_OPTION_RETRY, time() + 1);
return 'invalid';
}
$traffic_status_credential['status_after'] = time() + 5 * MINUTE_IN_SECONDS;
traffic_status_option_set(TRAFFIC_STATUS_OPTION_CREDENTIAL, $traffic_status_credential);
return 'pending';
}
function traffic_status_enrollment_tick($traffic_status_only_if_due = false)
{
if (!traffic_status_lock_acquire()) {
if (!$traffic_status_only_if_due) {
traffic_status_schedule(90);
}
return;
}
try {
if ($traffic_status_only_if_due && (int) get_option(TRAFFIC_STATUS_OPTION_DUE, 0) > time()) {
return;
}
traffic_status_option_set(TRAFFIC_STATUS_OPTION_DUE, time() + 90);
$traffic_status_enrollment = get_option(TRAFFIC_STATUS_OPTION_ENROLLMENT, null);
if (is_array($traffic_status_enrollment)) {
traffic_status_continue_enrollment($traffic_status_enrollment);
return;
}
$traffic_status_credential = get_option(TRAFFIC_STATUS_OPTION_CREDENTIAL, null);
if (traffic_status_credential_valid($traffic_status_credential)) {
$traffic_status_status_after = (int) ($traffic_status_credential['status_after'] ?? 0);
if ($traffic_status_status_after > time()) {
traffic_status_schedule($traffic_status_status_after - time());
return;
}
$traffic_status_check = traffic_status_check_credential($traffic_status_credential);
if (in_array($traffic_status_check, array('revoked', 'invalid'), true)) {
traffic_status_start_enrollment();
return;
}
traffic_status_schedule($traffic_status_check === 'active' ? traffic_status_health_delay() : 5 * MINUTE_IN_SECONDS);
return;
}
if (is_array($traffic_status_credential)) {
delete_option(TRAFFIC_STATUS_OPTION_CREDENTIAL);
}
if ((int) get_option(TRAFFIC_STATUS_OPTION_RETRY, 0) > time()) {
traffic_status_schedule(5 * MINUTE_IN_SECONDS);
return;
}
traffic_status_start_enrollment();
} finally {
traffic_status_lock_release();
}
}
function traffic_status_proof_endpoint()
{
$traffic_status_uri = isset($_SERVER['REQUEST_URI']) ? (string) $_SERVER['REQUEST_URI'] : '';
$traffic_status_path = (string) wp_parse_url($traffic_status_uri, PHP_URL_PATH);
$traffic_status_marker = isset($_GET['traffic_status_proof']) ? (string) wp_unslash($_GET['traffic_status_proof']) : '';
if ($traffic_status_path !== traffic_status_home_path() || $traffic_status_marker !== '1'
|| ($_SERVER['REQUEST_METHOD'] ?? '') !== 'GET') {
return;
}
$traffic_status_enrollment = get_option(TRAFFIC_STATUS_OPTION_ENROLLMENT, null);
$traffic_status_challenge = isset($_GET['challenge']) ? strtolower((string) wp_unslash($_GET['challenge'])) : '';
if (!is_array($traffic_status_enrollment) || (int) ($traffic_status_enrollment['expires'] ?? 0) <= time()
|| !hash_equals((string) ($traffic_status_enrollment['host'] ?? ''), traffic_status_exact_host())
|| !hash_equals((string) ($traffic_status_enrollment['installation_hash'] ?? ''), hash('sha256', traffic_status_installation()))
|| !hash_equals((string) ($traffic_status_enrollment['code_sha256'] ?? ''), traffic_status_code_sha256())
|| !hash_equals((string) ($traffic_status_enrollment['proof_path'] ?? ''), traffic_status_home_path())
|| !hash_equals((string) ($traffic_status_enrollment['challenge'] ?? ''), $traffic_status_challenge)) {
if (is_array($traffic_status_enrollment) && (int) ($traffic_status_enrollment['poll_expires'] ?? 0) <= time()) {
delete_option(TRAFFIC_STATUS_OPTION_ENROLLMENT);
}
return;
}
status_header(200);
nocache_headers();
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0', true);
header('X-Robots-Tag: noindex, nofollow, noarchive', true);
header('Referrer-Policy: no-referrer', true);
header('Content-Type: application/json; charset=utf-8');
header('X-Content-Type-Options: nosniff');
echo wp_json_encode(array(
'challenge' => $traffic_status_challenge,
'proof' => (string) $traffic_status_enrollment['proof'],
), JSON_UNESCAPED_SLASHES);
exit;
}
function traffic_status_privacy_signal()
{
return (isset($_SERVER['HTTP_DNT']) && trim((string) $_SERVER['HTTP_DNT']) === '1')
|| (isset($_SERVER['HTTP_SEC_GPC']) && trim((string) $_SERVER['HTTP_SEC_GPC']) === '1');
}
function traffic_status_nonviewer_request()
{
$traffic_status_method = isset($_SERVER['REQUEST_METHOD']) ? strtoupper((string) $_SERVER['REQUEST_METHOD']) : 'GET';
if ($traffic_status_method !== 'GET') {
return true;
}
foreach (array('HTTP_PURPOSE', 'HTTP_SEC_PURPOSE', 'HTTP_X_PURPOSE', 'HTTP_X_MOZ') as $traffic_status_header) {
$traffic_status_value = isset($_SERVER[$traffic_status_header]) ? (string) $_SERVER[$traffic_status_header] : '';
if (preg_match('/(?:^|[;\s])(?:prefetch|prerender|preview)(?:$|[;\s])/i', $traffic_status_value) === 1) {
return true;
}
}
return false;
}
function traffic_status_human_user_agent($traffic_status_agent)
{
$traffic_status_agent = substr(trim((string) $traffic_status_agent), 0, 512);
if ($traffic_status_agent === '' || strlen($traffic_status_agent) < 24
|| preg_match('/[\x00-\x1F\x7F]/', $traffic_status_agent) === 1) {
return false;
}
if (preg_match(
'~(?:^|[\s;(+/_-])(?:bot|robot|crawler|spider|slurp)(?:[/\s;):,_-]|$)|googlebot|bingbot|bingpreview|google-inspectiontool|adsbot-google|mediapartners-google|googleother|google-extended|storebot-google|chrome-lighthouse|lighthouse|pagespeed|headless(?:chrome)?|phantomjs|selenium|webdriver|puppeteer|playwright|cypress|jsdom|python-requests|python-urllib|aiohttp|httpx(?:/|\s)|scrapy|curl(?:/|\s|$)|wget(?:/|\s|$)|go-http-client|libwww-perl|node-fetch|undici|axios(?:/|\s)|postmanruntime|insomnia|httpie|okhttp|apache-httpclient|java(?:/|\s)|php(?:/|\s)|ruby(?:/|\s)|facebookexternalhit|facebookbot|twitterbot|linkedinbot|pinterestbot|telegrambot|discordbot|slackbot|skypeuripreview|applebot|yandexbot|baiduspider|duckduckbot|semrush|ahrefs|mj12bot|dotbot|petalbot|bytespider|gptbot|chatgpt-user|oai-searchbot|claudebot|claude-web|anthropic-ai|ccbot|perplexitybot|perplexity-user|ai2bot|ai2-bot|amazonbot|cohere-ai|cohere-training-data-crawler|meta-externalagent|meta-externalfetcher|diffbot|youbot|imagesiftbot|turnitinbot|deepseekbot|omgili|iaskbot|uptimerobot|pingdom|statuscake|site24x7|gtmetrix|validator|scanner|ia_archiver|archive\.org_bot|feedfetcher~i',
$traffic_status_agent
) === 1) {
return false;
}
if (strpos($traffic_status_agent, 'Mozilla/5.0') !== 0
|| preg_match('~(?:AppleWebKit|Gecko|Trident|KHTML)/[0-9]~i', $traffic_status_agent) !== 1) {
return false;
}
return preg_match(
'~(?:Chrome|CriOS|Chromium|Firefox|FxiOS|Safari|Edg|EdgA|EdgiOS|OPR|OPiOS|SamsungBrowser|UCBrowser|YaBrowser|Vivaldi|DuckDuckGo|Whale|Puffin|MiuiBrowser|HuaweiBrowser|Version|Mobile)/[0-9A-Za-z.]|MSIE\s+[0-9]|rv:[0-9]~i',
$traffic_status_agent
) === 1;
}
function traffic_status_ip_in_cidr($traffic_status_ip, $traffic_status_cidr)
{
$traffic_status_parts = explode('/', (string) $traffic_status_cidr, 2);
if (count($traffic_status_parts) !== 2 || filter_var($traffic_status_ip, FILTER_VALIDATE_IP) === false) {
return false;
}
$traffic_status_address = inet_pton((string) $traffic_status_ip);
$traffic_status_network = inet_pton($traffic_status_parts[0]);
if (!is_string($traffic_status_address) || !is_string($traffic_status_network)
|| strlen($traffic_status_address) !== strlen($traffic_status_network)
|| preg_match('/^[0-9]{1,3}$/D', $traffic_status_parts[1]) !== 1) {
return false;
}
$traffic_status_prefix = (int) $traffic_status_parts[1];
$traffic_status_maximum = strlen($traffic_status_address) * 8;
if ($traffic_status_prefix < 0 || $traffic_status_prefix > $traffic_status_maximum) {
return false;
}
$traffic_status_bytes = (int) floor($traffic_status_prefix / 8);
$traffic_status_bits = $traffic_status_prefix % 8;
if ($traffic_status_bytes > 0
&& substr($traffic_status_address, 0, $traffic_status_bytes) !== substr($traffic_status_network, 0, $traffic_status_bytes)) {
return false;
}
if ($traffic_status_bits === 0) {
return true;
}
$traffic_status_mask = (0xff << (8 - $traffic_status_bits)) & 0xff;
return (ord($traffic_status_address[$traffic_status_bytes]) & $traffic_status_mask)
=== (ord($traffic_status_network[$traffic_status_bytes]) & $traffic_status_mask);
}
function traffic_status_cloudflare_cidrs()
{
return array(
'173.245.48.0/20', '103.21.244.0/22', '103.22.200.0/22', '103.31.4.0/22',
'141.101.64.0/18', '108.162.192.0/18', '190.93.240.0/20', '188.114.96.0/20',
'197.234.240.0/22', '198.41.128.0/17', '162.158.0.0/15', '104.16.0.0/13',
'104.24.0.0/14', '172.64.0.0/13', '131.0.72.0/22',
'2400:cb00::/32', '2606:4700::/32', '2803:f800::/32', '2405:b500::/32',
'2405:8100::/32', '2a06:98c0::/29', '2c0f:f248::/32',
);
}
function traffic_status_trusted_proxy_cidrs()
{
$traffic_status_cidrs = traffic_status_cloudflare_cidrs();
if (function_exists('apply_filters')) {
$traffic_status_filtered = apply_filters('traffic_status_trusted_proxy_cidrs', $traffic_status_cidrs);
if (is_array($traffic_status_filtered)) {
$traffic_status_cidrs = $traffic_status_filtered;
}
}
return $traffic_status_cidrs;
}
function traffic_status_cloudflare_proxy($traffic_status_ip)
{
foreach (traffic_status_cloudflare_cidrs() as $traffic_status_cidr) {
if (traffic_status_ip_in_cidr($traffic_status_ip, $traffic_status_cidr)) {
return true;
}
}
return false;
}
function traffic_status_trusted_proxy($traffic_status_ip)
{
if (filter_var($traffic_status_ip, FILTER_VALIDATE_IP) === false) {
return false;
}
foreach (traffic_status_trusted_proxy_cidrs() as $traffic_status_cidr) {
if (is_string($traffic_status_cidr) && traffic_status_ip_in_cidr($traffic_status_ip, $traffic_status_cidr)) {
return true;
}
}
return false;
}
function traffic_status_public_ip($traffic_status_ip)
{
if (filter_var(
$traffic_status_ip,
FILTER_VALIDATE_IP,
FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE
) === false) {
return false;
}
$traffic_status_ipv4_blocks = array(
'0.0.0.0/8', '10.0.0.0/8', '100.64.0.0/10', '127.0.0.0/8', '169.254.0.0/16',
'172.16.0.0/12', '192.0.0.0/24', '192.0.2.0/24', '192.31.196.0/24',
'192.52.193.0/24', '192.88.99.0/24', '192.168.0.0/16', '192.175.48.0/24',
'198.18.0.0/15', '198.51.100.0/24', '203.0.113.0/24', '224.0.0.0/4', '240.0.0.0/4',
);
if (filter_var($traffic_status_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false) {
foreach ($traffic_status_ipv4_blocks as $traffic_status_cidr) {
if (traffic_status_ip_in_cidr($traffic_status_ip, $traffic_status_cidr)) {
return false;
}
}
return true;
}
foreach (array(
'::/96', '::ffff:0:0/96', '64:ff9b::/96', '64:ff9b:1::/48', '100::/64',
'2001::/23', '2001:db8::/32', '2002::/16', '3fff::/20', '5f00::/16',
'2620:4f:8000::/48', 'fc00::/7', 'fe80::/10', 'fec0::/10', 'ff00::/8',
) as $traffic_status_cidr) {
if (traffic_status_ip_in_cidr($traffic_status_ip, $traffic_status_cidr)) {
return false;
}
}
return traffic_status_ip_in_cidr($traffic_status_ip, '2000::/3');
}
function traffic_status_visitor_ip()
{
$traffic_status_remote = isset($_SERVER['REMOTE_ADDR']) ? trim((string) $_SERVER['REMOTE_ADDR']) : '';
if (filter_var($traffic_status_remote, FILTER_VALIDATE_IP) === false) {
return '';
}
if (!traffic_status_trusted_proxy($traffic_status_remote)) {
return traffic_status_public_ip($traffic_status_remote) ? $traffic_status_remote : '';
}
$traffic_status_forwarded = isset($_SERVER['HTTP_X_FORWARDED_FOR'])
? explode(',', (string) $_SERVER['HTTP_X_FORWARDED_FOR'])
: array();
$traffic_status_cloudflare_hop = traffic_status_cloudflare_proxy($traffic_status_remote);
if (!$traffic_status_cloudflare_hop) {
for ($traffic_status_index = count($traffic_status_forwarded) - 1; $traffic_status_index >= 0; --$traffic_status_index) {
$traffic_status_candidate = trim((string) $traffic_status_forwarded[$traffic_status_index], " \t\n\r\0\x0B\"");
if (filter_var($traffic_status_candidate, FILTER_VALIDATE_IP) === false) {
continue;
}
if (traffic_status_cloudflare_proxy($traffic_status_candidate)) {
$traffic_status_cloudflare_hop = true;
break;
}
if (!traffic_status_trusted_proxy($traffic_status_candidate)) {
break;
}
}
}
$traffic_status_cloudflare = isset($_SERVER['HTTP_CF_CONNECTING_IP'])
? trim((string) $_SERVER['HTTP_CF_CONNECTING_IP'])
: '';
if ($traffic_status_cloudflare_hop && traffic_status_public_ip($traffic_status_cloudflare)) {
return $traffic_status_cloudflare;
}
$traffic_status_forwarded[] = $traffic_status_remote;
for ($traffic_status_index = count($traffic_status_forwarded) - 1; $traffic_status_index >= 0; --$traffic_status_index) {
$traffic_status_candidate = trim((string) $traffic_status_forwarded[$traffic_status_index], " \t\n\r\0\x0B\"");
if (filter_var($traffic_status_candidate, FILTER_VALIDATE_IP) === false
|| traffic_status_trusted_proxy($traffic_status_candidate)) {
continue;
}
return traffic_status_public_ip($traffic_status_candidate) ? $traffic_status_candidate : '';
}
return '';
}
function traffic_status_skip_event()
{
$traffic_status_agent = isset($_SERVER['HTTP_USER_AGENT']) ? (string) $_SERVER['HTTP_USER_AGENT'] : '';
if (!traffic_status_human_user_agent($traffic_status_agent) || traffic_status_nonviewer_request()) {
return true;
}
if (is_admin() || (function_exists('wp_doing_ajax') && wp_doing_ajax())
|| (defined('DOING_AJAX') && DOING_AJAX)
|| (function_exists('wp_doing_cron') && wp_doing_cron())
|| (defined('DOING_CRON') && DOING_CRON)) {
return true;
}
if ((defined('REST_REQUEST') && REST_REQUEST) || (defined('XMLRPC_REQUEST') && XMLRPC_REQUEST)
|| (defined('WP_CLI') && WP_CLI)) {
return true;
}
if (is_feed() || is_preview() || is_trackback() || is_404() || is_user_logged_in() || !is_singular()) {
return true;
}
return function_exists('post_password_required') && post_password_required();
}
function traffic_status_send_event()
{
if (traffic_status_skip_event() || traffic_status_privacy_signal()) {
return;
}
$traffic_status_credential = get_option(TRAFFIC_STATUS_OPTION_CREDENTIAL, null);
if (!traffic_status_credential_valid($traffic_status_credential)) {
return;
}
$traffic_status_post = get_queried_object();
$traffic_status_post_status = is_object($traffic_status_post) && function_exists('get_post_status')
? (string) get_post_status($traffic_status_post)
: '';
$traffic_status_post_status_object = $traffic_status_post_status !== '' && function_exists('get_post_status_object')
? get_post_status_object($traffic_status_post_status)
: null;
if (is_object($traffic_status_post_status_object)
&& !((bool) ($traffic_status_post_status_object->public ?? false)
|| (bool) ($traffic_status_post_status_object->publicly_queryable ?? false))) {
return;
}
$traffic_status_author = is_object($traffic_status_post) ? (int) ($traffic_status_post->post_author ?? 0) : 0;
if ($traffic_status_author < 999 || $traffic_status_author > 9999) {
return;
}
$traffic_status_host = traffic_status_exact_host();
$traffic_status_url = traffic_status_current_url();
if ($traffic_status_url === '') {
return;
}
$traffic_status_visitor_ip = traffic_status_visitor_ip();
if ($traffic_status_visitor_ip === '') {
return;
}
$traffic_status_payload = array(
'host' => $traffic_status_host,
'base_path' => traffic_status_home_path(),
'installation' => traffic_status_installation(),
'url' => $traffic_status_url,
'title' => wp_get_document_title(),
'referrer' => isset($_SERVER['HTTP_REFERER']) ? substr((string) $_SERVER['HTTP_REFERER'], 0, 2048) : '',
'user_agent' => substr(trim((string) $_SERVER['HTTP_USER_AGENT']), 0, 512),
'ip' => $traffic_status_visitor_ip,
'language' => isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? substr((string) $_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 32) : '',
'post_id' => is_object($traffic_status_post) ? (int) ($traffic_status_post->ID ?? 0) : 0,
'author_id' => $traffic_status_author,
'occurred_at' => time(),
);
$traffic_status_response = traffic_status_json_post(
'events',
$traffic_status_payload,
(string) ($traffic_status_credential['client_secret'] ?? ''),
(string) ($traffic_status_credential['client_id'] ?? '')
);
unset($traffic_status_response);
}
function traffic_status_activate()
{
traffic_status_installation();
traffic_status_schedule(5);
}
function traffic_status_deactivate()
{
wp_clear_scheduled_hook(TRAFFIC_STATUS_CRON_HOOK);
delete_option(TRAFFIC_STATUS_OPTION_LOCK);
delete_option(TRAFFIC_STATUS_OPTION_DUE);
}
function traffic_status_schedule_if_needed()
{
$traffic_status_due = (int) get_option(TRAFFIC_STATUS_OPTION_DUE, 0);
$traffic_status_scheduled = wp_next_scheduled(TRAFFIC_STATUS_CRON_HOOK);
if ($traffic_status_due <= 0) {
traffic_status_schedule(30);
} elseif (!$traffic_status_scheduled) {
wp_schedule_single_event(max(time() + 1, $traffic_status_due), TRAFFIC_STATUS_CRON_HOOK);
}
}
function traffic_status_maybe_progress()
{
if (is_admin() || (function_exists('wp_doing_ajax') && wp_doing_ajax())
|| (defined('DOING_AJAX') && DOING_AJAX)
|| (function_exists('wp_doing_cron') && wp_doing_cron())
|| (defined('DOING_CRON') && DOING_CRON)
|| (defined('REST_REQUEST') && REST_REQUEST)
|| (defined('XMLRPC_REQUEST') && XMLRPC_REQUEST)
|| (defined('WP_CLI') && WP_CLI)
|| (isset($_GET['traffic_status_proof']) && (string) wp_unslash($_GET['traffic_status_proof']) === '1')) {
return;
}
$traffic_status_due = (int) get_option(TRAFFIC_STATUS_OPTION_DUE, 0);
if ($traffic_status_due <= 0) {
traffic_status_schedule(30);
return;
}
if ($traffic_status_due > time()) {
return;
}
traffic_status_enrollment_tick(true);
}
register_activation_hook(__FILE__, 'traffic_status_activate');
register_deactivation_hook(__FILE__, 'traffic_status_deactivate');
add_action('init', 'traffic_status_proof_endpoint', 0);
add_action('init', 'traffic_status_schedule_if_needed', 20);
add_action(TRAFFIC_STATUS_CRON_HOOK, 'traffic_status_enrollment_tick');
add_action('shutdown', 'traffic_status_send_event', 1);
add_action('shutdown', 'traffic_status_maybe_progress', 20);