73
vendor/openpitrix.io/openpitrix/pkg/client/access/client.go
generated
vendored
73
vendor/openpitrix.io/openpitrix/pkg/client/access/client.go
generated
vendored
@@ -1,73 +0,0 @@
|
||||
// Copyright 2018 The OpenPitrix Authors. All rights reserved.
|
||||
// Use of this source code is governed by a Apache license
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
package access
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
accountclient "openpitrix.io/openpitrix/pkg/client/account"
|
||||
"openpitrix.io/openpitrix/pkg/constants"
|
||||
"openpitrix.io/openpitrix/pkg/logger"
|
||||
"openpitrix.io/openpitrix/pkg/manager"
|
||||
"openpitrix.io/openpitrix/pkg/pb"
|
||||
)
|
||||
|
||||
type Client struct {
|
||||
pb.AccessManagerClient
|
||||
}
|
||||
|
||||
func NewClient() (*Client, error) {
|
||||
conn, err := manager.NewClient(constants.AccountServiceHost, constants.AccountServicePort)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Client{
|
||||
AccessManagerClient: pb.NewAccessManagerClient(conn),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (c *Client) CheckActionBundleUser(ctx context.Context, actionBundleIds []string, userId string) bool {
|
||||
users, err := c.GetActionBundleUsers(ctx, actionBundleIds)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
for _, user := range users {
|
||||
if user.GetUserId().GetValue() == userId {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (c *Client) GetActionBundleRoles(ctx context.Context, actionBundleIds []string) ([]*pb.Role, error) {
|
||||
response, err := c.DescribeRoles(ctx, &pb.DescribeRolesRequest{
|
||||
ActionBundleId: actionBundleIds,
|
||||
Status: []string{constants.StatusActive},
|
||||
})
|
||||
if err != nil {
|
||||
logger.Error(ctx, "Describe roles failed: %+v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return response.RoleSet, nil
|
||||
}
|
||||
|
||||
func (c *Client) GetActionBundleUsers(ctx context.Context, actionBundleIds []string) ([]*pb.User, error) {
|
||||
roles, err := c.GetActionBundleRoles(ctx, actionBundleIds)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var roleIds []string
|
||||
for _, role := range roles {
|
||||
roleIds = append(roleIds, role.RoleId)
|
||||
}
|
||||
|
||||
accountClient, err := accountclient.NewClient()
|
||||
if err != nil {
|
||||
logger.Error(ctx, "Get account manager client failed: %+v", err)
|
||||
return nil, err
|
||||
}
|
||||
return accountClient.GetRoleUsers(ctx, roleIds)
|
||||
}
|
||||
142
vendor/openpitrix.io/openpitrix/pkg/client/account/client.go
generated
vendored
142
vendor/openpitrix.io/openpitrix/pkg/client/account/client.go
generated
vendored
@@ -1,142 +0,0 @@
|
||||
// Copyright 2018 The OpenPitrix Authors. All rights reserved.
|
||||
// Use of this source code is governed by a Apache license
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
package account
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"math"
|
||||
"strings"
|
||||
|
||||
"openpitrix.io/openpitrix/pkg/constants"
|
||||
"openpitrix.io/openpitrix/pkg/logger"
|
||||
"openpitrix.io/openpitrix/pkg/manager"
|
||||
"openpitrix.io/openpitrix/pkg/pb"
|
||||
"openpitrix.io/openpitrix/pkg/util/pbutil"
|
||||
"openpitrix.io/openpitrix/pkg/util/stringutil"
|
||||
)
|
||||
|
||||
type Client struct {
|
||||
pb.AccountManagerClient
|
||||
}
|
||||
|
||||
func NewClient() (*Client, error) {
|
||||
conn, err := manager.NewClient(constants.AccountServiceHost, constants.AccountServicePort)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Client{
|
||||
AccountManagerClient: pb.NewAccountManagerClient(conn),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (c *Client) GetUsers(ctx context.Context, userIds []string) ([]*pb.User, error) {
|
||||
var internalUsers []*pb.User
|
||||
var noInternalUserIds []string
|
||||
for _, userId := range userIds {
|
||||
if stringutil.StringIn(userId, constants.InternalUsers) {
|
||||
internalUsers = append(internalUsers, &pb.User{
|
||||
UserId: pbutil.ToProtoString(userId),
|
||||
})
|
||||
} else {
|
||||
noInternalUserIds = append(noInternalUserIds, userId)
|
||||
}
|
||||
}
|
||||
|
||||
if len(noInternalUserIds) == 0 {
|
||||
return internalUsers, nil
|
||||
}
|
||||
|
||||
response, err := c.DescribeUsers(ctx, &pb.DescribeUsersRequest{
|
||||
UserId: noInternalUserIds,
|
||||
})
|
||||
if err != nil {
|
||||
logger.Error(ctx, "Describe users %s failed: %+v", noInternalUserIds, err)
|
||||
return nil, err
|
||||
}
|
||||
if len(response.UserSet) != len(noInternalUserIds) {
|
||||
logger.Error(ctx, "Describe users %s with return count [%d]", userIds, len(response.UserSet)+len(internalUsers))
|
||||
return nil, fmt.Errorf("describe users %s with return count [%d]", userIds, len(response.UserSet)+len(internalUsers))
|
||||
}
|
||||
response.UserSet = append(response.UserSet, internalUsers...)
|
||||
return response.UserSet, nil
|
||||
}
|
||||
|
||||
func (c *Client) GetUser(ctx context.Context, userId string) (*pb.User, error) {
|
||||
users, err := c.GetUsers(ctx, []string{userId})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(users) == 0 {
|
||||
return nil, fmt.Errorf("not found user [%s]", userId)
|
||||
}
|
||||
return users[0], nil
|
||||
}
|
||||
|
||||
func (c *Client) GetUserGroupPath(ctx context.Context, userId string) (string, error) {
|
||||
var userGroupPath string
|
||||
|
||||
response, err := c.DescribeUsersDetail(ctx, &pb.DescribeUsersRequest{
|
||||
UserId: []string{userId},
|
||||
})
|
||||
if err != nil || len(response.UserDetailSet) == 0 {
|
||||
logger.Error(ctx, "Describe user [%s] failed: %+v", userId, err)
|
||||
return "", err
|
||||
}
|
||||
|
||||
groups := response.UserDetailSet[0].GroupSet
|
||||
|
||||
//If one user under different groups, get the highest group path.
|
||||
minLevel := math.MaxInt32
|
||||
for _, group := range groups {
|
||||
level := len(strings.Split(group.GroupPath.GetValue(), "."))
|
||||
if level < minLevel {
|
||||
minLevel = level
|
||||
userGroupPath = group.GetGroupPath().GetValue()
|
||||
}
|
||||
}
|
||||
|
||||
return userGroupPath, nil
|
||||
|
||||
}
|
||||
|
||||
func (c *Client) GetRoleUsers(ctx context.Context, roleIds []string) ([]*pb.User, error) {
|
||||
response, err := c.DescribeUsers(ctx, &pb.DescribeUsersRequest{
|
||||
RoleId: roleIds,
|
||||
Status: []string{constants.StatusActive},
|
||||
})
|
||||
if err != nil {
|
||||
logger.Error(ctx, "Describe users failed: %+v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return response.UserSet, nil
|
||||
}
|
||||
|
||||
func (c *Client) GetIsvFromUser(ctx context.Context, userId string) (*pb.User, error) {
|
||||
groupPath, err := c.GetUserGroupPath(ctx, userId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
rootGroupId := strings.Split(groupPath, ".")[0]
|
||||
|
||||
describeUsersResponse, err := c.DescribeUsers(ctx, &pb.DescribeUsersRequest{
|
||||
RootGroupId: []string{rootGroupId},
|
||||
Status: []string{constants.StatusActive},
|
||||
RoleId: []string{constants.RoleIsv},
|
||||
})
|
||||
if err != nil {
|
||||
logger.Error(ctx, "Failed to describe users: %+v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(describeUsersResponse.UserSet) == 0 {
|
||||
logger.Error(ctx, "Isv not exist with root group id [%s]", rootGroupId)
|
||||
return nil, fmt.Errorf("isv not exist")
|
||||
}
|
||||
|
||||
return describeUsersResponse.UserSet[0], nil
|
||||
}
|
||||
35
vendor/openpitrix.io/openpitrix/pkg/client/client.go
generated
vendored
35
vendor/openpitrix.io/openpitrix/pkg/client/client.go
generated
vendored
@@ -1,35 +0,0 @@
|
||||
// Copyright 2018 The OpenPitrix Authors. All rights reserved.
|
||||
// Use of this source code is governed by a Apache license
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
accessclient "openpitrix.io/openpitrix/pkg/client/access"
|
||||
"openpitrix.io/openpitrix/pkg/pb"
|
||||
"openpitrix.io/openpitrix/pkg/sender"
|
||||
"openpitrix.io/openpitrix/pkg/util/ctxutil"
|
||||
)
|
||||
|
||||
func SetSystemUserToContext(ctx context.Context) context.Context {
|
||||
return ctxutil.ContextWithSender(ctx, sender.GetSystemSender())
|
||||
}
|
||||
|
||||
func SetUserToContext(ctx context.Context, userId, apiMethod string) (context.Context, error) {
|
||||
accessClient, err := accessclient.NewClient()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
response, err := accessClient.CanDo(ctx, &pb.CanDoRequest{
|
||||
UserId: userId,
|
||||
ApiMethod: apiMethod,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
userSender := sender.New(response.UserId, sender.OwnerPath(response.OwnerPath), sender.OwnerPath(response.AccessPath))
|
||||
return ctxutil.ContextWithSender(ctx, userSender), nil
|
||||
}
|
||||
Reference in New Issue
Block a user