github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/terraform/aws/athena/adapt.go (about) 1 package athena 2 3 import ( 4 "github.com/khulnasoft-lab/defsec/pkg/providers/aws/athena" 5 "github.com/khulnasoft-lab/defsec/pkg/terraform" 6 defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types" 7 ) 8 9 func Adapt(modules terraform.Modules) athena.Athena { 10 return athena.Athena{ 11 Databases: adaptDatabases(modules), 12 Workgroups: adaptWorkgroups(modules), 13 } 14 } 15 16 func adaptDatabases(modules terraform.Modules) []athena.Database { 17 var databases []athena.Database 18 for _, module := range modules { 19 for _, resource := range module.GetResourcesByType("aws_athena_database") { 20 databases = append(databases, adaptDatabase(resource)) 21 } 22 } 23 return databases 24 } 25 26 func adaptWorkgroups(modules terraform.Modules) []athena.Workgroup { 27 var workgroups []athena.Workgroup 28 for _, module := range modules { 29 for _, resource := range module.GetResourcesByType("aws_athena_workgroup") { 30 workgroups = append(workgroups, adaptWorkgroup(resource)) 31 } 32 } 33 return workgroups 34 } 35 36 func adaptDatabase(resource *terraform.Block) athena.Database { 37 database := athena.Database{ 38 Metadata: resource.GetMetadata(), 39 Name: resource.GetAttribute("name").AsStringValueOrDefault("", resource), 40 Encryption: athena.EncryptionConfiguration{ 41 Metadata: resource.GetMetadata(), 42 Type: defsecTypes.StringDefault("", resource.GetMetadata()), 43 }, 44 } 45 if encryptionConfigBlock := resource.GetBlock("encryption_configuration"); encryptionConfigBlock.IsNotNil() { 46 database.Encryption.Metadata = encryptionConfigBlock.GetMetadata() 47 encryptionOptionAttr := encryptionConfigBlock.GetAttribute("encryption_option") 48 database.Encryption.Type = encryptionOptionAttr.AsStringValueOrDefault("", encryptionConfigBlock) 49 } 50 51 return database 52 } 53 54 func adaptWorkgroup(resource *terraform.Block) athena.Workgroup { 55 workgroup := athena.Workgroup{ 56 Metadata: resource.GetMetadata(), 57 Name: resource.GetAttribute("name").AsStringValueOrDefault("", resource), 58 Encryption: athena.EncryptionConfiguration{ 59 Metadata: resource.GetMetadata(), 60 Type: defsecTypes.StringDefault("", resource.GetMetadata()), 61 }, 62 EnforceConfiguration: defsecTypes.BoolDefault(false, resource.GetMetadata()), 63 } 64 65 if configBlock := resource.GetBlock("configuration"); configBlock.IsNotNil() { 66 67 enforceWGConfigAttr := configBlock.GetAttribute("enforce_workgroup_configuration") 68 workgroup.EnforceConfiguration = enforceWGConfigAttr.AsBoolValueOrDefault(true, configBlock) 69 70 if resultConfigBlock := configBlock.GetBlock("result_configuration"); configBlock.IsNotNil() { 71 if encryptionConfigBlock := resultConfigBlock.GetBlock("encryption_configuration"); encryptionConfigBlock.IsNotNil() { 72 encryptionOptionAttr := encryptionConfigBlock.GetAttribute("encryption_option") 73 workgroup.Encryption.Metadata = encryptionConfigBlock.GetMetadata() 74 workgroup.Encryption.Type = encryptionOptionAttr.AsStringValueOrDefault("", encryptionConfigBlock) 75 } 76 } 77 } 78 79 return workgroup 80 }