1
0

stra.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package routes
  2. import (
  3. "fmt"
  4. "log"
  5. "net/http"
  6. "strings"
  7. "github.com/710leo/urlooker/modules/web/g"
  8. "github.com/710leo/urlooker/modules/web/http/errors"
  9. "github.com/710leo/urlooker/modules/web/http/param"
  10. "github.com/710leo/urlooker/modules/web/http/render"
  11. "github.com/710leo/urlooker/modules/web/model"
  12. "github.com/710leo/urlooker/modules/web/utils"
  13. )
  14. func AddStrategyGet(w http.ResponseWriter, r *http.Request) {
  15. render.Put(r, "Regions", g.Config.IDC)
  16. render.HTML(r, w, "strategy/create")
  17. }
  18. func AddStrategyPost(w http.ResponseWriter, r *http.Request) {
  19. me := MeRequired(LoginRequired(w, r))
  20. var msg string
  21. var err error
  22. var tagStr string
  23. urls := strings.Split(param.String(r, "url", ""), "\n")
  24. for _, url := range urls {
  25. err := utils.CheckUrl(url)
  26. if err != nil {
  27. errors.Panic(fmt.Sprintf("url:%s %s", url, err.Error()))
  28. }
  29. }
  30. tags := strings.Split(param.String(r, "tags", ""), "\n")
  31. if len(tags) > 0 && tags[0] != "" {
  32. for _, tag := range tags {
  33. strs := strings.Split(tag, "=")
  34. if len(strs) != 2 {
  35. errors.Panic("tag must be like aaa=bbb")
  36. }
  37. }
  38. tagStr = strings.Join(tags, ",")
  39. }
  40. for _, url := range urls {
  41. var s = model.Strategy{}
  42. s.Method = param.String(r, "method", "get")
  43. s.Creator = me.Name
  44. s.Enable = param.Int(r, "enable", 1)
  45. s.Url = url
  46. s.Idc = param.String(r, "idc", "default")
  47. s.ExpectCode = param.String(r, "expect_code", "200")
  48. s.Timeout = param.Int(r, "timeout", 3000)
  49. s.Header = param.String(r, "header", "")
  50. s.PostData = param.String(r, "post_data", "")
  51. s.MaxStep = param.Int(r, "max_step", 3)
  52. s.Teams = param.MustString(r, "teams")
  53. s.Times = param.Int(r, "times", 3)
  54. s.Note = param.String(r, "note", "")
  55. s.Keywords = param.String(r, "keywords", "")
  56. s.Data = param.String(r, "data", "")
  57. s.Endpoint = param.String(r, "endpoint", "")
  58. s.Tag = tagStr
  59. s.IP = param.String(r, "ip", "")
  60. _, err = s.Add()
  61. if err != nil {
  62. msg += fmt.Sprintf("strategy:%s failed, err:%s", url, err.Error())
  63. } else {
  64. msg += fmt.Sprintf("strategy:%s success :)", url)
  65. }
  66. }
  67. //errors.MaybePanic(err)
  68. if err != nil {
  69. errMsg := fmt.Sprintf("%s,err:%v", msg, err)
  70. errors.Panic(errMsg)
  71. }
  72. render.Data(w, msg)
  73. }
  74. func GetStrategyById(w http.ResponseWriter, r *http.Request) {
  75. strategy := StraRequired(r)
  76. render.Data(w, strategy)
  77. }
  78. func UpdateStrategyGet(w http.ResponseWriter, r *http.Request) {
  79. s := StraRequired(r)
  80. render.Put(r, "Id", s.Id)
  81. render.Put(r, "Regions", g.Config.IDC)
  82. render.HTML(r, w, "strategy/edit")
  83. }
  84. func UpdateStrategy(w http.ResponseWriter, r *http.Request) {
  85. s := StraRequired(r)
  86. me := MeRequired(LoginRequired(w, r))
  87. var tagStr string
  88. username := me.Name
  89. if s.Creator != username && !IsAdmin(username) {
  90. errors.Panic("没有权限")
  91. }
  92. url := param.String(r, "url", "")
  93. err := utils.CheckUrl(url)
  94. if err != nil {
  95. errors.Panic(fmt.Sprintf("url:%s %s", url, err.Error()))
  96. }
  97. tags := strings.Split(param.String(r, "tags", ""), "\n")
  98. if len(tags) > 0 && tags[0] != "" {
  99. log.Println("len:", len(tags))
  100. for _, tag := range tags {
  101. strs := strings.Split(tag, "=")
  102. if len(strs) != 2 {
  103. errors.Panic("tag must be like aaa=bbb")
  104. } else if strs[0] == "" || strs[1] == "" {
  105. errors.Panic("tag must be like aaa=bbb")
  106. }
  107. }
  108. tagStr = strings.Join(tags, ",")
  109. }
  110. s.Creator = username
  111. s.Url = url
  112. s.Idc = param.String(r, "idc", "default")
  113. s.Method = param.String(r, "method", "get")
  114. s.Enable = param.Int(r, "enable", 1)
  115. s.ExpectCode = param.String(r, "expect_code", "200")
  116. s.Timeout = param.Int(r, "timeout", 3000)
  117. s.Header = param.String(r, "header", "")
  118. s.PostData = param.String(r, "post_data", "")
  119. s.MaxStep = param.Int(r, "max_step", 3)
  120. s.Teams = param.String(r, "teams", "")
  121. s.Times = param.Int(r, "times", 3)
  122. s.Note = param.String(r, "note", "")
  123. s.Keywords = param.String(r, "keywords", "")
  124. s.Data = param.String(r, "data", "")
  125. s.Endpoint = param.String(r, "endpoint", "")
  126. s.IP = param.String(r, "ip", "")
  127. s.Tag = tagStr
  128. err = s.Update()
  129. errors.MaybePanic(err)
  130. render.Data(w, "ok")
  131. }
  132. func DeleteStrategy(w http.ResponseWriter, r *http.Request) {
  133. me := MeRequired(LoginRequired(w, r))
  134. strategy := StraRequired(r)
  135. //teams := strings.Split(strategy.Teams, ",")
  136. username := me.Name
  137. if strategy.Creator != username && !IsAdmin(username) {
  138. errors.Panic("没有权限")
  139. }
  140. err := strategy.Delete()
  141. errors.MaybePanic(err)
  142. render.Data(w, "ok")
  143. }
  144. func GetTeamsOfStrategy(w http.ResponseWriter, r *http.Request) {
  145. MeRequired(LoginRequired(w, r))
  146. stra := StraRequired(r)
  147. teams, err := model.GetTeamsByIds(stra.Teams)
  148. errors.MaybePanic(err)
  149. render.Data(w, map[string]interface{}{"teams": teams})
  150. }