dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit a03ba18e837543a9588894445091181a2a701069
parent 8bd76f1ccf332018688df3d37351be92ca7a11b8
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Mon,  5 Jun 2023 01:56:39 -0700

rwmutex to protect filters

Diffstat:
Mpkg/web/handlers/api/v1/spamInterceptor.go | 9+++++++++
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 {