Skip to content

Commit

Permalink
Refactor logic into flatten and expand funcs consistently
Browse files Browse the repository at this point in the history
  • Loading branch information
sergiught committed Jul 18, 2023
1 parent 1150d60 commit 2044be7
Show file tree
Hide file tree
Showing 66 changed files with 1,216 additions and 1,129 deletions.
31 changes: 31 additions & 0 deletions internal/auth0/action/flatten.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,30 @@ package action

import (
"github.com/auth0/go-auth0/management"
"github.com/hashicorp/go-multierror"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

func flattenAction(data *schema.ResourceData, action *management.Action) error {
result := multierror.Append(
data.Set("name", action.GetName()),
data.Set("supported_triggers", flattenActionTriggers(action.SupportedTriggers)),
data.Set("code", action.GetCode()),
data.Set("dependencies", flattenActionDependencies(action.GetDependencies())),
data.Set("runtime", action.GetRuntime()),
)

if action.GetRuntime() == "node18-actions" {
result = multierror.Append(result, data.Set("runtime", "node18"))
}

if action.GetDeployedVersion() != nil {
result = multierror.Append(result, data.Set("version_id", action.GetDeployedVersion().GetID()))
}

return result.ErrorOrNil()
}

func flattenActionTriggers(triggers []management.ActionTrigger) []interface{} {
var result []interface{}

Expand All @@ -30,6 +52,15 @@ func flattenActionDependencies(dependencies []management.ActionDependency) []int
return result
}

func flattenTriggerBinding(data *schema.ResourceData, bindings []*management.ActionBinding) error {
result := multierror.Append(
data.Set("trigger", data.Id()),
data.Set("actions", flattenTriggerBindingActions(bindings)),
)

return result.ErrorOrNil()
}

func flattenTriggerBindingActions(bindings []*management.ActionBinding) []interface{} {
var triggerBindingActions []interface{}

Expand Down
53 changes: 11 additions & 42 deletions internal/auth0/action/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"fmt"

"github.com/auth0/go-auth0/management"
"github.com/hashicorp/go-multierror"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
Expand Down Expand Up @@ -142,8 +141,8 @@ func createAction(ctx context.Context, d *schema.ResourceData, m interface{}) di

d.SetId(action.GetID())

if result := deployAction(ctx, d, m); result.HasError() {
return result
if err := deployAction(ctx, d, m); err != nil {
return diag.FromErr(err)
}

return readAction(ctx, d, m)
Expand All @@ -157,23 +156,7 @@ func readAction(ctx context.Context, d *schema.ResourceData, m interface{}) diag
return diag.FromErr(internalError.HandleAPIError(d, err))
}

result := multierror.Append(
d.Set("name", action.GetName()),
d.Set("supported_triggers", flattenActionTriggers(action.SupportedTriggers)),
d.Set("code", action.GetCode()),
d.Set("dependencies", flattenActionDependencies(action.GetDependencies())),
d.Set("runtime", action.GetRuntime()),
)

if action.GetRuntime() == "node18-actions" {
result = multierror.Append(result, d.Set("runtime", "node18"))
}

if action.DeployedVersion != nil {
result = multierror.Append(result, d.Set("version_id", action.DeployedVersion.GetID()))
}

return diag.FromErr(result.ErrorOrNil())
return diag.FromErr(flattenAction(d, action))
}

func updateAction(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
Expand All @@ -190,8 +173,8 @@ func updateAction(ctx context.Context, d *schema.ResourceData, m interface{}) di
return diag.FromErr(internalError.HandleAPIError(d, err))
}

if result := deployAction(ctx, d, m); result.HasError() {
return result
if err := deployAction(ctx, d, m); err != nil {
return diag.FromErr(err)
}

return readAction(ctx, d, m)
Expand All @@ -207,7 +190,7 @@ func deleteAction(ctx context.Context, d *schema.ResourceData, m interface{}) di
return nil
}

func deployAction(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
func deployAction(ctx context.Context, d *schema.ResourceData, m interface{}) error {
deployExists := d.Get("deploy").(bool)
if !deployExists {
return nil
Expand All @@ -223,40 +206,26 @@ func deployAction(ctx context.Context, d *schema.ResourceData, m interface{}) di

if action.GetStatus() == management.ActionStatusFailed {
return retry.NonRetryableError(
fmt.Errorf(
"action %q failed to build, check the Auth0 UI for errors",
action.GetName(),
),
fmt.Errorf("action %q failed to build, check the Auth0 UI for errors", action.GetName()),
)
}

if action.GetStatus() != management.ActionStatusBuilt {
return retry.RetryableError(
fmt.Errorf(
"expected action %q status %q to equal %q",
action.GetName(),
action.GetStatus(),
"built",
),
fmt.Errorf("expected action %q status %q to equal %q", action.GetName(), action.GetStatus(), "built"),
)
}

return nil
})
if err != nil {
return diag.FromErr(
fmt.Errorf(
"action %q never reached built state: %w",
d.Get("name").(string),
err,
),
)
return fmt.Errorf("action %q never reached built state: %w", d.Get("name").(string), err)
}

actionVersion, err := api.Action.Deploy(ctx, d.Id())
if err != nil {
return diag.FromErr(err)
return err
}

return diag.FromErr(d.Set("version_id", actionVersion.GetID()))
return d.Set("version_id", actionVersion.GetID())
}
6 changes: 4 additions & 2 deletions internal/auth0/action/resource_trigger_action.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,9 @@ func deleteTriggerAction(ctx context.Context, d *schema.ResourceData, m interfac
})
}

