globallimit.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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/api/waf"
  8. "net/http"
  9. )
  10. type GlobalLimitHandler struct {
  11. *handler.Handler
  12. globalLimitService waf.GlobalLimitService
  13. wafLogService waf.WaflogService
  14. }
  15. func NewGlobalLimitHandler(
  16. handler *handler.Handler,
  17. globalLimitService waf.GlobalLimitService,
  18. wafLogService waf.WaflogService,
  19. ) *GlobalLimitHandler {
  20. return &GlobalLimitHandler{
  21. Handler: handler,
  22. globalLimitService: globalLimitService,
  23. wafLogService: wafLogService,
  24. }
  25. }
  26. //func (h *GlobalLimitHandler) GetGlobalLimit(ctx *gin.Context) {
  27. //
  28. //}
  29. func (h *GlobalLimitHandler) AddGlobalLimit(ctx *gin.Context) {
  30. req := new(v1.GlobalLimitRequest)
  31. if err := ctx.ShouldBind(req); err != nil {
  32. v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, err.Error())
  33. return
  34. }
  35. err := h.globalLimitService.AddGlobalLimit(ctx, *req)
  36. if err != nil {
  37. v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
  38. return
  39. }
  40. go h.wafLogService.PublishIpWafLogTask(ctx,adminApi.WafLog{
  41. Uid: req.Uid,
  42. RequestIp: ctx.ClientIP(), // 复制 ClientIP
  43. UserAgent: ctx.Request.UserAgent(), // 复制 UserAgent
  44. Api: ctx.Request.URL.Path, // 复制 Path
  45. HostId: req.HostId,
  46. ExtraData: req,
  47. })
  48. v1.HandleSuccess(ctx, nil)
  49. }
  50. func (h *GlobalLimitHandler) EditGlobalLimit(ctx *gin.Context) {
  51. req := new(v1.GlobalLimitRequest)
  52. if err := ctx.ShouldBind(req); err != nil {
  53. v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, err.Error())
  54. return
  55. }
  56. err := h.globalLimitService.EditGlobalLimit(ctx, *req)
  57. if err != nil {
  58. v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
  59. return
  60. }
  61. v1.HandleSuccess(ctx, nil)
  62. // 2. 启动一个新的 goroutine 在后台记录日志
  63. go h.wafLogService.PublishIpWafLogTask(ctx,adminApi.WafLog{
  64. Uid: req.Uid,
  65. RequestIp: ctx.ClientIP(), // 复制 ClientIP
  66. UserAgent: ctx.Request.UserAgent(), // 复制 UserAgent
  67. Api: ctx.Request.URL.Path, // 复制 Path
  68. HostId: req.HostId,
  69. ExtraData: req,
  70. })
  71. }
  72. func (h *GlobalLimitHandler) DeleteGlobalLimit(ctx *gin.Context) {
  73. req := new(v1.GlobalLimitRequest)
  74. if err := ctx.ShouldBind(req); err != nil {
  75. v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, err.Error())
  76. return
  77. }
  78. err := h.globalLimitService.DeleteGlobalLimit(ctx, *req)
  79. if err != nil {
  80. v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
  81. return
  82. }
  83. go h.wafLogService.PublishIpWafLogTask(ctx,adminApi.WafLog{
  84. Uid: req.Uid,
  85. RequestIp: ctx.ClientIP(), // 复制 ClientIP
  86. UserAgent: ctx.Request.UserAgent(), // 复制 UserAgent
  87. Api: ctx.Request.URL.Path, // 复制 Path
  88. HostId: req.HostId,
  89. ExtraData: req,
  90. })
  91. v1.HandleSuccess(ctx, nil)
  92. }