فهرست منبع

feat(api): 添加 CC 攻击状态接口

- 新增 CCListRequest 和 CCListResponse 结构体用于 CC 攻击列表请求和响应
- 新增 CCStateRequest 结构体用于修改 CC 攻击状态请求
- 在 http.go 中添加 CC 攻击列表和状态修改的路由
- 在 wire.go 中添加 CC 相关的依赖注入
- 新增 cc.go 文件实现 CC 攻击状态的处理逻辑
- 新增 cc_repository.go 文件实现 CC 攻击状态的数据库操作
- 新增 cc_service.go 文件实现 CC 攻击状态的服务逻辑
fusu 3 هفته پیش
والد
کامیت
528223c3ae
7فایلهای تغییر یافته به همراه191 افزوده شده و 4 حذف شده
  1. 22 0
      api/v1/cc.go
  2. 3 0
      cmd/server/wire/wire.go
  3. 7 4
      cmd/server/wire/wire_gen.go
  4. 52 0
      internal/handler/cc.go
  5. 38 0
      internal/repository/cc.go
  6. 6 0
      internal/server/http.go
  7. 63 0
      internal/service/cc.go

+ 22 - 0
api/v1/cc.go

@@ -0,0 +1,22 @@
+package v1
+
+type CCListRequest struct {
+	Uid int64 `json:"uid" form:"uid" validate:"required"`
+	HostId int64 `json:"hostId" form:"hostId" validate:"required"`
+	WebId int64 `json:"webId" form:"webId" validate:"required"`
+}
+
+
+type CCListResponse struct {
+	Ip string `json:"ip" form:"ip"`
+	Reason string `json:"reason" form:"reason"`
+	SourceUrl string `json:"sourceUrl" form:"sourceUrl"`
+	CreatedAt string `json:"createdAt" form:"createdAt"`
+}
+
+type CCStateRequest struct {
+	Uid int64 `json:"uid" form:"uid" validate:"required"`
+	Ip string `json:"ip" form:"ip" validate:"required"`
+	HostId int64 `json:"hostId" form:"hostId" validate:"required"`
+	WebId int64 `json:"webId" form:"webId" validate:"required"`
+}

+ 3 - 0
cmd/server/wire/wire.go

@@ -48,6 +48,7 @@ var repositorySet = wire.NewSet(
 	repository.NewCdnRepository,
 	repository.NewAllowAndDenyIpRepository,
 	repository.NewProxyRepository,
+	repository.NewCcRepository,
 
 )
 
