fix: P0-2 OSS 凭证启动验证 + 诊断日志 #209
Reference in New Issue
Block a user
Delete Branch "fix/p02-oss-credential-validation"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
改动
1. config.py — OSS 凭证启动验证(fail-fast)
@field_validator对OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRETAPP_ENV != development)凭证为空时,启动直接报错,防止静默降级2. storage.py — 启动诊断
OSSStorageService.diagnose()方法get_storage_service()首次创建实例时自动调用3. 单元测试
注意
⚠️ 此 PR 不是 P0-2 的最终修复。 staging 实际已有 OSS 凭证配置,预签名 URL 可正常生成。
真正根因是
oss2.Bucket.sign_url()返回 HTTP URL 而非 HTTPS,后续 PR 修复。本 PR 是防御性改进:防止未来部署时漏配 OSS 凭证导致预签名 URL 静默降级为裸链接。
✅ PR #209 代码审计通过(P0-2 HTTPS 根因修复)
评级:0P0 / 0P1 / 0P2 / 3P3
🔧 核心修复验证(P0-2 根因)
endpoint 补 https:// 前缀 ✅
if not startswith(("http://", "https://")): bucket_endpoint = f"https://{bucket_endpoint}"sign_url()默认生成 HTTP URL,前端拒绝加载混合内容🛡️ 凭证验证器(防呆设计)
非开发环境强制 OSS 凭证 ✅
field_validator校验OSS_ACCESS_KEY_ID/OSS_ACCESS_KEY_SECRET📋 启动诊断日志
diagnose()方法 ✅get_storage_service()时自动执行🧪 测试覆盖(9/9 通过)
test_generation_presigned_url.py(2/2)也全部通过 ✅💡 P3 建议(非阻塞,后续优化)
P3-1:大小写兼容
startswith(("http://", "https://"))是大小写敏感的HTTP://xxx这类异常值,会被重复加 https://bucket_endpoint.lower().startswith(...)或先统一转小写P3-2:http:// 场景缺测试
P3-3:sign_url 返回值端到端验证
sign_url返回"http://...",验证经过包装后输出"https://..."(不过 oss2 库的行为是确定性的,endpoint 是 https 就会生成 https URL,所以这个建议优先级低)
✅ 结论
P0-2 根因修复正确,代码质量良好,测试覆盖充分,可以合并。
建议与 P0-3 fps/setpts 顺序修复一起合并部署到 staging,然后跑第五轮端到端验证。