54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
package spam
|
|
|
|
import (
|
|
"bbs-go/internal/models"
|
|
"log/slog"
|
|
)
|
|
|
|
var strategies []Strategy
|
|
|
|
func init() {
|
|
strategies = append(strategies, &EmailVerifyStrategy{})
|
|
strategies = append(strategies, &CaptchaStrategy{})
|
|
// strategies = append(strategies, &PostFrequencyStrategy{})
|
|
}
|
|
|
|
func CheckTopic(user *models.User, form models.CreateTopicForm) error {
|
|
if len(strategies) == 0 {
|
|
return nil
|
|
}
|
|
for _, strategy := range strategies {
|
|
if err := strategy.CheckTopic(user, form); err != nil {
|
|
slog.Warn("[Topic]命中策略", slog.Any("strategy", strategy.Name()), slog.Any("userId", user.Id))
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func CheckArticle(user *models.User, form models.CreateArticleForm) error {
|
|
if len(strategies) == 0 {
|
|
return nil
|
|
}
|
|
for _, strategy := range strategies {
|
|
if err := strategy.CheckArticle(user, form); err != nil {
|
|
slog.Warn("[Article]命中策略", slog.Any("strategy", strategy.Name()), slog.Any("userId", user.Id))
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func CheckComment(user *models.User, form models.CreateCommentForm) error {
|
|
if len(strategies) == 0 {
|
|
return nil
|
|
}
|
|
for _, strategy := range strategies {
|
|
if err := strategy.CheckComment(user, form); err != nil {
|
|
slog.Warn("[Comment]命中策略", slog.Any("strategy", strategy.Name()), slog.Any("userId", user.Id))
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|