Skip to content

Commit

Permalink
Merge pull request #9 from ConductorOne/logan/jakcinmarina/license-re…
Browse files Browse the repository at this point in the history
…source

Use paginated token for GetUsers listing
  • Loading branch information
ggreer authored May 2, 2024
2 parents 5d05ae1 + a24ac52 commit f1bfec5
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 3 deletions.
7 changes: 4 additions & 3 deletions pkg/connector/license.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ import (
v2 "github.com/conductorone/baton-sdk/pb/c1/connector/v2"
"github.com/conductorone/baton-sdk/pkg/annotations"
"github.com/conductorone/baton-sdk/pkg/pagination"

"github.com/conductorone/baton-tableau/pkg/tableau"

ent "github.com/conductorone/baton-sdk/pkg/types/entitlement"
grant "github.com/conductorone/baton-sdk/pkg/types/grant"
"github.com/conductorone/baton-sdk/pkg/types/grant"
rs "github.com/conductorone/baton-sdk/pkg/types/resource"
)

Expand Down Expand Up @@ -82,7 +83,7 @@ func (l *licenseResourceType) Entitlements(_ context.Context, resource *v2.Resou
}

func (l *licenseResourceType) Grants(ctx context.Context, resource *v2.Resource, pt *pagination.Token) ([]*v2.Grant, string, annotations.Annotations, error) {
users, err := l.client.GetPaginatedUsers(ctx)
users, token, err := l.client.GetUsersPage(ctx, pt.Token)
if err != nil {
return nil, "", nil, err
}
Expand All @@ -101,7 +102,7 @@ func (l *licenseResourceType) Grants(ctx context.Context, resource *v2.Resource,
}
}

return rv, "", nil, nil
return rv, token, nil, nil
}

func licenseBuilder(client *tableau.Client) *licenseResourceType {
Expand Down
44 changes: 44 additions & 0 deletions pkg/tableau/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,50 @@ func (c *Client) GetGroupUsers(ctx context.Context, groupId string, pageSize int
return res.Users.User, res.Pagination, nil
}

type usersToken struct {
Page int64 `json:"page"`
}

func (c *Client) GetUsersPage(ctx context.Context, token string) ([]User, string, error) {
var users []User
pageNumber := defaultPageNumber
uToken := &usersToken{}
if err := json.Unmarshal([]byte(token), &uToken); err == nil {
pageNumber = int(uToken.Page)
}
totalReturned := 0

allUsers, paginationData, err := c.GetUsers(ctx, defaultPageSize, pageNumber)
if err != nil {
return nil, "", fmt.Errorf("tableau-connector: failed to list users: %w", err)
}

pageSizeInt, err := strconv.Atoi(paginationData.PageSize)
if err != nil {
return nil, "", err
}

totalReturned += pageSizeInt
totalAvailableInt, err := strconv.Atoi(paginationData.TotalAvailable)
if err != nil {
return nil, "", err
}

users = append(users, allUsers...)

if totalReturned >= totalAvailableInt {
return users, "", nil
}

uToken.Page = int64(pageNumber + 1)
newToken, err := json.Marshal(uToken)
if err != nil {
return nil, "", err
}

return users, string(newToken), nil
}

// GetPaginatedUsers returns all users - paginated.
func (c *Client) GetPaginatedUsers(ctx context.Context) ([]User, error) {
var users []User
Expand Down

0 comments on commit f1bfec5

Please sign in to comment.