补充权限验证
This commit is contained in:
parent
903a3d8520
commit
89d648e5a6
3
devcloud-mini/.vscode/settings.json
vendored
3
devcloud-mini/.vscode/settings.json
vendored
@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"go.testEnvFile": "${workspaceFolder}/etc/unit_test.env",
|
"go.testEnvFile": "${workspaceFolder}/etc/unit_test.env",
|
||||||
"go.testEnvVars": {
|
"go.testEnvVars": {
|
||||||
"CmdbConfigPath": "${workspaceFolder}/cmdb/etc/application.toml"
|
"CmdbConfigPath": "${workspaceFolder}/cmdb/etc/application.toml",
|
||||||
|
"McenterConfigPath": "${workspaceFolder}/mcenter/etc/application.toml"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,7 +9,9 @@ import (
|
|||||||
"github.com/infraboard/mcube/v2/http/restful/response"
|
"github.com/infraboard/mcube/v2/http/restful/response"
|
||||||
"github.com/infraboard/mcube/v2/ioc"
|
"github.com/infraboard/mcube/v2/ioc"
|
||||||
"github.com/infraboard/mcube/v2/ioc/config/gorestful"
|
"github.com/infraboard/mcube/v2/ioc/config/gorestful"
|
||||||
|
"github.com/infraboard/modules/iam/apps/endpoint"
|
||||||
"gitlab.com/go-course-project/go17/devcloud-mini/cmdb/apps/secret"
|
"gitlab.com/go-course-project/go17/devcloud-mini/cmdb/apps/secret"
|
||||||
|
permission "gitlab.com/go-course-project/go17/devcloud-mini/mcenter/permisson"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -31,7 +33,12 @@ func (r *SecretApiHandler) Init() error {
|
|||||||
|
|
||||||
tags := []string{"凭证管理"}
|
tags := []string{"凭证管理"}
|
||||||
|
|
||||||
ws.Route(ws.GET("").To(r.QuerySecret).Doc("凭证列表").
|
ws.Route(ws.GET("").To(r.QuerySecret).
|
||||||
|
Metadata(permission.Auth(true)).
|
||||||
|
Metadata(permission.Permission(true)).
|
||||||
|
Metadata(endpoint.META_RESOURCE_KEY, "secret").
|
||||||
|
Metadata(endpoint.META_ACTION_KEY, "list").
|
||||||
|
Doc("凭证列表").
|
||||||
Param(ws.QueryParameter("page_size", "分页大小").DataType("intger")).
|
Param(ws.QueryParameter("page_size", "分页大小").DataType("intger")).
|
||||||
Param(ws.QueryParameter("page_number", "页码").DataType("intger")).
|
Param(ws.QueryParameter("page_number", "页码").DataType("intger")).
|
||||||
Param(ws.QueryParameter("keywords", "关键字过滤").DataType("string")).
|
Param(ws.QueryParameter("keywords", "关键字过滤").DataType("string")).
|
||||||
@ -41,7 +48,12 @@ func (r *SecretApiHandler) Init() error {
|
|||||||
Returns(404, "Not Found", exception.NewNotFound("")))
|
Returns(404, "Not Found", exception.NewNotFound("")))
|
||||||
|
|
||||||
// :id -> {id}
|
// :id -> {id}
|
||||||
ws.Route(ws.GET("/{id}").To(r.DescribeSecret).Doc("凭证详情").
|
ws.Route(ws.GET("/{id}").To(r.DescribeSecret).
|
||||||
|
Metadata(permission.Auth(true)).
|
||||||
|
Metadata(permission.Permission(true)).
|
||||||
|
Metadata(endpoint.META_RESOURCE_KEY, "secret").
|
||||||
|
Metadata(endpoint.META_ACTION_KEY, "get").
|
||||||
|
Doc("凭证详情").
|
||||||
Param(ws.PathParameter("id", "凭证Id").DataType("string")).
|
Param(ws.PathParameter("id", "凭证Id").DataType("string")).
|
||||||
Metadata(restfulspec.KeyOpenAPITags, tags).
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
||||||
Writes(secret.Secret{}).
|
Writes(secret.Secret{}).
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
[app]
|
[app]
|
||||||
name = "cmdb"
|
name = "cmdb"
|
||||||
description = "cmdb"
|
description = "cmdb"
|
||||||
|
internal_address = "http://127.0.0.1:8020"
|
||||||
|
internal_token = "bar3TjDvMxITfrGrVLvv3ujF"
|
||||||
|
|
||||||
[http]
|
[http]
|
||||||
# 开启GRPC服务
|
# 开启GRPC服务
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
[app]
|
[app]
|
||||||
name = "mcenter"
|
name = "mcenter"
|
||||||
description = "mcenter"
|
description = "mcenter"
|
||||||
|
internal_address = "http://127.0.0.1:8020"
|
||||||
|
internal_token = "bar3TjDvMxITfrGrVLvv3ujF"
|
||||||
|
|
||||||
[http]
|
[http]
|
||||||
# 开启GRPC服务
|
# 开启GRPC服务
|
||||||
@ -18,3 +20,4 @@
|
|||||||
username = "root"
|
username = "root"
|
||||||
password = "123456"
|
password = "123456"
|
||||||
debug = true
|
debug = true
|
||||||
|
auto_migrate = true
|
||||||
|
@ -1,15 +1,67 @@
|
|||||||
# 给接入用户中心的服务提供的SDK 中间件
|
# 给接入用户中心的服务提供的SDK 中间件
|
||||||
|
|
||||||
|
```go
|
||||||
|
import (
|
||||||
|
permission "gitlab.com/go-course-project/go17/devcloud-mini/mcenter/permisson"
|
||||||
|
"github.com/infraboard/modules/iam/apps/endpoint"
|
||||||
|
)
|
||||||
|
|
||||||
|
ws.Route(ws.GET("").To(r.QuerySecret).
|
||||||
|
Metadata(permission.Auth(true)).
|
||||||
|
Metadata(permission.Permission(true)).
|
||||||
|
Metadata(endpoint.META_RESOURCE_KEY, "secret").
|
||||||
|
Metadata(endpoint.META_ACTION_KEY, "list")
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 中间件逻辑
|
||||||
|
|
||||||
把这2个部分替换为RPC 就可以给其他服务使用了
|
把这2个部分替换为RPC 就可以给其他服务使用了
|
||||||
|
|
||||||
```go
|
```go
|
||||||
tk, err := c.token.ValiateToken(r.Request.Context(), token.NewValiateTokenRequest(v))
|
// http://127.0.0.1:8020/api/mcenter/v1/token/validate
|
||||||
set, err := c.policy.QueryPolicy(r.Request.Context(),
|
func (c *Checker) ValiateToken(ctx context.Context, in *token.ValiateTokenRequest) (*token.Token, error) {
|
||||||
policy.NewQueryPolicyRequest().
|
tk := token.NewToken()
|
||||||
SetNamespaceId(tk.NamespaceId).
|
resp, err := resty.New().
|
||||||
SetUserId(tk.UserId).
|
SetBaseURL(application.Get().InternalAddress).
|
||||||
SetExpired(false).
|
SetAuthToken(application.Get().InternalToken).
|
||||||
SetEnabled(true).
|
R().
|
||||||
SetWithRole(true),
|
WithContext(ctx).
|
||||||
)
|
SetContentType("application/json").
|
||||||
|
SetBody(in).
|
||||||
|
SetResult(tk).
|
||||||
|
Post("/api/mcenter/v1/token/validate")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if resp.StatusCode()/100 != 2 {
|
||||||
|
return nil, exception.NewUnauthorized("[%d] token校验异常: %s", resp.StatusCode(), resp.String())
|
||||||
|
}
|
||||||
|
return tk, nil
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```go
|
||||||
|
// 查询策略列表
|
||||||
|
// /api/mcenter/v1/permission/check
|
||||||
|
func (c *Checker) ValidateEndpointPermission(ctx context.Context, in *policy.ValidateEndpointPermissionRequest) (*policy.ValidateEndpointPermissionResponse, error) {
|
||||||
|
ins := policy.NewValidateEndpointPermissionResponse(*in)
|
||||||
|
resp, err := resty.New().
|
||||||
|
SetBaseURL(application.Get().InternalAddress).
|
||||||
|
SetAuthToken(application.Get().InternalToken).
|
||||||
|
SetDebug(false).
|
||||||
|
R().
|
||||||
|
WithContext(ctx).
|
||||||
|
SetBody(in).
|
||||||
|
SetResult(ins).
|
||||||
|
Post("/api/mcenter/v1/permission/check")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if resp.StatusCode()/100 != 2 {
|
||||||
|
return nil, exception.NewPermissionDeny("[%d] token鉴权异常: %s", resp.StatusCode(), resp.String())
|
||||||
|
}
|
||||||
|
return ins, nil
|
||||||
|
}
|
||||||
```
|
```
|
@ -7,12 +7,14 @@ import (
|
|||||||
"github.com/infraboard/mcube/v2/exception"
|
"github.com/infraboard/mcube/v2/exception"
|
||||||
"github.com/infraboard/mcube/v2/http/restful/response"
|
"github.com/infraboard/mcube/v2/http/restful/response"
|
||||||
"github.com/infraboard/mcube/v2/ioc"
|
"github.com/infraboard/mcube/v2/ioc"
|
||||||
|
"github.com/infraboard/mcube/v2/ioc/config/application"
|
||||||
"github.com/infraboard/mcube/v2/ioc/config/gorestful"
|
"github.com/infraboard/mcube/v2/ioc/config/gorestful"
|
||||||
"github.com/infraboard/mcube/v2/ioc/config/log"
|
"github.com/infraboard/mcube/v2/ioc/config/log"
|
||||||
"github.com/infraboard/modules/iam/apps/endpoint"
|
"github.com/infraboard/modules/iam/apps/endpoint"
|
||||||
"github.com/infraboard/modules/iam/apps/policy"
|
"github.com/infraboard/modules/iam/apps/policy"
|
||||||
"github.com/infraboard/modules/iam/apps/token"
|
"github.com/infraboard/modules/iam/apps/token"
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
|
"resty.dev/v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Auth(v bool) (string, bool) {
|
func Auth(v bool) (string, bool) {
|
||||||
@ -31,12 +33,13 @@ func init() {
|
|||||||
ioc.Config().Registry(&Checker{})
|
ioc.Config().Registry(&Checker{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetPermissionChecker() *Checker {
|
||||||
|
return ioc.Config().Get("permission_checker").(*Checker)
|
||||||
|
}
|
||||||
|
|
||||||
type Checker struct {
|
type Checker struct {
|
||||||
ioc.ObjectImpl
|
ioc.ObjectImpl
|
||||||
log *zerolog.Logger
|
log *zerolog.Logger
|
||||||
|
|
||||||
token token.Service
|
|
||||||
policy policy.Service
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Checker) Name() string {
|
func (c *Checker) Name() string {
|
||||||
@ -49,8 +52,6 @@ func (c *Checker) Priority() int {
|
|||||||
|
|
||||||
func (c *Checker) Init() error {
|
func (c *Checker) Init() error {
|
||||||
c.log = log.Sub(c.Name())
|
c.log = log.Sub(c.Name())
|
||||||
c.token = token.GetService()
|
|
||||||
c.policy = policy.GetService()
|
|
||||||
|
|
||||||
// 注册认证中间件
|
// 注册认证中间件
|
||||||
gorestful.RootRouter().Filter(c.Check)
|
gorestful.RootRouter().Filter(c.Check)
|
||||||
@ -83,7 +84,7 @@ func (c *Checker) CheckToken(r *restful.Request) (*token.Token, error) {
|
|||||||
return nil, exception.NewUnauthorized("请先登录")
|
return nil, exception.NewUnauthorized("请先登录")
|
||||||
}
|
}
|
||||||
|
|
||||||
tk, err := c.token.ValiateToken(r.Request.Context(), token.NewValiateTokenRequest(v))
|
tk, err := c.ValiateToken(r.Request.Context(), token.NewValiateTokenRequest(v))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -93,43 +94,73 @@ func (c *Checker) CheckToken(r *restful.Request) (*token.Token, error) {
|
|||||||
return tk, nil
|
return tk, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// http://127.0.0.1:8020/api/mcenter/v1/token/validate
|
||||||
|
func (c *Checker) ValiateToken(ctx context.Context, in *token.ValiateTokenRequest) (*token.Token, error) {
|
||||||
|
tk := token.NewToken()
|
||||||
|
resp, err := resty.New().
|
||||||
|
SetBaseURL(application.Get().InternalAddress).
|
||||||
|
SetAuthToken(application.Get().InternalToken).
|
||||||
|
R().
|
||||||
|
WithContext(ctx).
|
||||||
|
SetContentType("application/json").
|
||||||
|
SetBody(in).
|
||||||
|
SetResult(tk).
|
||||||
|
Post("/api/mcenter/v1/token/validate")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if resp.StatusCode()/100 != 2 {
|
||||||
|
return nil, exception.NewUnauthorized("[%d] token校验异常: %s", resp.StatusCode(), resp.String())
|
||||||
|
}
|
||||||
|
if tk.NamespaceId == 0 {
|
||||||
|
tk.NamespaceId = 1
|
||||||
|
}
|
||||||
|
return tk, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Checker) CheckPolicy(r *restful.Request, tk *token.Token, route *endpoint.RouteEntry) error {
|
func (c *Checker) CheckPolicy(r *restful.Request, tk *token.Token, route *endpoint.RouteEntry) error {
|
||||||
if tk.IsAdmin {
|
if tk.IsAdmin {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
set, err := c.policy.QueryPolicy(r.Request.Context(),
|
|
||||||
policy.NewQueryPolicyRequest().
|
|
||||||
SetNamespaceId(tk.NamespaceId).
|
|
||||||
SetUserId(tk.UserId).
|
|
||||||
SetExpired(false).
|
|
||||||
SetEnabled(true).
|
|
||||||
SetWithRole(true),
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return exception.NewInternalServerError(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
// 角色校验
|
|
||||||
if route.HasRequiredRole() {
|
|
||||||
for i := range set.Items {
|
|
||||||
p := set.Items[i]
|
|
||||||
if route.IsRequireRole(p.Role.Name) {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// API权限校验
|
// API权限校验
|
||||||
if route.RequiredPerm {
|
if route.RequiredPerm {
|
||||||
for i := range set.Items {
|
permReq := policy.NewValidateEndpointPermissionRequest()
|
||||||
p := set.Items[i]
|
permReq.UserId = tk.UserId
|
||||||
if p.Role == nil {
|
permReq.NamespaceId = tk.NamespaceId
|
||||||
return exception.NewInternalServerError("policy role is nil")
|
permReq.Service = application.Get().AppName
|
||||||
|
permReq.Method = route.Method
|
||||||
|
permReq.Path = route.Path
|
||||||
|
resp, err := c.ValidateEndpointPermission(r.Request.Context(), permReq)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
if !resp.HasPermission {
|
||||||
|
return exception.NewPermissionDeny("无权限")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 查询策略列表
|
||||||
|
// /api/mcenter/v1/permission/check
|
||||||
|
func (c *Checker) ValidateEndpointPermission(ctx context.Context, in *policy.ValidateEndpointPermissionRequest) (*policy.ValidateEndpointPermissionResponse, error) {
|
||||||
|
ins := policy.NewValidateEndpointPermissionResponse(*in)
|
||||||
|
resp, err := resty.New().
|
||||||
|
SetBaseURL(application.Get().InternalAddress).
|
||||||
|
SetAuthToken(application.Get().InternalToken).
|
||||||
|
SetDebug(true).
|
||||||
|
R().
|
||||||
|
WithContext(ctx).
|
||||||
|
SetBody(in).
|
||||||
|
SetResult(ins).
|
||||||
|
Post("/api/mcenter/v1/permission/check")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if resp.StatusCode()/100 != 2 {
|
||||||
|
return nil, exception.NewPermissionDeny("[%d] token鉴权异常: %s", resp.StatusCode(), resp.String())
|
||||||
|
}
|
||||||
|
return ins, nil
|
||||||
|
}
|
||||||
|
57
devcloud-mini/mcenter/permisson/checker_test.go
Normal file
57
devcloud-mini/mcenter/permisson/checker_test.go
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package permission_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/infraboard/modules/iam/apps/endpoint"
|
||||||
|
"github.com/infraboard/modules/iam/apps/policy"
|
||||||
|
"github.com/infraboard/modules/iam/apps/token"
|
||||||
|
permission "gitlab.com/go-course-project/go17/devcloud-mini/mcenter/permisson"
|
||||||
|
"gitlab.com/go-course-project/go17/devcloud-mini/mcenter/test"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestValiateToken(t *testing.T) {
|
||||||
|
tk, err := permission.GetPermissionChecker().
|
||||||
|
ValiateToken(context.Background(), token.NewValiateTokenRequest("fY2dsHqkSBNATR1jTHsXIpXo"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log(tk)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestValidateEndpointPermission(t *testing.T) {
|
||||||
|
req := policy.NewValidateEndpointPermissionRequest()
|
||||||
|
req.UserId = 5
|
||||||
|
req.NamespaceId = 1
|
||||||
|
req.Service = "cmdb"
|
||||||
|
req.Method = "GET"
|
||||||
|
req.Path = "/api/cmdb/v1/secret"
|
||||||
|
resp, err := permission.GetPermissionChecker().
|
||||||
|
ValidateEndpointPermission(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log(resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRegistryEndpoint(t *testing.T) {
|
||||||
|
req := endpoint.NewRegistryEndpointRequest()
|
||||||
|
req.AddItem(&endpoint.RouteEntry{
|
||||||
|
Service: "cmdb",
|
||||||
|
Resource: "secret",
|
||||||
|
Action: "delete",
|
||||||
|
Method: "DELETE",
|
||||||
|
Path: "/api/cmdb/v1/secret/{id}",
|
||||||
|
})
|
||||||
|
resp, err := permission.GetApiRegister().
|
||||||
|
RegistryEndpoint(context.Background(), req)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log(resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
test.SetUp()
|
||||||
|
}
|
@ -3,18 +3,33 @@ package permission
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"github.com/infraboard/mcube/v2/exception"
|
||||||
"github.com/infraboard/mcube/v2/ioc"
|
"github.com/infraboard/mcube/v2/ioc"
|
||||||
|
"github.com/infraboard/mcube/v2/ioc/config/application"
|
||||||
"github.com/infraboard/mcube/v2/ioc/config/gorestful"
|
"github.com/infraboard/mcube/v2/ioc/config/gorestful"
|
||||||
|
"github.com/infraboard/mcube/v2/types"
|
||||||
"github.com/infraboard/modules/iam/apps/endpoint"
|
"github.com/infraboard/modules/iam/apps/endpoint"
|
||||||
|
"resty.dev/v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
ioc.Api().Registry(&ApiRegister{})
|
ioc.Api().Registry(&ApiRegister{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetApiRegister() *ApiRegister {
|
||||||
|
return ioc.Api().Get("api_register").(*ApiRegister)
|
||||||
|
}
|
||||||
|
|
||||||
type ApiRegister struct {
|
type ApiRegister struct {
|
||||||
ioc.ObjectImpl
|
ioc.ObjectImpl
|
||||||
endpoint endpoint.Service
|
}
|
||||||
|
|
||||||
|
func (c *ApiRegister) Name() string {
|
||||||
|
return "api_register"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *ApiRegister) Priority() int {
|
||||||
|
return -100
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *ApiRegister) Init() error {
|
func (a *ApiRegister) Init() error {
|
||||||
@ -22,13 +37,35 @@ func (a *ApiRegister) Init() error {
|
|||||||
entries := endpoint.NewEntryFromRestfulContainer(gorestful.RootRouter())
|
entries := endpoint.NewEntryFromRestfulContainer(gorestful.RootRouter())
|
||||||
req := endpoint.NewRegistryEndpointRequest()
|
req := endpoint.NewRegistryEndpointRequest()
|
||||||
req.AddItem(entries...)
|
req.AddItem(entries...)
|
||||||
_, err := a.endpoint.RegistryEndpoint(context.Background(), req)
|
_, err := a.RegistryEndpoint(context.Background(), req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ApiRegister) Name() string {
|
// 注册API接口(RPC --> REST SDK)
|
||||||
return "api_register"
|
// 自己的 注册API接口
|
||||||
|
// restful client: github.com/go-resty/resty/v2
|
||||||
|
// http://127.0.0.1:8020/api/mcenter/v1/endpoint
|
||||||
|
func (a *ApiRegister) RegistryEndpoint(ctx context.Context, in *endpoint.RegistryEndpointRequest) (*types.Set[*endpoint.Endpoint], error) {
|
||||||
|
set := types.New[*endpoint.Endpoint]()
|
||||||
|
resp, err := resty.New().
|
||||||
|
SetDebug(true).
|
||||||
|
SetBaseURL(application.Get().InternalAddress).
|
||||||
|
SetAuthToken(application.Get().InternalToken).
|
||||||
|
R().
|
||||||
|
WithContext(ctx).
|
||||||
|
SetContentType("application/json").
|
||||||
|
SetBody(in.Items).
|
||||||
|
SetResult(set).
|
||||||
|
Post("/api/mcenter/v1/endpoint")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode()/100 != 2 {
|
||||||
|
return nil, exception.NewPermissionDeny("[%d] API注册异常: %s", resp.StatusCode(), resp.String())
|
||||||
|
}
|
||||||
|
return set, nil
|
||||||
}
|
}
|
||||||
|
13
devcloud-mini/mcenter/test/setup.go
Normal file
13
devcloud-mini/mcenter/test/setup.go
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/infraboard/mcube/v2/ioc"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SetUp() {
|
||||||
|
fmt.Println(os.Getenv("McenterConfigPath"))
|
||||||
|
ioc.DevelopmentSetupWithPath(os.Getenv("McenterConfigPath"))
|
||||||
|
}
|
7
go.mod
7
go.mod
@ -9,8 +9,8 @@ require (
|
|||||||
github.com/go-playground/validator/v10 v10.20.0
|
github.com/go-playground/validator/v10 v10.20.0
|
||||||
github.com/google/uuid v1.6.0
|
github.com/google/uuid v1.6.0
|
||||||
github.com/gorilla/websocket v1.5.3
|
github.com/gorilla/websocket v1.5.3
|
||||||
github.com/infraboard/mcube/v2 v2.0.51
|
github.com/infraboard/mcube/v2 v2.0.52
|
||||||
github.com/infraboard/modules v0.0.3
|
github.com/infraboard/modules v0.0.8
|
||||||
github.com/rs/zerolog v1.32.0
|
github.com/rs/zerolog v1.32.0
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1116
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1116
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/lighthouse v1.0.1115
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/lighthouse v1.0.1115
|
||||||
@ -111,7 +111,7 @@ require (
|
|||||||
go.opentelemetry.io/proto/otlp v1.1.0 // indirect
|
go.opentelemetry.io/proto/otlp v1.1.0 // indirect
|
||||||
golang.org/x/arch v0.8.0 // indirect
|
golang.org/x/arch v0.8.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect
|
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect
|
||||||
golang.org/x/net v0.32.0 // indirect
|
golang.org/x/net v0.33.0 // indirect
|
||||||
golang.org/x/sync v0.10.0 // indirect
|
golang.org/x/sync v0.10.0 // indirect
|
||||||
golang.org/x/sys v0.28.0 // indirect
|
golang.org/x/sys v0.28.0 // indirect
|
||||||
golang.org/x/term v0.27.0 // indirect
|
golang.org/x/term v0.27.0 // indirect
|
||||||
@ -123,5 +123,6 @@ require (
|
|||||||
modernc.org/mathutil v1.6.0 // indirect
|
modernc.org/mathutil v1.6.0 // indirect
|
||||||
modernc.org/memory v1.7.2 // indirect
|
modernc.org/memory v1.7.2 // indirect
|
||||||
modernc.org/sqlite v1.28.0 // indirect
|
modernc.org/sqlite v1.28.0 // indirect
|
||||||
|
resty.dev/v3 v3.0.0-beta.2
|
||||||
sigs.k8s.io/yaml v1.4.0 // indirect
|
sigs.k8s.io/yaml v1.4.0 // indirect
|
||||||
)
|
)
|
||||||
|
20
go.sum
20
go.sum
@ -125,16 +125,10 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2
|
|||||||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||||
github.com/infraboard/mcenter v0.0.45 h1:zFVmurkjGXb582hEJS0YSLjyl4TcimwSCeEbjXaJ6/M=
|
github.com/infraboard/mcenter v0.0.45 h1:zFVmurkjGXb582hEJS0YSLjyl4TcimwSCeEbjXaJ6/M=
|
||||||
github.com/infraboard/mcenter v0.0.45/go.mod h1:YsGG69OTCgqsAb0VYr7pLNASElVtimX1WQ/ZzANQ9MI=
|
github.com/infraboard/mcenter v0.0.45/go.mod h1:YsGG69OTCgqsAb0VYr7pLNASElVtimX1WQ/ZzANQ9MI=
|
||||||
github.com/infraboard/mcube/v2 v2.0.51 h1:QWgC6yo6qfx5xvU25MPdoQhkPuzjwrn8YfrQxOonL/8=
|
github.com/infraboard/mcube/v2 v2.0.52 h1:cOzVjTz2LlIMvz1CCXrRwyX6uaF0JKxc7MBIRMLipFY=
|
||||||
github.com/infraboard/mcube/v2 v2.0.51/go.mod h1:gnr0xPPDPHvCS6JAzvdjqJ62J2+vUZTkobomjTXKsx0=
|
github.com/infraboard/mcube/v2 v2.0.52/go.mod h1:gnr0xPPDPHvCS6JAzvdjqJ62J2+vUZTkobomjTXKsx0=
|
||||||
github.com/infraboard/modules v0.0.0-20241201140557-2383c703e617 h1:+xhfA9EXxu7iW6sb9DrG/ZHiCM31PH9aHQ31v3Xywck=
|
github.com/infraboard/modules v0.0.8 h1:ytzkjMbRuFb6FoI3Md6xS5hITjFqIvhIMMBvMQUGuE4=
|
||||||
github.com/infraboard/modules v0.0.0-20241201140557-2383c703e617/go.mod h1:v5qcwHvGOg6UsmKPVgAN3sn+XLgD9uYu/PqEWU129ck=
|
github.com/infraboard/modules v0.0.8/go.mod h1:2ENrxqKlWvkf9WgO9FvXw3bUHWtPut71WSwDvVga/PI=
|
||||||
github.com/infraboard/modules v0.0.0-20250316032722-447e1c651a75 h1:yuK6RWI23duw2nbGAa673puBk8lwaF7DKH55UmtgLjE=
|
|
||||||
github.com/infraboard/modules v0.0.0-20250316032722-447e1c651a75/go.mod h1:v5qcwHvGOg6UsmKPVgAN3sn+XLgD9uYu/PqEWU129ck=
|
|
||||||
github.com/infraboard/modules v0.0.2 h1:LyIKcSp4J/p96JHm59ZtDr3CF1yWN09RttiPmRgoYHM=
|
|
||||||
github.com/infraboard/modules v0.0.2/go.mod h1:v5qcwHvGOg6UsmKPVgAN3sn+XLgD9uYu/PqEWU129ck=
|
|
||||||
github.com/infraboard/modules v0.0.3 h1:OTsW1K7htTnNZUMNHJOcHIL4Tp218LaGPk4HX3Cuas0=
|
|
||||||
github.com/infraboard/modules v0.0.3/go.mod h1:v5qcwHvGOg6UsmKPVgAN3sn+XLgD9uYu/PqEWU129ck=
|
|
||||||
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
||||||
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
||||||
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
|
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
|
||||||
@ -324,8 +318,8 @@ golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
|||||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||||
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
||||||
golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
|
golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
|
||||||
golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI=
|
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
|
||||||
golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs=
|
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
@ -406,6 +400,8 @@ modernc.org/memory v1.7.2/go.mod h1:NO4NVCQy0N7ln+T9ngWqOQfi7ley4vpwvARR+Hjw95E=
|
|||||||
modernc.org/sqlite v1.28.0 h1:Zx+LyDDmXczNnEQdvPuEfcFVA2ZPyaD7UCZDjef3BHQ=
|
modernc.org/sqlite v1.28.0 h1:Zx+LyDDmXczNnEQdvPuEfcFVA2ZPyaD7UCZDjef3BHQ=
|
||||||
modernc.org/sqlite v1.28.0/go.mod h1:Qxpazz0zH8Z1xCFyi5GSL3FzbtZ3fvbjmywNogldEW0=
|
modernc.org/sqlite v1.28.0/go.mod h1:Qxpazz0zH8Z1xCFyi5GSL3FzbtZ3fvbjmywNogldEW0=
|
||||||
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
||||||
|
resty.dev/v3 v3.0.0-beta.2 h1:xu4mGAdbCLuc3kbk7eddWfWm4JfhwDtdapwss5nCjnQ=
|
||||||
|
resty.dev/v3 v3.0.0-beta.2/go.mod h1:OgkqiPvTDtOuV4MGZuUDhwOpkY8enjOsjjMzeOHefy4=
|
||||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
||||||
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
|
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
|
||||||
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
|
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
|
||||||
|
Loading…
x
Reference in New Issue
Block a user