rule.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. // rule
  2. package admin
  3. import (
  4. . "jy/mongodbutil"
  5. "regexp"
  6. "strings"
  7. "time"
  8. "github.com/gin-gonic/gin"
  9. )
  10. var Date_Short_Layout = "2006-01-02"
  11. func init() {
  12. //rulepre
  13. Admin.GET("/rulepre", func(c *gin.Context) {
  14. version := c.Query("version")
  15. c.HTML(200, "rule_prelist.html", gin.H{"version": version})
  16. })
  17. Admin.POST("/rulepre/data", RulePreData)
  18. Admin.POST("/rulepre/save", RulePreSave)
  19. Admin.POST("/rulepre/searchbyid", RulePreSearchById)
  20. Admin.POST("/rulepre/del", RulePreDel)
  21. Admin.GET("/rulepre/newlua", RulePreNewLua)
  22. //ruletag
  23. Admin.GET("/ruletag", func(c *gin.Context) {
  24. version := c.Query("version")
  25. c.HTML(200, "rule_taglist.html", gin.H{"version": version})
  26. })
  27. Admin.POST("/ruletag/data", RuleTagData)
  28. Admin.POST("/ruletag/save", RuleTagSave)
  29. Admin.POST("/ruletag/del", RuleTagDel)
  30. Admin.POST("/ruletag/editsave", RuleTagEditSave)
  31. }
  32. //前置规则列表
  33. func RulePreData(c *gin.Context) {
  34. version, _ := c.GetPostForm("version")
  35. data, _ := Mgo.Find("rule_pre", `{"version":"`+version+`"}`, `{"_id":-1}`, nil, false, -1, -1)
  36. c.JSON(200, gin.H{"data": data, "version": version})
  37. }
  38. //前置规则创建
  39. func RulePreSave(c *gin.Context) {
  40. stype, _ := c.GetPostForm("type")
  41. name, _ := c.GetPostForm("name")
  42. version, _ := c.GetPostForm("version")
  43. descript, _ := c.GetPostForm("descript")
  44. username, _ := c.GetPostForm("username")
  45. field, _ := c.GetPostForm("field")
  46. rule, _ := c.GetPostForm("rule")
  47. luastr, _ := c.GetPostForm("luastr")
  48. if stype == "0" { //正则
  49. if name == "" || rule == "" {
  50. c.JSON(200, gin.H{"rep": false, "msg": "表单不完整"})
  51. return
  52. }
  53. } else { //lua脚本
  54. if luastr == "" {
  55. c.JSON(200, gin.H{"rep": false, "msg": "表单不完整"})
  56. return
  57. }
  58. }
  59. data := map[string]interface{}{
  60. "name": name,
  61. "version": version,
  62. "type": stype,
  63. "descript": descript,
  64. "username": username,
  65. "rule": rule,
  66. "field": field,
  67. "luastr": luastr,
  68. "intime": time.Now().Unix(),
  69. }
  70. b := Mgo.Update("rule_pre", `{"name":"`+name+`","version":"`+version+`"}`, data, true, false)
  71. if b {
  72. c.JSON(200, gin.H{"rep": true})
  73. } else {
  74. c.JSON(200, gin.H{"rep": false})
  75. }
  76. }
  77. func RulePreSearchById(c *gin.Context) {
  78. _id, _ := c.GetPostForm("_id")
  79. data, _ := Mgo.FindById("rule_pre", _id, nil)
  80. c.JSON(200, gin.H{"rep": data})
  81. }
  82. func RulePreDel(c *gin.Context) {
  83. _id, _ := c.GetPostForm("_id")
  84. b := Mgo.Del("rule_pre", `{"_id":"`+_id+`"}`)
  85. c.JSON(200, gin.H{"rep": b})
  86. }
  87. func RulePreNewLua(c *gin.Context) {
  88. version := c.Query("version")
  89. _id := c.Query("_id")
  90. data := map[string]interface{}{}
  91. if _id != "" {
  92. tmp, _ := Mgo.FindById("rule_pre", _id, nil)
  93. data = *tmp
  94. }
  95. c.HTML(200, "rule_prelua.html", gin.H{"version": version, "data": data})
  96. }
  97. //标签库列表
  98. func RuleTagData(c *gin.Context) {
  99. version, _ := c.GetPostForm("version")
  100. data, _ := Mgo.Find("rule_tag", `{"version":"`+version+`"}`, `{"_id":-1}`, nil, false, -1, -1)
  101. for _, d := range *data {
  102. timeStr := time.Unix(d["intime"].(int64), 0).Format(Date_Short_Layout)
  103. d["intime"] = timeStr
  104. }
  105. c.JSON(200, gin.H{"data": data})
  106. }
  107. //添加标签
  108. func RuleTagSave(c *gin.Context) {
  109. name, _ := c.GetPostForm("name")
  110. version, _ := c.GetPostForm("version")
  111. contentStr, _ := c.GetPostForm("content")
  112. username, _ := c.GetPostForm("username")
  113. tp, _ := c.GetPostForm("tp")
  114. content := strings.Split(contentStr, ",")
  115. data, _ := Mgo.FindOne("rule_tag", `{"name":"`+name+`"}`)
  116. if len(*data) > 0 { //判重,防止添加name相同的标签
  117. c.JSON(200, gin.H{"rep": false})
  118. return
  119. }
  120. if tp == "正则" { //验证是否是正则
  121. for _, ct := range content {
  122. _, err := regexp.Compile(ct)
  123. if err != nil {
  124. c.JSON(200, gin.H{"rep": false})
  125. return
  126. }
  127. }
  128. }
  129. save := map[string]interface{}{
  130. "name": name,
  131. "version": version,
  132. "content": content,
  133. "creater": username,
  134. "intime": time.Now().Unix(),
  135. "type": tp,
  136. }
  137. b := Mgo.Save("rule_tag", save)
  138. if b != "" {
  139. c.JSON(200, gin.H{"rep": true})
  140. } else {
  141. c.JSON(200, gin.H{"rep": false})
  142. }
  143. }
  144. //删除标签
  145. func RuleTagDel(c *gin.Context) {
  146. _id, _ := c.GetPostForm("_id")
  147. b := Mgo.Del("rule_tag", `{"_id":"`+_id+`"}`)
  148. if b {
  149. c.JSON(200, gin.H{"rep": true})
  150. } else {
  151. c.JSON(200, gin.H{"rep": false})
  152. }
  153. }
  154. //编辑保存
  155. func RuleTagEditSave(c *gin.Context) {
  156. _id, _ := c.GetPostForm("_id")
  157. contentStr, _ := c.GetPostForm("content")
  158. content := strings.Split(contentStr, ",")
  159. data, _ := Mgo.FindOne("rule_tag", `{"_id":"`+_id+`"}`)
  160. if (*data)["type"] == "正则" { //验证是否是正则
  161. for _, ct := range content {
  162. _, err := regexp.Compile(ct)
  163. if err != nil {
  164. c.JSON(200, gin.H{"rep": false})
  165. return
  166. }
  167. }
  168. }
  169. if len(*data) > 0 {
  170. set := map[string]interface{}{
  171. "name": (*data)["name"],
  172. "version": (*data)["version"],
  173. "creater": (*data)["creater"],
  174. "intime": (*data)["intime"],
  175. "type": (*data)["type"],
  176. "content": content,
  177. }
  178. b := Mgo.Update("rule_tag", `{"_id":"`+_id+`"}`, set, false, false)
  179. if b {
  180. c.JSON(200, gin.H{"rep": true})
  181. } else {
  182. c.JSON(200, gin.H{"rep": false})
  183. }
  184. } else {
  185. c.JSON(200, gin.H{"rep": false})
  186. }
  187. }