Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[v14] Add access lists, members, and reviews to cache. #36331

Merged
merged 3 commits into from Jan 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
49 changes: 47 additions & 2 deletions api/client/accesslist/accesslist.go
Expand Up @@ -159,6 +159,28 @@ func (c *Client) ListAccessListMembers(ctx context.Context, accessList string, p
return members, resp.GetNextPageToken(), nil
}

// ListAllAccessListMembers returns a paginated list of all access list members for all access lists.
func (c *Client) ListAllAccessListMembers(ctx context.Context, pageSize int, pageToken string) (members []*accesslist.AccessListMember, nextToken string, err error) {
resp, err := c.grpcClient.ListAllAccessListMembers(ctx, &accesslistv1.ListAllAccessListMembersRequest{
PageSize: int32(pageSize),
PageToken: pageToken,
})
if err != nil {
return nil, "", trace.Wrap(err)
}

members = make([]*accesslist.AccessListMember, len(resp.Members))
for i, member := range resp.Members {
var err error
members[i], err = conv.FromMemberProto(member, conv.WithMemberIneligibleStatusField(member))
if err != nil {
return nil, "", trace.Wrap(err)
}
}

return members, resp.GetNextPageToken(), nil
}

// GetAccessListMember returns the specified access list member resource.
func (c *Client) GetAccessListMember(ctx context.Context, accessList string, memberName string) (*accesslist.AccessListMember, error) {
resp, err := c.grpcClient.GetAccessListMember(ctx, &accesslistv1.GetAccessListMemberRequest{
Expand Down Expand Up @@ -242,6 +264,29 @@ func (c *Client) AccessRequestPromote(ctx context.Context, req *accesslistv1.Acc
// ListAccessListReviews will list access list reviews for a particular access list.
func (c *Client) ListAccessListReviews(ctx context.Context, accessList string, pageSize int, pageToken string) (reviews []*accesslist.Review, nextToken string, err error) {
resp, err := c.grpcClient.ListAccessListReviews(ctx, &accesslistv1.ListAccessListReviewsRequest{
AccessList: accessList,
PageSize: int32(pageSize),
NextToken: nextToken,
})
if err != nil {
return nil, "", trace.Wrap(err)
}

reviews = make([]*accesslist.Review, len(resp.Reviews))
for i, review := range resp.Reviews {
var err error
reviews[i], err = conv.FromReviewProto(review)
if err != nil {
return nil, "", trace.Wrap(err)
}
}

return reviews, resp.GetNextToken(), nil
}

// ListAllAccessListReviews will list access list reviews for all access lists. Only to be used by the cache.
func (c *Client) ListAllAccessListReviews(ctx context.Context, pageSize int, pageToken string) (reviews []*accesslist.Review, nextToken string, err error) {
resp, err := c.grpcClient.ListAllAccessListReviews(ctx, &accesslistv1.ListAllAccessListReviewsRequest{
PageSize: int32(pageSize),
NextToken: nextToken,
})
Expand Down Expand Up @@ -282,8 +327,8 @@ func (c *Client) DeleteAccessListReview(ctx context.Context, accessListName, rev
return trace.Wrap(err)
}

// DeleteAllAccessListReviews will delete all access list reviews from an access list.
func (c *Client) DeleteAllAccessListReviews(ctx context.Context, accessListName string) error {
// DeleteAllAccessListReviews will delete all access list reviews from all access lists.
func (c *Client) DeleteAllAccessListReviews(ctx context.Context) error {
return trace.NotImplemented("DeleteAllAccessListReviews is not supported in the gRPC client")
}

Expand Down
10 changes: 10 additions & 0 deletions api/client/events.go
Expand Up @@ -246,6 +246,10 @@ func EventToGRPC(in types.Event) (*proto.Event, error) {
out.Resource = &proto.Event_ReportState{
ReportState: secreprotsv1conv.ToProtoReportState(r),
}
case *accesslist.Review:
out.Resource = &proto.Event_AccessListReview{
AccessListReview: accesslistv1conv.ToReviewProto(r),
}
default:
return nil, trace.BadParameter("resource type %T is not supported", in.Resource)
}
Expand Down Expand Up @@ -443,6 +447,12 @@ func EventFromGRPC(in *proto.Event) (*types.Event, error) {
return nil, trace.Wrap(err)
}
return &out, nil
} else if r := in.GetAccessListReview(); r != nil {
out.Resource, err = accesslistv1conv.FromReviewProto(r)
if err != nil {
return nil, trace.Wrap(err)
}
return &out, nil
} else {
return nil, trace.BadParameter("received unsupported resource %T", in.Resource)
}
Expand Down
56 changes: 39 additions & 17 deletions api/client/proto/event.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.