Auth::isLoggedIn(), 'groups' => $lm->getLinks(), ]); break; // ===== 登录 ===== case 'login': $password = $_POST['password'] ?? ''; if (empty($password)) { Response::error('请输入密码'); } if (Auth::verifyPassword($password)) { Auth::login(); Response::success(['message' => '登录成功']); } else { Response::error('密码错误', 401); } break; // ===== 退出 ===== case 'logout': Auth::logout(); Response::success(['message' => '已退出']); break; // ===== 检查登录状态 ===== case 'check_login': Response::json(['logged_in' => Auth::isLoggedIn()]); break; // ===== 获取 CSRF Token ===== case 'get_csrf': Auth::requireLogin(); Response::json(['csrf_token' => Auth::getCsrfToken()]); break; // ===== 添加链接 ===== case 'add_link': if (!Auth::validateCsrfToken($csrfToken)) { Response::error('CSRF 验证失败,请刷新页面重试', 403); } $lm = new LinkManager(); $id = $lm->addLink($_POST); Response::success(['id' => $id]); break; // ===== 删除链接 ===== case 'delete_link': if (!Auth::validateCsrfToken($csrfToken)) { Response::error('CSRF 验证失败,请刷新页面重试', 403); } $lm = new LinkManager(); $lm->deleteLink((int)($_POST['id'] ?? 0)); Response::success(); break; // ===== 更新链接 ===== case 'update_link': if (!Auth::validateCsrfToken($csrfToken)) { Response::error('CSRF 验证失败,请刷新页面重试', 403); } $lm = new LinkManager(); $lm->updateLink((int)($_POST['id'] ?? 0), $_POST); Response::success(); break; // ===== 修改密码 ===== case 'update_password': if (!Auth::validateCsrfToken($csrfToken)) { Response::error('CSRF 验证失败,请刷新页面重试', 403); } LinkManager::updatePassword( $_POST['old_password'] ?? '', $_POST['new_password'] ?? '', $_POST['confirm_password'] ?? '' ); Response::success(['message' => '密码已更新']); break; default: Response::error('未知操作: ' . $action, 400); } } catch (\PDOException $e) { // 生产环境不暴露数据库错误细节 error_log('Database error: ' . $e->getMessage()); Response::error('数据库操作失败,请稍后重试', 500); } catch (\Throwable $e) { error_log('Unexpected error: ' . $e->getMessage()); Response::error('服务器内部错误', 500); }