aliyun sensor server

This commit is contained in:
tamakyi
2026-09-10 18:04:19 +08:00
parent e3e59e7c69
commit 8e2325eda5
38 changed files with 3147 additions and 344 deletions
+17 -13
View File
@@ -31,6 +31,7 @@ import (
"github.com/tamakyi/TamaBox/internal/i18n"
"github.com/tamakyi/TamaBox/internal/mail"
"github.com/tamakyi/TamaBox/internal/security/censor"
"github.com/tamakyi/TamaBox/internal/security/moderation"
"github.com/tamakyi/TamaBox/internal/shared"
)
@@ -57,16 +58,19 @@ func InvalidateResultsCache(voteID uint) {
resultsCache.Delete(strconv.FormatUint(uint64(voteID), 10))
}
// censorCheck 对开放文本做内容审核(fail-closed;EnableTextCensor=false 时自动放行)。
func censorCheck(ctx context.Context, lang, text string) error {
resp, err := censor.Text(ctx.Request().Context(), text)
if err != nil {
return errors.New(i18n.T(lang, "censor.unavailable"))
// censorCheck 对开放文本做内容审核。
//
// 与提问 / 私聊共用同一个守卫(internal/security/moderation.Check):是否拦截由
// 投票发起人的「审核严格度」档位决定,而不是无条件采信审核服务的判定。
// 审核服务异常仍为 fail-closed 拒绝提交;EnableTextCensor=false 时底层自动放行。
// owner 为 nil 时回退到最严档位,避免发起人为空就把或从宽放行。
func censorCheck(ctx context.Context, owner *db.User, lang, text string) error {
strictness := censor.StrictnessStrict
if owner != nil {
strictness = moderation.StrictnessFor(owner.ModerationStrictness)
}
if !resp.Pass {
return errors.New(resp.ErrorMessage())
}
return nil
_, err := moderation.Check(ctx.Request().Context(), strictness, lang, text)
return err
}
// blockWordCheck 校验开放文本是否命中投票发起人的全局屏蔽词表
@@ -968,7 +972,7 @@ func parseSubmission(ctx context.Context, v *db.Vote, owner *db.User) (*db.Creat
return nil, err
}
// 开放文本内容审核(fail-closed)
if err := censorCheck(ctx, lang, custom); err != nil {
if err := censorCheck(ctx, owner, lang, custom); err != nil {
return nil, err
}
formData[f.Label] = custom
@@ -1004,7 +1008,7 @@ func parseSubmission(ctx context.Context, v *db.Vote, owner *db.User) (*db.Creat
return nil, err
}
// 开放文本内容审核(fail-closed)
if err := censorCheck(ctx, lang, custom); err != nil {
if err := censorCheck(ctx, owner, lang, custom); err != nil {
return nil, err
}
chosen = append(chosen, custom)
@@ -1088,7 +1092,7 @@ func parseSubmission(ctx context.Context, v *db.Vote, owner *db.User) (*db.Creat
return nil, err
}
// 开放文本内容审核(fail-closed)
if err := censorCheck(ctx, lang, val); err != nil {
if err := censorCheck(ctx, owner, lang, val); err != nil {
return nil, err
}
formData[f.Label] = val
@@ -1110,7 +1114,7 @@ func parseSubmission(ctx context.Context, v *db.Vote, owner *db.User) (*db.Creat
return nil, err
}
// 开放文本内容审核(fail-closed)
if err := censorCheck(ctx, lang, custom); err != nil {
if err := censorCheck(ctx, owner, lang, custom); err != nil {
return nil, err
}
sub.CustomText = custom