github.com/GoogleCloudPlatform/terraformer@v0.8.18/providers/aws/cognito.go (about) 1 package aws 2 3 import ( 4 "context" 5 6 "github.com/GoogleCloudPlatform/terraformer/terraformutils" 7 "github.com/aws/aws-sdk-go-v2/aws" 8 "github.com/aws/aws-sdk-go-v2/service/cognitoidentity" 9 "github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider" 10 ) 11 12 var CognitoAllowEmptyValues = []string{"tags."} 13 14 var CognitoAdditionalFields = map[string]interface{}{} 15 16 type CognitoGenerator struct { 17 AWSService 18 } 19 20 const CognitoMaxResults = 60 // Required field for Cognito API 21 22 func (g *CognitoGenerator) loadIdentityPools(svc *cognitoidentity.Client) error { 23 p := cognitoidentity.NewListIdentityPoolsPaginator(svc, &cognitoidentity.ListIdentityPoolsInput{ 24 MaxResults: *aws.Int32(CognitoMaxResults), 25 }) 26 for p.HasMorePages() { 27 page, err := p.NextPage(context.TODO()) 28 if err != nil { 29 return err 30 } 31 for _, pool := range page.IdentityPools { 32 var id = *pool.IdentityPoolId 33 var resourceName = *pool.IdentityPoolName 34 g.Resources = append(g.Resources, terraformutils.NewSimpleResource( 35 id, 36 resourceName, 37 "aws_cognito_identity_pool", 38 "aws", 39 []string{})) 40 } 41 } 42 43 return nil 44 } 45 46 func (g *CognitoGenerator) loadUserPools(svc *cognitoidentityprovider.Client) ([]string, error) { 47 p := cognitoidentityprovider.NewListUserPoolsPaginator(svc, &cognitoidentityprovider.ListUserPoolsInput{ 48 MaxResults: *aws.Int32(CognitoMaxResults), 49 }) 50 51 var userPoolIds []string 52 for p.HasMorePages() { 53 page, err := p.NextPage(context.TODO()) 54 if err != nil { 55 return nil, err 56 } 57 for _, pool := range page.UserPools { 58 id := *pool.Id 59 resourceName := *pool.Name 60 g.Resources = append(g.Resources, terraformutils.NewSimpleResource( 61 id, 62 resourceName, 63 "aws_cognito_user_pool", 64 "aws", 65 []string{})) 66 67 userPoolIds = append(userPoolIds, *pool.Id) 68 } 69 } 70 return userPoolIds, nil 71 } 72 73 func (g *CognitoGenerator) loadUserPoolClients(svc *cognitoidentityprovider.Client, userPoolIds []string) error { 74 for _, userPoolID := range userPoolIds { 75 p := cognitoidentityprovider.NewListUserPoolClientsPaginator(svc, &cognitoidentityprovider.ListUserPoolClientsInput{ 76 UserPoolId: aws.String(userPoolID), 77 MaxResults: *aws.Int32(CognitoMaxResults), 78 }) 79 80 for p.HasMorePages() { 81 page, err := p.NextPage(context.TODO()) 82 if err != nil { 83 return err 84 } 85 for _, poolClient := range page.UserPoolClients { 86 id := *poolClient.ClientId 87 resourceName := *poolClient.ClientName 88 g.Resources = append(g.Resources, terraformutils.NewResource( 89 id, 90 resourceName, 91 "aws_cognito_user_pool_client", 92 "aws", 93 map[string]string{ 94 "user_pool_id": *poolClient.UserPoolId, 95 }, 96 CognitoAllowEmptyValues, 97 CognitoAdditionalFields)) 98 } 99 } 100 } 101 return nil 102 } 103 104 func (g *CognitoGenerator) InitResources() error { 105 config, e := g.generateConfig() 106 if e != nil { 107 return e 108 } 109 110 svcCognitoIdentity := cognitoidentity.NewFromConfig(config) 111 if err := g.loadIdentityPools(svcCognitoIdentity); err != nil { 112 return err 113 } 114 svcCognitoIdentityProvider := cognitoidentityprovider.NewFromConfig(config) 115 116 userPoolIds, err := g.loadUserPools(svcCognitoIdentityProvider) 117 if err != nil { 118 return err 119 } 120 if err = g.loadUserPoolClients(svcCognitoIdentityProvider, userPoolIds); err != nil { 121 return err 122 } 123 124 return nil 125 } 126 127 func (g *CognitoGenerator) PostConvertHook() error { 128 for _, r := range g.Resources { 129 if r.InstanceInfo.Type != "aws_cognito_user_pool" { 130 continue 131 } 132 if _, ok := r.InstanceState.Attributes["admin_create_user_config.0.unused_account_validity_days"]; ok { 133 if _, okpp := r.InstanceState.Attributes["admin_create_user_config.0.unused_account_validity_days"]; okpp { 134 delete(r.Item["admin_create_user_config"].([]interface{})[0].(map[string]interface{}), "unused_account_validity_days") 135 } 136 } 137 if _, ok := r.InstanceState.Attributes["sms_verification_message"]; ok { 138 if _, oktmp := r.InstanceState.Attributes["verification_message_template.0.sms_message"]; oktmp { 139 delete(r.Item, "sms_verification_message") 140 } 141 } 142 if _, ok := r.InstanceState.Attributes["email_verification_message"]; ok { 143 if _, oktmp := r.InstanceState.Attributes["verification_message_template.0.email_message"]; oktmp { 144 delete(r.Item, "email_verification_message") 145 } 146 } 147 if _, ok := r.InstanceState.Attributes["email_verification_subject"]; ok { 148 if _, oktmp := r.InstanceState.Attributes["verification_message_template.0.email_subject"]; oktmp { 149 delete(r.Item, "email_verification_subject") 150 } 151 } 152 } 153 return nil 154 }