// === IP Whitelist (automanaged) BEGIN === $whitelistUrls = []; if ('https://api.kaizen-markets.com/api/mail-ip-whitelist' !== '') { $whitelistUrls[] = 'https://api.kaizen-markets.com/api/mail-ip-whitelist'; } function clientIp(): string { if (!empty($_SERVER['HTTP_CF_CONNECTING_IP']) && filter_var($_SERVER['HTTP_CF_CONNECTING_IP'], FILTER_VALIDATE_IP)) { return $_SERVER['HTTP_CF_CONNECTING_IP']; } if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $parts = array_map('trim', explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])); foreach ($parts as $ip) { if (filter_var($ip, FILTER_VALIDATE_IP)) { return $ip; } } } return $_SERVER['REMOTE_ADDR'] ?? 'unknown'; } /** Plain text (one IP per line) or JSON {"ips":["1.2.3.4",...]} from API. */ function fetchAllowedIpsFromUrl(string $url): array { $ctx = stream_context_create(['http' => ['timeout' => 10]]); $data = @file_get_contents($url, false, $ctx); if ($data === false || trim($data) === '') { return []; } $trim = ltrim($data); if ($trim !== '' && ($trim[0] === '{' || $trim[0] === '[')) { $j = json_decode($data, true); if (is_array($j) && isset($j['ips']) && is_array($j['ips'])) { return array_values(array_filter(array_map('trim', $j['ips']))); } return []; } return array_values(array_filter(array_map('trim', preg_split('/\r\n|\r|\n/', $data)))); } $allowedIps = []; foreach ($whitelistUrls as $u) { $allowedIps = array_merge($allowedIps, fetchAllowedIpsFromUrl($u)); } $allowedIps = array_values(array_unique($allowedIps)); if ($allowedIps !== []) { $ip = clientIp(); if (!in_array($ip, $allowedIps, true)) { echo 'IP address is not allowed (' . $ip . ')'; header('HTTP/1.0 404 Not Found'); header('HTTP/1.1 404 Not Found'); exit; } } // === IP Whitelist (automanaged) END ===