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  }