globallimit.go 3.0 KB

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