mirror of
https://github.com/Li4n0/revsuit.git
synced 2026-09-27 00:51:55 +08:00
refactor: standardization of code structure (#7)
This commit is contained in:
@@ -18,7 +18,7 @@ func init() {
|
|||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
err := download()
|
err := download()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Download qqwry.dat failed, caused by:%v, recommend to download it by yourself otherwise the `IpArea` will be null", err.Error())
|
log.Error("Download qqwry.dat failed, caused by:%v, recommend to download it by yourself otherwise the `IpArea` will be null", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if time.Until(info.ModTime()) > 5*24*time.Hour {
|
} else if time.Until(info.ModTime()) > 5*24*time.Hour {
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ func (br BaseRule) Match(s string) (flag, flagGroup string, vars map[string]stri
|
|||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
if catcher, err := regexp.Compile(br.FlagFormat); err != nil {
|
if catcher, err := regexp.Compile(br.FlagFormat); err != nil {
|
||||||
log.Error("%s(rule:%s)", err.Error(), br.Name)
|
log.Error("%s[rule:%s]", err, br.Name)
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
br.flagCatcher = catcher
|
br.flagCatcher = catcher
|
||||||
|
|||||||
+3
-4
@@ -39,10 +39,9 @@ func (s *Server) getRules() []*Rule {
|
|||||||
|
|
||||||
func (s *Server) updateRules() error {
|
func (s *Server) updateRules() error {
|
||||||
db := database.DB.Model(new(Rule))
|
db := database.DB.Model(new(Rule))
|
||||||
|
defer s.rulesLock.Unlock()
|
||||||
s.rulesLock.Lock()
|
s.rulesLock.Lock()
|
||||||
db.Order("rank desc").Find(&s.rules)
|
return db.Order("rank desc").Find(&s.rules).Error
|
||||||
s.rulesLock.Unlock()
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) Run() {
|
func (s *Server) Run() {
|
||||||
@@ -80,7 +79,7 @@ func (s *Server) Run() {
|
|||||||
|
|
||||||
r, err := newRecord(_rule, flag, domain, ip, qqwry.Area(ip))
|
r, err := newRecord(_rule, flag, domain, ip, qqwry.Area(ip))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("DNS record(rule_id:%s) created failed :%s", _rule.Name, err.Error())
|
log.Error("DNS record(rule_id:%s) created failed :%s", _rule.Name, err)
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
log.Info("DNS record[id:%d rule:%s remote_ip:%s] has been created", r.ID, _rule.Name, ip)
|
log.Info("DNS record[id:%d rule:%s remote_ip:%s] has been created", r.ID, _rule.Name, ip)
|
||||||
|
|||||||
+4
-5
@@ -38,8 +38,7 @@ func newRecord(rule *Rule, flag, domain, remoteIp, ipArea string) (r *Record, er
|
|||||||
Domain: domain,
|
Domain: domain,
|
||||||
Rule: *rule,
|
Rule: *rule,
|
||||||
}
|
}
|
||||||
err = database.DB.Create(r).Error
|
return r, database.DB.Create(r).Error
|
||||||
return r, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func ListRecords(c *gin.Context) {
|
func ListRecords(c *gin.Context) {
|
||||||
@@ -75,20 +74,20 @@ func ListRecords(c *gin.Context) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"result": nil,
|
"result": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if order != "desc" && order != "asc" {
|
if order != "asc" {
|
||||||
order = "desc"
|
order = "desc"
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := db.Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
if err := db.Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
|
|||||||
+8
-8
@@ -85,7 +85,7 @@ func ListRules(c *gin.Context) {
|
|||||||
if err := c.ShouldBind(&dnsRule); err != nil {
|
if err := c.ShouldBind(&dnsRule); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"result": nil,
|
"result": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -101,20 +101,20 @@ func ListRules(c *gin.Context) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"result": nil,
|
"result": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if order != "desc" && order != "asc" {
|
if order != "asc" {
|
||||||
order = "desc"
|
order = "desc"
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := db.Order("rank desc").Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
if err := db.Order("rank desc").Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -137,7 +137,7 @@ func UpsertRules(c *gin.Context) {
|
|||||||
if err := c.ShouldBind(&dnsRule); err != nil {
|
if err := c.ShouldBind(&dnsRule); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -150,7 +150,7 @@ func UpsertRules(c *gin.Context) {
|
|||||||
if err := dnsRule.CreateOrUpdate(); err != nil {
|
if err := dnsRule.CreateOrUpdate(); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -176,7 +176,7 @@ func DeleteRules(c *gin.Context) {
|
|||||||
if err := c.ShouldBind(&dnsRule); err != nil {
|
if err := c.ShouldBind(&dnsRule); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -185,7 +185,7 @@ func DeleteRules(c *gin.Context) {
|
|||||||
if err := dnsRule.Delete(); err != nil {
|
if err := dnsRule.Delete(); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
|
|||||||
+7
-8
@@ -48,21 +48,20 @@ func (s *Server) getRules() []*Rule {
|
|||||||
|
|
||||||
func (s *Server) updateRules() error {
|
func (s *Server) updateRules() error {
|
||||||
db := database.DB.Model(new(Rule))
|
db := database.DB.Model(new(Rule))
|
||||||
|
defer s.rulesLock.Unlock()
|
||||||
s.rulesLock.Lock()
|
s.rulesLock.Lock()
|
||||||
db.Order("rank desc").Find(&s.rules)
|
return db.Order("rank desc").Find(&s.rules).Error
|
||||||
s.rulesLock.Unlock()
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) handleConnection(conn net.Conn) {
|
func (s *Server) handleConnection(conn net.Conn) {
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
|
||||||
if err := conn.SetDeadline(time.Now().Add(time.Second * 30)); err != nil {
|
if err := conn.SetDeadline(time.Now().Add(time.Second * 30)); err != nil {
|
||||||
log.Error("FTP set connection deadline error:%v", err.Error())
|
log.Error("FTP set connection deadline error:%v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := conn.Write([]byte("220 (vsFTPd 3.0.2)\r\n")); err != nil {
|
if _, err := conn.Write([]byte("220 (vsFTPd 3.0.2)\r\n")); err != nil {
|
||||||
log.Error("FTP write connection error:%v", err.Error())
|
log.Error("FTP write connection error:%v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ip := strings.Split(conn.RemoteAddr().String(), ":")[0]
|
ip := strings.Split(conn.RemoteAddr().String(), ":")[0]
|
||||||
@@ -126,12 +125,12 @@ loop:
|
|||||||
pasvAddress := rule.CompileTpl(matchedRule.PasvAddress, vars)
|
pasvAddress := rule.CompileTpl(matchedRule.PasvAddress, vars)
|
||||||
pasvIP, pasvPort, err := net.SplitHostPort(pasvAddress)
|
pasvIP, pasvPort, err := net.SplitHostPort(pasvAddress)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warn("FTP failed to split rule[id%d] pasv_address(%s) :%s", matchedRule.ID, pasvAddress, err.Error())
|
log.Warn("FTP failed to split rule[id%d] pasv_address(%s) :%s", matchedRule.ID, pasvAddress, err)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
port, err := strconv.Atoi(pasvPort)
|
port, err := strconv.Atoi(pasvPort)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warn("FTP failed to convert rule[id%d] pasv_port(%s) :%s", matchedRule.ID, pasvPort, err.Error())
|
log.Warn("FTP failed to convert rule[id%d] pasv_port(%s) :%s", matchedRule.ID, pasvPort, err)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
ret = fmt.Sprintf("227 Entering Passive Mode (%s,%v,%d)\r\n", strings.ReplaceAll(pasvIP, ".", ","), float64(port/256), port%256)
|
ret = fmt.Sprintf("227 Entering Passive Mode (%s,%v,%d)\r\n", strings.ReplaceAll(pasvIP, ".", ","), float64(port/256), port%256)
|
||||||
@@ -159,7 +158,7 @@ loop:
|
|||||||
// create new record
|
// create new record
|
||||||
r, err := NewRecord(_rule, flag, user, password, path, ip, area, status)
|
r, err := NewRecord(_rule, flag, user, password, path, ip, area, status)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("FTP record[rule_id:%d] created failed :%s", _rule.ID, err.Error())
|
log.Error("FTP record[rule_id:%d] created failed :%s", _rule.ID, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Info("FTP record[id:%d rule:%s remote_ip:%s] has been created", r.ID, _rule.Name, ip)
|
log.Info("FTP record[id:%d rule:%s remote_ip:%s] has been created", r.ID, _rule.Name, ip)
|
||||||
|
|||||||
+3
-4
@@ -43,8 +43,7 @@ func NewRecord(rule *Rule, flag, user, password, path, ip, area string, status S
|
|||||||
Status: status,
|
Status: status,
|
||||||
Rule: *rule,
|
Rule: *rule,
|
||||||
}
|
}
|
||||||
err = database.DB.Create(r).Error
|
return r, database.DB.Create(r).Error
|
||||||
return r, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func ListRecords(c *gin.Context) {
|
func ListRecords(c *gin.Context) {
|
||||||
@@ -85,7 +84,7 @@ func ListRecords(c *gin.Context) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"result": nil,
|
"result": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -98,7 +97,7 @@ func ListRecords(c *gin.Context) {
|
|||||||
if err := db.Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
if err := db.Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
|
|||||||
+5
-5
@@ -94,7 +94,7 @@ func ListRules(c *gin.Context) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"result": nil,
|
"result": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -130,7 +130,7 @@ func UpsertRules(c *gin.Context) {
|
|||||||
if err := c.ShouldBind(&ftpRule); err != nil {
|
if err := c.ShouldBind(&ftpRule); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -143,7 +143,7 @@ func UpsertRules(c *gin.Context) {
|
|||||||
if err := ftpRule.CreateOrUpdate(); err != nil {
|
if err := ftpRule.CreateOrUpdate(); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"result": nil,
|
"result": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -169,7 +169,7 @@ func DeleteRules(c *gin.Context) {
|
|||||||
if err := c.ShouldBind(&ftpRule); err != nil {
|
if err := c.ShouldBind(&ftpRule); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -178,7 +178,7 @@ func DeleteRules(c *gin.Context) {
|
|||||||
if err := ftpRule.Delete(); err != nil {
|
if err := ftpRule.Delete(); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
|
|||||||
+11
-14
@@ -47,10 +47,9 @@ func (s *Server) getRules() []*Rule {
|
|||||||
|
|
||||||
func (s *Server) updateRules() error {
|
func (s *Server) updateRules() error {
|
||||||
db := database.DB.Model(new(Rule))
|
db := database.DB.Model(new(Rule))
|
||||||
|
defer s.rulesLock.Unlock()
|
||||||
s.rulesLock.Lock()
|
s.rulesLock.Lock()
|
||||||
db.Order("rank desc").Find(&s.rules)
|
return db.Order("rank desc").Find(&s.rules).Error
|
||||||
s.rulesLock.Unlock()
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewConnection is part of the mysql.Handler interface.
|
// NewConnection is part of the mysql.Handler interface.
|
||||||
@@ -90,28 +89,26 @@ func (s *Server) NewConnection(c *vmysql.Conn) {
|
|||||||
func (s *Server) ConnectionClosed(c *vmysql.Conn) {
|
func (s *Server) ConnectionClosed(c *vmysql.Conn) {
|
||||||
log.Trace("MySQL Client leaved, ID [%d]", c.ConnectionID)
|
log.Trace("MySQL Client leaved, ID [%d]", c.ConnectionID)
|
||||||
|
|
||||||
var (
|
var clientName, clientOS, flag, flagGroup string
|
||||||
user = c.User
|
|
||||||
schema = c.SchemaName
|
|
||||||
supportLoadLocalData = c.SupportLoadDataLocal
|
|
||||||
cr, ok = s.connRulePool.Load(c.ConnectionID)
|
|
||||||
clientName, clientOS, flag, flagGroup string
|
|
||||||
)
|
|
||||||
|
|
||||||
|
user := c.User
|
||||||
|
schema := c.SchemaName
|
||||||
|
supportLoadLocalData := c.SupportLoadDataLocal
|
||||||
|
|
||||||
|
cr, ok := s.connRulePool.Load(c.ConnectionID)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
log.Error("MySQL Connection rule(%d) not match flag", c.ConnectionID)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_rule := cr.(*Rule)
|
_rule := cr.(*Rule)
|
||||||
|
// flag must not be empty
|
||||||
for _, s := range []string{user, schema} {
|
for _, s := range []string{user, schema} {
|
||||||
flag, flagGroup, _ = _rule.Match(s)
|
flag, flagGroup, _ = _rule.Match(s)
|
||||||
if flag != "" {
|
if flag != "" {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if flag == "" {
|
|
||||||
log.Error("MySQL Connection rule(%d) not match flag", c.ConnectionID)
|
|
||||||
}
|
|
||||||
|
|
||||||
if c.ConnAttrs != nil {
|
if c.ConnAttrs != nil {
|
||||||
clientName = c.ConnAttrs["_client_name"] + " " + c.ConnAttrs["_client_version"]
|
clientName = c.ConnAttrs["_client_name"] + " " + c.ConnAttrs["_client_version"]
|
||||||
@@ -130,7 +127,7 @@ func (s *Server) ConnectionClosed(c *vmysql.Conn) {
|
|||||||
|
|
||||||
r, err := newRecord(_rule, flag, user, clientName, clientOS, ip, qqwry.Area(ip), supportLoadLocalData, files)
|
r, err := newRecord(_rule, flag, user, clientName, clientOS, ip, qqwry.Area(ip), supportLoadLocalData, files)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("MySQL record(rule_id:%s) created failed :%s", _rule.Name, err.Error())
|
log.Error("MySQL record(rule_id:%s) created failed :%s", _rule.Name, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Info("MySQL record[id:%d rule:%s remote_ip:%s] has been created", r.ID, _rule.Name, ip)
|
log.Info("MySQL record[id:%d rule:%s remote_ip:%s] has been created", r.ID, _rule.Name, ip)
|
||||||
|
|||||||
+4
-5
@@ -45,8 +45,7 @@ func newRecord(rule *Rule, flag, username, clientName, clientOS, remoteIp, ipAre
|
|||||||
Files: files,
|
Files: files,
|
||||||
Rule: *rule,
|
Rule: *rule,
|
||||||
}
|
}
|
||||||
err = database.DB.Create(r).Error
|
return r, database.DB.Create(r).Error
|
||||||
return r, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func ListRecords(c *gin.Context) {
|
func ListRecords(c *gin.Context) {
|
||||||
@@ -93,20 +92,20 @@ func ListRecords(c *gin.Context) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"result": nil,
|
"result": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if order != "desc" && order != "asc" {
|
if order != "asc" {
|
||||||
order = "desc"
|
order = "desc"
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := db.Preload("Files").Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
if err := db.Preload("Files").Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
|
|||||||
+8
-8
@@ -68,7 +68,7 @@ func ListRules(c *gin.Context) {
|
|||||||
if err := c.ShouldBind(&mysqlRule); err != nil {
|
if err := c.ShouldBind(&mysqlRule); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"result": nil,
|
"result": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -84,20 +84,20 @@ func ListRules(c *gin.Context) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"result": nil,
|
"result": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if order != "desc" && order != "asc" {
|
if order != "asc" {
|
||||||
order = "desc"
|
order = "desc"
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := db.Order("rank desc").Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
if err := db.Order("rank desc").Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -120,7 +120,7 @@ func UpsertRules(c *gin.Context) {
|
|||||||
if err := c.ShouldBind(&mysqlRule); err != nil {
|
if err := c.ShouldBind(&mysqlRule); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -133,7 +133,7 @@ func UpsertRules(c *gin.Context) {
|
|||||||
if err := mysqlRule.CreateOrUpdate(); err != nil {
|
if err := mysqlRule.CreateOrUpdate(); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -159,7 +159,7 @@ func DeleteRules(c *gin.Context) {
|
|||||||
if err := c.ShouldBind(&mysqlRule); err != nil {
|
if err := c.ShouldBind(&mysqlRule); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -168,7 +168,7 @@ func DeleteRules(c *gin.Context) {
|
|||||||
if err := mysqlRule.Delete(); err != nil {
|
if err := mysqlRule.Delete(); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
|
|||||||
+3
-4
@@ -81,10 +81,9 @@ func (s *Server) getRules() []*Rule {
|
|||||||
|
|
||||||
func (s *Server) updateRules() error {
|
func (s *Server) updateRules() error {
|
||||||
db := database.DB.Model(new(Rule))
|
db := database.DB.Model(new(Rule))
|
||||||
|
defer s.rulesLock.Unlock()
|
||||||
s.rulesLock.Lock()
|
s.rulesLock.Lock()
|
||||||
db.Order("rank desc").Find(&s.rules)
|
return db.Order("rank desc").Find(&s.rules).Error
|
||||||
s.rulesLock.Unlock()
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) Run() {
|
func (s *Server) Run() {
|
||||||
@@ -153,7 +152,7 @@ func (s *Server) Receive(c *gin.Context) {
|
|||||||
// create new record
|
// create new record
|
||||||
r, err := NewRecord(_rule, flag, c.Request.Method, u, ip, area, string(raw))
|
r, err := NewRecord(_rule, flag, c.Request.Method, u, ip, area, string(raw))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("HTTP record[rule_id:%d] created failed :%s", _rule.ID, err.Error())
|
log.Error("HTTP record[rule_id:%d] created failed :%s", _rule.ID, err)
|
||||||
code, err := strconv.Atoi(compileTpl(c, _rule.ResponseStatusCode, vars))
|
code, err := strconv.Atoi(compileTpl(c, _rule.ResponseStatusCode, vars))
|
||||||
if err != nil || code < 100 || code > 600 {
|
if err != nil || code < 100 || code > 600 {
|
||||||
code = 400
|
code = 400
|
||||||
|
|||||||
+4
-5
@@ -41,8 +41,7 @@ func NewRecord(rule *Rule, flag, method, url, ip, area, raw string) (r *Record,
|
|||||||
RawRequest: raw,
|
RawRequest: raw,
|
||||||
Rule: *rule,
|
Rule: *rule,
|
||||||
}
|
}
|
||||||
err = database.DB.Create(r).Error
|
return r, database.DB.Create(r).Error
|
||||||
return r, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func ListRecords(c *gin.Context) {
|
func ListRecords(c *gin.Context) {
|
||||||
@@ -83,20 +82,20 @@ func ListRecords(c *gin.Context) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"result": nil,
|
"result": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if order != "desc" && order != "asc" {
|
if order != "asc" {
|
||||||
order = "desc"
|
order = "desc"
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := db.Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
if err := db.Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
|
|||||||
+7
-7
@@ -102,20 +102,20 @@ func ListRules(c *gin.Context) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"result": nil,
|
"result": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if order != "desc" && order != "asc" {
|
if order != "asc" {
|
||||||
order = "desc"
|
order = "desc"
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := db.Order("rank desc").Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
if err := db.Order("rank desc").Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -138,7 +138,7 @@ func UpsertRules(c *gin.Context) {
|
|||||||
if err := c.ShouldBind(&httpRule); err != nil {
|
if err := c.ShouldBind(&httpRule); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -151,7 +151,7 @@ func UpsertRules(c *gin.Context) {
|
|||||||
if err := httpRule.CreateOrUpdate(); err != nil {
|
if err := httpRule.CreateOrUpdate(); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"result": nil,
|
"result": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -177,7 +177,7 @@ func DeleteRules(c *gin.Context) {
|
|||||||
if err := c.ShouldBind(&httpRule); err != nil {
|
if err := c.ShouldBind(&httpRule); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -186,7 +186,7 @@ func DeleteRules(c *gin.Context) {
|
|||||||
if err := httpRule.Delete(); err != nil {
|
if err := httpRule.Delete(); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
|
|||||||
+4
-5
@@ -37,8 +37,7 @@ func NewRecord(rule *Rule, flag, path, ip, area string) (r *Record, err error) {
|
|||||||
Path: path,
|
Path: path,
|
||||||
Rule: *rule,
|
Rule: *rule,
|
||||||
}
|
}
|
||||||
err = database.DB.Create(r).Error
|
return r, database.DB.Create(r).Error
|
||||||
return r, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func ListRecords(c *gin.Context) {
|
func ListRecords(c *gin.Context) {
|
||||||
@@ -76,20 +75,20 @@ func ListRecords(c *gin.Context) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"result": nil,
|
"result": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if order != "desc" && order != "asc" {
|
if order != "asc" {
|
||||||
order = "desc"
|
order = "desc"
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := db.Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
if err := db.Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
|
|||||||
+8
-9
@@ -40,17 +40,16 @@ func (s *Server) getRules() []*Rule {
|
|||||||
|
|
||||||
func (s *Server) updateRules() error {
|
func (s *Server) updateRules() error {
|
||||||
db := database.DB.Model(new(Rule))
|
db := database.DB.Model(new(Rule))
|
||||||
|
defer s.rulesLock.Unlock()
|
||||||
s.rulesLock.Lock()
|
s.rulesLock.Lock()
|
||||||
db.Order("rank desc").Find(&s.rules)
|
return db.Order("rank desc").Find(&s.rules).Error
|
||||||
s.rulesLock.Unlock()
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) handleConnection(conn net.Conn) {
|
func (s *Server) handleConnection(conn net.Conn) {
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
|
||||||
if err := conn.SetDeadline(time.Now().Add(time.Second * 30)); err != nil {
|
if err := conn.SetDeadline(time.Now().Add(time.Second * 30)); err != nil {
|
||||||
log.Error("RMI set connection deadline error:%v", err.Error())
|
log.Error("RMI set connection deadline error:%v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ip, port, _ := net.SplitHostPort(conn.RemoteAddr().String())
|
ip, port, _ := net.SplitHostPort(conn.RemoteAddr().String())
|
||||||
@@ -58,7 +57,7 @@ func (s *Server) handleConnection(conn net.Conn) {
|
|||||||
buf := make([]byte, 1024)
|
buf := make([]byte, 1024)
|
||||||
_, err := conn.Read(buf)
|
_, err := conn.Read(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("RMI read connection error:%v", err.Error())
|
log.Error("RMI read connection error:%v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !bytes.Contains(buf, []byte{0x4a, 0x52, 0x4d, 0x49}) {
|
if !bytes.Contains(buf, []byte{0x4a, 0x52, 0x4d, 0x49}) {
|
||||||
@@ -78,7 +77,7 @@ func (s *Server) handleConnection(conn net.Conn) {
|
|||||||
|
|
||||||
_, err = conn.Write(send)
|
_, err = conn.Write(send)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("RMI write connection error: %v", err.Error())
|
log.Error("RMI write connection error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
data := make([]byte, 512)
|
data := make([]byte, 512)
|
||||||
@@ -86,7 +85,7 @@ func (s *Server) handleConnection(conn net.Conn) {
|
|||||||
for length := 0; length < 50; {
|
for length := 0; length < 50; {
|
||||||
n, err := conn.Read(data)
|
n, err := conn.Read(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("RMI read connection error: %v", err.Error())
|
log.Error("RMI read connection error: %v", err)
|
||||||
}
|
}
|
||||||
length += n
|
length += n
|
||||||
}
|
}
|
||||||
@@ -105,7 +104,7 @@ func (s *Server) handleConnection(conn net.Conn) {
|
|||||||
// create new record
|
// create new record
|
||||||
r, err := NewRecord(_rule, flag, path, ip, area)
|
r, err := NewRecord(_rule, flag, path, ip, area)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("RMI record[rule_id:%d] created failed :%s", _rule.ID, err.Error())
|
log.Error("RMI record[rule_id:%d] created failed :%s", _rule.ID, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Info("RMI record[id:%d rule:%s remote_ip:%s] has been created", r.ID, _rule.Name, ip)
|
log.Info("RMI record[id:%d rule:%s remote_ip:%s] has been created", r.ID, _rule.Name, ip)
|
||||||
@@ -150,7 +149,7 @@ func (s *Server) Run() {
|
|||||||
for {
|
for {
|
||||||
tcpConn, err := listener.Accept()
|
tcpConn, err := listener.Accept()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("RMI accept connection error: %v", err.Error())
|
log.Error("RMI accept connection error: %v", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
go s.handleConnection(tcpConn)
|
go s.handleConnection(tcpConn)
|
||||||
|
|||||||
+7
-7
@@ -93,20 +93,20 @@ func ListRules(c *gin.Context) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"result": nil,
|
"result": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if order != "desc" && order != "asc" {
|
if order != "asc" {
|
||||||
order = "desc"
|
order = "desc"
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := db.Order("rank desc").Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
if err := db.Order("rank desc").Order("id" + " " + order).Count(&count).Offset((page - 1) * 10).Limit(10).Find(&res).Error; err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -129,7 +129,7 @@ func UpsertRules(c *gin.Context) {
|
|||||||
if err := c.ShouldBind(&rmiRule); err != nil {
|
if err := c.ShouldBind(&rmiRule); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -142,7 +142,7 @@ func UpsertRules(c *gin.Context) {
|
|||||||
if err := rmiRule.CreateOrUpdate(); err != nil {
|
if err := rmiRule.CreateOrUpdate(); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"result": nil,
|
"result": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -168,7 +168,7 @@ func DeleteRules(c *gin.Context) {
|
|||||||
if err := c.ShouldBind(&rmiRule); err != nil {
|
if err := c.ShouldBind(&rmiRule); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@@ -177,7 +177,7 @@ func DeleteRules(c *gin.Context) {
|
|||||||
if err := rmiRule.Delete(); err != nil {
|
if err := rmiRule.Delete(); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"status": "failed",
|
"status": "failed",
|
||||||
"error": err.Error(),
|
"error": err,
|
||||||
"data": nil,
|
"data": nil,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user