Skip to content

Commit

Permalink
[v13] Expose GetSuggestedAccessLists in AccessListClient (#35836)
Browse files Browse the repository at this point in the history
* Expose `GetSuggestedAccessLists` in `AccessListClient`

Co-authored-by: Jakub Nyckowski <jakub.nyckowski@goteleport.com>

* Fix typo

* Remove `ctx` from `getUser`

---------

Co-authored-by: Jakub Nyckowski <jakub.nyckowski@goteleport.com>
  • Loading branch information
gzdunek and jakule committed Dec 21, 2023
1 parent b9ab1a1 commit 1e19dfd
Show file tree
Hide file tree
Showing 9 changed files with 467 additions and 197 deletions.
21 changes: 21 additions & 0 deletions api/client/accesslist/accesslist.go
Original file line number Diff line number Diff line change
Expand Up @@ -286,3 +286,24 @@ func (c *Client) DeleteAccessListReview(ctx context.Context, accessListName, rev
func (c *Client) DeleteAllAccessListReviews(ctx context.Context, accessListName string) error {
return trace.NotImplemented("DeleteAllAccessListReviews is not supported in the gRPC client")
}

// GetSuggestedAccessLists returns a list of access lists that are suggested for a given request.
func (c *Client) GetSuggestedAccessLists(ctx context.Context, accessRequestID string) ([]*accesslist.AccessList, error) {
resp, err := c.grpcClient.GetSuggestedAccessLists(ctx, &accesslistv1.GetSuggestedAccessListsRequest{
AccessRequestId: accessRequestID,
})
if err != nil {
return nil, trace.Wrap(err)
}

accessLists := make([]*accesslist.AccessList, len(resp.AccessLists))
for i, accessList := range resp.AccessLists {
var err error
accessLists[i], err = conv.FromProto(accessList)
if err != nil {
return nil, trace.Wrap(err)
}
}

return accessLists, nil
}
540 changes: 344 additions & 196 deletions api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go

Large diffs are not rendered by default.

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

17 changes: 16 additions & 1 deletion api/proto/teleport/accesslist/v1/accesslist_service.proto
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ service AccessListService {

// AccessRequestPromote promotes an access request to an access list.
rpc AccessRequestPromote(AccessRequestPromoteRequest) returns (AccessRequestPromoteResponse);

// GetSuggestedAccessLists returns suggested access lists for an access request.
rpc GetSuggestedAccessLists(GetSuggestedAccessListsRequest) returns (GetSuggestedAccessListsResponse);
}

// GetAccessListsRequest is the request for getting all access lists.
Expand Down Expand Up @@ -212,7 +215,7 @@ message ListAccessListReviewsRequest {
string next_token = 3;
}

// ListAccessListReviewsResponse is the response for getting paginated access list rviews for a particular access list.
// ListAccessListReviewsResponse is the response for getting paginated access list reviews for a particular access list.
message ListAccessListReviewsResponse {
// reviews is the list of access list reviews.
repeated Review reviews = 1;
Expand Down Expand Up @@ -260,3 +263,15 @@ message AccessRequestPromoteResponse {
// AccessRequest is the updated access request.
types.AccessRequestV3 access_request = 1;
}

// GetSuggestedAccessListsRequest is the request for suggested access lists for an access request.
message GetSuggestedAccessListsRequest {
// access_request_id is the unique ID of the request.
string access_request_id = 1;
}

// GetSuggestedAccessListsResponse is the response for suggested access lists for an access request.
message GetSuggestedAccessListsResponse {
// access_lists is the list of suggested lists.
repeated AccessList access_lists = 1;
}
24 changes: 24 additions & 0 deletions lib/modules/modules.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import (
"github.com/gravitational/teleport/api/utils/keys"
"github.com/gravitational/teleport/lib/auth/native"
"github.com/gravitational/teleport/lib/automaticupgrades"
"github.com/gravitational/teleport/lib/tlsca"
)

// Features provides supported and unsupported features
Expand Down Expand Up @@ -148,6 +149,21 @@ type AccessResourcesGetter interface {
GetLocks(ctx context.Context, inForceOnly bool, targets ...types.LockTarget) ([]types.Lock, error)
}

type AccessListSuggestionClient interface {
GetUser(userName string, withSecrets bool) (types.User, error)
RoleGetter

GetAccessRequestAllowedPromotions(ctx context.Context, req types.AccessRequest) (*types.AccessRequestAllowedPromotions, error)
GetAccessRequests(ctx context.Context, filter types.AccessRequestFilter) ([]types.AccessRequest, error)
}

type RoleGetter interface {
GetRole(ctx context.Context, name string) (types.Role, error)
}
type AccessListGetter interface {
GetAccessList(ctx context.Context, name string) (*accesslist.AccessList, error)
}

// Modules defines interface that external libraries can implement customizing
// default teleport behavior
type Modules interface {
Expand All @@ -165,6 +181,8 @@ type Modules interface {
AttestHardwareKey(context.Context, interface{}, keys.PrivateKeyPolicy, *keys.AttestationStatement, crypto.PublicKey, time.Duration) (keys.PrivateKeyPolicy, error)
// GenerateAccessRequestPromotions generates a list of valid promotions for given access request.
GenerateAccessRequestPromotions(context.Context, AccessResourcesGetter, types.AccessRequest) (*types.AccessRequestAllowedPromotions, error)
// GetSuggestedAccessLists generates a list of valid promotions for given access request.
GetSuggestedAccessLists(ctx context.Context, identity *tlsca.Identity, clt AccessListSuggestionClient, accessListGetter AccessListGetter, requestID string) ([]*accesslist.AccessList, error)
// EnableRecoveryCodes enables the usage of recovery codes for resetting forgotten passwords
EnableRecoveryCodes()
// EnablePlugins enables the hosted plugins runtime
Expand Down Expand Up @@ -269,6 +287,12 @@ func (p *defaultModules) GenerateAccessRequestPromotions(_ context.Context, _ Ac
return types.NewAccessRequestAllowedPromotions(nil), nil
}

func (p *defaultModules) GetSuggestedAccessLists(ctx context.Context, identity *tlsca.Identity, clt AccessListSuggestionClient,
accessListGetter AccessListGetter, requestID string,
) ([]*accesslist.AccessList, error) {
return nil, trace.NotImplemented("GetSuggestedAccessLists not implemented")
}

// EnableRecoveryCodes enables recovery codes. This is a noop since OSS teleport does not
// support recovery codes
func (p *defaultModules) EnableRecoveryCodes() {
Expand Down
7 changes: 7 additions & 0 deletions lib/services/access_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,16 @@ type AccessListsGetter interface {
GetAccessListsToReview(context.Context) ([]*accesslist.AccessList, error)
}

// AccessListsSuggestionsGetter defines an interface for reading access lists suggestions.
type AccessListsSuggestionsGetter interface {
// GetSuggestedAccessLists returns a list of access lists that are suggested for a given request.
GetSuggestedAccessLists(ctx context.Context, accessRequestID string) ([]*accesslist.AccessList, error)
}

// AccessLists defines an interface for managing AccessLists.
type AccessLists interface {
AccessListsGetter
AccessListsSuggestionsGetter
AccessListMembers
AccessListReviews

Expand Down
5 changes: 5 additions & 0 deletions lib/services/local/access_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,11 @@ func (a *AccessListService) DeleteAllAccessLists(ctx context.Context) error {
return trace.Wrap(a.service.DeleteAllResources(ctx))
}

// GetSuggestedAccessLists returns a list of access lists that are suggested for a given request. This is not implemented in the local service.
func (a *AccessListService) GetSuggestedAccessLists(ctx context.Context, accessRequestID string) ([]*accesslist.AccessList, error) {
return nil, trace.NotImplemented("GetSuggestedAccessLists should not be called")
}

// ListAccessListMembers returns a paginated list of all access list members.
func (a *AccessListService) ListAccessListMembers(ctx context.Context, accessList string, pageSize int, nextToken string) ([]*accesslist.AccessListMember, string, error) {
var members []*accesslist.AccessListMember
Expand Down
6 changes: 6 additions & 0 deletions tool/teleport/testenv/test_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import (
"github.com/gravitational/teleport/api/breaker"
apidefaults "github.com/gravitational/teleport/api/defaults"
"github.com/gravitational/teleport/api/types"
"github.com/gravitational/teleport/api/types/accesslist"
"github.com/gravitational/teleport/api/utils/keys"
"github.com/gravitational/teleport/lib"
"github.com/gravitational/teleport/lib/backend"
Expand All @@ -43,6 +44,7 @@ import (
"github.com/gravitational/teleport/lib/service/servicecfg"
"github.com/gravitational/teleport/lib/services"
"github.com/gravitational/teleport/lib/srv"
"github.com/gravitational/teleport/lib/tlsca"
"github.com/gravitational/teleport/lib/utils"
"github.com/gravitational/teleport/tool/teleport/common"
)
Expand Down Expand Up @@ -326,6 +328,10 @@ func (p *cliModules) GenerateAccessRequestPromotions(_ context.Context, _ module
return &types.AccessRequestAllowedPromotions{}, nil
}

func (p *cliModules) GetSuggestedAccessLists(ctx context.Context, _ *tlsca.Identity, _ modules.AccessListSuggestionClient, _ modules.AccessListGetter, _ string) ([]*accesslist.AccessList, error) {
return []*accesslist.AccessList{}, nil
}

// BuildType returns build type.
func (p *cliModules) BuildType() string {
return "CLI"
Expand Down
5 changes: 5 additions & 0 deletions tool/tsh/tsh_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ import (
apidefaults "github.com/gravitational/teleport/api/defaults"
"github.com/gravitational/teleport/api/profile"
"github.com/gravitational/teleport/api/types"
"github.com/gravitational/teleport/api/types/accesslist"
"github.com/gravitational/teleport/api/types/events"
"github.com/gravitational/teleport/api/types/wrappers"
apiutils "github.com/gravitational/teleport/api/utils"
Expand Down Expand Up @@ -130,6 +131,10 @@ func (p *cliModules) GenerateAccessRequestPromotions(_ context.Context, _ module
return &types.AccessRequestAllowedPromotions{}, nil
}

func (p *cliModules) GetSuggestedAccessLists(ctx context.Context, _ *tlsca.Identity, _ modules.AccessListSuggestionClient, _ modules.AccessListGetter, _ string) ([]*accesslist.AccessList, error) {
return []*accesslist.AccessList{}, nil
}

// BuildType returns build type (OSS or Enterprise)
func (p *cliModules) BuildType() string {
return "CLI"
Expand Down

0 comments on commit 1e19dfd

Please sign in to comment.