Skip to content

Commit

Permalink
Fix pagination issues across resources (#807)
Browse files Browse the repository at this point in the history
  • Loading branch information
sergiught committed Sep 5, 2023
1 parent c772a8f commit 9299478
Show file tree
Hide file tree
Showing 27 changed files with 10,184 additions and 10,361 deletions.
50 changes: 42 additions & 8 deletions internal/auth0/action/resource_trigger_action.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,14 +122,31 @@ func updateTriggerAction(ctx context.Context, data *schema.ResourceData, meta in
actionID := data.Get("action_id").(string)
displayName := data.Get("display_name").(string)

currentBindings, err := api.Action.Bindings(ctx, trigger)
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
var currentBindings []*management.ActionBinding
var page int
for {
triggerBindingList, err := api.Action.Bindings(
ctx,
trigger,
management.Page(page),
management.PerPage(100),
)
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
}

currentBindings = append(currentBindings, triggerBindingList.Bindings...)

if !triggerBindingList.HasNext() {
break
}

page++
}

found := false
var updatedBindings []*management.ActionBinding
for _, binding := range currentBindings.Bindings {
for _, binding := range currentBindings {
if binding.Action.GetID() == actionID {
updatedBindings = append(updatedBindings, &management.ActionBinding{
Ref: &management.ActionBindingReference{
Expand Down Expand Up @@ -168,12 +185,29 @@ func readTriggerAction(ctx context.Context, data *schema.ResourceData, meta inte
trigger := data.Get("trigger").(string)
actionID := data.Get("action_id").(string)

triggerBindings, err := api.Action.Bindings(ctx, trigger)
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
var triggerBindings []*management.ActionBinding
var page int
for {
triggerBindingList, err := api.Action.Bindings(
ctx,
trigger,
management.Page(page),
management.PerPage(100),
)
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
}

triggerBindings = append(triggerBindings, triggerBindingList.Bindings...)

if !triggerBindingList.HasNext() {
break
}

page++
}

for _, binding := range triggerBindings.Bindings {
for _, binding := range triggerBindings {
if binding.Action.GetID() == actionID {
return diag.FromErr(data.Set("display_name", binding.GetDisplayName()))
}
Expand Down
25 changes: 21 additions & 4 deletions internal/auth0/action/resource_trigger_actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,29 @@ func createTriggerBinding(ctx context.Context, data *schema.ResourceData, meta i
func readTriggerBinding(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics {
api := meta.(*config.Config).GetAPI()

triggerBindings, err := api.Action.Bindings(ctx, data.Id())
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
var triggerBindings []*management.ActionBinding
var page int
for {
triggerBindingList, err := api.Action.Bindings(
ctx,
data.Id(),
management.Page(page),
management.PerPage(100),
)
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
}

triggerBindings = append(triggerBindings, triggerBindingList.Bindings...)

if !triggerBindingList.HasNext() {
break
}

page++
}

return diag.FromErr(flattenTriggerBinding(data, triggerBindings.Bindings))
return diag.FromErr(flattenTriggerBinding(data, triggerBindings))
}

func updateTriggerBinding(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics {
Expand Down
1 change: 1 addition & 0 deletions internal/auth0/client/data_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ func readClientForDataSource(ctx context.Context, data *schema.ResourceData, met
clients, err := api.Client.List(
ctx,
management.Page(page),
management.PerPage(100),
)
if err != nil {
return diag.FromErr(err)
Expand Down
52 changes: 43 additions & 9 deletions internal/auth0/organization/resource_connections.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,26 @@ func createOrganizationConnections(ctx context.Context, data *schema.ResourceDat

organizationID := data.Get("organization_id").(string)

alreadyEnabledConnections, err := api.Organization.Connections(ctx, organizationID)
if err != nil {
return diag.FromErr(err)
var alreadyEnabledConnections []*management.OrganizationConnection
var page int
for {
connectionList, err := api.Organization.Connections(
ctx,
organizationID,
management.Page(page),
management.PerPage(100),
)
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
}

alreadyEnabledConnections = append(alreadyEnabledConnections, connectionList.OrganizationConnections...)

if !connectionList.HasNext() {
break
}

page++
}

data.SetId(organizationID)
Expand All @@ -76,14 +93,14 @@ func createOrganizationConnections(ctx context.Context, data *schema.ResourceDat

if diagnostics := guardAgainstErasingUnwantedConnections(
organizationID,
alreadyEnabledConnections.OrganizationConnections,
alreadyEnabledConnections,
connectionsToAdd,
); diagnostics.HasError() {
data.SetId("")
return diagnostics
}

if len(connectionsToAdd) > len(alreadyEnabledConnections.OrganizationConnections) {
if len(connectionsToAdd) > len(alreadyEnabledConnections) {
var result *multierror.Error

for _, connection := range connectionsToAdd {
Expand All @@ -102,12 +119,29 @@ func createOrganizationConnections(ctx context.Context, data *schema.ResourceDat
func readOrganizationConnections(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics {
api := meta.(*config.Config).GetAPI()

connections, err := api.Organization.Connections(ctx, data.Id())
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
var connections []*management.OrganizationConnection
var page int
for {
connectionList, err := api.Organization.Connections(
ctx,
data.Id(),
management.Page(page),
management.PerPage(100),
)
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
}

connections = append(connections, connectionList.OrganizationConnections...)

if !connectionList.HasNext() {
break
}

page++
}

return diag.FromErr(flattenOrganizationConnections(data, connections.OrganizationConnections))
return diag.FromErr(flattenOrganizationConnections(data, connections))
}

func updateOrganizationConnections(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics {
Expand Down
27 changes: 23 additions & 4 deletions internal/auth0/organization/resource_member_role.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package organization
import (
"context"

"github.com/auth0/go-auth0/management"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"

Expand Down Expand Up @@ -76,13 +77,31 @@ func readOrganizationMemberRole(ctx context.Context, data *schema.ResourceData,
organizationID := data.Get("organization_id").(string)
userID := data.Get("user_id").(string)

memberRoles, err := api.Organization.MemberRoles(ctx, organizationID, userID)
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
var memberRoles []management.OrganizationMemberRole
var page int
for {
memberRoleList, err := api.Organization.MemberRoles(
ctx,
organizationID,
userID,
management.Page(page),
management.PerPage(100),
)
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
}

memberRoles = append(memberRoles, memberRoleList.Roles...)

if !memberRoleList.HasNext() {
break
}

page++
}

roleID := data.Get("role_id").(string)
for _, role := range memberRoles.Roles {
for _, role := range memberRoles {
if role.GetID() == roleID {
return diag.FromErr(flattenOrganizationMemberRole(data, role))
}
Expand Down
27 changes: 23 additions & 4 deletions internal/auth0/organization/resource_member_roles.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package organization
import (
"context"

"github.com/auth0/go-auth0/management"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"

Expand Down Expand Up @@ -67,13 +68,31 @@ func readOrganizationMemberRoles(ctx context.Context, data *schema.ResourceData,
organizationID := data.Get("organization_id").(string)
userID := data.Get("user_id").(string)

memberRoles, err := api.Organization.MemberRoles(ctx, organizationID, userID)
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
var memberRoles []management.OrganizationMemberRole
var page int
for {
memberRoleList, err := api.Organization.MemberRoles(
ctx,
organizationID,
userID,
management.Page(page),
management.PerPage(100),
)
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
}

memberRoles = append(memberRoles, memberRoleList.Roles...)

if !memberRoleList.HasNext() {
break
}

page++
}

var rolesToSet []string
for _, role := range memberRoles.Roles {
for _, role := range memberRoles {
rolesToSet = append(rolesToSet, role.GetID())
}

Expand Down
52 changes: 43 additions & 9 deletions internal/auth0/organization/resource_members.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,26 @@ func createOrganizationMembers(ctx context.Context, data *schema.ResourceData, m

organizationID := data.Get("organization_id").(string)

alreadyMembers, err := api.Organization.Members(ctx, organizationID)
if err != nil {
return diag.FromErr(err)
var alreadyMembers []management.OrganizationMember
var page int
for {
memberList, err := api.Organization.Members(
ctx,
organizationID,
management.Page(page),
management.PerPage(100),
)
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
}

alreadyMembers = append(alreadyMembers, memberList.Members...)

if !memberList.HasNext() {
break
}

page++
}

data.SetId(organizationID)
Expand All @@ -60,14 +77,14 @@ func createOrganizationMembers(ctx context.Context, data *schema.ResourceData, m

if diagnostics := guardAgainstErasingUnwantedMembers(
organizationID,
alreadyMembers.Members,
alreadyMembers,
membersToAdd,
); diagnostics.HasError() {
data.SetId("")
return diagnostics
}

if len(membersToAdd) > len(alreadyMembers.Members) {
if len(membersToAdd) > len(alreadyMembers) {
if err := api.Organization.AddMembers(ctx, organizationID, membersToAdd); err != nil {
return diag.FromErr(err)
}
Expand All @@ -79,12 +96,29 @@ func createOrganizationMembers(ctx context.Context, data *schema.ResourceData, m
func readOrganizationMembers(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics {
api := meta.(*config.Config).GetAPI()

members, err := api.Organization.Members(ctx, data.Id())
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
var members []management.OrganizationMember
var page int
for {
memberList, err := api.Organization.Members(
ctx,
data.Id(),
management.Page(page),
management.PerPage(100),
)
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
}

members = append(members, memberList.Members...)

if !memberList.HasNext() {
break
}

page++
}

return diag.FromErr(flattenOrganizationMembers(data, members.Members))
return diag.FromErr(flattenOrganizationMembers(data, members))
}

func updateOrganizationMembers(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics {
Expand Down
20 changes: 16 additions & 4 deletions internal/auth0/role/resource_permission.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,24 @@ func readRolePermission(ctx context.Context, data *schema.ResourceData, meta int
permissionName := data.Get("permission").(string)
resourceServerID := data.Get("resource_server_identifier").(string)

existingPermissions, err := api.Role.Permissions(ctx, roleID)
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
var existingPermissions []*management.Permission
var page int
for {
permissionList, err := api.Role.Permissions(ctx, roleID, management.Page(page), management.PerPage(100))
if err != nil {
return diag.FromErr(internalError.HandleAPIError(data, err))
}

existingPermissions = append(existingPermissions, permissionList.Permissions...)

if !permissionList.HasNext() {
break
}

page++
}

for _, permission := range existingPermissions.Permissions {
for _, permission := range existingPermissions {
if permission.GetName() == permissionName && permission.GetResourceServerIdentifier() == resourceServerID {
return diag.FromErr(flattenRolePermission(data, permission))
}
Expand Down
Loading

0 comments on commit 9299478

Please sign in to comment.