gameshield.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. package service
  2. import (
  3. "context"
  4. "fmt"
  5. v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
  6. "github.com/go-nunu/nunu-layout-advanced/internal/model"
  7. "github.com/go-nunu/nunu-layout-advanced/internal/repository"
  8. "github.com/spf13/viper"
  9. "time"
  10. )
  11. type GameShieldService interface {
  12. SubmitGameShield(ctx context.Context, req *v1.GameShieldSubmitRequest) (string, error)
  13. EditGameShield(ctx context.Context, req *v1.GameShieldSubmitRequest) (string, error)
  14. DeleteGameShield(ctx context.Context, req int) (string, error)
  15. GetGameShieldKey(ctx context.Context, id int) (string, error)
  16. }
  17. func NewGameShieldService(
  18. service *Service,
  19. gameShieldRepository repository.GameShieldRepository,
  20. crawlerService CrawlerService,
  21. gameShieldPublicIpService GameShieldPublicIpService,
  22. duedate DuedateService,
  23. formatter FormatterService,
  24. parser ParserService,
  25. required RequiredService,
  26. conf *viper.Viper,
  27. ) GameShieldService {
  28. return &gameShieldService{
  29. Service: service,
  30. gameShieldRepository: gameShieldRepository,
  31. crawlerService: crawlerService,
  32. gameShieldPublicIpService: gameShieldPublicIpService,
  33. duedate: duedate,
  34. formatter: formatter,
  35. parser: parser,
  36. required: required,
  37. Url: conf.GetString("crawler.Url"),
  38. }
  39. }
  40. type gameShieldService struct {
  41. *Service
  42. config *viper.Viper
  43. crawlerService CrawlerService
  44. gameShieldRepository repository.GameShieldRepository
  45. gameShieldPublicIpService GameShieldPublicIpService
  46. duedate DuedateService
  47. formatter FormatterService
  48. Url string
  49. parser ParserService
  50. required RequiredService
  51. }
  52. //func (service *gameShieldService) GetGameShieldrequired(ctx context.Context, req *v1.GameShieldSubmitRequest) (*v1.GetGameShieldRequiredResponse, error) {
  53. // var res v1.GetGameShieldRequiredResponse
  54. // var err error
  55. // if req.Uid == 0 {
  56. // return nil, fmt.Errorf("uid is required")
  57. // }
  58. // res.ExpiredAt, err = service.duedate.NextDueDate(ctx, req.Uid, req.HostId)
  59. // if err != nil {
  60. // return nil, err
  61. // }
  62. // res.Backend, err = service.formatter.FormatBackendData(ctx, req)
  63. // if err != nil {
  64. // return nil, err
  65. // }
  66. // res.Cookie, err = service.crawlerService.GetLoginCookie(ctx)
  67. // if err != nil {
  68. // return nil, err
  69. // }
  70. // return &res, nil
  71. //}
  72. func (service *gameShieldService) SubmitGameShield(ctx context.Context, req *v1.GameShieldSubmitRequest) (string, error) {
  73. nameCount, err := service.gameShieldRepository.GetGameShieldDuplicateName(ctx, req.AppName, req.Uid)
  74. if err != nil {
  75. return "", err
  76. }
  77. if nameCount > 0 {
  78. return "", fmt.Errorf("应用名称已存在")
  79. }
  80. //require, err := service.GetGameShieldrequired(ctx, req)
  81. //if err != nil {
  82. // return "", err
  83. //}
  84. //dunName := strconv.Itoa(req.Uid) + "_" + strconv.FormatInt(time.Now().Unix(), 10) + "_" + req.AppName
  85. //formData := map[string]interface{}{
  86. // "app_name": dunName,
  87. // "gateway_group_id": 4,
  88. // "backend": require.Backend,
  89. // "expired_at": require.ExpiredAt,
  90. // "max_device_count": 0,
  91. //}
  92. //respBody, err := service.required.SendForm(ctx, "admin/info/rule/new", "admin/new/rule", formData)
  93. //if err != nil {
  94. // return "", err
  95. //}
  96. //// 解析响应内容中的 alert 消息
  97. //res, err := service.parser.ParseAlert(string(respBody))
  98. //if err != nil {
  99. // return "", err
  100. //}
  101. //if res != "" {
  102. // return "", fmt.Errorf(res)
  103. //}
  104. //KeyAndField, err := service.required.GetKeyAndField(ctx, dunName, "rule_id")
  105. //if err != nil {
  106. // return "", err
  107. //}
  108. if err := service.gameShieldRepository.AddGameShield(ctx, &model.GameShield{
  109. AppName: req.AppName,
  110. GatewayGroupId: 4,
  111. AddTime: time.Now(),
  112. Uid: req.Uid,
  113. HostId: req.HostId,
  114. AppIp: req.AppIp,
  115. Checked: req.Checked,
  116. }); err != nil {
  117. return "", err
  118. }
  119. return "", nil
  120. }
  121. func (service *gameShieldService) EditGameShield(ctx context.Context, req *v1.GameShieldSubmitRequest) (string, error) {
  122. ruleId, err := service.gameShieldRepository.GetGameShieldRuleIdByAppName(ctx, req.AppName)
  123. if err != nil {
  124. return "", err
  125. }
  126. if ruleId != req.RuleId {
  127. return "", fmt.Errorf("应用名称已存在")
  128. }
  129. //require, err := service.GetGameShieldrequired(ctx, req)
  130. //if err != nil {
  131. // return "", err
  132. //}
  133. //tokenUrl := service.Url + "admin/info/rule/edit?&__goadmin_edit_pk=" + strconv.Itoa(req.RuleId) + "_" + req.AppName
  134. //tokens, err := service.crawlerService.GetFormTokens(ctx, tokenUrl, require.Cookie)
  135. //if err != nil {
  136. // return "", err
  137. //}
  138. //sendUrl := service.Url + "admin/edit/rule"
  139. //
  140. //dunName := strconv.Itoa(req.Uid) + "_" + strconv.FormatInt(time.Now().Unix(), 10) + "_" + req.AppName
  141. //formData := map[string]interface{}{
  142. // "app_name": dunName,
  143. // "gateway_group_id": 4,
  144. // "backend": require.Backend,
  145. // "rule_id": req.RuleId,
  146. // "expired_at": require.ExpiredAt,
  147. // "max_device_count": 0,
  148. // "__go_admin_previous_": tokens["previous"],
  149. // "__go_admin_t_": tokens["t"],
  150. //}
  151. //respBody, err := service.crawlerService.SendFormData(ctx, sendUrl, require.Cookie, formData)
  152. //if err != nil {
  153. // return "", err
  154. //}
  155. //// 解析响应内容中的 alert 消息
  156. //res, err := service.parser.ParseAlert(string(respBody))
  157. //if err != nil {
  158. // return "", err
  159. //}
  160. //if res != "" {
  161. // return "", fmt.Errorf(res)
  162. //}
  163. //KeyAndField, err := service.required.GetKeyAndField(ctx, dunName, "rule_id")
  164. //if err != nil {
  165. // return "", err
  166. //}
  167. if err := service.gameShieldRepository.UpdateGameShield(ctx, &model.GameShield{
  168. AppName: req.AppName,
  169. GatewayGroupId: 4,
  170. Uid: req.Uid,
  171. HostId: req.HostId,
  172. AppIp: req.AppIp,
  173. Checked: req.Checked,
  174. }); err != nil {
  175. return "", err
  176. }
  177. return "", nil
  178. }
  179. func (service *gameShieldService) DeleteGameShield(ctx context.Context, id int) (string, error) {
  180. shieldInfo, err := service.gameShieldRepository.GetGameShieldById(ctx, int64(id))
  181. if err != nil {
  182. return "", err
  183. }
  184. if err := service.gameShieldRepository.DeleteGameShield(ctx, shieldInfo.RuleId); err != nil {
  185. return "", err
  186. }
  187. res, err := service.crawlerService.DeleteRule(ctx, shieldInfo.RuleId, "admin/delete/rule?page=1&__pageSize=10&__sort=rule_id&__sort_type=desc")
  188. if err != nil {
  189. return "", err
  190. }
  191. return res, nil
  192. }
  193. func (service *gameShieldService) GetGameShieldKey(ctx context.Context, id int) (string, error) {
  194. dunName, err := service.gameShieldRepository.GetGameShieldIdByDunName(ctx, int64(id))
  195. if err != nil {
  196. return "", err
  197. }
  198. if dunName == "" {
  199. return "", fmt.Errorf("暂无数据")
  200. }
  201. res, err := service.crawlerService.GetKey(ctx, dunName)
  202. if err != nil {
  203. return "", err
  204. }
  205. return res, nil
  206. }