udpforwarding.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package waf
  2. import (
  3. "github.com/gin-gonic/gin"
  4. v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
  5. adminApi "github.com/go-nunu/nunu-layout-advanced/api/v1/admin"
  6. "github.com/go-nunu/nunu-layout-advanced/internal/handler"
  7. "github.com/go-nunu/nunu-layout-advanced/internal/service/admin"
  8. "github.com/go-nunu/nunu-layout-advanced/internal/service/api/waf"
  9. "github.com/mcuadros/go-defaults"
  10. "net/http"
  11. )
  12. type UdpForWardingHandler struct {
  13. *handler.Handler
  14. udpForWardingService waf.UdpForWardingService
  15. wafLogService admin.WafLogService
  16. }
  17. func NewUdpForWardingHandler(
  18. handler *handler.Handler,
  19. udpForWardingService waf.UdpForWardingService,
  20. wafLogService admin.WafLogService,
  21. ) *UdpForWardingHandler {
  22. return &UdpForWardingHandler{
  23. Handler: handler,
  24. udpForWardingService: udpForWardingService,
  25. wafLogService: wafLogService,
  26. }
  27. }
  28. func (h *UdpForWardingHandler) GetUdpForWarding(ctx *gin.Context) {
  29. req := new(v1.GetForwardingRequest)
  30. if err := ctx.ShouldBind(req); err != nil {
  31. v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, err.Error())
  32. return
  33. }
  34. defaults.SetDefaults(req)
  35. res, err := h.udpForWardingService.GetUdpForWarding(ctx, *req)
  36. if err != nil {
  37. v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
  38. return
  39. }
  40. v1.HandleSuccess(ctx, res)
  41. }
  42. func (h *UdpForWardingHandler) AddUdpForWarding(ctx *gin.Context) {
  43. req := new(v1.UdpForwardingRequest)
  44. if err := ctx.ShouldBind(req); err != nil {
  45. v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, err.Error())
  46. return
  47. }
  48. defaults.SetDefaults(req)
  49. id, err := h.udpForWardingService.AddUdpForwarding(ctx, req)
  50. if err != nil {
  51. v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
  52. return
  53. }
  54. go h.wafLogService.PublishIpWafLogTask(ctx,adminApi.WafLog{
  55. Uid: req.Uid,
  56. RequestIp: ctx.ClientIP(), // 复制 ClientIP
  57. UserAgent: ctx.Request.UserAgent(), // 复制 UserAgent
  58. Api: ctx.Request.URL.Path, // 复制 Path
  59. HostId: req.HostId,
  60. RuleId: id,
  61. ExtraData: req,
  62. })
  63. v1.HandleSuccess(ctx, nil)
  64. }
  65. func (h *UdpForWardingHandler) EditUdpForWarding(ctx *gin.Context) {
  66. req := new(v1.UdpForwardingRequest)
  67. if err := ctx.ShouldBind(req); err != nil {
  68. v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, err.Error())
  69. return
  70. }
  71. defaults.SetDefaults(req)
  72. err := h.udpForWardingService.EditUdpForwarding(ctx, req)
  73. if err != nil {
  74. v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
  75. return
  76. }
  77. go h.wafLogService.PublishIpWafLogTask(ctx,adminApi.WafLog{
  78. Uid: req.Uid,
  79. RequestIp: ctx.ClientIP(), // 复制 ClientIP
  80. UserAgent: ctx.Request.UserAgent(), // 复制 UserAgent
  81. Api: ctx.Request.URL.Path, // 复制 Path
  82. HostId: req.HostId,
  83. RuleId: req.UdpForwardingData.Id,
  84. ExtraData: req,
  85. })
  86. v1.HandleSuccess(ctx, nil)
  87. }
  88. func (h *UdpForWardingHandler) DeleteUdpForWarding(ctx *gin.Context) {
  89. req := new(v1.DeleteUdpForwardingRequest)
  90. if err := ctx.ShouldBind(req); err != nil {
  91. v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, err.Error())
  92. return
  93. }
  94. defaults.SetDefaults(req)
  95. err := h.udpForWardingService.DeleteUdpForwarding(ctx, *req)
  96. if err != nil {
  97. v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
  98. return
  99. }
  100. go h.wafLogService.PublishIpWafLogTask(ctx,adminApi.WafLog{
  101. Uid: req.Uid,
  102. RequestIp: ctx.ClientIP(), // 复制 ClientIP
  103. UserAgent: ctx.Request.UserAgent(), // 复制 UserAgent
  104. Api: ctx.Request.URL.Path, // 复制 Path
  105. HostId: req.HostId,
  106. ExtraData: req,
  107. })
  108. v1.HandleSuccess(ctx, nil)
  109. }
  110. func (h *UdpForWardingHandler) GetUdpForWardingList(ctx *gin.Context) {
  111. req := new(v1.GetForwardingRequest)
  112. if err := ctx.ShouldBind(req); err != nil {
  113. v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, err.Error())
  114. return
  115. }
  116. defaults.SetDefaults(req)
  117. res, err := h.udpForWardingService.GetUdpForwardingWafUdpAllIps(ctx, *req)
  118. if err != nil {
  119. v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
  120. return
  121. }
  122. v1.HandleSuccess(ctx, res)
  123. }