2.3 KiB
2.3 KiB
审计 — IP-only 服务器自动补全站点域名
范围(文件清单)
| 文件 | 变更 |
|---|---|
server/utils/site_host.py |
新增:IP 判定与站点 host 解析 |
server/utils/nginx_domain_detect.py |
新增:远程 nginx 域名探测命令 |
server/application/server_batch_common.py |
detect_and_save_site_url / update_server_site_url |
server/application/services/ip_domain_detect_schedule.py |
新增:23:30 定时筛选与触发 |
server/background/ip_domain_detect_loop.py |
新增:background loop |
server/application/services/server_batch_service.py |
batch op detect-domain |
server/config.py |
IP_DOMAIN_DETECT_* 配置 |
server/main.py |
注册 loop |
tests/test_site_host.py |
单元测试 |
tests/test_nginx_domain_detect.py |
单元测试 |
tests/test_ip_domain_detect_schedule.py |
单元测试 |
server/application/services/btpanel_service.py |
同批未提交:宝塔临时登录 TTL |
server/infrastructure/btpanel/constants.py |
同上 |
server/infrastructure/btpanel/ssh_login.py |
同上 |
tests/test_btpanel_temp_login_ttl.py |
同上 |
Step 3 规则扫描
| H | 规则 | 结论 |
|---|---|---|
| H1 | 远程 shell 参数须 shlex.quote |
PASS — target_hint 已 quote |
| H2 | 不改 SSH domain 字段 |
PASS — 仅写 extra_attrs.site_url |
| H3 | 非 root SSH 仍 sudo_wrap |
PASS — 沿用 detect-path 模式 |
| H4 | 未静默吞 SSH 错误 | PASS — 无 stdout 返回明确错误 |
| H5 | 每日 Redis 去重防重复 batch | PASS — already_ran_today |
Closure
| H | 判定 | 依据 |
|---|---|---|
| H1 | SAFE | nginx_domain_detect.py shlex.quote(hint) |
| H2 | SAFE | update_server_site_url 只 merge extra_attrs |
| H3 | SAFE | detect_and_save_site_url 调用 sudo_wrap |
| H4 | SAFE | 未找到 nginx 站点域名 |
| H5 | SAFE | ip_domain_detect_schedule.py Redis key |
DoD
- pytest tests/test_site_host.py tests/test_nginx_domain_detect.py tests/test_ip_domain_detect_schedule.py
- changelog 2026-06-24-ip-domain-detect-schedule.md
- 设计文档 specs + plans
验证
.venv/bin/pytest tests/test_site_host.py tests/test_nginx_domain_detect.py tests/test_ip_domain_detect_schedule.py -q