site_management.go 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856
  1. // version
  2. package admin
  3. import (
  4. "encoding/json"
  5. "fmt"
  6. "github.com/gin-contrib/sessions"
  7. "github.com/gin-gonic/gin"
  8. "gopkg.in/mgo.v2/bson"
  9. "jy/extract"
  10. . "jy/mongodbutil"
  11. "net/http"
  12. "net/url"
  13. "qfw/util"
  14. "strings"
  15. "sync"
  16. "time"
  17. )
  18. func init() {
  19. Admin.GET("/site_management", func(c *gin.Context) {
  20. vid, _ := c.GetQuery("vid")
  21. c.HTML(
  22. http.StatusOK, "site_management.html",
  23. gin.H{"vid": vid},
  24. )
  25. })
  26. //初始化版本站点列表
  27. Admin.POST("/site_management/dataForVid", func(c *gin.Context) {
  28. vid, _ := c.GetQuery("vid")
  29. if vid == "" {
  30. data, _ := Mgo.Find("site_management", nil, `{"_id":-1}`, nil, false, -1, -1)
  31. c.JSON(200, gin.H{"data": data})
  32. } else {
  33. data, _ := Mgo.Find("site_management", bson.M{"vid": vid}, `{"_id":-1}`, nil, false, -1, -1)
  34. c.JSON(200, gin.H{"data": data})
  35. }
  36. }) //版本站点列表
  37. Admin.POST("/site_management/byId", func(c *gin.Context) {
  38. _id := c.PostForm("_id")
  39. if !bson.IsObjectIdHex(_id) {
  40. c.JSON(400, gin.H{"rep": false})
  41. return
  42. }
  43. data, _ := Mgo.FindById("site_management", _id, bson.M{})
  44. c.JSON(200, gin.H{"rep": true, "data": data})
  45. })
  46. //站点信息保存
  47. Admin.POST("/site_management/save", func(c *gin.Context) {
  48. _id, _ := c.GetPostForm("_id")
  49. data := GetPostForm(c)
  50. if data["site_name"] == nil || data["site_href"] == nil {
  51. c.JSON(400, gin.H{"rep": false})
  52. return
  53. }
  54. u, _ := url.Parse(data["site_href"].(string))
  55. if u != nil && u.Scheme == "" {
  56. data["site_href"] = "http://" + strings.TrimSpace(data["site_href"].(string))
  57. }
  58. if scripts, ok := data["site_script"].(string); ok {
  59. if _id != "" {
  60. tt, _ := Mgo.FindById("site_management", _id, `{"site_script":1}`)
  61. if dbv, ok := (*tt)["site_script"].([]interface{}); ok {
  62. for _, vv := range dbv {
  63. extract.Luacodes.Delete(vv)
  64. }
  65. } else if dbv, ok := (*tt)["site_script"].(interface{}); ok {
  66. extract.Luacodes.Delete(dbv)
  67. }
  68. }
  69. luacodes := strings.Split(scripts, ",")
  70. for _, v := range luacodes {
  71. extract.Luacodes.Store(v, true)
  72. }
  73. data["site_script"] = luacodes
  74. }
  75. if data["isuse"] == nil {
  76. data["isuse"] = "true"
  77. }
  78. if data["vid"] != nil && bson.IsObjectIdHex(data["vid"].(string)) {
  79. if aa, b := Mgo.Find("version", bson.M{"_id": bson.ObjectIdHex(data["vid"].(string))}, nil, bson.M{"version": 1}, true, -1, -1); b {
  80. data["version"] = (*aa)[0]["version"]
  81. }
  82. }
  83. if _id != "" {
  84. Mgo.UpdateById("site_management", _id, map[string]interface{}{"$set": data})
  85. c.JSON(200, gin.H{"rep": true})
  86. } else {
  87. Mgo.Save("site_management", data)
  88. c.JSON(200, gin.H{"rep": true, "vid": data["vid"]})
  89. }
  90. })
  91. //站点信息删除
  92. Admin.POST("/site_management/delete", func(c *gin.Context) {
  93. _id, _ := c.GetPostForm("_id")
  94. if _id == "" || !bson.IsObjectIdHex(_id) {
  95. c.JSON(400, gin.H{"rep": false})
  96. } else {
  97. tt, _ := Mgo.FindById("site_management", _id, `{"site_script":1}`)
  98. if dbv, ok := (*tt)["site_script"].([]interface{}); ok {
  99. for _, vv := range dbv {
  100. extract.Luacodes.Delete(vv)
  101. }
  102. } else if dbv, ok := (*tt)["site_script"].(interface{}); ok {
  103. extract.Luacodes.Delete(dbv)
  104. }
  105. Mgo.Del("site_management", bson.M{"_id": bson.ObjectIdHex(_id)})
  106. c.JSON(200, gin.H{"rep": true})
  107. }
  108. })
  109. //开关按钮
  110. Admin.POST("/site_management/use", func(c *gin.Context) {
  111. _id, _ := c.GetPostForm("_id")
  112. isuse, _ := c.GetPostForm("isuse")
  113. b := Mgo.UpdateById("site_management", _id, `{"$set":{"isuse":`+isuse+`}}`)
  114. c.JSON(200, gin.H{"rep": b})
  115. })
  116. //属性
  117. Admin.GET("/site_management/info", func(c *gin.Context) {
  118. vid := c.Query("vid")
  119. pid := c.Query("pid")
  120. c.HTML(
  121. http.StatusOK, "site_versioninfo.html",
  122. gin.H{"vid": vid, "pid": pid},
  123. )
  124. })
  125. //属性配置
  126. Admin.POST("/site_management/infodata", func(c *gin.Context) {
  127. vid := c.PostForm("vid")
  128. pid := c.PostForm("pid")
  129. list, _ := Mgo.Find("site_versioninfo", `{"vid":"`+vid+`","pid":"`+pid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  130. c.JSON(200, gin.H{"data": list, "vid": vid, "pid": pid})
  131. })
  132. //属性保存
  133. Admin.POST("/site_management/infosave", func(c *gin.Context) {
  134. _id, _ := c.GetPostForm("_id")
  135. data := GetPostForm(c)
  136. if _id != "" {
  137. Mgo.UpdateById("site_versioninfo", _id, map[string]interface{}{"$set": data})
  138. c.JSON(200, gin.H{"rep": true})
  139. } else {
  140. s_field, _ := c.GetPostForm("s_field")
  141. vid, _ := c.GetPostForm("vid")
  142. tmp, _ := Mgo.FindOne("site_versioninfo", `{"s_field":"`+s_field+`","vid":"`+vid+`","delete":false}`)
  143. if len(*tmp) > 0 {
  144. c.JSON(200, gin.H{"rep": false})
  145. } else {
  146. data["l_createtime"] = time.Now().Unix()
  147. data["s_username"] = sessions.Default(c).Get("username")
  148. data["l_lasttime"] = time.Now().Unix()
  149. data["delete"] = false
  150. pid := Mgo.Save("site_versioninfo", data)
  151. fromvid, _ := data["s_pversionid"].(string)
  152. if fromvid != "" {
  153. copyFieldRules(vid, pid, s_field, fromvid, sessions.Default(c).Get("username").(string), true)
  154. }
  155. c.JSON(200, gin.H{"rep": true})
  156. }
  157. }
  158. })
  159. //属性use按钮
  160. Admin.POST("/site_management/infouse", func(c *gin.Context) {
  161. _id, _ := c.GetPostForm("_id")
  162. isuse, _ := c.GetPostForm("isuse")
  163. b := Mgo.UpdateById("site_versioninfo", _id, `{"$set":{"isuse":`+isuse+`}}`)
  164. c.JSON(200, gin.H{"rep": b})
  165. })
  166. //属性删除按钮
  167. Admin.POST("/site_management/infodel", func(c *gin.Context) {
  168. _id, _ := c.GetPostForm("_id")
  169. b := Mgo.UpdateById("site_versioninfo", _id, `{"$set":{"delete":true}}`)
  170. v, _ := Mgo.FindById("site_versioninfo", _id, `{"vid":1}`)
  171. go DelLogic(util.ObjToString((*v)["vid"]), _id, true)
  172. //b := Mgo.Del("site_versioninfo", `{"_id":"`+_id+`"}`)
  173. c.JSON(200, gin.H{"rep": b})
  174. })
  175. //逻辑页面
  176. Admin.GET("/site_management/rulelogic", func(c *gin.Context) {
  177. vid := c.Query("vid")
  178. p_pid := c.Query("p_pid")
  179. pid := c.Query("pid")
  180. c.HTML(200, "site_rule_logiclist.html", gin.H{"vid": vid, "pid": pid, "p_pid": p_pid})
  181. })
  182. //逻辑页面数据展示
  183. Admin.POST("/site_management/rulelogic/data", func(c *gin.Context) {
  184. vid, _ := c.GetPostForm("vid")
  185. pid, _ := c.GetPostForm("pid")
  186. data, _ := Mgo.Find("site_rule_logic", `{"vid":"`+vid+`","pid":"`+pid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  187. c.JSON(200, gin.H{"data": data, "vid": vid, "pid": pid})
  188. })
  189. //逻辑页面数据保存
  190. Admin.POST("/site_management/rulelogic/save", func(c *gin.Context) {
  191. data := GetPostForm(c)
  192. _id, _ := c.GetPostForm("_id")
  193. b := false
  194. if _id == "" {
  195. data["l_createtime"] = time.Now().Unix()
  196. data["s_username"] = sessions.Default(c).Get("username")
  197. data["delete"] = false
  198. b = Mgo.Save("site_rule_logic", data) != ""
  199. } else {
  200. data["l_lasttime"] = time.Now().Unix()
  201. b = Mgo.Update("site_rule_logic", `{"_id":"`+_id+`"}`, map[string]interface{}{
  202. "$set": data,
  203. }, true, false)
  204. }
  205. c.JSON(200, gin.H{"rep": b})
  206. })
  207. //逻辑页面删除按钮
  208. Admin.POST("/site_management/rulelogic/del", func(c *gin.Context) {
  209. _id, _ := c.GetPostForm("_id")
  210. //b := Mgo.Del("rule_logic", `{"_id":"`+_id+`"}`)
  211. b := Mgo.UpdateById("site_rule_logic", _id, `{"$set":{"delete":true}}`)
  212. go DelLogicPre(_id, true)
  213. go DelLogicCore(_id, true)
  214. go DelLogicBack(_id, true)
  215. c.JSON(200, gin.H{"rep": b})
  216. })
  217. //逻辑页面启用按钮
  218. Admin.POST("/site_management/rulelogic/use", func(c *gin.Context) {
  219. _id, _ := c.GetPostForm("_id")
  220. isuse, _ := c.GetPostForm("isuse")
  221. b := Mgo.UpdateById("site_rule_logic", _id, `{"$set":{"isuse":`+isuse+`}}`)
  222. c.JSON(200, gin.H{"rep": b})
  223. })
  224. //前置规则
  225. Admin.GET("/site_management/logicpre", func(c *gin.Context) {
  226. vid := c.Query("vid")
  227. pid := c.Query("pid")
  228. sid := c.Query("sid")
  229. c.HTML(200, "site_rule_logicprelist.html", gin.H{"vid": vid, "pid": pid, "sid": sid})
  230. })
  231. Admin.POST("/site_management/logicpre/data", func(c *gin.Context) {
  232. vid, _ := c.GetPostForm("vid")
  233. pid, _ := c.GetPostForm("pid")
  234. sid, _ := c.GetPostForm("sid")
  235. data, _ := Mgo.Find("site_rule_logicpre", `{"sid":"`+sid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  236. c.JSON(200, gin.H{"data": data, "vid": vid, "pid": pid, "sid": sid})
  237. })
  238. Admin.POST("/site_management/logicpre/save", func(c *gin.Context) {
  239. data := GetPostForm(c)
  240. _id, _ := c.GetPostForm("_id")
  241. b := false
  242. if _id == "" {
  243. data["l_createtime"] = time.Now().Unix()
  244. data["s_username"] = sessions.Default(c).Get("username")
  245. data["delete"] = false
  246. s_type := data["s_type"]
  247. code := ""
  248. if s_type == "0" { //抽取前置正则E_FE
  249. code = getSyncIndex(E_FE)
  250. } else { //抽取前置脚本
  251. code = getSyncIndex(E_FL)
  252. }
  253. data["s_code"] = code
  254. b = Mgo.Save("site_rule_logicpre", data) != ""
  255. } else {
  256. data["l_lasttime"] = time.Now().Unix()
  257. b = Mgo.Update("site_rule_logicpre", `{"_id":"`+_id+`"}`, map[string]interface{}{
  258. "$set": data,
  259. }, true, false)
  260. }
  261. c.JSON(200, gin.H{"rep": b})
  262. })
  263. Admin.POST("/site_management/logicpre/del", func(c *gin.Context) {
  264. _id, _ := c.GetPostForm("_id")
  265. //b := Mgo.Del("rule_logicpre", `{"_id":"`+_id+`"}`)
  266. b := Mgo.UpdateById("site_rule_logicpre", _id, `{"$set":{"delete":true}}`)
  267. c.JSON(200, gin.H{"rep": b})
  268. })
  269. Admin.GET("/site_management/logicore", func(c *gin.Context) {
  270. vid := c.Query("vid")
  271. pid := c.Query("pid")
  272. sid := c.Query("sid")
  273. //查询属性字段
  274. tmp, _ := Mgo.FindById("site_versioninfo", pid, `{"s_field":1}`)
  275. c.HTML(200, "site_rule_logicore.html", gin.H{"vid": vid, "pid": pid, "sid": sid, "field": (*tmp)["s_field"]})
  276. })
  277. //抽取规则
  278. Admin.POST("/site_management/logicore/data", func(c *gin.Context) {
  279. vid, _ := c.GetPostForm("vid")
  280. pid, _ := c.GetPostForm("pid")
  281. sid, _ := c.GetPostForm("sid")
  282. data, _ := Mgo.Find("site_rule_logicore", `{"sid":"`+sid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  283. c.JSON(200, gin.H{"data": data, "vid": vid, "pid": pid, "sid": sid})
  284. })
  285. Admin.POST("/site_management/logicore/save", func(c *gin.Context) {
  286. data := GetPostForm(c)
  287. _id, _ := c.GetPostForm("_id")
  288. b := false
  289. if _id == "" {
  290. data["l_createtime"] = time.Now().Unix()
  291. data["s_username"] = sessions.Default(c).Get("username")
  292. data["delete"] = false
  293. s_type := data["s_type"]
  294. code := ""
  295. if s_type == "0" { //抽取逻辑正则
  296. code = getSyncIndex(E_CE)
  297. } else { //抽取逻辑脚本
  298. code = getSyncIndex(E_CL)
  299. }
  300. data["s_code"] = code
  301. b = Mgo.Save("site_rule_logicore", data) != ""
  302. } else {
  303. data["l_lasttime"] = time.Now().Unix()
  304. b = Mgo.Update("site_rule_logicore", `{"_id":"`+_id+`"}`, map[string]interface{}{
  305. "$set": data,
  306. }, true, false)
  307. }
  308. c.JSON(200, gin.H{"rep": b})
  309. })
  310. Admin.POST("/site_management/logicore/del", func(c *gin.Context) {
  311. _id, _ := c.GetPostForm("_id")
  312. //b := Mgo.Del("rule_logicore", `{"_id":"`+_id+`"}`)
  313. b := Mgo.UpdateById("site_rule_logicore", _id, `{"$set":{"delete":true}}`)
  314. c.JSON(200, gin.H{"rep": b})
  315. })
  316. Admin.POST("/site_management/logicore/use", func(c *gin.Context) {
  317. _id, _ := c.GetPostForm("_id")
  318. isuse, _ := c.GetPostForm("isuse")
  319. b := Mgo.UpdateById("site_rule_logicore", _id, `{"$set":{"isuse":`+isuse+`}}`)
  320. c.JSON(200, gin.H{"rep": b})
  321. })
  322. //后置规则
  323. Admin.GET("/site_management/logicback", func(c *gin.Context) {
  324. vid := c.Query("vid")
  325. pid := c.Query("pid")
  326. sid := c.Query("sid")
  327. //查询属性字段
  328. tmp, _ := Mgo.FindById("site_versioninfo", pid, `{"s_field":1}`)
  329. c.HTML(200, "site_rule_logicbacklist.html", gin.H{"vid": vid, "pid": pid, "sid": sid, "field": (*tmp)["s_field"]})
  330. })
  331. Admin.POST("/site_management/logicback/data", func(c *gin.Context) {
  332. vid, _ := c.GetPostForm("vid")
  333. pid, _ := c.GetPostForm("pid")
  334. sid, _ := c.GetPostForm("sid")
  335. data, _ := Mgo.Find("site_rule_logicback", `{"sid":"`+sid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  336. c.JSON(200, gin.H{"data": data, "vid": vid, "pid": pid, "sid": sid})
  337. })
  338. Admin.POST("/site_management/logicback/save", func(c *gin.Context) {
  339. data := GetPostForm(c)
  340. _id, _ := c.GetPostForm("_id")
  341. b := false
  342. if _id == "" {
  343. data["l_createtime"] = time.Now().Unix()
  344. data["s_username"] = sessions.Default(c).Get("username")
  345. data["delete"] = false
  346. s_type := data["s_type"]
  347. code := ""
  348. if s_type == "0" { //抽取后置正则E_FE
  349. code = getSyncIndex(E_BE)
  350. } else { //抽取后置脚本
  351. code = getSyncIndex(E_BL)
  352. }
  353. data["s_code"] = code
  354. b = Mgo.Save("site_rule_logicback", data) != ""
  355. } else {
  356. data["l_lasttime"] = time.Now().Unix()
  357. b = Mgo.Update("site_rule_logicback", `{"_id":"`+_id+`"}`, map[string]interface{}{
  358. "$set": data,
  359. }, true, false)
  360. }
  361. c.JSON(200, gin.H{"rep": b})
  362. })
  363. Admin.POST("/site_management/logicback/del", func(c *gin.Context) {
  364. _id, _ := c.GetPostForm("_id")
  365. b := Mgo.UpdateById("site_rule_logicback", _id, `{"$set":{"delete":true}}`)
  366. c.JSON(200, gin.H{"rep": b})
  367. })
  368. //站点后置规则
  369. Admin.GET("/site_management/ruleback", func(c *gin.Context) {
  370. version := c.Query("version")
  371. vid := c.Query("vid")
  372. c.HTML(200, "site_rule_backlist.html", gin.H{"version": version, "vid": vid})
  373. })
  374. Admin.POST("/site_management/ruleback/data", func(c *gin.Context) {
  375. version, _ := c.GetPostForm("version")
  376. data, _ := Mgo.Find("site_rule_back", `{"s_version":"`+version+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  377. c.JSON(200, gin.H{"data": data, "version": version})
  378. })
  379. Admin.POST("/site_management/ruleback/save", func(c *gin.Context) {
  380. data := GetPostForm(c)
  381. _id, _ := c.GetPostForm("_id")
  382. b := false
  383. if _id == "" {
  384. data["l_createtime"] = time.Now().Unix()
  385. data["s_username"] = sessions.Default(c).Get("username")
  386. data["delete"] = false
  387. s_type := data["s_type"]
  388. code := ""
  389. if s_type == "0" { //前置正则
  390. code = getSyncIndex(B_E)
  391. } else { //前置lua脚本
  392. code = getSyncIndex(B_L)
  393. }
  394. data["s_code"] = code
  395. b = Mgo.Save("site_rule_back", data) != ""
  396. } else {
  397. data["l_lasttime"] = time.Now().Unix()
  398. b = Mgo.Update("site_rule_back", `{"_id":"`+_id+`"}`, map[string]interface{}{
  399. "$set": data,
  400. }, true, false)
  401. }
  402. c.JSON(200, gin.H{"rep": b})
  403. })
  404. Admin.POST("/site_management/ruleback/searchbyid", func(c *gin.Context) {
  405. _id, _ := c.GetPostForm("_id")
  406. data, _ := Mgo.FindById("/site_rule_back", _id, nil)
  407. c.JSON(200, gin.H{"rep": data})
  408. })
  409. Admin.POST("/site_management/ruleback/del", func(c *gin.Context) {
  410. _id, _ := c.GetPostForm("_id")
  411. //b := Mgo.Del("rule_back", `{"_id":"`+_id+`"}`)
  412. b := Mgo.UpdateById("site_rule_back", _id, `{"$set":{"delete":true}}`)
  413. c.JSON(200, gin.H{"rep": b})
  414. })
  415. //tag
  416. Admin.GET("/site_management/tag", func(c *gin.Context) {
  417. version := c.Query("version")
  418. vid := c.Query("vid")
  419. c.HTML(200, "site_taglist.html", gin.H{"version": version, "vid": vid})
  420. })
  421. Admin.POST("/site_management/tag/data", TagDataSite)
  422. Admin.POST("/site_management/tag/save", TagSaveSite)
  423. Admin.POST("/site_management/tag/del", TagDelSite)
  424. //onetag
  425. Admin.GET("/site_management/onetag", func(c *gin.Context) {
  426. version := c.Query("version")
  427. tagname := c.Query("tagname")
  428. tp := c.Query("tp")
  429. parentid := c.Query("parentid")
  430. c.HTML(200, "site_onetag.html", gin.H{"version": version, "tagname": tagname, "tp": tp, "parentid": parentid})
  431. })
  432. Admin.POST("/site_management/onetag/data", OneTagDataSite)
  433. Admin.POST("/site_management/onetag/create", OneTagCreateSite)
  434. Admin.POST("/site_management/onetag/del", OneTagDelSite)
  435. Admin.POST("/site_management/onetag/editsave", OneTagEditSaveSite)
  436. Admin.POST("/site_management/onetag/searchone", OneTagSearchSite)
  437. //清理函数
  438. Admin.GET("/site_management/clear", func(c *gin.Context) {
  439. version := c.Query("version")
  440. field, _ := Mgo.Find("fields", nil, `{"_id":-1}`, nil, false, -1, -1)
  441. c.HTML(200, "site_clear.html", gin.H{"version": version, "field": field})
  442. })
  443. Admin.POST("/site_management/clear/data", func(c *gin.Context) {
  444. version, _ := c.GetPostForm("version")
  445. data, _ := Mgo.Find("site_cleanup", `{"s_version":"`+version+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  446. for _, d := range *data {
  447. timeStr := time.Unix(d["l_intime"].(int64), 0).Format(Date_Short_Layout)
  448. d["l_intime"] = timeStr
  449. }
  450. c.JSON(200, gin.H{"data": data})
  451. }) //加载数据
  452. Admin.POST("/site_management/clear/save", func(c *gin.Context) {
  453. clearTmpArr := make([]string, 0)
  454. clear := make([]string, 0)
  455. clearInfo := make([]string, 0)
  456. save := make(map[string]interface{})
  457. clearJsonStr, _ := c.GetPostForm("clearJsonStr")
  458. err := json.Unmarshal([]byte(clearJsonStr), &clearTmpArr)
  459. if err == nil && len(clearTmpArr) > 0 {
  460. for _, v := range clearTmpArr {
  461. clearTmpSplitArr := strings.Split(v, "+")
  462. clearInfo = append(clearInfo, clearTmpSplitArr[0])
  463. clear = append(clear, clearTmpSplitArr[1])
  464. }
  465. } else {
  466. c.JSON(200, gin.H{"rep": false})
  467. return
  468. }
  469. _id, _ := c.GetPostForm("_id")
  470. if _id == "" { //保存
  471. version, _ := c.GetPostForm("version")
  472. username, _ := c.GetPostForm("username")
  473. fieldname, _ := c.GetPostForm("fieldname")
  474. fieldArr := strings.Split(fieldname, "+")
  475. data, _ := Mgo.FindOne("site_cleanup", `{"s_version":"`+version+`","s_field":"`+fieldArr[1]+`","delete":false}`)
  476. if len(*data) > 0 { //创建判重
  477. c.JSON(200, gin.H{"rep": false})
  478. return
  479. }
  480. save = map[string]interface{}{
  481. "s_version": version,
  482. "s_creater": username,
  483. "l_intime": time.Now().Unix(),
  484. "s_field": fieldArr[1],
  485. "s_name": fieldArr[0],
  486. "clear": clear,
  487. "clearInfo": clearInfo,
  488. "delete": false,
  489. }
  490. b := Mgo.Save("site_cleanup", save)
  491. if b != "" {
  492. c.JSON(200, gin.H{"rep": true})
  493. } else {
  494. c.JSON(200, gin.H{"rep": false})
  495. }
  496. } else { //更新
  497. save = map[string]interface{}{
  498. "clear": clear,
  499. "clearInfo": clearInfo,
  500. "l_intime": time.Now().Unix(),
  501. }
  502. f := Mgo.Update("site_cleanup", `{"_id":"`+_id+`"}`, map[string]interface{}{"$set": save}, true, false)
  503. if f {
  504. c.JSON(200, gin.H{"rep": true})
  505. } else {
  506. c.JSON(200, gin.H{"rep": false})
  507. }
  508. }
  509. }) //保存数据
  510. Admin.POST("/site_management/clear/del", func(c *gin.Context) {
  511. _id, _ := c.GetPostForm("_id")
  512. b := Mgo.Update("site_cleanup", `{"_id":"`+_id+`"}`, map[string]interface{}{
  513. "$set": map[string]interface{}{"delete": true},
  514. }, false, false)
  515. if b {
  516. c.JSON(200, gin.H{"rep": true})
  517. } else {
  518. c.JSON(200, gin.H{"rep": false})
  519. }
  520. }) //删除数据
  521. //校验
  522. //正则规则验证
  523. Admin.POST("/site_management/check/prerule", func(c *gin.Context) {
  524. rule, _ := c.GetPostForm("s_rule")
  525. con, _ := c.GetPostForm("s_testcon")
  526. str := checkPreReg(con, rule)
  527. c.JSON(200, gin.H{"rep": str})
  528. })
  529. Admin.POST("/site_management/check/extrule", func(c *gin.Context) {
  530. rule, _ := c.GetPostForm("s_rule")
  531. con, _ := c.GetPostForm("s_testcon")
  532. field, _ := c.GetPostForm("s_field")
  533. tmp := checkCoreReg(field, con, rule)
  534. c.JSON(200, gin.H{"rep": tmp})
  535. })
  536. Admin.POST("/site_management/check/backrule", func(c *gin.Context) {
  537. rule, _ := c.GetPostForm("s_rule")
  538. con, _ := c.GetPostForm("s_testcon")
  539. str := checkBackReg(con, rule)
  540. c.JSON(200, gin.H{"rep": str})
  541. })
  542. //lua脚本验证
  543. //通用前置验证
  544. Admin.GET("/site_management/check/lua/pre", func(c *gin.Context) {
  545. version := c.Query("version")
  546. s_code := c.Query("s_code")
  547. rule, _ := Mgo.FindOne("site_rule_pre", `{"s_code":"`+s_code+`"}`)
  548. (*rule)["_id"] = util.BsonIdToSId((*rule)["_id"])
  549. c.HTML(200, "site_check_luapre.html", gin.H{"version": version, "code": s_code, "rule": &rule, "infos": getCheckInfos()})
  550. })
  551. Admin.POST("/site_management/check/lua/prerule", func(c *gin.Context) {
  552. luascript, _ := c.GetPostForm("s_luascript")
  553. infoid, _ := c.GetPostForm("infoid")
  554. code, _ := c.GetPostForm("s_code")
  555. name, _ := c.GetPostForm("s_name")
  556. extinfo := checkPreScript(code, name, infoid, luascript)
  557. c.JSON(200, gin.H{"rep": extinfo})
  558. })
  559. //通用后置验证
  560. Admin.GET("/site_management/check/lua/back", func(c *gin.Context) {
  561. version := c.Query("version")
  562. s_code := c.Query("s_code")
  563. rule, _ := Mgo.FindOne("site_rule_back", `{"s_code":"`+s_code+`"}`)
  564. (*rule)["_id"] = util.BsonIdToSId((*rule)["_id"])
  565. c.HTML(200, "site_check_luaback.html", gin.H{"version": version, "code": s_code, "rule": &rule, "infos": getCheckInfos()})
  566. })
  567. Admin.POST("/site_management/check/lua/backrule", func(c *gin.Context) {
  568. luascript, _ := c.GetPostForm("s_luascript")
  569. infoid, _ := c.GetPostForm("infoid")
  570. version, _ := c.GetPostForm("s_version")
  571. code, _ := c.GetPostForm("s_code")
  572. name, _ := c.GetPostForm("s_name")
  573. extinfo := checkBackScript("site_rule_back", code, name, version, infoid, luascript, true)
  574. c.JSON(200, gin.H{"rep": extinfo})
  575. })
  576. //抽取前置验证
  577. Admin.GET("/site_management/check/lua/corepre", func(c *gin.Context) {
  578. vid := c.Query("vid")
  579. pid := c.Query("pid")
  580. sid := c.Query("sid")
  581. s_code := c.Query("s_code")
  582. rule, _ := Mgo.FindOne("site_rule_logicpre", `{"s_code":"`+s_code+`"}`)
  583. (*rule)["_id"] = util.BsonIdToSId((*rule)["_id"])
  584. c.HTML(200,
  585. "site_check_luacorepre.html",
  586. gin.H{"code": s_code, "rule": &rule, "infos": getCheckInfos(),
  587. "pid": pid, "vid": vid, "sid": sid},
  588. )
  589. })
  590. Admin.POST("/site_management/check/lua/coreprerule", func(c *gin.Context) {
  591. luascript, _ := c.GetPostForm("s_luascript")
  592. infoid, _ := c.GetPostForm("infoid")
  593. code, _ := c.GetPostForm("s_code")
  594. name, _ := c.GetPostForm("s_name")
  595. extinfo := checkPreScript(code, name, infoid, luascript)
  596. c.JSON(200, gin.H{"rep": extinfo})
  597. })
  598. //抽取验证
  599. Admin.GET("/site_management/check/lua/core", func(c *gin.Context) {
  600. vid := c.Query("vid")
  601. pid := c.Query("pid")
  602. sid := c.Query("sid")
  603. s_code := c.Query("s_code")
  604. rule, _ := Mgo.FindOne("site_rule_logicore", `{"s_code":"`+s_code+`"}`)
  605. (*rule)["_id"] = util.BsonIdToSId((*rule)["_id"])
  606. c.HTML(200,
  607. "site_check_luacore.html",
  608. gin.H{"code": s_code, "rule": &rule, "infos": getCheckInfos(),
  609. "pid": pid, "vid": vid, "sid": sid},
  610. )
  611. })
  612. Admin.POST("/site_management/check/lua/corerule", func(c *gin.Context) {
  613. luascript, _ := c.GetPostForm("s_luascript")
  614. infoid, _ := c.GetPostForm("infoid")
  615. code, _ := c.GetPostForm("s_code")
  616. name, _ := c.GetPostForm("s_name")
  617. extinfo := checkCoreScript(code, name, infoid, luascript)
  618. c.JSON(200, gin.H{"rep": extinfo})
  619. })
  620. //抽取后置验证
  621. Admin.GET("/site_management/check/lua/coreback", func(c *gin.Context) {
  622. vid := c.Query("vid")
  623. pid := c.Query("pid")
  624. sid := c.Query("sid")
  625. s_code := c.Query("s_code")
  626. rule, _ := Mgo.FindOne("site_rule_logicback", `{"s_code":"`+s_code+`"}`)
  627. (*rule)["_id"] = util.BsonIdToSId((*rule)["_id"])
  628. c.HTML(200,
  629. "site_check_luacoreback.html",
  630. gin.H{"code": s_code, "rule": &rule, "infos": getCheckInfos(),
  631. "pid": pid, "vid": vid, "sid": sid},
  632. )
  633. })
  634. Admin.POST("/site_management/check/lua/corebackrule", func(c *gin.Context) {
  635. luascript, _ := c.GetPostForm("s_luascript")
  636. infoid, _ := c.GetPostForm("infoid")
  637. code, _ := c.GetPostForm("s_code")
  638. name, _ := c.GetPostForm("s_name")
  639. vid, _ := c.GetPostForm("vid")
  640. version, _ := Mgo.FindById("version", vid, `{"version":1}`)
  641. extinfo := checkBackScript("rule_back", code, name, util.ObjToString((*version)["version"]), infoid, luascript, true)
  642. c.JSON(200, gin.H{"rep": extinfo})
  643. })
  644. //清理逻辑脚本验证
  645. Admin.GET("/site_management/check/lua/clearlogic", func(c *gin.Context) {
  646. vid := c.Query("vid")
  647. pid := c.Query("pid")
  648. s_code := c.Query("s_code")
  649. rule, _ := Mgo.FindOne("site_clearulelogic", `{"s_code":"`+s_code+`"}`)
  650. (*rule)["_id"] = util.BsonIdToSId((*rule)["_id"])
  651. c.HTML(200,
  652. "site_check_luaclearlogic.html",
  653. gin.H{"code": s_code, "rule": &rule, "infos": getCheckInfos(),
  654. "pid": pid, "vid": vid},
  655. )
  656. })
  657. Admin.POST("/site_management/check/lua/checkclearlua", func(c *gin.Context) {
  658. luascript, _ := c.GetPostForm("s_luascript")
  659. code, _ := c.GetPostForm("s_code")
  660. name, _ := c.GetPostForm("s_name")
  661. rid, _ := c.GetPostForm("rid")
  662. resultcoll, _ := c.GetPostForm("resultcoll")
  663. if rid == "" || resultcoll == "" {
  664. c.JSON(200, gin.H{"rep": nil})
  665. } else {
  666. extinfo := checkClearScript(code, name, resultcoll, rid, luascript)
  667. c.JSON(200, gin.H{"rep": extinfo})
  668. }
  669. })
  670. }
  671. //标签库列表
  672. func TagDataSite(c *gin.Context) {
  673. version, _ := c.GetPostForm("version")
  674. data, _ := Mgo.Find("site_tag", `{"s_version":"`+version+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  675. for _, d := range *data {
  676. timeStr := time.Unix(d["l_intime"].(int64), 0).Format(Date_Short_Layout)
  677. d["l_intime"] = timeStr
  678. }
  679. c.JSON(200, gin.H{"data": data})
  680. }
  681. //添加标签
  682. func TagSaveSite(c *gin.Context) {
  683. tagname, _ := c.GetPostForm("tagname")
  684. version, _ := c.GetPostForm("version")
  685. username, _ := c.GetPostForm("username")
  686. tp, _ := c.GetPostForm("tp")
  687. data, _ := Mgo.FindOne("site_tag", `{"s_tagname":"`+tagname+`","s_version":"`+version+`","delete":false}`)
  688. if len(*data) > 0 { //判重,防止添加name相同的标签
  689. c.JSON(200, gin.H{"rep": false})
  690. return
  691. }
  692. save := map[string]interface{}{
  693. "s_tagname": tagname,
  694. "s_version": version,
  695. "s_creater": username,
  696. "s_type": tp,
  697. "l_intime": time.Now().Unix(),
  698. "delete": false,
  699. }
  700. b := Mgo.Save("site_tag", save)
  701. if b != "" {
  702. c.JSON(200, gin.H{"rep": true})
  703. } else {
  704. c.JSON(200, gin.H{"rep": false})
  705. }
  706. }
  707. //删除标签
  708. func TagDelSite(c *gin.Context) {
  709. _id, _ := c.GetPostForm("_id")
  710. b := Mgo.Update("site_tag", `{"_id":"`+_id+`"}`, map[string]interface{}{
  711. "$set": map[string]interface{}{"delete": true},
  712. }, false, false)
  713. data, _ := Mgo.Find("site_tagdetailinfo", `{"s_parentid":"`+_id+`"}`, `{"_id":-1}`, nil, false, -1, -1)
  714. if len(*data) > 0 { //删除父标签下所有详细标签
  715. for _, d := range *data {
  716. cid := d["_id"].(bson.ObjectId).Hex()
  717. //Mgo.Del("tagdetailinfo", `{"_id":"`+cid+`"}`)
  718. Mgo.Update("site_tagdetailinfo", `{"_id":"`+cid+`"}`, map[string]interface{}{
  719. "$set": map[string]interface{}{"delete": true},
  720. }, false, false)
  721. }
  722. }
  723. if b {
  724. c.JSON(200, gin.H{"rep": true})
  725. } else {
  726. c.JSON(200, gin.H{"rep": false})
  727. }
  728. }
  729. //查找某个tag的信息
  730. func OneTagDataSite(c *gin.Context) {
  731. version, _ := c.GetPostForm("version")
  732. parentid, _ := c.GetPostForm("parentid")
  733. data, _ := Mgo.Find("site_tagdetailinfo", `{"s_version":"`+version+`","s_parentid":"`+parentid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
  734. for _, d := range *data {
  735. timeStr := time.Unix(d["l_intime"].(int64), 0).Format(Date_Short_Layout)
  736. d["l_intime"] = timeStr
  737. }
  738. c.JSON(200, gin.H{"data": data})
  739. }
  740. //添加详细标签
  741. func OneTagCreateSite(c *gin.Context) {
  742. name, _ := c.GetPostForm("name")
  743. version, _ := c.GetPostForm("version")
  744. parentid, _ := c.GetPostForm("parentid")
  745. data, _ := Mgo.FindOne("site_tagdetailinfo", `{"s_name":"`+name+`","s_parentid":"`+parentid+`","s_version":"`+version+`","delete":false}`)
  746. if len(*data) > 0 { //判重
  747. c.JSON(200, gin.H{"rep": false})
  748. return
  749. }
  750. tp, _ := c.GetPostForm("tp")
  751. field, _ := c.GetPostForm("field")
  752. content, _ := c.GetPostForm("content")
  753. username, _ := c.GetPostForm("username")
  754. pratagname, _ := c.GetPostForm("pratagname")
  755. var jsondata interface{}
  756. err := json.Unmarshal([]byte(content), &jsondata)
  757. if err != nil { //不是json格式
  758. c.JSON(200, gin.H{"rep": false})
  759. return
  760. }
  761. save := make(map[string]interface{})
  762. save = map[string]interface{}{
  763. "s_pratagname": pratagname,
  764. "s_name": name,
  765. "s_field": field,
  766. "s_version": version,
  767. "s_creater": username,
  768. "s_type": tp,
  769. "l_intime": time.Now().Unix(),
  770. "content": jsondata,
  771. "s_parentid": parentid,
  772. "delete": false,
  773. }
  774. b := Mgo.Save("site_tagdetailinfo", save)
  775. if b != "" {
  776. c.JSON(200, gin.H{"rep": true})
  777. } else {
  778. c.JSON(200, gin.H{"rep": false})
  779. }
  780. }
  781. //删除某个详细标签
  782. func OneTagDelSite(c *gin.Context) {
  783. _id, _ := c.GetPostForm("_id")
  784. b := Mgo.Update("site_tagdetailinfo", `{"_id":"`+_id+`"}`, map[string]interface{}{
  785. "$set": map[string]interface{}{"delete": true},
  786. }, false, false)
  787. if b {
  788. c.JSON(200, gin.H{"rep": true})
  789. } else {
  790. c.JSON(200, gin.H{"rep": false})
  791. }
  792. }
  793. //修改某个详细标签
  794. func OneTagEditSaveSite(c *gin.Context) {
  795. _id, _ := c.GetPostForm("_id")
  796. content, _ := c.GetPostForm("content")
  797. var jsondata interface{}
  798. err := json.Unmarshal([]byte(content), &jsondata)
  799. if err != nil { //不是json格式
  800. c.JSON(200, gin.H{"rep": false})
  801. return
  802. }
  803. set := make(map[string]interface{})
  804. set["content"] = jsondata
  805. if jsondata != nil {
  806. b := Mgo.Update("site_tagdetailinfo", `{"_id":"`+_id+`"}`, map[string]interface{}{"$set": set}, false, false)
  807. if b {
  808. c.JSON(200, gin.H{"rep": true})
  809. } else {
  810. c.JSON(200, gin.H{"rep": false})
  811. }
  812. } else {
  813. c.JSON(200, gin.H{"rep": false})
  814. }
  815. }
  816. //根据id查找某个标签
  817. func OneTagSearchSite(c *gin.Context) {
  818. _id, _ := c.GetPostForm("_id")
  819. data, _ := Mgo.FindOne("site_tagdetailinfo", `{"_id":"`+_id+`"}`)
  820. c.JSON(200, gin.H{"data": data})
  821. }
  822. var sysn sync.RWMutex
  823. func getSyncIndex(code string) string {
  824. tmp := ""
  825. sysn.Lock()
  826. Mgo.Update("site_rule_code", `{"code":"`+code+`"}`, bson.M{"$inc": bson.M{"index": 1}}, true, false)
  827. data, _ := Mgo.FindOne("site_rule_code", `{"code":"`+code+`"}`)
  828. sysn.Unlock()
  829. if len(*data) > 0 {
  830. tmp = code + "_" + fmt.Sprint((*data)["index"])
  831. }
  832. return tmp
  833. }