Browse Source

feat(waf): 添加 CC 一键加白功能

- 新增 CcHandler 中的 AddWhiteOneClick 方法处理一键加白请求
- 在 CcService 中实现 AddWhiteOneClick 方法的逻辑
- 更新 HTTP 服务器路由,添加 /cc/addWhiteOneClick 端点
- 重构项目结构,将 CC 相关代码移动到 waf 包中
fusu 2 tuần trước cách đây
mục cha
commit
cd9bce256a

+ 1 - 1
cmd/server/wire/wire.go

@@ -117,7 +117,7 @@ var handlerSet = wire.NewSet(
 	handler.NewGatewayGroupHandler,
 	handler.NewGateWayGroupIpHandler,
 	wafHandler.NewAllowAndDenyIpHandler,
-	handler.NewCcHandler,
+	wafHandler.NewCcHandler,
 	wafHandler.NewGatewayipHandler,
 	wafHandler.NewCcIpListHandler,
 )

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

@@ -87,9 +87,9 @@ func NewWire(viperViper *viper.Viper, logger *log.Logger) (*app.App, func(), err
 	sslCertService := flexCdn2.NewSslCertService(serviceService, webForwardingRepository, cdnService)
 	websocketService := flexCdn2.NewWebsocketService(serviceService, cdnService, webForwardingRepository)
 	ccRepository := flexCdn.NewCcRepository(repositoryRepository)
-	ccService := flexCdn2.NewCcService(serviceService, ccRepository, webForwardingRepository, cdnService)
 	ccIpListRepository := flexCdn.NewCcIpListRepository(repositoryRepository)
 	ccIpListService := flexCdn2.NewCcIpListService(serviceService, ccIpListRepository, cdnService, webForwardingRepository)
+	ccService := flexCdn2.NewCcService(serviceService, ccRepository, webForwardingRepository, cdnService, ccIpListService)
 	webForwardingService := waf2.NewWebForwardingService(serviceService, requiredService, webForwardingRepository, crawlerService, parserService, wafFormatterService, aoDunService, rabbitMQ, gatewayipService, globalLimitRepository, cdnService, proxyService, sslCertService, websocketService, ccService, ccIpListService)
 	webForwardingHandler := waf3.NewWebForwardingHandler(handlerHandler, webForwardingService)
 	tcpforwardingService := waf2.NewTcpforwardingService(serviceService, tcpforwardingRepository, parserService, requiredService, crawlerService, globalLimitRepository, hostRepository, wafFormatterService, cdnService, proxyService)
@@ -107,7 +107,7 @@ func NewWire(viperViper *viper.Viper, logger *log.Logger) (*app.App, func(), err
 	gatewayIpAdminService := admin2.NewGatewayIpAdminService(serviceService, gatewayIpAdminRepository, viperViper, requestService)
 	gatewayIpAdminHandler := admin3.NewGatewayIpAdminHandler(handlerHandler, gatewayIpAdminService)
 	allowAndDenyIpHandler := waf3.NewAllowAndDenyIpHandler(handlerHandler, allowAndDenyIpService)
-	ccHandler := handler.NewCcHandler(handlerHandler, ccService)
+	ccHandler := waf3.NewCcHandler(handlerHandler, ccService)
 	ccIpListHandler := waf3.NewCcIpListHandler(handlerHandler, ccIpListService)
 	httpServer := server.NewHTTPServer(logger, viperViper, jwtJWT, syncedEnforcer, limiterLimiter, handlerFunc, userHandler, gameShieldHandler, gameShieldBackendHandler, webForwardingHandler, tcpforwardingHandler, udpForWardingHandler, globalLimitHandler, adminHandler, gatewayIpAdminHandler, allowAndDenyIpHandler, ccHandler, logService, ccIpListHandler)
 	appApp := newApp(httpServer)
@@ -122,7 +122,7 @@ var repositorySet = wire.NewSet(repository.NewDB, repository.NewRedis, repositor
 
 var serviceSet = wire.NewSet(service.NewService, admin2.NewUserService, admin2.NewGatewayIpAdminService, admin2.NewAdminService, gameShield.NewGameShieldService, service.NewAoDunService, service.NewGameShieldPublicIpService, service.NewDuedateService, service.NewFormatterService, service.NewParserService, service.NewRequiredService, service.NewCrawlerService, waf2.NewWebForwardingService, waf2.NewTcpforwardingService, waf2.NewUdpForWardingService, service.NewGameShieldUserIpService, gameShield.NewGameShieldBackendService, service.NewGameShieldSdkIpService, service.NewHostService, waf2.NewGlobalLimitService, service.NewGatewayGroupService, waf2.NewWafFormatterService, service.NewGateWayGroupIpService, service.NewRequestService, flexCdn2.NewCdnService, waf2.NewAllowAndDenyIpService, flexCdn2.NewProxyService, flexCdn2.NewSslCertService, flexCdn2.NewWebsocketService, flexCdn2.NewCcService, service.NewLogService, waf2.NewGatewayipService, flexCdn2.NewCcIpListService)
 
-var handlerSet = wire.NewSet(handler.NewHandler, admin3.NewUserHandler, admin3.NewAdminHandler, admin3.NewGatewayIpAdminHandler, handler.NewGameShieldHandler, handler.NewGameShieldPublicIpHandler, waf3.NewWebForwardingHandler, waf3.NewTcpforwardingHandler, waf3.NewUdpForWardingHandler, handler.NewGameShieldUserIpHandler, handler.NewGameShieldBackendHandler, handler.NewGameShieldSdkIpHandler, handler.NewHostHandler, waf3.NewGlobalLimitHandler, handler.NewGatewayGroupHandler, handler.NewGateWayGroupIpHandler, waf3.NewAllowAndDenyIpHandler, handler.NewCcHandler, waf3.NewGatewayipHandler, waf3.NewCcIpListHandler)
+var handlerSet = wire.NewSet(handler.NewHandler, admin3.NewUserHandler, admin3.NewAdminHandler, admin3.NewGatewayIpAdminHandler, handler.NewGameShieldHandler, handler.NewGameShieldPublicIpHandler, waf3.NewWebForwardingHandler, waf3.NewTcpforwardingHandler, waf3.NewUdpForWardingHandler, handler.NewGameShieldUserIpHandler, handler.NewGameShieldBackendHandler, handler.NewGameShieldSdkIpHandler, handler.NewHostHandler, waf3.NewGlobalLimitHandler, handler.NewGatewayGroupHandler, handler.NewGateWayGroupIpHandler, waf3.NewAllowAndDenyIpHandler, waf3.NewCcHandler, waf3.NewGatewayipHandler, waf3.NewCcIpListHandler)
 
 // 限流器依赖集
 var limiterSet = wire.NewSet(limiter.NewLimiter, middleware.NewRateLimitMiddleware)

+ 1 - 1
cmd/task/wire/wire_gen.go

@@ -81,9 +81,9 @@ func NewWire(viperViper *viper.Viper, logger *log.Logger) (*app.App, func(), err
 	sslCertService := flexCdn2.NewSslCertService(serviceService, webForwardingRepository, cdnService)
 	websocketService := flexCdn2.NewWebsocketService(serviceService, cdnService, webForwardingRepository)
 	ccRepository := flexCdn.NewCcRepository(repositoryRepository)
-	ccService := flexCdn2.NewCcService(serviceService, ccRepository, webForwardingRepository, cdnService)
 	ccIpListRepository := flexCdn.NewCcIpListRepository(repositoryRepository)
 	ccIpListService := flexCdn2.NewCcIpListService(serviceService, ccIpListRepository, cdnService, webForwardingRepository)
+	ccService := flexCdn2.NewCcService(serviceService, ccRepository, webForwardingRepository, cdnService, ccIpListService)
 	webForwardingService := waf2.NewWebForwardingService(serviceService, requiredService, webForwardingRepository, crawlerService, parserService, wafFormatterService, aoDunService, rabbitMQ, gatewayipService, globalLimitRepository, cdnService, proxyService, sslCertService, websocketService, ccService, ccIpListService)
 	wafTask := task.NewWafTask(webForwardingRepository, tcpforwardingRepository, udpForWardingRepository, cdnService, hostRepository, globalLimitRepository, expiredRepository, taskTask, gatewayipRepository, tcpforwardingService, udpForWardingService, webForwardingService)
 	taskServer := server.NewTaskServer(logger, userTask, gameShieldTask, wafTask)

+ 17 - 3
internal/handler/cc.go → internal/handler/api/waf/cc.go

@@ -1,19 +1,20 @@
-package handler
+package waf
 
 import (
 	"github.com/gin-gonic/gin"
 	v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
+	"github.com/go-nunu/nunu-layout-advanced/internal/handler"
 	"github.com/go-nunu/nunu-layout-advanced/internal/service/api/flexCdn"
 	"net/http"
 )
 
 type CcHandler struct {
-	*Handler
+	*handler.Handler
 	ccService flexCdn.CcService
 }
 
 func NewCcHandler(
-    handler *Handler,
+    handler *handler.Handler,
     ccService flexCdn.CcService,
 ) *CcHandler {
 	return &CcHandler{
@@ -50,3 +51,16 @@ func (h *CcHandler) EditCcState(ctx *gin.Context) {
 	v1.HandleSuccess(ctx, nil)
 }
 
+func (h *CcHandler) AddWhiteOneClick (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.AddWhiteOneClick(ctx, req)
+	if err != nil {
+		v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
+		return
+	}
+	v1.HandleSuccess(ctx, nil)
+}

+ 2 - 1
internal/server/http.go

@@ -36,7 +36,7 @@ func NewHTTPServer(
 	adminHandler *admin.AdminHandler,
 	gatewayIpAdminHandler *admin.GatewayIpAdminHandler,
 	allowAnddenyHandler *waf.AllowAndDenyIpHandler,
-	ccHandler *handler.CcHandler,
+	ccHandler *waf.CcHandler,
 	logService service.LogService,
 	ccIpListHandler *waf.CcIpListHandler,
 ) *http.Server {
@@ -132,6 +132,7 @@ func NewHTTPServer(
 
 			noAuthRouter.POST("/cc/getList", ipAllowlistMiddleware, ccHandler.GetCcList)
 			noAuthRouter.POST("/cc/editState", ipAllowlistMiddleware, ccHandler.EditCcState)
+			noAuthRouter.POST("/cc/addWhiteOneClick", ipAllowlistMiddleware, ccHandler.AddWhiteOneClick)
 
 			noAuthRouter.POST("/ccIpList/getList", ipAllowlistMiddleware, ccIpListHandler.GetCcIpList)
 			noAuthRouter.POST("/ccIpList/add", ipAllowlistMiddleware, ccIpListHandler.AddCcIpList)

+ 24 - 3
internal/service/api/flexCdn/cc.go

@@ -4,7 +4,7 @@ import (
 	"context"
 	"fmt"
 	v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
-	"github.com/go-nunu/nunu-layout-advanced/internal/repository/api/flexCdn"
+	flexCdnRep "github.com/go-nunu/nunu-layout-advanced/internal/repository/api/flexCdn"
 	"github.com/go-nunu/nunu-layout-advanced/internal/repository/api/waf"
 	"github.com/go-nunu/nunu-layout-advanced/internal/service"
 	"time"
@@ -15,26 +15,31 @@ type CcService interface {
 	EditCcState(ctx context.Context, req v1.CCStateRequest) error
 	// 修改CC配置
 	EditCcConfig(ctx context.Context,webId int64, req v1.CcConfigRequest) error
+	// 一键加白
+	AddWhiteOneClick (ctx context.Context, req v1.CCStateRequest) error
 }
 func NewCcService(
     service *service.Service,
-    ccRepository flexCdn.CcRepository,
+    ccRepository flexCdnRep.CcRepository,
 	webForwardingRep waf.WebForwardingRepository,
 	cdn CdnService,
+	ccIpList CcIpListService,
 ) CcService {
 	return &ccService{
 		Service:        service,
 		ccRepository: ccRepository,
 		webForwardingRep: webForwardingRep,
 		cdn: cdn,
+		ccIpList: ccIpList,
 	}
 }
 
 type ccService struct {
 	*service.Service
-	ccRepository     flexCdn.CcRepository
+	ccRepository     flexCdnRep.CcRepository
 	webForwardingRep waf.WebForwardingRepository
 	cdn              CdnService
+	ccIpList          CcIpListService
 }
 
 func (s *ccService) GetCcList(ctx context.Context, req v1.CCListRequest) ([]v1.CCListResponse, error) {
@@ -89,6 +94,22 @@ func (s *ccService) EditCcState(ctx context.Context, req v1.CCStateRequest) erro
 	return nil
 }
 
+// 一键加白
+func (s *ccService) AddWhiteOneClick (ctx context.Context, req v1.CCStateRequest) error {
+	err := s.EditCcState(ctx, req)
+	if err != nil {
+		return err
+	}
+
+	for _, v := range req.Ips {
+		err = s.ccIpList.AddCcWhiteIp(ctx, req.WebId, v, "")
+		if err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
 
 // 修改CC配置
 func (s *ccService) EditCcConfig(ctx context.Context,webId int64, req v1.CcConfigRequest) error {

+ 1 - 0
internal/service/api/flexCdn/cciplist.go

@@ -54,6 +54,7 @@ func (s *ccIpListService) GetCcIpList(ctx context.Context, webId int64) ([]v1.Cc
 	return s.ccIpListRepository.GetCcIpList(ctx, int64(webData.CdnWebId))
 }
 
+
 func (s *ccIpListService) AddCcIpListPolicy(ctx context.Context, serverId int64,serverGroupId int64) error {
 
 	httpWebId, err := s.ccIpListRepository.GetHttpWebId(ctx, serverId)