// rule package admin import ( . "jy/mongodbutil" "regexp" "strings" "time" "github.com/gin-gonic/gin" ) var Date_Short_Layout = "2006-01-02" func init() { //rulepre Admin.GET("/rulepre", func(c *gin.Context) { version := c.Query("version") c.HTML(200, "rule_prelist.html", gin.H{"version": version}) }) Admin.POST("/rulepre/data", RulePreData) Admin.POST("/rulepre/save", RulePreSave) Admin.POST("/rulepre/searchbyid", RulePreSearchById) Admin.POST("/rulepre/del", RulePreDel) Admin.GET("/rulepre/newlua", RulePreNewLua) //ruletag Admin.GET("/ruletag", func(c *gin.Context) { version := c.Query("version") c.HTML(200, "rule_taglist.html", gin.H{"version": version}) }) Admin.POST("/ruletag/data", RuleTagData) Admin.POST("/ruletag/save", RuleTagSave) Admin.POST("/ruletag/del", RuleTagDel) Admin.POST("/ruletag/editsave", RuleTagEditSave) } //前置规则列表 func RulePreData(c *gin.Context) { version, _ := c.GetPostForm("version") data, _ := Mgo.Find("rule_pre", `{"version":"`+version+`"}`, `{"_id":-1}`, nil, false, -1, -1) c.JSON(200, gin.H{"data": data, "version": version}) } //前置规则创建 func RulePreSave(c *gin.Context) { stype, _ := c.GetPostForm("type") name, _ := c.GetPostForm("name") version, _ := c.GetPostForm("version") descript, _ := c.GetPostForm("descript") username, _ := c.GetPostForm("username") field, _ := c.GetPostForm("field") rule, _ := c.GetPostForm("rule") luastr, _ := c.GetPostForm("luastr") if stype == "0" { //正则 if name == "" || rule == "" { c.JSON(200, gin.H{"rep": false, "msg": "表单不完整"}) return } } else { //lua脚本 if luastr == "" { c.JSON(200, gin.H{"rep": false, "msg": "表单不完整"}) return } } data := map[string]interface{}{ "name": name, "version": version, "type": stype, "descript": descript, "username": username, "rule": rule, "field": field, "luastr": luastr, "intime": time.Now().Unix(), } b := Mgo.Update("rule_pre", `{"name":"`+name+`","version":"`+version+`"}`, data, true, false) if b { c.JSON(200, gin.H{"rep": true}) } else { c.JSON(200, gin.H{"rep": false}) } } func RulePreSearchById(c *gin.Context) { _id, _ := c.GetPostForm("_id") data, _ := Mgo.FindById("rule_pre", _id, nil) c.JSON(200, gin.H{"rep": data}) } func RulePreDel(c *gin.Context) { _id, _ := c.GetPostForm("_id") b := Mgo.Del("rule_pre", `{"_id":"`+_id+`"}`) c.JSON(200, gin.H{"rep": b}) } func RulePreNewLua(c *gin.Context) { version := c.Query("version") _id := c.Query("_id") data := map[string]interface{}{} if _id != "" { tmp, _ := Mgo.FindById("rule_pre", _id, nil) data = *tmp } c.HTML(200, "rule_prelua.html", gin.H{"version": version, "data": data}) } //标签库列表 func RuleTagData(c *gin.Context) { version, _ := c.GetPostForm("version") data, _ := Mgo.Find("rule_tag", `{"version":"`+version+`"}`, `{"_id":-1}`, nil, false, -1, -1) for _, d := range *data { timeStr := time.Unix(d["intime"].(int64), 0).Format(Date_Short_Layout) d["intime"] = timeStr } c.JSON(200, gin.H{"data": data}) } //添加标签 func RuleTagSave(c *gin.Context) { name, _ := c.GetPostForm("name") version, _ := c.GetPostForm("version") contentStr, _ := c.GetPostForm("content") username, _ := c.GetPostForm("username") tp, _ := c.GetPostForm("tp") content := strings.Split(contentStr, ",") data, _ := Mgo.FindOne("rule_tag", `{"name":"`+name+`"}`) if len(*data) > 0 { //判重,防止添加name相同的标签 c.JSON(200, gin.H{"rep": false}) return } if tp == "正则" { //验证是否是正则 for _, ct := range content { _, err := regexp.Compile(ct) if err != nil { c.JSON(200, gin.H{"rep": false}) return } } } save := map[string]interface{}{ "name": name, "version": version, "content": content, "creater": username, "intime": time.Now().Unix(), "type": tp, } b := Mgo.Save("rule_tag", save) if b != "" { c.JSON(200, gin.H{"rep": true}) } else { c.JSON(200, gin.H{"rep": false}) } } //删除标签 func RuleTagDel(c *gin.Context) { _id, _ := c.GetPostForm("_id") b := Mgo.Del("rule_tag", `{"_id":"`+_id+`"}`) if b { c.JSON(200, gin.H{"rep": true}) } else { c.JSON(200, gin.H{"rep": false}) } } //编辑保存 func RuleTagEditSave(c *gin.Context) { _id, _ := c.GetPostForm("_id") contentStr, _ := c.GetPostForm("content") content := strings.Split(contentStr, ",") data, _ := Mgo.FindOne("rule_tag", `{"_id":"`+_id+`"}`) if (*data)["type"] == "正则" { //验证是否是正则 for _, ct := range content { _, err := regexp.Compile(ct) if err != nil { c.JSON(200, gin.H{"rep": false}) return } } } if len(*data) > 0 { set := map[string]interface{}{ "name": (*data)["name"], "version": (*data)["version"], "creater": (*data)["creater"], "intime": (*data)["intime"], "type": (*data)["type"], "content": content, } b := Mgo.Update("rule_tag", `{"_id":"`+_id+`"}`, set, false, false) if b { c.JSON(200, gin.H{"rep": true}) } else { c.JSON(200, gin.H{"rep": false}) } } else { c.JSON(200, gin.H{"rep": false}) } }