commit a03ba18e837543a9588894445091181a2a701069
parent 8bd76f1ccf332018688df3d37351be92ca7a11b8
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Mon, 5 Jun 2023 01:56:39 -0700
rwmutex to protect filters
Diffstat:
1 file changed, 9 insertions(+), 0 deletions(-)
diff --git a/pkg/web/handlers/api/v1/spamInterceptor.go b/pkg/web/handlers/api/v1/spamInterceptor.go
@@ -9,6 +9,7 @@ import (
"github.com/sirupsen/logrus"
"regexp"
"strings"
+ "sync"
"time"
)
@@ -23,8 +24,11 @@ type Filter struct {
}
var filters []Filter
+var filtersMtx sync.RWMutex
func LoadFilters(db *database.DkfDB) {
+ filtersMtx.Lock()
+ defer filtersMtx.Unlock()
filters = make([]Filter, 0)
dbFilters, _ := db.GetSpamFilters()
for _, dbFilter := range dbFilters {
@@ -46,6 +50,8 @@ func LoadFilters(db *database.DkfDB) {
func (i SpamInterceptor) InterceptMsg(c *Command) {
lowerCaseMessage := strings.ToLower(c.message)
silentSelfKick := config.SilentSelfKick.Load()
+
+ filtersMtx.RLock()
for _, f := range filters {
isMatch := (f.IsRegex && f.Rgx.MatchString(c.message)) ||
(!f.IsRegex && strings.Contains(lowerCaseMessage, f.Term))
@@ -54,12 +60,15 @@ func (i SpamInterceptor) InterceptMsg(c *Command) {
_ = dutils.SelfKick(c.db, *c.authUser, silentSelfKick)
} else if f.Hb {
dutils.SelfHellBan(c.db, c.authUser)
+ filtersMtx.RUnlock()
return
}
c.err = ErrSpamFilterTriggered
+ filtersMtx.RUnlock()
return
}
}
+ filtersMtx.RUnlock()
if c.room.IsOfficialRoom() {
if err := checkSpam(c.db, c.origMessage, lowerCaseMessage, c.authUser); err != nil {