You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/api/groups/custom.go

118 lines
3.1 KiB

package groups
import (
"context"
"fmt"
"github.com/hashicorp/watchtower/api"
)
func (s Group) AddMembers(ctx context.Context, memberIds []string) (*Group, *api.Error, error) {
if s.Client == nil {
return nil, nil, fmt.Errorf("nil client in AddMembers request")
}
// We assume that the client provided has the org and optionally the project id of the request.
if len(memberIds) == 0 {
return nil, nil, fmt.Errorf("empty memberIds slice")
}
body := map[string]interface{}{
"version": s.Version,
"member_ids": memberIds,
}
req, err := s.Client.NewRequest(ctx, "POST", fmt.Sprintf("groups/%s:add-members", s.Id), body)
if err != nil {
return nil, nil, fmt.Errorf("error creating AddMembers request: %w", err)
}
resp, err := s.Client.Do(req)
if err != nil {
return nil, nil, fmt.Errorf("error performing client request during AddMembers call: %w", err)
}
target := new(Group)
apiErr, err := resp.Decode(target)
if err != nil {
return nil, nil, fmt.Errorf("error decoding AddMembers repsonse: %w", err)
}
target.Client = s.Client
return target, apiErr, nil
}
func (s Group) SetMembers(ctx context.Context, memberIds []string) (*Group, *api.Error, error) {
if s.Client == nil {
return nil, nil, fmt.Errorf("nil client in SetMembers request")
}
// We assume that the client provided has the org and optionally the project id of the request.
body := map[string]interface{}{
"version": s.Version,
}
if len(memberIds) > 0 {
body["member_ids"] = memberIds
} else if memberIds != nil {
// In this function, a non-nil but empty list means clear out
body["member_ids"] = nil
}
req, err := s.Client.NewRequest(ctx, "POST", fmt.Sprintf("groups/%s:set-members", s.Id), body)
if err != nil {
return nil, nil, fmt.Errorf("error creating SetMembers request: %w", err)
}
resp, err := s.Client.Do(req)
if err != nil {
return nil, nil, fmt.Errorf("error performing client request during SetMembers call: %w", err)
}
target := new(Group)
apiErr, err := resp.Decode(target)
if err != nil {
return nil, nil, fmt.Errorf("error decoding SetMembers repsonse: %w", err)
}
target.Client = s.Client
return target, apiErr, nil
}
func (s Group) RemoveMembers(ctx context.Context, memberIds []string) (*Group, *api.Error, error) {
if s.Client == nil {
return nil, nil, fmt.Errorf("nil client in RemoveMembers request")
}
// We assume that the client provided has the org and optionally the project id of the request.
if len(memberIds) == 0 {
return nil, nil, fmt.Errorf("empty memberIds slice")
}
body := map[string]interface{}{
"version": s.Version,
"member_ids": memberIds,
}
req, err := s.Client.NewRequest(ctx, "POST", fmt.Sprintf("groups/%s:remove-members", s.Id), body)
if err != nil {
return nil, nil, fmt.Errorf("error creating RemoveMembers request: %w", err)
}
resp, err := s.Client.Do(req)
if err != nil {
return nil, nil, fmt.Errorf("error performing client request during RemoveMembers call: %w", err)
}
target := new(Group)
apiErr, err := resp.Decode(target)
if err != nil {
return nil, nil, fmt.Errorf("error decoding RemoveMembers repsonse: %w", err)
}
target.Client = s.Client
return target, apiErr, nil
}