@@ -84,6 +85,7 @@ var serviceSet = wire.NewSet(
 	service.NewProxyService,
 	service.NewSslCertService,
 	service.NewWebsocketService,
+	service.NewCcService,
 )
 
 var handlerSet = wire.NewSet(
@@ -106,6 +108,7 @@ var handlerSet = wire.NewSet(
 	handler.NewGatewayGroupHandler,
 	handler.NewGateWayGroupIpHandler,
 	handler.NewAllowAndDenyIpHandler,
+	handler.NewCcHandler,
 )
 
 

+ 7 - 4
cmd/server/wire/wire_gen.go

@@ -102,7 +102,10 @@ func NewWire(viperViper *viper.Viper, logger *log.Logger) (*app.App, func(), err
 	allowAndDenyIpRepository := repository.NewAllowAndDenyIpRepository(repositoryRepository)
 	allowAndDenyIpService := service.NewAllowAndDenyIpService(serviceService, allowAndDenyIpRepository, gateWayGroupIpService, wafFormatterService)
 	allowAndDenyIpHandler := handler.NewAllowAndDenyIpHandler(handlerHandler, allowAndDenyIpService)
-	httpServer := server.NewHTTPServer(logger, viperViper, jwtJWT, syncedEnforcer, limiterLimiter, handlerFunc, userHandler, gameShieldHandler, gameShieldBackendHandler, webForwardingHandler, webLimitHandler, tcpforwardingHandler, udpForWardingHandler, tcpLimitHandler, udpLimitHandler, globalLimitHandler, adminHandler, gatewayGroupHandler, gateWayGroupIpHandler, allowAndDenyIpHandler)
+	ccRepository := repository.NewCcRepository(repositoryRepository)
+	ccService := service.NewCcService(serviceService, ccRepository, webForwardingRepository)
+	ccHandler := handler.NewCcHandler(handlerHandler, ccService)
+	httpServer := server.NewHTTPServer(logger, viperViper, jwtJWT, syncedEnforcer, limiterLimiter, handlerFunc, userHandler, gameShieldHandler, gameShieldBackendHandler, webForwardingHandler, webLimitHandler, tcpforwardingHandler, udpForWardingHandler, tcpLimitHandler, udpLimitHandler, globalLimitHandler, adminHandler, gatewayGroupHandler, gateWayGroupIpHandler, allowAndDenyIpHandler, ccHandler)
 	appApp := newApp(httpServer)
 	return appApp, func() {
 		cleanup()
@@ -111,11 +114,11 @@ func NewWire(viperViper *viper.Viper, logger *log.Logger) (*app.App, func(), err
 
 // wire.go:
 
-var repositorySet = wire.NewSet(repository.NewDB, repository.NewRedis, repository.NewCasbinEnforcer, repository.NewMongoClient, repository.NewMongoDB, repository.NewRabbitMQ, repository.NewRepository, repository.NewTransaction, repository.NewAdminRepository, repository.NewUserRepository, repository.NewGameShieldRepository, repository.NewGameShieldPublicIpRepository, repository.NewWebForwardingRepository, repository.NewTcpforwardingRepository, repository.NewUdpForWardingRepository, repository.NewGameShieldUserIpRepository, repository.NewWebLimitRepository, repository.NewTcpLimitRepository, repository.NewUdpLimitRepository, repository.NewGameShieldBackendRepository, repository.NewGameShieldSdkIpRepository, repository.NewHostRepository, repository.NewGlobalLimitRepository, repository.NewGatewayGroupRepository, repository.NewGateWayGroupIpRepository, repository.NewCdnRepository, repository.NewAllowAndDenyIpRepository, repository.NewProxyRepository)
+var repositorySet = wire.NewSet(repository.NewDB, repository.NewRedis, repository.NewCasbinEnforcer, repository.NewMongoClient, repository.NewMongoDB, repository.NewRabbitMQ, repository.NewRepository, repository.NewTransaction, repository.NewAdminRepository, repository.NewUserRepository, repository.NewGameShieldRepository, repository.NewGameShieldPublicIpRepository, repository.NewWebForwardingRepository, repository.NewTcpforwardingRepository, repository.NewUdpForWardingRepository, repository.NewGameShieldUserIpRepository, repository.NewWebLimitRepository, repository.NewTcpLimitRepository, repository.NewUdpLimitRepository, repository.NewGameShieldBackendRepository, repository.NewGameShieldSdkIpRepository, repository.NewHostRepository, repository.NewGlobalLimitRepository, repository.NewGatewayGroupRepository, repository.NewGateWayGroupIpRepository, repository.NewCdnRepository, repository.NewAllowAndDenyIpRepository, repository.NewProxyRepository, repository.NewCcRepository)
 
-var serviceSet = wire.NewSet(service.NewService, service.NewAoDunService, service.NewUserService, service.NewAdminService, service.NewGameShieldService, service.NewGameShieldPublicIpService, service.NewDuedateService, service.NewFormatterService, service.NewParserService, service.NewRequiredService, service.NewCrawlerService, service.NewWebForwardingService, service.NewTcpforwardingService, service.NewUdpForWardingService, service.NewGameShieldUserIpService, service.NewWebLimitService, service.NewTcpLimitService, service.NewUdpLimitService, service.NewGameShieldBackendService, service.NewGameShieldSdkIpService, service.NewHostService, service.NewGlobalLimitService, service.NewGatewayGroupService, service.NewWafFormatterService, service.NewGateWayGroupIpService, service.NewRequestService, service.NewCdnService, service.NewAllowAndDenyIpService, service.NewProxyService, service.NewSslCertService, service.NewWebsocketService)
+var serviceSet = wire.NewSet(service.NewService, service.NewAoDunService, service.NewUserService, service.NewAdminService, service.NewGameShieldService, service.NewGameShieldPublicIpService, service.NewDuedateService, service.NewFormatterService, service.NewParserService, service.NewRequiredService, service.NewCrawlerService, service.NewWebForwardingService, service.NewTcpforwardingService, service.NewUdpForWardingService, service.NewGameShieldUserIpService, service.NewWebLimitService, service.NewTcpLimitService, service.NewUdpLimitService, service.NewGameShieldBackendService, service.NewGameShieldSdkIpService, service.NewHostService, service.NewGlobalLimitService, service.NewGatewayGroupService, service.NewWafFormatterService, service.NewGateWayGroupIpService, service.NewRequestService, service.NewCdnService, service.NewAllowAndDenyIpService, service.NewProxyService, service.NewSslCertService, service.NewWebsocketService, service.NewCcService)
 
-var handlerSet = wire.NewSet(handler.NewHandler, handler.NewUserHandler, handler.NewAdminHandler, handler.NewGameShieldHandler, handler.NewGameShieldPublicIpHandler, handler.NewWebForwardingHandler, handler.NewTcpforwardingHandler, handler.NewUdpForWardingHandler, handler.NewGameShieldUserIpHandler, handler.NewWebLimitHandler, handler.NewTcpLimitHandler, handler.NewUdpLimitHandler, handler.NewGameShieldBackendHandler, handler.NewGameShieldSdkIpHandler, handler.NewHostHandler, handler.NewGlobalLimitHandler, handler.NewGatewayGroupHandler, handler.NewGateWayGroupIpHandler, handler.NewAllowAndDenyIpHandler)
+var handlerSet = wire.NewSet(handler.NewHandler, handler.NewUserHandler, handler.NewAdminHandler, handler.NewGameShieldHandler, handler.NewGameShieldPublicIpHandler, handler.NewWebForwardingHandler, handler.NewTcpforwardingHandler, handler.NewUdpForWardingHandler, handler.NewGameShieldUserIpHandler, handler.NewWebLimitHandler, handler.NewTcpLimitHandler, handler.NewUdpLimitHandler, handler.NewGameShieldBackendHandler, handler.NewGameShieldSdkIpHandler, handler.NewHostHandler, handler.NewGlobalLimitHandler, handler.NewGatewayGroupHandler, handler.NewGateWayGroupIpHandler, handler.NewAllowAndDenyIpHandler, handler.NewCcHandler)
 
 // 限流器依赖集
 var limiterSet = wire.NewSet(limiter.NewLimiter, middleware.NewRateLimitMiddleware)

+ 52 - 0
internal/handler/cc.go

@@ -0,0 +1,52 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
+	"github.com/go-nunu/nunu-layout-advanced/internal/service"
+	"net/http"
+)
+
+type CcHandler struct {
+	*Handler
+	ccService service.CcService
+}
+
+func NewCcHandler(
+    handler *Handler,
+    ccService service.CcService,
+) *CcHandler {
+	return &CcHandler{
+		Handler:      handler,
+		ccService: ccService,
+	}
+}
+
+func (h *CcHandler) GetCcList(ctx *gin.Context) {
+	var req v1.CCListRequest
+	if err := ctx.ShouldBind(&req); err != nil {
+		v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, err.Error())
+		return
+	}
+	resp, err := h.ccService.GetCcList(ctx, req)
+	if err != nil {
+		v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
+		return
+	}
+	v1.HandleSuccess(ctx, resp)
+}
+
+func (h *CcHandler) EditCcState(ctx *gin.Context) {
+	var req []v1.CCStateRequest
+	if err := ctx.ShouldBind(&req); err != nil {
+		v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, err.Error())
+		return
+	}
+	err := h.ccService.EditCcState(ctx, req)
+	if err != nil {
+		v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
+		return
+	}
+	v1.HandleSuccess(ctx, nil)
+}
+

+ 38 - 0
internal/repository/cc.go

@@ -0,0 +1,38 @@
+package repository
+
+import (
+	"context"
+	v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
+)
+
+type CcRepository interface {
+	GetCcList(ctx context.Context, serviceId int64) ([]v1.CCListResponse, error)
+	EditCcState(ctx context.Context, serviceId int64, ip string) error
+}
+
+func NewCcRepository(
+	repository *Repository,
+) CcRepository {
+	return &ccRepository{
+		Repository: repository,
+	}
+}
+
+type ccRepository struct {
+	*Repository
+}
+
+func (r *ccRepository) GetCcList(ctx context.Context, serviceId int64) ([]v1.CCListResponse, error) {
+	var req []v1.CCListResponse
+	if err := r.DBWithName(ctx,"cdn").Table("cloud_ip_items").Where("serverId = ? AND state = 1", serviceId).Select("ipFrom,createdAt,reason,sourceUrl").Scan(&req).Error; err != nil {
+		return nil, err
+	}
+	return req, nil
+}
+
+func (r *ccRepository) EditCcState(ctx context.Context, serviceId int64, ip string) error {
+	if err := r.DBWithName(ctx,"cdn").Table("cloud_ip_items").Where("serverId = ? AND ipFrom = ?", serviceId, ip).Update("state", 0).Error; err != nil {
+		return err
+	}
+	return nil
+}

+ 6 - 0
internal/server/http.go

@@ -37,6 +37,7 @@ func NewHTTPServer(
 	gatewayHandler *handler.GatewayGroupHandler,
 	gatewayIpHandler *handler.GateWayGroupIpHandler,
 	allowAnddenyHandler *handler.AllowAndDenyIpHandler,
+	ccHandler *handler.CcHandler,
 ) *http.Server {
 	gin.SetMode(gin.DebugMode)
 	s := http.NewServer(
@@ -134,6 +135,11 @@ func NewHTTPServer(
 			noAuthRouter.POST("/allowAndDeny/edit", ipAllowlistMiddleware, allowAnddenyHandler.EditAllowAndDenyIp)
 			noAuthRouter.POST("/allowAndDeny/delete", ipAllowlistMiddleware, allowAnddenyHandler.DeleteAllowAndDenyIp)
 
+			noAuthRouter.POST("/cc/getList", ipAllowlistMiddleware, ccHandler.GetCcList)
+			noAuthRouter.POST("/cc/editState", ipAllowlistMiddleware, ccHandler.EditCcState)
+
+
+
 		}
 		// Non-strict permission routing group
 		//noStrictAuthRouter := v1.Group("/").Use(middleware.NoStrictAuth(jwt, logger))

+ 63 - 0
internal/service/cc.go

@@ -0,0 +1,63 @@
+package service
+
+import (
+	"context"
+	"fmt"
+	v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
+	"github.com/go-nunu/nunu-layout-advanced/internal/repository"
+)
+
+type CcService interface {
+	GetCcList(ctx context.Context, req v1.CCListRequest) ([]v1.CCListResponse, error)
+	EditCcState(ctx context.Context, req []v1.CCStateRequest) error
+}
+func NewCcService(
+    service *Service,
+    ccRepository repository.CcRepository,
+	webForwardingRep repository.WebForwardingRepository,
+) CcService {
+	return &ccService{
+		Service:        service,
+		ccRepository: ccRepository,
+		webForwardingRep: webForwardingRep,
+	}
+}
+
+type ccService struct {
+	*Service
+	ccRepository repository.CcRepository
+	webForwardingRep repository.WebForwardingRepository
+}
+
+func (s *ccService) GetCcList(ctx context.Context, req v1.CCListRequest) ([]v1.CCListResponse, error) {
+	webData, err := s.webForwardingRep.GetWebForwarding(ctx, req.WebId)
+	if err != nil {
+		return nil, err
+	}
+	if webData.CdnWebId == 0 {
+		return nil, fmt.Errorf("网站不存在")
+	}
+	ccList, err := s.ccRepository.GetCcList(ctx, int64(webData.CdnWebId))
+	if err != nil {
+		return nil, err
+	}
+	return ccList, nil
+}
+
+func (s *ccService) EditCcState(ctx context.Context, req []v1.CCStateRequest) error {
+	for _, v := range req {
+		webData, err := s.webForwardingRep.GetWebForwarding(ctx, v.WebId)
+		if err != nil {
+			return err
+		}
+		if webData.CdnWebId == 0 {
+			return fmt.Errorf("网站不存在")
+		}
+		err = s.ccRepository.EditCcState(ctx, int64(webData.CdnWebId), v.Ip)
+		if err != nil {
+			return err
+		}
+
+	}
+	return nil
+}