|
@@ -6,12 +6,13 @@ import (
|
|
v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
|
|
v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
|
|
"github.com/go-nunu/nunu-layout-advanced/internal/model"
|
|
"github.com/go-nunu/nunu-layout-advanced/internal/model"
|
|
"github.com/go-nunu/nunu-layout-advanced/internal/repository"
|
|
"github.com/go-nunu/nunu-layout-advanced/internal/repository"
|
|
|
|
+ "github.com/spf13/cast"
|
|
"strconv"
|
|
"strconv"
|
|
)
|
|
)
|
|
|
|
|
|
type TcpforwardingService interface {
|
|
type TcpforwardingService interface {
|
|
GetTcpforwarding(ctx context.Context, id int64) (*model.Tcpforwarding, error)
|
|
GetTcpforwarding(ctx context.Context, id int64) (*model.Tcpforwarding, error)
|
|
- AddTcpForwarding(ctx context.Context, req *v1.TcpForwardingRequest) (string, error)
|
|
|
|
|
|
+ AddTcpForwarding(ctx context.Context, req *v1.TcpForwardingRequest) error
|
|
EditTcpForwarding(ctx context.Context, req *v1.TcpForwardingRequest) (string, error)
|
|
EditTcpForwarding(ctx context.Context, req *v1.TcpForwardingRequest) (string, error)
|
|
DeleteTcpForwarding(ctx context.Context, wafTcpId int) (string, error)
|
|
DeleteTcpForwarding(ctx context.Context, wafTcpId int) (string, error)
|
|
}
|
|
}
|
|
@@ -22,6 +23,9 @@ func NewTcpforwardingService(
|
|
parser ParserService,
|
|
parser ParserService,
|
|
required RequiredService,
|
|
required RequiredService,
|
|
crawler CrawlerService,
|
|
crawler CrawlerService,
|
|
|
|
+ globalRep repository.GlobalLimitRepository,
|
|
|
|
+ hostRep repository.HostRepository,
|
|
|
|
+ wafformatter WafFormatterService,
|
|
) TcpforwardingService {
|
|
) TcpforwardingService {
|
|
return &tcpforwardingService{
|
|
return &tcpforwardingService{
|
|
Service: service,
|
|
Service: service,
|
|
@@ -29,6 +33,9 @@ func NewTcpforwardingService(
|
|
parser: parser,
|
|
parser: parser,
|
|
required: required,
|
|
required: required,
|
|
crawler: crawler,
|
|
crawler: crawler,
|
|
|
|
+ globalRep: globalRep,
|
|
|
|
+ hostRep: hostRep,
|
|
|
|
+ wafformatter: wafformatter,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -38,78 +45,116 @@ type tcpforwardingService struct {
|
|
parser ParserService
|
|
parser ParserService
|
|
required RequiredService
|
|
required RequiredService
|
|
crawler CrawlerService
|
|
crawler CrawlerService
|
|
|
|
+ globalRep repository.GlobalLimitRepository
|
|
|
|
+ hostRep repository.HostRepository
|
|
|
|
+ wafformatter WafFormatterService
|
|
}
|
|
}
|
|
|
|
|
|
func (s *tcpforwardingService) GetTcpforwarding(ctx context.Context, id int64) (*model.Tcpforwarding, error) {
|
|
func (s *tcpforwardingService) GetTcpforwarding(ctx context.Context, id int64) (*model.Tcpforwarding, error) {
|
|
return s.tcpforwardingRepository.GetTcpforwarding(ctx, id)
|
|
return s.tcpforwardingRepository.GetTcpforwarding(ctx, id)
|
|
}
|
|
}
|
|
|
|
|
|
-func (s *tcpforwardingService) AddTcpForwarding(ctx context.Context, req *v1.TcpForwardingRequest) (string, error) {
|
|
|
|
|
|
+func (s *tcpforwardingService) require(ctx context.Context,req v1.GlobalRequire) (v1.GlobalRequire, error) {
|
|
|
|
+ res, err := s.wafformatter.require(ctx, req, "tcp")
|
|
|
|
+ if err != nil {
|
|
|
|
+ return v1.GlobalRequire{}, err
|
|
|
|
+ }
|
|
|
|
+ return res, nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (s *tcpforwardingService) AddTcpForwarding(ctx context.Context, req *v1.TcpForwardingRequest) error {
|
|
|
|
+ require, err := s.require(ctx, v1.GlobalRequire{
|
|
|
|
+ HostId: req.HostId,
|
|
|
|
+ Uid: req.Uid,
|
|
|
|
+ Comment: req.TcpForwardingData.Comment,
|
|
|
|
+ })
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
formData := map[string]interface{}{
|
|
formData := map[string]interface{}{
|
|
- "tag": req.Tag,
|
|
|
|
- "port": req.Port,
|
|
|
|
- "waf_gateway_group_id": req.WafGatewayGroupId,
|
|
|
|
- "cc_count": req.CcCount,
|
|
|
|
- "cc_duration": req.CcDuration,
|
|
|
|
- "cc_block_count": req.CcBlockCount,
|
|
|
|
- "cc_block_duration": req.CcBlockDuration,
|
|
|
|
- "max_bytes_month": req.MaxBytesMonth,
|
|
|
|
- "conn_count": req.ConnCount,
|
|
|
|
- "conn_duration": req.ConnDuration,
|
|
|
|
- "max_conn_count": req.MaxConnCount,
|
|
|
|
- "bps": req.Bps,
|
|
|
|
- "backend_protocol": req.BackendProtocol,
|
|
|
|
- "backend_timeout": req.BackendTimeout,
|
|
|
|
- "backend_list": req.BackendList,
|
|
|
|
- "allow_ip_list": req.AllowIpList,
|
|
|
|
- "deny_ip_list": req.DenyIpList,
|
|
|
|
- "access_rule": req.AccessRule,
|
|
|
|
- "comment": req.Comment,
|
|
|
|
|
|
+ "tag": require.Tag,
|
|
|
|
+ "port": req.TcpForwardingData.Port,
|
|
|
|
+ "waf_gateway_group_id": require.WafGatewayGroupId,
|
|
|
|
+ "waf_tcp_limit_id": require.LimitRuleId,
|
|
|
|
+ "cc_count": req.TcpForwardingData.CcCount,
|
|
|
|
+ "cc_duration": req.TcpForwardingData.CcDuration,
|
|
|
|
+ "cc_block_count": req.TcpForwardingData.CcBlockCount,
|
|
|
|
+ "cc_block_duration": req.TcpForwardingData.CcBlockDuration,
|
|
|
|
+ "backend_protocol": req.TcpForwardingData.BackendProtocol,
|
|
|
|
+ "backend_timeout": req.TcpForwardingData.BackendTimeout,
|
|
|
|
+ "comment": req.TcpForwardingData.Comment,
|
|
|
|
+ "backend_list": req.TcpForwardingData.BackendList,
|
|
|
|
+ "allow_ip_list": req.TcpForwardingData.AllowIpList,
|
|
|
|
+ "deny_ip_list": req.TcpForwardingData.DenyIpList,
|
|
|
|
+ "access_rule": req.TcpForwardingData.AccessRule,
|
|
}
|
|
}
|
|
respBody, err := s.required.SendForm(ctx, "admin/info/waf_tcp/new", "admin/new/waf_tcp", formData)
|
|
respBody, err := s.required.SendForm(ctx, "admin/info/waf_tcp/new", "admin/new/waf_tcp", formData)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return "", err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
// 解析响应内容中的 alert 消息
|
|
// 解析响应内容中的 alert 消息
|
|
res, err := s.parser.ParseAlert(string(respBody))
|
|
res, err := s.parser.ParseAlert(string(respBody))
|
|
if err != nil {
|
|
if err != nil {
|
|
- return "", err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
if res != "" {
|
|
if res != "" {
|
|
- return "", fmt.Errorf(res)
|
|
|
|
|
|
+ return fmt.Errorf(res)
|
|
}
|
|
}
|
|
- wafTcpId, err := s.parser.GetRuleId(ctx, respBody)
|
|
|
|
|
|
+ wafTcpIdStr, err := s.parser.GetRuleId(ctx, respBody)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return "", err
|
|
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
- fmt.Println("=================================================", wafTcpId)
|
|
|
|
- return "", nil
|
|
|
|
|
|
+ wafTcpId, err := cast.ToIntE(wafTcpIdStr)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if err = s.tcpforwardingRepository.AddTcpforwarding(ctx, &model.Tcpforwarding{
|
|
|
|
+ HostId: req.HostId,
|
|
|
|
+ RuleId: wafTcpId,
|
|
|
|
+ Port: strconv.Itoa(req.TcpForwardingData.Port),
|
|
|
|
+ Tag: require.Tag,
|
|
|
|
+ Comment: req.TcpForwardingData.Comment,
|
|
|
|
+ WafGatewayGroupId: require.WafGatewayGroupId,
|
|
|
|
+ CcCount: req.TcpForwardingData.CcCount,
|
|
|
|
+ CcDuration: req.TcpForwardingData.CcDuration,
|
|
|
|
+ CcBlockCount: req.TcpForwardingData.CcBlockCount,
|
|
|
|
+ CcBlockDuration: req.TcpForwardingData.CcBlockDuration,
|
|
|
|
+ BackendProtocol: req.TcpForwardingData.BackendProtocol,
|
|
|
|
+ BackendTimeout: req.TcpForwardingData.BackendTimeout,
|
|
|
|
+ }) ; err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
|
|
|
|
func (s *tcpforwardingService) EditTcpForwarding(ctx context.Context, req *v1.TcpForwardingRequest) (string, error) {
|
|
func (s *tcpforwardingService) EditTcpForwarding(ctx context.Context, req *v1.TcpForwardingRequest) (string, error) {
|
|
|
|
+ require, err := s.require(ctx, v1.GlobalRequire{
|
|
|
|
+ HostId: req.HostId,
|
|
|
|
+ Uid: req.Uid,
|
|
|
|
+ Comment: req.TcpForwardingData.Comment,
|
|
|
|
+ })
|
|
|
|
+ if err != nil {
|
|
|
|
+ return "", err
|
|
|
|
+ }
|
|
formData := map[string]interface{}{
|
|
formData := map[string]interface{}{
|
|
- "waf_tcp_id": req.WafTcpId,
|
|
|
|
- "tag": req.Tag,
|
|
|
|
- "port": req.Port,
|
|
|
|
- "waf_gateway_group_id": req.WafGatewayGroupId,
|
|
|
|
- "cc_count": req.CcCount,
|
|
|
|
- "cc_duration": req.CcDuration,
|
|
|
|
- "cc_block_count": req.CcBlockCount,
|
|
|
|
- "cc_block_duration": req.CcBlockDuration,
|
|
|
|
- "max_bytes_month": req.MaxBytesMonth,
|
|
|
|
- "conn_count": req.ConnCount,
|
|
|
|
- "conn_duration": req.ConnDuration,
|
|
|
|
- "max_conn_count": req.MaxConnCount,
|
|
|
|
- "bps": req.Bps,
|
|
|
|
- "backend_protocol": req.BackendProtocol,
|
|
|
|
- "backend_timeout": req.BackendTimeout,
|
|
|
|
- "backend_list": req.BackendList,
|
|
|
|
- "allow_ip_list": req.AllowIpList,
|
|
|
|
- "deny_ip_list": req.DenyIpList,
|
|
|
|
- "access_rule": req.AccessRule,
|
|
|
|
- "comment": req.Comment,
|
|
|
|
- }
|
|
|
|
- respBody, err := s.required.SendForm(ctx, "admin/info/waf_tcp/edit?&__goadmin_edit_pk="+strconv.Itoa(req.WafTcpId), "admin/edit/waf_tcp", formData)
|
|
|
|
|
|
+ "tag": require.Tag,
|
|
|
|
+ "port": req.TcpForwardingData.Port,
|
|
|
|
+ "waf_gateway_group_id": require.WafGatewayGroupId,
|
|
|
|
+ "waf_tcp_limit_id": require.LimitRuleId,
|
|
|
|
+ "cc_count": req.TcpForwardingData.CcCount,
|
|
|
|
+ "cc_duration": req.TcpForwardingData.CcDuration,
|
|
|
|
+ "cc_block_count": req.TcpForwardingData.CcBlockCount,
|
|
|
|
+ "cc_block_duration": req.TcpForwardingData.CcBlockDuration,
|
|
|
|
+ "backend_protocol": req.TcpForwardingData.BackendProtocol,
|
|
|
|
+ "backend_timeout": req.TcpForwardingData.BackendTimeout,
|
|
|
|
+ "comment": req.TcpForwardingData.Comment,
|
|
|
|
+ "backend_list": req.TcpForwardingData.BackendList,
|
|
|
|
+ "allow_ip_list": req.TcpForwardingData.AllowIpList,
|
|
|
|
+ "deny_ip_list": req.TcpForwardingData.DenyIpList,
|
|
|
|
+ "access_rule": req.TcpForwardingData.AccessRule,
|
|
|
|
+ }
|
|
|
|
+ respBody, err := s.required.SendForm(ctx, "admin/info/waf_tcp/edit?&__goadmin_edit_pk="+strconv.Itoa(req.TcpForwardingData.WafTcpId), "admin/edit/waf_tcp", formData)
|
|
if err != nil {
|
|
if err != nil {
|
|
return "", err
|
|
return "", err
|
|
}
|
|
}
|
|
@@ -130,4 +175,4 @@ func (s *tcpforwardingService) DeleteTcpForwarding(ctx context.Context, wafTcpId
|
|
return "", err
|
|
return "", err
|
|
}
|
|
}
|
|
return res, nil
|
|
return res, nil
|
|
-}
|
|
|
|
|
|
+}
|