aliyun sensor server
This commit is contained in:
@@ -42,6 +42,11 @@ func Init() error {
|
||||
return errors.Wrap(err, "map 'security'")
|
||||
}
|
||||
|
||||
if err := validateTextCensorSource(Security.EnableTextCensor, Security.TextCensorSource,
|
||||
App.QiniuAccessKey, App.QiniuAccessSecret, App.AliyunAccessKey, App.AliyunAccessKeySecret); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := File.Section("server").MapTo(&Server); err != nil {
|
||||
return errors.Wrap(err, "map 'server'")
|
||||
}
|
||||
@@ -103,3 +108,40 @@ func Init() error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// validateTextCensorSource 校验文本审核通道([security] text_censor_source)与凭据的搭配。
|
||||
//
|
||||
// 单独抽成纯函数(只依赖入参、不读全局)是为了能直接被单测覆盖,也让 Init 保持轻薄。
|
||||
//
|
||||
// 规则:
|
||||
// - 审核整体关闭(enabled=false)→ 不校验,此时不需要任何凭据。
|
||||
// - 留空 / auto → 通过。auto 是历史默认(七牛优先、阿里云兜底),两者都没配凭据时
|
||||
// 维持既有行为(运行期 fail-closed),不阻断启动 —— 否则 app.sample.ini 原样拷贝
|
||||
// (enable_text_censor = true 且凭据留空)将无法启动,破坏开箱流程。
|
||||
// - 显式选 qiniu / aliyun → 必须配齐该通道的凭据,否则启动即失败。
|
||||
// 理由:缺凭据时运行期审核必然失败,而审核失败是 fail-closed(拒绝提交),
|
||||
// 会让发布/私信整站不可用,且现象隐蔽(只在日志可见)——不如启动就报错。
|
||||
// - 其它取值 → 直接报错,不做静默回退:拼写错误若被悄悄当成 auto,
|
||||
// 运维会以为「已经只用七牛了」,实际仍在走双通道。
|
||||
func validateTextCensorSource(enabled bool, source, qiniuKey, qiniuSecret, aliyunKey, aliyunSecret string) error {
|
||||
if !enabled {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch strings.ToLower(strings.TrimSpace(source)) {
|
||||
case "", CensorSourceAuto:
|
||||
return nil
|
||||
case CensorSourceQiniu:
|
||||
if qiniuKey == "" || qiniuSecret == "" {
|
||||
return errors.New("security.text_censor_source = qiniu requires app.qiniu_access_key and app.qiniu_access_secret")
|
||||
}
|
||||
return nil
|
||||
case CensorSourceAliyun:
|
||||
if aliyunKey == "" || aliyunSecret == "" {
|
||||
return errors.New("security.text_censor_source = aliyun requires app.aliyun_access_key and app.aliyun_access_key_secret")
|
||||
}
|
||||
return nil
|
||||
default:
|
||||
return errors.Errorf("security.text_censor_source must be one of qiniu / aliyun / auto, got %q", source)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user