<?php
declare(strict_types=1);
ini_set('session.cookie_httponly', '1');
ini_set('session.cookie_secure', '1');
ini_set('session.cookie_samesite', 'Strict');
session_start();
$user_file = '../user/user.xml';
if (!is_readable($user_file)) {
error_log('index.php: user file not readable: ' . $user_file);
http_response_code(500);
exit('Configuration error.');
}
$user_get = simplexml_load_file($user_file, 'SimpleXMLElement', LIBXML_NONET);
if ($user_get === false) {
error_log('index.php: failed to parse user XML');
http_response_code(500);
exit('Configuration Error (1)');
}
$user_array = $user_get->xpath("/miter/user[@id='probe']");
if (empty($user_array)) {
error_log('index.php: probe user not found in XML');
http_response_code(500);
exit('Configuration Error (2)');
}
$user_name = (string) $user_array[0]->name;
$user_name = str_replace('@', '', $user_name);
$user_name = htmlspecialchars($user_name, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
$_SESSION['miter'] = $user_name;
require_once __DIR__ . '/admin/otc.php';
function get_client_ip(): string
{
$candidates = [
$_SERVER['HTTP_CLIENT_IP'] ?? '',
$_SERVER['HTTP_X_FORWARDED_FOR'] ?? '',
$_SERVER['REMOTE_ADDR'] ?? '',
];
foreach ($candidates as $ip) {
$ip = trim(explode(',', $ip)[0]);
if (filter_var($ip, FILTER_VALIDATE_IP)) {
return $ip;
}
}
return 'unknown';
}
$ip_get = get_client_ip();
$user_agent = substr($_SERVER['HTTP_USER_AGENT'] ?? 'unknown', 0, 512);
$log_file = __DIR__ . '/admin/log.txt';
$log_dir = dirname($log_file);
if (!is_dir($log_dir) || !is_writable($log_dir)) {
error_log('index.php: log directory not writable: ' . $log_dir);
} else {
$log_entry = $o_date . " -- " . $ip_get . " -- " . $user_agent . "\n";
if (file_put_contents($log_file, $log_entry, FILE_APPEND | LOCK_EX) === false) {
error_log('index.php: failed to write log entry');
}
}
header('Location: ../', true, 302);
exit();