Skip to content

Commit d93f16b

Browse files
feat: added disabled_user_signup and disabled_user_deletion to google_identity_platform_tenant (#12841) (#21983)
[upstream:476221cc05616630037f9b592855caf18eced4d7] Signed-off-by: Modular Magician <[email protected]>
1 parent 5fd6c0d commit d93f16b

File tree

5 files changed

+178
-0
lines changed

5 files changed

+178
-0
lines changed

.changelog/12841.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
identityplatform: added `disabled_user_signup` and `disabled_user_deletion` to `google_identity_platform_tenant`
3+
```

google/services/identityplatform/resource_identity_platform_tenant.go

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,36 @@ func ResourceIdentityPlatformTenant() *schema.Resource {
6666
Optional: true,
6767
Description: `Whether to allow email/password user authentication.`,
6868
},
69+
"client": {
70+
Type: schema.TypeList,
71+
Optional: true,
72+
Description: `Options related to how clients making requests on behalf of a tenant should be configured.`,
73+
MaxItems: 1,
74+
Elem: &schema.Resource{
75+
Schema: map[string]*schema.Schema{
76+
"permissions": {
77+
Type: schema.TypeList,
78+
Optional: true,
79+
Description: `Configuration related to restricting a user's ability to affect their account.`,
80+
MaxItems: 1,
81+
Elem: &schema.Resource{
82+
Schema: map[string]*schema.Schema{
83+
"disabled_user_deletion": {
84+
Type: schema.TypeBool,
85+
Optional: true,
86+
Description: `When true, end users cannot delete their account on the associated project through any of our API methods.`,
87+
},
88+
"disabled_user_signup": {
89+
Type: schema.TypeBool,
90+
Optional: true,
91+
Description: `When true, end users cannot sign up for a new account on the associated project through any of our API methods.`,
92+
},
93+
},
94+
},
95+
},
96+
},
97+
},
98+
},
6999
"disable_auth": {
70100
Type: schema.TypeBool,
71101
Optional: true,
@@ -126,6 +156,12 @@ func resourceIdentityPlatformTenantCreate(d *schema.ResourceData, meta interface
126156
} else if v, ok := d.GetOkExists("disable_auth"); !tpgresource.IsEmptyValue(reflect.ValueOf(disableAuthProp)) && (ok || !reflect.DeepEqual(v, disableAuthProp)) {
127157
obj["disableAuth"] = disableAuthProp
128158
}
159+
clientProp, err := expandIdentityPlatformTenantClient(d.Get("client"), d, config)
160+
if err != nil {
161+
return err
162+
} else if v, ok := d.GetOkExists("client"); !tpgresource.IsEmptyValue(reflect.ValueOf(clientProp)) && (ok || !reflect.DeepEqual(v, clientProp)) {
163+
obj["client"] = clientProp
164+
}
129165

130166
url, err := tpgresource.ReplaceVars(d, config, "{{IdentityPlatformBasePath}}projects/{{project}}/tenants")
131167
if err != nil {
@@ -248,6 +284,9 @@ func resourceIdentityPlatformTenantRead(d *schema.ResourceData, meta interface{}
248284
if err := d.Set("disable_auth", flattenIdentityPlatformTenantDisableAuth(res["disableAuth"], d, config)); err != nil {
249285
return fmt.Errorf("Error reading Tenant: %s", err)
250286
}
287+
if err := d.Set("client", flattenIdentityPlatformTenantClient(res["client"], d, config)); err != nil {
288+
return fmt.Errorf("Error reading Tenant: %s", err)
289+
}
251290

252291
return nil
253292
}
@@ -292,6 +331,12 @@ func resourceIdentityPlatformTenantUpdate(d *schema.ResourceData, meta interface
292331
} else if v, ok := d.GetOkExists("disable_auth"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, disableAuthProp)) {
293332
obj["disableAuth"] = disableAuthProp
294333
}
334+
clientProp, err := expandIdentityPlatformTenantClient(d.Get("client"), d, config)
335+
if err != nil {
336+
return err
337+
} else if v, ok := d.GetOkExists("client"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, clientProp)) {
338+
obj["client"] = clientProp
339+
}
295340

