dkforest

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

commit 8ef9ea676be2e3df28fb087e5a315e373bf607e2
parent a03ba18e837543a9588894445091181a2a701069
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Mon,  5 Jun 2023 04:18:13 -0700

cleanup

Diffstat:
Mpkg/web/handlers/api/v1/spamInterceptor.go | 34++++++++++++++++++++++------------
1 file changed, 22 insertions(+), 12 deletions(-)

diff --git a/pkg/web/handlers/api/v1/spamInterceptor.go b/pkg/web/handlers/api/v1/spamInterceptor.go @@ -47,28 +47,37 @@ func LoadFilters(db *database.DkfDB) { } } -func (i SpamInterceptor) InterceptMsg(c *Command) { - lowerCaseMessage := strings.ToLower(c.message) - silentSelfKick := config.SilentSelfKick.Load() - +// Check the filters that we have in the database. +func checkDynamicFilters(c *Command, lowerCaseMessage string, silentSelfKick bool) error { filtersMtx.RLock() + defer filtersMtx.RUnlock() for _, f := range filters { isMatch := (f.IsRegex && f.Rgx.MatchString(c.message)) || (!f.IsRegex && strings.Contains(lowerCaseMessage, f.Term)) if isMatch { + if f.Hb { + dutils.SelfHellBan(c.db, c.authUser) + return ErrSilent + } if f.Kick { _ = 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 + return ErrSpamFilterTriggered + } + } + return nil +} + +func (i SpamInterceptor) InterceptMsg(c *Command) { + lowerCaseMessage := strings.ToLower(c.message) + silentSelfKick := config.SilentSelfKick.Load() + + if err := checkDynamicFilters(c, lowerCaseMessage, silentSelfKick); err != nil { + if !errors.Is(err, ErrSilent) { + c.err = err } + return } - filtersMtx.RUnlock() if c.room.IsOfficialRoom() { if err := checkSpam(c.db, c.origMessage, lowerCaseMessage, c.authUser); err != nil { @@ -88,6 +97,7 @@ func (i SpamInterceptor) InterceptMsg(c *Command) { } } +var ErrSilent = errors.New("") var ErrSpamFilterTriggered = errors.New("spam filter triggered") func checkSpam(db *database.DkfDB, origMessage, lowerCaseMessage string, authUser *database.User) error {