diff --git a/admin/src/AdminAuth.php b/admin/src/AdminAuth.php index 6789878..b20b914 100644 --- a/admin/src/AdminAuth.php +++ b/admin/src/AdminAuth.php @@ -304,14 +304,13 @@ class AdminAuth mkdir($dir, 0755, true); } $timestamp = date('Y-m-d H:i:s'); - if (class_exists('RequestLogger')) { - $ip = RequestLogger::getClientIp(); - } else { - $ip = $_SERVER['HTTP_CF_CONNECTING_IP'] ?? $_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] ?? 'cli'; - if (($commaPos = strpos($ip, ',')) !== false) { - $ip = trim(substr($ip, 0, $commaPos)); + if (!class_exists('RequestLogger')) { + $loggerClass = __DIR__ . '/../../cms/core/class/RequestLogger.php'; + if (file_exists($loggerClass)) { + require_once $loggerClass; } } + $ip = class_exists('RequestLogger') ? RequestLogger::getClientIp() : ($_SERVER['REMOTE_ADDR'] ?? '127.0.0.1'); file_put_contents($logFile, "[{$timestamp}] [{$level}] [{$ip}] {$message}\n", FILE_APPEND); } } diff --git a/cms/core/class/CodePressCMS.php b/cms/core/class/CodePressCMS.php index 6a7eb4a..48b8bfd 100644 --- a/cms/core/class/CodePressCMS.php +++ b/cms/core/class/CodePressCMS.php @@ -478,9 +478,13 @@ class CodePressCMS { $created = date('d-m-Y H:i', $createdTimestamp); } + // Show created date only if it is distinctly different from modified date + $showCreated = ($created !== $modified); + return [ 'created' => $created, 'modified' => $modified, + 'show_created' => $showCreated, 'size' => $this->formatFileSize($stats['size']) ]; } @@ -1151,10 +1155,12 @@ class CodePressCMS { if (isset($page['file_info'])) { $templateData['created'] = htmlspecialchars($page['file_info']['created']); $templateData['modified'] = htmlspecialchars($page['file_info']['modified']); + $templateData['show_created'] = !empty($page['file_info']['show_created']); $templateData['file_info_block'] = true; } else { $templateData['created'] = ''; $templateData['modified'] = ''; + $templateData['show_created'] = false; $templateData['file_info_block'] = false; } diff --git a/cms/core/class/RequestLogger.php b/cms/core/class/RequestLogger.php index ab01913..2fc79bd 100644 --- a/cms/core/class/RequestLogger.php +++ b/cms/core/class/RequestLogger.php @@ -25,29 +25,48 @@ class RequestLogger public static function getClientIp(): string { - $headers = [ + $headerKeys = [ 'HTTP_CF_CONNECTING_IP', 'HTTP_X_REAL_IP', 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', + 'HTTP_X_FORWARDED', + 'HTTP_FORWARDED_FOR', + 'HTTP_FORWARDED', 'REMOTE_ADDR', ]; - foreach ($headers as $header) { - if (!empty($_SERVER[$header])) { - $rawIp = $_SERVER[$header]; - if (str_contains($rawIp, ',')) { - $ips = explode(',', $rawIp); - $rawIp = trim($ips[0]); - } - $rawIp = trim($rawIp); - if (filter_var($rawIp, FILTER_VALIDATE_IP) !== false) { - return $rawIp; + // Pass 1: Prioritize valid PUBLIC IP addresses (skips 127.0.0.1, 10.x, 172.x, 192.168.x proxy/internal IPs) + foreach ($headerKeys as $key) { + if (empty($_SERVER[$key])) continue; + + $value = $_SERVER[$key]; + $ips = str_contains($value, ',') ? explode(',', $value) : [$value]; + + foreach ($ips as $rawIp) { + $ip = trim($rawIp); + if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { + return $ip; } } } - return $_SERVER['REMOTE_ADDR'] ?? 'cli'; + // Pass 2: Fallback for local development environments + foreach ($headerKeys as $key) { + if (empty($_SERVER[$key])) continue; + + $value = $_SERVER[$key]; + $ips = str_contains($value, ',') ? explode(',', $value) : [$value]; + + foreach ($ips as $rawIp) { + $ip = trim($rawIp); + if (filter_var($ip, FILTER_VALIDATE_IP) !== false) { + return $ip; + } + } + } + + return $_SERVER['REMOTE_ADDR'] ?? '127.0.0.1'; } public static function detectVisitorInfo(string $ua, string $user = ''): array diff --git a/cms/templates/assets/footer.mustache b/cms/templates/assets/footer.mustache index 70d1c0a..b707437 100644 --- a/cms/templates/assets/footer.mustache +++ b/cms/templates/assets/footer.mustache @@ -9,10 +9,12 @@ {{page_title}} {{#file_info_block}} + {{#show_created}} - {{created}} - - {{modified}} + {{created}} + {{/show_created}} + + {{modified}} {{/file_info_block}}