Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b5d106f

Browse files
committed
过滤敏感词,发广告直接封号
1 parent f2208d3 commit b5d106f

File tree

4 files changed

+93
-4
lines changed

4 files changed

+93
-4
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Copyright 2015 The StudyGolang Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
// http://studygolang.com
5+
// Author:polaris [email protected]
6+
7+
package filter
8+
9+
import (
10+
"model"
11+
"net/http"
12+
"service"
13+
14+
"config"
15+
"logger"
16+
"util"
17+
18+
"github.com/studygolang/mux"
19+
)
20+
21+
// SensitiveFilter 敏感词过滤器
22+
type SensitiveFilter struct {
23+
*mux.EmptyFilter
24+
}
25+
26+
// PreFilter 执行 handler 之前的过滤方法
27+
func (this *SensitiveFilter) PreFilter(rw http.ResponseWriter, req *http.Request) bool {
28+
logger.Debugln("SensitiveFilter PreFilter...")
29+
30+
content := req.FormValue("content")
31+
title := req.FormValue("title")
32+
if title == "" && content == "" {
33+
return true
34+
}
35+
36+
sensitive := config.Config["sensitive"]
37+
if util.HasSensitive(title, sensitive) || util.HasSensitive(content, sensitive) {
38+
// 把账号冻结
39+
curUser, _ := CurrentUser(req)
40+
service.UpdateUserStatus(curUser["uid"].(int), model.StatusFreeze)
41+
42+
logger.Infoln("user=", curUser["uid"], "publish ad, title=", title, ";content=", content, ". freeze")
43+
44+
return false
45+
}
46+
47+
return true
48+
}

websites/code/studygolang/src/server/studygolang/router.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
. "controller"
1313
"controller/admin"
1414
"filter"
15+
1516
"github.com/studygolang/mux"
1617
)
1718

@@ -20,6 +21,10 @@ func initRouter() *mux.Router {
2021
loginFilter := new(filter.LoginFilter)
2122
loginFilterChain := mux.NewFilterChain(loginFilter)
2223

24+
// 敏感词过滤器
25+
sensitiveFilter := new(filter.SensitiveFilter)
26+
sensitiveFilterChain := mux.NewFilterChain(sensitiveFilter)
27+
2328
router := mux.NewRouter()
2429
// 所有的页面都需要先检查用户cookie是否存在,以便在没登录时自动登录
2530
cookieFilter := new(filter.CookieFilter)
@@ -37,8 +42,8 @@ func initRouter() *mux.Router {
3742

3843
router.HandleFunc("/topics{view:(|/popular|/no_reply|/last)}", TopicsHandler)
3944
router.HandleFunc("/topics/{tid:[0-9]+}", TopicDetailHandler)
40-
router.HandleFunc("/topics/new{json:(|.json)}", NewTopicHandler).AppendFilterChain(loginFilterChain)
41-
router.HandleFunc("/topics/modify{json:(|.json)}", ModifyTopicHandler).AppendFilterChain(loginFilterChain)
45+
router.HandleFunc("/topics/new{json:(|.json)}", NewTopicHandler).AppendFilterChain(loginFilterChain).AppendFilterChain(sensitiveFilterChain)
46+
router.HandleFunc("/topics/modify{json:(|.json)}", ModifyTopicHandler).AppendFilterChain(loginFilterChain).AppendFilterChain(sensitiveFilterChain)
4247
// 某个节点下的话题
4348
router.HandleFunc("/topics/node{nid:[0-9]+}", NodesHandler)
4449

@@ -93,8 +98,8 @@ func initRouter() *mux.Router {
9398
router.HandleFunc("/resources", ResIndexHandler)
9499
router.HandleFunc("/resources/cat/{catid:[0-9]+}", CatResourcesHandler)
95100
router.HandleFunc("/resources/{id:[0-9]+}", ResourceDetailHandler)
96-
router.HandleFunc("/resources/new{json:(|.json)}", NewResourceHandler).AppendFilterChain(loginFilterChain)
97-
router.HandleFunc("/resources/modify{json:(|.json)}", ModifyResourceHandler).AppendFilterChain(loginFilterChain)
101+
router.HandleFunc("/resources/new{json:(|.json)}", NewResourceHandler).AppendFilterChain(loginFilterChain).AppendFilterChain(sensitiveFilterChain)
102+
router.HandleFunc("/resources/modify{json:(|.json)}", ModifyResourceHandler).AppendFilterChain(loginFilterChain).AppendFilterChain(sensitiveFilterChain)
98103

99104
// 评论
100105
router.HandleFunc("/comment/{objid:[0-9]+}.json", CommentHandler).AppendFilterChain(loginFilterChain)

websites/code/studygolang/src/service/user.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,18 @@ func UpdateUser(form url.Values) (errMsg string, err error) {
115115
return
116116
}
117117

118+
// UpdateUserStatus 更新用户状态
119+
func UpdateUserStatus(uid, status int) {
120+
setClause := "status=" + strconv.Itoa(status)
121+
err := model.NewUser().Set(setClause).Where("uid=?", uid).Update()
122+
if err != nil {
123+
logger.Errorf("更新用户 【%s】 状态失败:%s", uid, err)
124+
return
125+
}
126+
127+
return
128+
}
129+
118130
// 邮件订阅或取消订阅
119131
func EmailSubscribe(uid, unsubscribe int) {
120132
err := model.NewUser().Set("unsubscribe=?", unsubscribe).Where("uid=?", uid).Update()
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Copyright 2015 The StudyGolang Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
// http://studygolang.com
5+
// Author:polaris [email protected]
6+
7+
package util
8+
9+
import (
10+
"strings"
11+
)
12+
13+
// HasSensitive 是否有敏感词
14+
func HasSensitive(content string, sensitive string) bool {
15+
sensitives := strings.Split(sensitive, ",")
16+
17+
for _, s := range sensitives {
18+
if strings.Contains(content, s) {
19+
return true
20+
}
21+
}
22+
23+
return false
24+
}

0 commit comments

Comments
 (0)