err = api.Action.UpdateBindings(ctx, trigger, updatedBindings)
if err = api.Action.UpdateBindings(ctx, trigger, updatedBindings); err != nil {
return diag.FromErr(internalError.HandleAPIError(d, err))
}

return diag.FromErr(internalError.HandleAPIError(d, err))
return nil
}
8 changes: 1 addition & 7 deletions internal/auth0/action/resource_trigger_actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"context"

"github.com/auth0/go-auth0/management"
"github.com/hashicorp/go-multierror"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
Expand Down Expand Up @@ -96,12 +95,7 @@ func readTriggerBinding(ctx context.Context, d *schema.ResourceData, m interface
return diag.FromErr(internalError.HandleAPIError(d, err))
}

result := multierror.Append(
d.Set("trigger", d.Id()),
d.Set("actions", flattenTriggerBindingActions(triggerBindings.Bindings)),
)

return diag.FromErr(result.ErrorOrNil())
return diag.FromErr(flattenTriggerBinding(d, triggerBindings.Bindings))
}

func updateTriggerBinding(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
Expand Down
122 changes: 122 additions & 0 deletions internal/auth0/attackprotection/expand.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
package attackprotection

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

"github.com/auth0/terraform-provider-auth0/internal/value"
)

func expandSuspiciousIPThrottling(data *schema.ResourceData) *management.SuspiciousIPThrottling {
if !data.HasChange("suspicious_ip_throttling") {
return nil
}

var ipt *management.SuspiciousIPThrottling

data.GetRawConfig().GetAttr("suspicious_ip_throttling").ForEachElement(
func(_ cty.Value, iptCfg cty.Value) (stop bool) {
ipt = &management.SuspiciousIPThrottling{
Enabled: value.Bool(iptCfg.GetAttr("enabled")),
Shields: value.Strings(iptCfg.GetAttr("shields")),
AllowList: value.Strings(iptCfg.GetAttr("allowlist")),
}

iptCfg.GetAttr("pre_login").ForEachElement(func(_ cty.Value, cfg cty.Value) (stop bool) {
ipt.Stage = &management.Stage{
PreLogin: &management.PreLogin{
MaxAttempts: value.Int(cfg.GetAttr("max_attempts")),
Rate: value.Int(cfg.GetAttr("rate")),
},
}

return stop
})

iptCfg.GetAttr("pre_user_registration").ForEachElement(func(_ cty.Value, cfg cty.Value) (stop bool) {
preUserRegistration := &management.PreUserRegistration{
MaxAttempts: value.Int(cfg.GetAttr("max_attempts")),
Rate: value.Int(cfg.GetAttr("rate")),
}

if ipt.Stage != nil {
ipt.Stage.PreUserRegistration = preUserRegistration
return stop
}

ipt.Stage = &management.Stage{
PreUserRegistration: preUserRegistration,
}

return stop
})

return stop
},
)

return ipt
}

