github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/terraform/aws/apigateway/apiv2.go (about) 1 package apigateway 2 3 import ( 4 v2 "github.com/khulnasoft-lab/defsec/pkg/providers/aws/apigateway/v2" 5 "github.com/khulnasoft-lab/defsec/pkg/terraform" 6 defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types" 7 ) 8 9 func adaptAPIsV2(modules terraform.Modules) []v2.API { 10 11 var apis []v2.API 12 apiStageIDs := modules.GetChildResourceIDMapByType("aws_apigatewayv2_stage") 13 14 for _, module := range modules { 15 for _, apiBlock := range module.GetResourcesByType("aws_apigatewayv2_api") { 16 api := v2.API{ 17 Metadata: apiBlock.GetMetadata(), 18 Name: apiBlock.GetAttribute("name").AsStringValueOrDefault("", apiBlock), 19 ProtocolType: apiBlock.GetAttribute("protocol_type").AsStringValueOrDefault("", apiBlock), 20 Stages: nil, 21 } 22 23 for _, stageBlock := range module.GetReferencingResources(apiBlock, "aws_apigatewayv2_stage", "api_id") { 24 apiStageIDs.Resolve(stageBlock.ID()) 25 26 stage := adaptStageV2(stageBlock) 27 28 api.Stages = append(api.Stages, stage) 29 } 30 31 apis = append(apis, api) 32 } 33 } 34 35 orphanResources := modules.GetResourceByIDs(apiStageIDs.Orphans()...) 36 if len(orphanResources) > 0 { 37 orphanage := v2.API{ 38 Metadata: defsecTypes.NewUnmanagedMetadata(), 39 Name: defsecTypes.StringDefault("", defsecTypes.NewUnmanagedMetadata()), 40 ProtocolType: defsecTypes.StringUnresolvable(defsecTypes.NewUnmanagedMetadata()), 41 Stages: nil, 42 } 43 for _, stage := range orphanResources { 44 orphanage.Stages = append(orphanage.Stages, adaptStageV2(stage)) 45 } 46 apis = append(apis, orphanage) 47 } 48 49 return apis 50 } 51 52 func adaptStageV2(stageBlock *terraform.Block) v2.Stage { 53 stage := v2.Stage{ 54 Metadata: stageBlock.GetMetadata(), 55 Name: stageBlock.GetAttribute("name").AsStringValueOrDefault("", stageBlock), 56 AccessLogging: v2.AccessLogging{ 57 Metadata: stageBlock.GetMetadata(), 58 CloudwatchLogGroupARN: defsecTypes.StringDefault("", stageBlock.GetMetadata()), 59 }, 60 } 61 if accessLogging := stageBlock.GetBlock("access_log_settings"); accessLogging.IsNotNil() { 62 stage.AccessLogging.Metadata = accessLogging.GetMetadata() 63 stage.AccessLogging.CloudwatchLogGroupARN = accessLogging.GetAttribute("destination_arn").AsStringValueOrDefault("", accessLogging) 64 } else { 65 stage.AccessLogging.Metadata = stageBlock.GetMetadata() 66 stage.AccessLogging.CloudwatchLogGroupARN = defsecTypes.StringDefault("", stageBlock.GetMetadata()) 67 } 68 return stage 69 }