globallimit.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. err = h.wafLogService.AddWafLog(ctx, adminApi.WafLog{
  42. Uid: req.Uid,
  43. RequestIp: ctx.ClientIP(),
  44. UserAgent: ctx.Request.UserAgent(),
  45. Api: ctx.Request.URL.Path,
  46. HostId: req.HostId,
  47. ExtraData: req,
  48. })
  49. if err != nil {
  50. v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
  51. return
  52. }
  53. v1.HandleSuccess(ctx, nil)
  54. }
  55. func (h *GlobalLimitHandler) EditGlobalLimit(ctx *gin.Context) {
  56. req := new(v1.GlobalLimitRequest)
  57. if err := ctx.ShouldBind(req); err != nil {
  58. v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, err.Error())
  59. return
  60. }
  61. err := h.globalLimitService.EditGlobalLimit(ctx, *req)
  62. if err != nil {
  63. v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
  64. return
  65. }
  66. v1.HandleSuccess(ctx, nil)
  67. // 2. 启动一个新的 goroutine 在后台记录日志
  68. go h.wafLogService.PublishIpWafLogTask(ctx,adminApi.WafLog{
  69. Uid: req.Uid,
  70. RequestIp: ctx.ClientIP(), // 复制 ClientIP
  71. UserAgent: ctx.Request.UserAgent(), // 复制 UserAgent
  72. Api: ctx.Request.URL.Path, // 复制 Path
  73. HostId: req.HostId,
  74. ExtraData: req,
  75. })
  76. }
  77. func (h *GlobalLimitHandler) DeleteGlobalLimit(ctx *gin.Context) {
  78. req := new(v1.GlobalLimitRequest)
  79. if err := ctx.ShouldBind(req); err != nil {
  80. v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, err.Error())
  81. return
  82. }
  83. err := h.globalLimitService.DeleteGlobalLimit(ctx, *req)
  84. if err != nil {
  85. v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
  86. return
  87. }
  88. err = h.wafLogService.AddWafLog(ctx, adminApi.WafLog{
  89. Uid: req.Uid,
  90. RequestIp: ctx.ClientIP(),
  91. UserAgent: ctx.Request.UserAgent(),
  92. Api: ctx.Request.URL.Path,
  93. HostId: req.HostId,
  94. ExtraData: req,
  95. })
  96. if err != nil {
  97. v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
  98. return
  99. }
  100. v1.HandleSuccess(ctx, nil)
  101. }