296341
url, err := tpgresource.ReplaceVars(d, config, "{{IdentityPlatformBasePath}}projects/{{project}}/tenants/{{name}}")
297342
if err != nil {
@@ -317,6 +362,10 @@ func resourceIdentityPlatformTenantUpdate(d *schema.ResourceData, meta interface
317362
if d.HasChange("disable_auth") {
318363
updateMask = append(updateMask, "disableAuth")
319364
}
365+
366+
if d.HasChange("client") {
367+
updateMask = append(updateMask, "client")
368+
}
320369
// updateMask is a URL parameter but not present in the schema, so ReplaceVars
321370
// won't set it
322371
url, err = transport_tpg.AddQueryParams(url, map[string]string{"updateMask": strings.Join(updateMask, ",")})
@@ -444,6 +493,42 @@ func flattenIdentityPlatformTenantDisableAuth(v interface{}, d *schema.ResourceD
444493
return v
445494
}
446495

496+
func flattenIdentityPlatformTenantClient(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
497+
if v == nil {
498+
return nil
499+
}
500+
original := v.(map[string]interface{})
501+
if len(original) == 0 {
502+
return nil
503+
}
504+
transformed := make(map[string]interface{})
505+
transformed["permissions"] =
506+
flattenIdentityPlatformTenantClientPermissions(original["permissions"], d, config)
507+
return []interface{}{transformed}
508+
}
509+
func flattenIdentityPlatformTenantClientPermissions(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
510+
if v == nil {
511+
return nil
512+
}
513+
original := v.(map[string]interface{})
514+
if len(original) == 0 {
515+
return nil
516+
}
517+
transformed := make(map[string]interface{})
518+
transformed["disabled_user_signup"] =
519+
flattenIdentityPlatformTenantClientPermissionsDisabledUserSignup(original["disabledUserSignup"], d, config)
520+
transformed["disabled_user_deletion"] =
521+
flattenIdentityPlatformTenantClientPermissionsDisabledUserDeletion(original["disabledUserDeletion"], d, config)
522+
return []interface{}{transformed}
523+
}
524+
func flattenIdentityPlatformTenantClientPermissionsDisabledUserSignup(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
525+
return v
526+
}
527+
528+
func flattenIdentityPlatformTenantClientPermissionsDisabledUserDeletion(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
529+
return v
530+
}
531+
447532
func expandIdentityPlatformTenantDisplayName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
448533
return v, nil
449534
}
@@ -459,3 +544,56 @@ func expandIdentityPlatformTenantEnableEmailLinkSignin(v interface{}, d tpgresou
459544
func expandIdentityPlatformTenantDisableAuth(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
460545
return v, nil
461546
}
547+
548+
func expandIdentityPlatformTenantClient(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
549+
l := v.([]interface{})
550+
if len(l) == 0 || l[0] == nil {
551+
return nil, nil
552+
}
553+
raw := l[0]
554+
original := raw.(map[string]interface{})
555+
transformed := make(map[string]interface{})
556+
557+
transformedPermissions, err := expandIdentityPlatformTenantClientPermissions(original["permissions"], d, config)
558+
if err != nil {
559+
return nil, err
560+
} else if val := reflect.ValueOf(transformedPermissions); val.IsValid() && !tpgresource.IsEmptyValue(val) {
561+
transformed["permissions"] = transformedPermissions
562+
}
563+
564+
return transformed, nil
565+
}
566+
567+
func expandIdentityPlatformTenantClientPermissions(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
568+
l := v.([]interface{})
569+
if len(l) == 0 || l[0] == nil {
570+
return nil, nil
571+
}
572+
raw := l[0]
573+
original := raw.(map[string]interface{})
574+
transformed := make(map[string]interface{})
575+
576+
transformedDisabledUserSignup, err := expandIdentityPlatformTenantClientPermissionsDisabledUserSignup(original["disabled_user_signup"], d, config)
577+
if err != nil {
578+
return nil, err
579+
} else if val := reflect.ValueOf(transformedDisabledUserSignup); val.IsValid() && !tpgresource.IsEmptyValue(val) {
580+
transformed["disabledUserSignup"] = transformedDisabledUserSignup
581+
}
582+
583+
transformedDisabledUserDeletion, err := expandIdentityPlatformTenantClientPermissionsDisabledUserDeletion(original["disabled_user_deletion"], d, config)
584+
if err != nil {
585+
return nil, err
586+
} else if val := reflect.ValueOf(transformedDisabledUserDeletion); val.IsValid() && !tpgresource.IsEmptyValue(val) {
587+
transformed["disabledUserDeletion"] = transformedDisabledUserDeletion
588+
}
589+
590+
return transformed, nil
591+
}
592+
593+
func expandIdentityPlatformTenantClientPermissionsDisabledUserSignup(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
594+
return v, nil
595+
}
596+
597+
func expandIdentityPlatformTenantClientPermissionsDisabledUserDeletion(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
598+
return v, nil
599+
}

google/services/identityplatform/resource_identity_platform_tenant_generated_meta.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ api_version: 'v2'
66
api_resource_type_kind: 'Tenant'
77
fields:
88
- field: 'allow_password_signup'
9+
- field: 'client.permissions.disabled_user_deletion'
10+
- field: 'client.permissions.disabled_user_signup'
911
- field: 'disable_auth'
1012
- field: 'display_name'
1113
- field: 'enable_email_link_signin'

google/services/identityplatform/resource_identity_platform_tenant_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"testing"
77

88
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
9+
"github.com/hashicorp/terraform-plugin-testing/plancheck"
910
"github.com/hashicorp/terraform-provider-google/google/acctest"
1011
)
1112

@@ -31,6 +32,11 @@ func TestAccIdentityPlatformTenant_identityPlatformTenantUpdate(t *testing.T) {
3132
},
3233
{
3334
Config: testAccIdentityPlatformTenant_identityPlatformTenantUpdate(context),
35+
ConfigPlanChecks: resource.ConfigPlanChecks{
36+
PreApply: []plancheck.PlanCheck{
37+
plancheck.ExpectResourceAction("google_identity_platform_tenant.tenant", plancheck.ResourceActionUpdate),
38+
},
39+
},
3440
},
3541
{
3642
ResourceName: "google_identity_platform_tenant.tenant",
@@ -57,6 +63,12 @@ resource "google_identity_platform_tenant" "tenant" {
5763
allow_password_signup = false
5864
enable_email_link_signin = true
5965
disable_auth = true
66+
client {
67+
permissions {
68+
disabled_user_signup = true
69+
disabled_user_deletion = true
70+
}
71+
}
6072
}
6173
`, context)
6274
}

website/docs/r/identity_platform_tenant.html.markdown

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,33 @@ The following arguments are supported:
7474
the disabled tenant are not allowed to sign-in. Admins of the disabled tenant
7575
are not able to manage its users.
7676

77+
* `client` -
78+
(Optional)
79+
Options related to how clients making requests on behalf of a tenant should be configured.
80+
Structure is [documented below](#nested_client).
81+
7782
* `project` - (Optional) The ID of the project in which the resource belongs.
7883
If it is not provided, the provider project is used.
7984

8085

86+
<a name="nested_client"></a>The `client` block supports:
87+
88+
* `permissions` -
89+
(Optional)
90+
Configuration related to restricting a user's ability to affect their account.
91+
Structure is [documented below](#nested_client_permissions).
92+
93+
94+
<a name="nested_client_permissions"></a>The `permissions` block supports:
95+
96+
* `disabled_user_signup` -
97+
(Optional)
98+
When true, end users cannot sign up for a new account on the associated project through any of our API methods.
99+
100+
* `disabled_user_deletion` -
101+
(Optional)
102+
When true, end users cannot delete their account on the associated project through any of our API methods.
103+
81104
## Attributes Reference
82105

83106
In addition to the arguments listed above, the following computed attributes are exported:

0 commit comments

Comments
 (0)