getMessage();
}
}
// 处理配置提交
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save_config'])) {
// 检查是否已验证
if (!isset($_SESSION['authenticated'])) {
$globalError = '请先登录';
} else {
try {
// 获取表单数据
$redirectUrl = trim($_POST['redirectUrl'] ?? '');
$newUsername = trim($_POST['username'] ?? '');
$newPassword = trim($_POST['new_password'] ?? '');
$confirmPassword = trim($_POST['confirm_password'] ?? '');
$currentPassword = trim($_POST['current_password'] ?? ''); // 新增:当前密码字段
// 验证数据
$errors = [];
if (empty($redirectUrl)) {
$errors[] = '请输入重定向URL';
} elseif (!filter_var($redirectUrl, FILTER_VALIDATE_URL)) {
$errors[] = '重定向URL格式无效';
}
if (empty($newUsername)) {
$errors[] = '请输入用户名';
}
// 新增:验证当前密码
if (empty($currentPassword)) {
$errors[] = '请输入当前密码进行验证';
} elseif ($currentPassword !== ($config['password'] ?? '') && $currentPassword !== ($_SESSION['auth_pass'] ?? '')) {
$errors[] = '当前密码验证失败';
}
if (!empty($newPassword) || !empty($confirmPassword)) {
if (empty($newPassword)) {
$errors[] = '请输入新密码';
} elseif (empty($confirmPassword)) {
$errors[] = '请确认新密码';
} elseif ($newPassword !== $confirmPassword) {
$errors[] = '新密码和确认密码不匹配';
}
}
// 如果没有验证错误,保存配置
if (empty($errors)) {
// 更新配置
$config['redirectUrl'] = $redirectUrl;
$config['username'] = $newUsername;
// 只有在填写了新密码时才更新密码
if (!empty($newPassword)) {
$config['password'] = $newPassword;
}
// 写入配置文件
if (file_put_contents($configFile, json_encode($config, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)) !== false) {
$success = '配置已成功更新';
// 更新会话认证信息
$_SESSION['auth_user'] = $newUsername;
if (!empty($newPassword)) {
$_SESSION['auth_pass'] = $newPassword;
}
// 保持会话状态
$_SESSION['authenticated'] = true;
} else {
$formError = '无法写入配置文件';
}
} else {
$formError = implode('
', $errors);
}
} catch (Exception $e) {
$formError = '处理请求时发生错误: ' . $e->getMessage();
}
}
}
// 退出登录
if (isset($_GET['logout'])) {
// 清除会话中的所有变量
$_SESSION = array();
// 如果使用cookie来存储会话ID,删除cookie
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(
session_name(),
'',
time() - 42000,
$params["path"],
$params["domain"],
$params["secure"],
$params["httponly"]
);
}
// 销毁会话
session_destroy();
// 重定向到当前页面,清除URL中的logout参数
header("Location: " . $_SERVER['PHP_SELF']);
exit;
}
?>