fix: audit fixes — treatment sync, avatar upload, code consistency

- Always sync treatment end (not just early stop), pass start/end times
- treatment-done uses api.syncTreatment instead of raw http.post
- Move getApp() from module level to onLoad in treatment-done
- Avatar upload only returns URL, no longer updates profile directly
- COS CDN domain configurable via COS_CDN_DOMAIN env var
- Fix operator precedence in request.js token expiry check
- Remove unused result variable from COS putObject
这个提交包含在:
Guoguo
2026-05-07 06:36:28 -07:00
父节点 61e1e06ec1
当前提交 c95d47e0c1
修改 5 个文件,包含 17 行新增23 行删除
+2 -1
查看文件
@@ -15,7 +15,8 @@ const config = {
secretId: process.env.TENCENT_SECRET_ID,
secretKey: process.env.TENCENT_SECRET_KEY,
bucket: process.env.COS_BUCKET || 'jw-bucket-1426323813',
region: process.env.COS_REGION || process.env.TENCENT_REGION || 'ap-guangzhou'
region: process.env.COS_REGION || process.env.TENCENT_REGION || 'ap-guangzhou',
cdnDomain: process.env.COS_CDN_DOMAIN || 'tx.vsai.net.cn'
},
wechat: {
appid: process.env.WECHAT_APPID,
+2 -3
查看文件
@@ -41,7 +41,7 @@ router.post('/user/avatar', requireUser, upload.single('file'), wrap(async (req,
const ext = (req.file.originalname || '').split('.').pop() || 'jpg'
const key = 'avatars/' + req.user.user_id + '_' + Date.now() + '.' + ext
const cos = new COS({ SecretId: config.cos.secretId, SecretKey: config.cos.secretKey })
const result = await new Promise((resolve, reject) => {
await new Promise((resolve, reject) => {
cos.putObject({
Bucket: config.cos.bucket,
Region: config.cos.region,
@@ -50,8 +50,7 @@ router.post('/user/avatar', requireUser, upload.single('file'), wrap(async (req,
ContentType: req.file.mimetype
}, (err, data) => err ? reject(err) : resolve(data))
})
const avatarUrl = 'https://tx.vsai.net.cn/' + key
await userDao.updateProfile(req.user.user_id, { nickname: null, avatar: avatarUrl, gender: null })
const avatarUrl = 'https://' + (config.cos.cdnDomain || 'tx.vsai.net.cn') + '/' + key
res.json(ok({ avatar: avatarUrl }))
}))