From d1b3de75ea5d653e874f7a6545c84e0273645ff0 Mon Sep 17 00:00:00 2001 From: Satoru Abe Date: Sat, 25 Nov 2023 15:43:47 +0900 Subject: [PATCH] =?UTF-8?q?Revert=20"Revert=20"=E3=82=B3=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=81=AENG=E3=83=AF=E3=83=BC=E3=83=89=E3=81=AE?= =?UTF-8?q?=E3=83=9E=E3=83=83=E3=83=81=E3=82=92aho-corasick=E3=81=A7?= =?UTF-8?q?=E3=82=84=E3=82=8B""?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webapp/go/go.mod | 1 + webapp/go/go.sum | 2 ++ webapp/go/livecomment_handler.go | 23 +++++++---------------- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/webapp/go/go.mod b/webapp/go/go.mod index cd77a41..4f0d77c 100644 --- a/webapp/go/go.mod +++ b/webapp/go/go.mod @@ -14,6 +14,7 @@ require ( ) require ( + github.com/BobuSumisu/aho-corasick v1.0.3 // indirect github.com/cockroachdb/errors v1.11.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/redact v1.1.5 // indirect diff --git a/webapp/go/go.sum b/webapp/go/go.sum index 2f08e1c..2654da3 100644 --- a/webapp/go/go.sum +++ b/webapp/go/go.sum @@ -1,3 +1,5 @@ +github.com/BobuSumisu/aho-corasick v1.0.3 h1:uuf+JHwU9CHP2Vx+wAy6jcksJThhJS9ehR8a+4nPE9g= +github.com/BobuSumisu/aho-corasick v1.0.3/go.mod h1:hm4jLcvZKI2vRF2WDU1N4p/jpWtpOzp3nLmi9AzX/XE= github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= diff --git a/webapp/go/livecomment_handler.go b/webapp/go/livecomment_handler.go index 1a20528..d213366 100644 --- a/webapp/go/livecomment_handler.go +++ b/webapp/go/livecomment_handler.go @@ -10,6 +10,7 @@ import ( "strconv" "time" + ahocorasick "github.com/BobuSumisu/aho-corasick" "github.com/jmoiron/sqlx" "github.com/labstack/echo-contrib/session" "github.com/labstack/echo/v4" @@ -202,23 +203,13 @@ func postLivecommentHandler(c echo.Context) error { return echo.NewHTTPError(http.StatusInternalServerError, "failed to get NG words: "+err.Error()) } - var hitSpam int + trie := ahocorasick.NewTrieBuilder() for _, ngword := range ngwords { - query := ` - SELECT COUNT(*) - FROM - (SELECT ? AS text) AS texts - INNER JOIN - (SELECT CONCAT('%', ?, '%') AS pattern) AS patterns - ON texts.text LIKE patterns.pattern; - ` - if err := tx.GetContext(ctx, &hitSpam, query, req.Comment, ngword.Word); err != nil { - return echo.NewHTTPError(http.StatusInternalServerError, "failed to get hitspam: "+err.Error()) - } - c.Logger().Infof("[hitSpam=%d] comment = %s", hitSpam, req.Comment) - if hitSpam >= 1 { - return echo.NewHTTPError(http.StatusBadRequest, "このコメントがスパム判定されました") - } + trie.AddString(ngword.Word) + } + + if m := trie.Build().MatchString(req.Comment); len(m) > 0 { + return echo.NewHTTPError(http.StatusBadRequest, "このコメントがスパム判定されました") } now := time.Now().Unix()