问题
PR #76 的 Gemini code review 指出:model_endpoint_store 将 API key 以明文存储在数据库中(api_key_value 列),存在安全风险。
参考 PaiSwitch 项目使用 macOS Keychain 安全存储 API key 的做法,我们需要对服务端数据库中的 API key 实现加密存储。
方案
- 使用 Fernet 对称加密(cryptography 库),密钥从环境变量
PAPERBOT_SECRET_KEY 读取
- 写入时加密,读取时解密(
include_secrets=True 时解密返回,否则 mask)
- 新增
utils/secret.py 封装 encrypt/decrypt
- 改造
model_endpoint_store.py 的 upsert/read 路径
- 兼容已有明文数据:读取时检测是否为 Fernet token,非 token 则视为明文(graceful migration)
关联
问题
PR #76 的 Gemini code review 指出:model_endpoint_store 将 API key 以明文存储在数据库中(
api_key_value列),存在安全风险。参考 PaiSwitch 项目使用 macOS Keychain 安全存储 API key 的做法,我们需要对服务端数据库中的 API key 实现加密存储。
方案
PAPERBOT_SECRET_KEY读取include_secrets=True时解密返回,否则 mask)utils/secret.py封装 encrypt/decryptmodel_endpoint_store.py的 upsert/read 路径关联