53 lines
2.1 KiB
Go
53 lines
2.1 KiB
Go
// Copyright 2022 E99p1ant. All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package user
|
|
|
|
import (
|
|
"github.com/sirupsen/logrus"
|
|
|
|
"github.com/tamakyi/TamaBox/internal/context"
|
|
"github.com/tamakyi/TamaBox/internal/db"
|
|
"github.com/tamakyi/TamaBox/internal/form"
|
|
"github.com/tamakyi/TamaBox/internal/i18n"
|
|
"github.com/tamakyi/TamaBox/internal/security/censor"
|
|
)
|
|
|
|
// UpdateModerationStrictness 保存当前账号的「内容审核严格度」档位。
|
|
//
|
|
// 该档位同时作用于提问、投票、私聊三条链路(由 internal/security/moderation.Check
|
|
// 统一裁决),因此只需在账号侧存一份。
|
|
func UpdateModerationStrictness(ctx context.Context, f form.UpdateModerationStrictness) {
|
|
// 反序列化失败(如请求体超限)时零值 Strictness="" 会被当成「跟随站点默认」写入,
|
|
// 把账号已选择的档位静默改回默认档 —— 先中止,不触碰现有设置。
|
|
if abortOnFormError(ctx, returnTab(ctx)) {
|
|
return
|
|
}
|
|
|
|
// 处置期内禁止修改档位:EffectiveStrictness 会强制 strict,允许保存只会让箱主
|
|
// 以为「我调成宽松了」,实际审核仍按严格执行,是更糟的误导。
|
|
if level, _, err := db.Restrictions.ActiveLevel(ctx.Request().Context(), ctx.User.ID); err == nil && level != "" {
|
|
ctx.SetErrorFlash(i18n.T(ctx.Lang(), "admin.flash.strictnessLocked"))
|
|
ctx.Redirect(returnTab(ctx))
|
|
return
|
|
}
|
|
|
|
// 非法取值一律拒绝保存:宁可保留原档位,也不要写入一个解释不了的中间状态。
|
|
if !censor.IsValidStrictness(f.Strictness) {
|
|
ctx.SetErrorFlash(i18n.T(ctx.Lang(), "admin.flash.moderationStrictnessInvalid"))
|
|
ctx.Redirect(returnTab(ctx))
|
|
return
|
|
}
|
|
|
|
if err := db.Users.UpdateModerationStrictness(ctx.Request().Context(), ctx.User.ID, f.Strictness); err != nil {
|
|
logrus.WithContext(ctx.Request().Context()).WithError(err).Error("Failed to update moderation strictness")
|
|
ctx.SetInternalErrorFlash()
|
|
ctx.Redirect(returnTab(ctx))
|
|
return
|
|
}
|
|
|
|
ctx.SetSuccessFlash(i18n.T(ctx.Lang(), "admin.flash.moderationStrictnessUpdated"))
|
|
ctx.Redirect(returnTab(ctx))
|
|
}
|