func expandBruteForceProtection(d *schema.ResourceData) *management.BruteForceProtection {
if !d.HasChange("brute_force_protection") {
return nil
}

var bfp *management.BruteForceProtection

d.GetRawConfig().GetAttr("brute_force_protection").ForEachElement(func(_ cty.Value, cfg cty.Value) (stop bool) {
bfp = &management.BruteForceProtection{
Enabled: value.Bool(cfg.GetAttr("enabled")),
Mode: value.String(cfg.GetAttr("mode")),
MaxAttempts: value.Int(cfg.GetAttr("max_attempts")),
Shields: value.Strings(cfg.GetAttr("shields")),
AllowList: value.Strings(cfg.GetAttr("allowlist")),
}

return stop
})

return bfp
}

func expandBreachedPasswordDetection(d *schema.ResourceData) *management.BreachedPasswordDetection {
if !d.HasChange("breached_password_detection") {
return nil
}

var bpd *management.BreachedPasswordDetection

d.GetRawConfig().GetAttr("breached_password_detection").ForEachElement(
func(_ cty.Value, breach cty.Value) (stop bool) {
bpd = &management.BreachedPasswordDetection{
Enabled: value.Bool(breach.GetAttr("enabled")),
Method: value.String(breach.GetAttr("method")),
Shields: value.Strings(breach.GetAttr("shields")),
AdminNotificationFrequency: value.Strings(breach.GetAttr("admin_notification_frequency")),
}

breach.GetAttr("pre_user_registration").ForEachElement(func(_ cty.Value, cfg cty.Value) (stop bool) {
preUserRegistration := &management.BreachedPasswordDetectionPreUserRegistration{
Shields: value.Strings(cfg.GetAttr("shields")),
}

if bpd.Stage != nil {
bpd.Stage.PreUserRegistration = preUserRegistration
return stop
}

bpd.Stage = &management.BreachedPasswordDetectionStage{
PreUserRegistration: preUserRegistration,
}

return stop
})

return stop
},
)

return bpd
}
55 changes: 55 additions & 0 deletions internal/auth0/attackprotection/flatten.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package attackprotection

import (
"github.com/auth0/go-auth0/management"
)

func flattenSuspiciousIPThrottling(ipt *management.SuspiciousIPThrottling) []interface{} {
return []interface{}{
map[string]interface{}{
"enabled": ipt.GetEnabled(),
"allowlist": ipt.GetAllowList(),
"shields": ipt.GetShields(),
"pre_login": []interface{}{
map[string]int{
"max_attempts": ipt.GetStage().GetPreLogin().GetMaxAttempts(),
"rate": ipt.GetStage().GetPreLogin().GetRate(),
},
},
"pre_user_registration": []interface{}{
map[string]int{
"max_attempts": ipt.GetStage().GetPreUserRegistration().GetMaxAttempts(),
"rate": ipt.GetStage().GetPreUserRegistration().GetRate(),
},
},
},
}
}

func flattenBruteForceProtection(bfp *management.BruteForceProtection) []interface{} {
return []interface{}{
map[string]interface{}{
"enabled": bfp.GetEnabled(),
"mode": bfp.GetMode(),
"max_attempts": bfp.GetMaxAttempts(),
"shields": bfp.GetShields(),
"allowlist": bfp.GetAllowList(),
},
}
}

func flattenBreachedPasswordProtection(bpd *management.BreachedPasswordDetection) []interface{} {
return []interface{}{
map[string]interface{}{
"enabled": bpd.GetEnabled(),
"method": bpd.GetMethod(),
"admin_notification_frequency": bpd.GetAdminNotificationFrequency(),
"shields": bpd.GetShields(),
"pre_user_registration": []interface{}{
map[string][]string{
"shields": bpd.GetStage().GetPreUserRegistration().GetShields(),
},
},
},
}
}
Loading

0 comments on commit 2044be7

Please sign in to comment.