P0 安全修复: - 添加 IP 信任链验证,防止 X-Forwarded-For 伪造攻击 - 导出验证 token 增加 IP 和 User-Agent 绑定校验 - 改用请求头传递导出 token,避免 URL 泄露 P1 改进: - 错误响应自动使用正确的 HTTP 状态码(400/500) - 4xx 错误使用 WARNING 日志级别,5xx 使用 ERROR P2 文档更新: - 更新 CLAUDE.md 架构说明,体现 controllers 层 - 添加 TRUSTED_PROXIES 和 PROXY_FIX_ENABLED 配置说明 - 修正登录锁定时长为 5 分钟 P3 工程卫生: - 清理乱码字符 - 删除意外创建的 nul 文件 测试修复: - 更新测试以适应新的 HTTP 状态码行为 - 添加测试前清理登录限制记录的逻辑 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
import importlib
|
||
import os
|
||
import sys
|
||
import tempfile
|
||
from pathlib import Path
|
||
|
||
_TEMP_DIR = tempfile.TemporaryDirectory(prefix="outlookEmail-tests-")
|
||
_DB_PATH = Path(_TEMP_DIR.name) / "test.db"
|
||
|
||
|
||
def import_web_app_module():
|
||
"""
|
||
以"可测试"的方式导入 web_outlook_app:
|
||
- 注入必要环境变量(SECRET_KEY / DATABASE_PATH 等)
|
||
- 禁用调度器自启动,避免测试期间启动后台线程
|
||
- 将 DB 指向临时文件,避免污染本地 data/
|
||
"""
|
||
os.environ["SECRET_KEY"] = "test-secret-key-32bytes-minimum-0000000000000000"
|
||
os.environ["LOGIN_PASSWORD"] = "testpass123" # >= 8
|
||
os.environ["SCHEDULER_AUTOSTART"] = "false"
|
||
os.environ["DATABASE_PATH"] = str(_DB_PATH)
|
||
|
||
if "web_outlook_app" in sys.modules:
|
||
return sys.modules["web_outlook_app"]
|
||
|
||
module = importlib.import_module("web_outlook_app")
|
||
|
||
# 测试配置:禁用 CSRF(避免额外 token 依赖),开启 TESTING
|
||
module.app.config.update(
|
||
TESTING=True,
|
||
WTF_CSRF_ENABLED=False,
|
||
WTF_CSRF_CHECK_DEFAULT=False,
|
||
)
|
||
return module
|
||
|
||
|
||
def clear_login_attempts():
|
||
"""清理登录限制记录,避免测试间互相影响"""
|
||
from outlook_web.db import get_db
|
||
try:
|
||
db = get_db()
|
||
db.execute("DELETE FROM login_attempts")
|
||
db.commit()
|
||
except Exception:
|
||
pass
|
||
|