You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
2.9 KiB
120 lines
2.9 KiB
package http |
|
|
|
import ( |
|
"errors" |
|
"fmt" |
|
"net/http" |
|
"net/url" |
|
"strconv" |
|
|
|
"go-common/app/service/main/antispam/conf" |
|
"go-common/app/service/main/antispam/service" |
|
"go-common/library/log" |
|
bm "go-common/library/net/http/blademaster" |
|
"go-common/library/net/http/blademaster/middleware/auth" |
|
"go-common/library/net/http/blademaster/middleware/verify" |
|
) |
|
|
|
var ( |
|
// Svr . |
|
Svr service.Service |
|
verifySvc *verify.Verify |
|
authSvc *auth.Auth |
|
) |
|
|
|
// Init . |
|
func Init(c *conf.Config, s service.Service) { |
|
Svr = s |
|
verifySvc = verify.New(c.Verify) |
|
authSvc = auth.New(c.Auth) |
|
engine := bm.DefaultServer(c.BM) |
|
|
|
interRouter(engine) |
|
|
|
if err := engine.Start(); err != nil { |
|
log.Error("engine.Start() error(%v)", err) |
|
panic(err) |
|
} |
|
} |
|
|
|
func interRouter(e *bm.Engine) { |
|
e.GET("/monitor/ping", ping) |
|
|
|
e.GET("/register", register) |
|
e.GET("/x/internal/antispam/filter", authSvc.Guest, Filter) |
|
|
|
regexps := e.Group("/x/internal/antispam/regexps") |
|
regexps.GET("", verifySvc.Verify, GetRegexps) |
|
regexps.GET("/one", verifySvc.Verify, GetRegexp) |
|
regexps.POST("/add", verifySvc.Verify, AddRegexp) |
|
regexps.POST("/edit", verifySvc.Verify, EditRegexp) |
|
regexps.POST("/del", verifySvc.Verify, DeleteRegexp) |
|
regexps.POST("/recover", verifySvc.Verify, RecoverRegexp) |
|
|
|
rules := e.Group("/x/internal/antispam/rules") |
|
rules.GET("", verifySvc.Verify, GetRules) |
|
rules.GET("/one", verifySvc.Verify, GetRule) |
|
rules.POST("/add", verifySvc.Verify, AddRule) |
|
|
|
keywords := e.Group("/x/internal/antispam/keywords") |
|
keywords.GET("", verifySvc.Verify, GetKeywords) |
|
keywords.GET("/senders", verifySvc.Verify, GetKeywordSenders) |
|
keywords.GET("/one", verifySvc.Verify, GetKeyword) |
|
keywords.POST("/dels", verifySvc.Verify, DeleteKeywords) |
|
keywords.POST("/action", verifySvc.Verify, UpdateKeyword) |
|
} |
|
|
|
func ping(c *bm.Context) { |
|
if err := Svr.Ping(c); err != nil { |
|
log.Error("antispam service ping error(%v)", err) |
|
c.AbortWithStatus(http.StatusServiceUnavailable) |
|
} |
|
} |
|
|
|
func register(c *bm.Context) { |
|
c.JSON(struct{}{}, nil) |
|
} |
|
|
|
func getAdminIDAndArea(params url.Values) (adminID int64, area string, err error) { |
|
adminID, err = getAdminID(params) |
|
if err != nil { |
|
return 0, "", err |
|
} |
|
area, err = parseArea(params) |
|
if err != nil { |
|
return 0, "", err |
|
} |
|
return adminID, area, nil |
|
} |
|
|
|
func parseArea(params url.Values) (string, error) { |
|
area := params.Get(ProtocolArea) |
|
if _, ok := conf.Areas[area]; !ok { |
|
err := fmt.Errorf("invalid area(%s)", area) |
|
log.Error("%v", err) |
|
return "", err |
|
} |
|
return area, nil |
|
} |
|
|
|
func getAdminID(params url.Values) (int64, error) { |
|
adminIDStr := params.Get(ProtocolAdminID) |
|
if adminIDStr == "" { |
|
err := errors.New("empty admin id") |
|
log.Error("%v", err) |
|
return 0, err |
|
} |
|
adminID, err := strconv.ParseInt(adminIDStr, 10, 64) |
|
if err != nil { |
|
log.Error("%v", err) |
|
return 0, err |
|
} |
|
return adminID, nil |
|
} |
|
|
|
func errResp(c *bm.Context, code interface{}, err error) { |
|
c.JSONMap(map[string]interface{}{ |
|
ProtocolData: code, |
|
ProtocolMessage: err.Error(), |
|
}, nil) |
|
}
|
|
|