Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
qiuqunfeng
waf-console
Commits
5f8fb56d
Commit
5f8fb56d
authored
Feb 08, 2025
by
qiuqunfeng
Browse files
commit
parent
61c9949f
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
92 additions
and
36 deletions
+92
-36
api/router.go
api/router.go
+1
-2
api/waf.go
api/waf.go
+3
-3
cmd/app/cmd.go
cmd/app/cmd.go
+27
-22
internal/controller/waf.go
internal/controller/waf.go
+2
-3
internal/service/waf.go
internal/service/waf.go
+10
-6
internal/utils/cluster.go
internal/utils/cluster.go
+49
-0
No files found.
api/router.go
View file @
5f8fb56d
...
@@ -8,11 +8,10 @@ import (
...
@@ -8,11 +8,10 @@ import (
"gitlab.com/security-rd/go-pkg/logging"
"gitlab.com/security-rd/go-pkg/logging"
"gitlab.com/tensorsecurity-rd/waf-console/internal/config"
"gitlab.com/tensorsecurity-rd/waf-console/internal/config"
"gitlab.com/tensorsecurity-rd/waf-console/internal/utils"
"gitlab.com/tensorsecurity-rd/waf-console/internal/utils"
"gitlab.com/tensorsecurity-rd/waf-console/pkg/generated/clientset/versioned"
"gorm.io/gorm"
"gorm.io/gorm"
)
)
func
SetRouters
(
db
*
gorm
.
DB
,
cl
ient
*
versioned
.
Clientset
)
*
gin
.
Engine
{
func
SetRouters
(
db
*
gorm
.
DB
,
cl
usterClientManager
*
utils
.
ClusterClientManager
)
*
gin
.
Engine
{
var
engine
*
gin
.
Engine
var
engine
*
gin
.
Engine
if
!
config
.
Conf
.
Debug
{
if
!
config
.
Conf
.
Debug
{
...
...
api/waf.go
View file @
5f8fb56d
...
@@ -3,14 +3,14 @@ package api
...
@@ -3,14 +3,14 @@ package api
import
(
import
(
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin"
"gitlab.com/tensorsecurity-rd/waf-console/internal/controller"
"gitlab.com/tensorsecurity-rd/waf-console/internal/controller"
"gitlab.com/tensorsecurity-rd/waf-console/
pkg/generated/clientset/versioned
"
"gitlab.com/tensorsecurity-rd/waf-console/
internal/utils
"
"gorm.io/gorm"
"gorm.io/gorm"
)
)
func
SetWafRouter
(
e
*
gin
.
Engine
,
cl
ient
*
versioned
.
Clientset
,
db
*
gorm
.
DB
)
{
func
SetWafRouter
(
e
*
gin
.
Engine
,
cl
usterClientManager
*
utils
.
ClusterClientManager
,
db
*
gorm
.
DB
)
{
v1
:=
e
.
Group
(
"v1/api"
)
v1
:=
e
.
Group
(
"v1/api"
)
wafController
:=
controller
.
NewWafController
(
cl
ient
,
db
)
wafController
:=
controller
.
NewWafController
(
cl
usterClientManager
,
db
)
v1
.
GET
(
"waf/:region_code/:namespace/:gateway_name"
,
wafController
.
Waf
)
v1
.
GET
(
"waf/:region_code/:namespace/:gateway_name"
,
wafController
.
Waf
)
v1
.
POST
(
"waf"
,
wafController
.
CreateWaf
)
v1
.
POST
(
"waf"
,
wafController
.
CreateWaf
)
v1
.
PUT
(
"mode"
,
wafController
.
UpdateMode
)
v1
.
PUT
(
"mode"
,
wafController
.
UpdateMode
)
...
...
cmd/app/cmd.go
View file @
5f8fb56d
...
@@ -8,6 +8,7 @@ import (
...
@@ -8,6 +8,7 @@ import (
"github.com/spf13/cobra"
"github.com/spf13/cobra"
"gitlab.com/security-rd/go-pkg/logging"
"gitlab.com/security-rd/go-pkg/logging"
"gitlab.com/tensorsecurity-rd/waf-console/api"
"gitlab.com/tensorsecurity-rd/waf-console/api"
"gitlab.com/tensorsecurity-rd/waf-console/internal/utils"
"gitlab.com/tensorsecurity-rd/waf-console/pkg/generated/clientset/versioned"
"gitlab.com/tensorsecurity-rd/waf-console/pkg/generated/clientset/versioned"
"gorm.io/driver/mysql"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm"
...
@@ -40,30 +41,34 @@ func NewRootCommand() *cobra.Command {
...
@@ -40,30 +41,34 @@ func NewRootCommand() *cobra.Command {
panic
(
"dbConfig is nil"
)
panic
(
"dbConfig is nil"
)
}
}
caData
,
err
:=
base64
.
StdEncoding
.
DecodeString
(
config
.
RegionConfigs
[
0
]
.
CAData
)
clusterClientManager
:=
utils
.
NewClusterClientManager
()
if
err
!=
nil
{
for
_
,
regionConfig
:=
range
config
.
RegionConfigs
{
panic
(
err
)
caData
,
err
:=
base64
.
StdEncoding
.
DecodeString
(
regionConfig
.
CAData
)
}
if
err
!=
nil
{
clientCertData
,
err
:=
base64
.
StdEncoding
.
DecodeString
(
config
.
RegionConfigs
[
0
]
.
ClientCertData
)
panic
(
err
)
if
err
!=
nil
{
}
panic
(
err
)
clientCertData
,
err
:=
base64
.
StdEncoding
.
DecodeString
(
regionConfig
.
ClientCertData
)
}
if
err
!=
nil
{
clientKeyData
,
err
:=
base64
.
StdEncoding
.
DecodeString
(
config
.
RegionConfigs
[
0
]
.
ClientKeyData
)
panic
(
err
)
if
err
!=
nil
{
}
panic
(
err
)
clientKeyData
,
err
:=
base64
.
StdEncoding
.
DecodeString
(
regionConfig
.
ClientKeyData
)
if
err
!=
nil
{
panic
(
err
)
}
client
:=
versioned
.
NewForConfigOrDie
(
&
rest
.
Config
{
Host
:
regionConfig
.
ApiServer
,
TLSClientConfig
:
rest
.
TLSClientConfig
{
Insecure
:
false
,
CAData
:
caData
,
CertData
:
clientCertData
,
KeyData
:
clientKeyData
,
},
// BearerToken: "1234567890",
})
clusterClientManager
.
AddClient
(
regionConfig
.
RegionCode
,
client
)
}
}
client
:=
versioned
.
NewForConfigOrDie
(
&
rest
.
Config
{
Host
:
config
.
RegionConfigs
[
0
]
.
ApiServer
,
TLSClientConfig
:
rest
.
TLSClientConfig
{
Insecure
:
false
,
CAData
:
caData
,
CertData
:
clientCertData
,
KeyData
:
clientKeyData
,
},
// BearerToken: "1234567890",
})
e
:=
api
.
SetRouters
(
db
,
cl
ient
)
e
:=
api
.
SetRouters
(
db
,
cl
usterClientManager
)
return
e
.
Run
(
":8080"
)
return
e
.
Run
(
":8080"
)
},
},
}
}
...
...
internal/controller/waf.go
View file @
5f8fb56d
...
@@ -7,7 +7,6 @@ import (
...
@@ -7,7 +7,6 @@ import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin"
"gitlab.com/tensorsecurity-rd/waf-console/internal/service"
"gitlab.com/tensorsecurity-rd/waf-console/internal/service"
"gitlab.com/tensorsecurity-rd/waf-console/internal/utils"
"gitlab.com/tensorsecurity-rd/waf-console/internal/utils"
"gitlab.com/tensorsecurity-rd/waf-console/pkg/generated/clientset/versioned"
"gorm.io/gorm"
"gorm.io/gorm"
)
)
...
@@ -15,9 +14,9 @@ type WafController struct {
...
@@ -15,9 +14,9 @@ type WafController struct {
service
service
.
Service
service
service
.
Service
}
}
func
NewWafController
(
cl
ient
*
versioned
.
Clientset
,
db
*
gorm
.
DB
)
*
WafController
{
func
NewWafController
(
cl
usterClientManager
*
utils
.
ClusterClientManager
,
db
*
gorm
.
DB
)
*
WafController
{
return
&
WafController
{
return
&
WafController
{
service
:
service
.
NewWafService
(
cl
ient
,
db
),
service
:
service
.
NewWafService
(
cl
usterClientManager
,
db
),
}
}
}
}
...
...
internal/service/waf.go
View file @
5f8fb56d
...
@@ -7,20 +7,20 @@ import (
...
@@ -7,20 +7,20 @@ import (
"slices"
"slices"
"gitlab.com/tensorsecurity-rd/waf-console/internal/model"
"gitlab.com/tensorsecurity-rd/waf-console/internal/model"
"gitlab.com/tensorsecurity-rd/waf-console/internal/utils"
"gitlab.com/tensorsecurity-rd/waf-console/pkg/apis/waf.security.io/v1alpha1"
"gitlab.com/tensorsecurity-rd/waf-console/pkg/apis/waf.security.io/v1alpha1"
"gitlab.com/tensorsecurity-rd/waf-console/pkg/generated/clientset/versioned"
"gopkg.in/yaml.v3"
"gopkg.in/yaml.v3"
"gorm.io/gorm"
"gorm.io/gorm"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
)
)
type
wafService
struct
{
type
wafService
struct
{
cl
ient
*
versioned
.
Clientset
cl
usterClientManager
*
utils
.
ClusterClientManager
db
*
gorm
.
DB
db
*
gorm
.
DB
}
}
func
NewWafService
(
cl
ient
*
versioned
.
Clientset
,
db
*
gorm
.
DB
)
Service
{
func
NewWafService
(
cl
usterClientManager
*
utils
.
ClusterClientManager
,
db
*
gorm
.
DB
)
Service
{
return
&
wafService
{
cl
ient
:
client
,
db
:
db
}
return
&
wafService
{
cl
usterClientManager
:
clusterClientManager
,
db
:
db
}
}
}
func
(
s
*
wafService
)
GetWaf
(
ctx
context
.
Context
,
regionCode
,
namespace
,
gatewayName
string
)
(
*
WafService
,
error
)
{
func
(
s
*
wafService
)
GetWaf
(
ctx
context
.
Context
,
regionCode
,
namespace
,
gatewayName
string
)
(
*
WafService
,
error
)
{
...
@@ -135,7 +135,11 @@ func (s *wafService) CreateWaf(ctx context.Context, req *CreateWafReq) (*WafServ
...
@@ -135,7 +135,11 @@ func (s *wafService) CreateWaf(ctx context.Context, req *CreateWafReq) (*WafServ
}
}
// Create the WAF service in Kubernetes
// Create the WAF service in Kubernetes
if
_
,
err
:=
s
.
client
.
WafV1alpha1
()
.
Services
(
req
.
Namespace
)
.
Create
(
ctx
,
service
,
metav1
.
CreateOptions
{});
err
!=
nil
{
client
:=
s
.
clusterClientManager
.
GetClient
(
req
.
RegionCode
)
if
client
==
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to get cluster client: %v"
,
err
)
}
if
_
,
err
:=
client
.
WafV1alpha1
()
.
Services
(
req
.
Namespace
)
.
Create
(
ctx
,
service
,
metav1
.
CreateOptions
{});
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to create WAF service: %v"
,
err
)
return
nil
,
fmt
.
Errorf
(
"failed to create WAF service: %v"
,
err
)
}
}
...
...
internal/utils/cluster.go
0 → 100644
View file @
5f8fb56d
package
utils
import
(
"sync"
"gitlab.com/tensorsecurity-rd/waf-console/pkg/generated/clientset/versioned"
)
type
ClusterClientManager
struct
{
clients
map
[
string
]
*
versioned
.
Clientset
}
func
NewClusterClientManager
()
*
ClusterClientManager
{
return
&
ClusterClientManager
{
clients
:
make
(
map
[
string
]
*
versioned
.
Clientset
),
}
}
func
(
c
*
ClusterClientManager
)
GetClient
(
regionCode
string
)
*
versioned
.
Clientset
{
return
c
.
clients
[
regionCode
]
}
func
(
c
*
ClusterClientManager
)
AddClient
(
regionCode
string
,
client
*
versioned
.
Clientset
)
{
c
.
clients
[
regionCode
]
=
client
}
func
(
c
*
ClusterClientManager
)
RemoveClient
(
regionCode
string
)
{
delete
(
c
.
clients
,
regionCode
)
}
func
(
c
*
ClusterClientManager
)
GetAllClients
()
map
[
string
]
*
versioned
.
Clientset
{
return
c
.
clients
}
func
(
c
*
ClusterClientManager
)
GetClientByRegionCode
(
regionCode
string
)
*
versioned
.
Clientset
{
return
c
.
clients
[
regionCode
]
}
func
(
c
*
ClusterClientManager
)
ForEach
(
fn
func
(
regionCode
string
,
client
*
versioned
.
Clientset
))
{
wg
:=
sync
.
WaitGroup
{}
for
regionCode
,
client
:=
range
c
.
clients
{
wg
.
Add
(
1
)
go
func
(
regionCode
string
,
client
*
versioned
.
Clientset
)
{
defer
wg
.
Done
()
fn
(
regionCode
,
client
)
}(
regionCode
,
client
)
}
wg
.
Wait
()
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment