github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/terraform/azure/appservice/adapt.go (about) 1 package appservice 2 3 import ( 4 "github.com/khulnasoft-lab/defsec/pkg/providers/azure/appservice" 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) appservice.AppService { 10 return appservice.AppService{ 11 Services: adaptServices(modules), 12 FunctionApps: adaptFunctionApps(modules), 13 } 14 } 15 16 func adaptServices(modules terraform.Modules) []appservice.Service { 17 var services []appservice.Service 18 19 for _, module := range modules { 20 for _, resource := range module.GetResourcesByType("azurerm_app_service") { 21 services = append(services, adaptService(resource)) 22 } 23 } 24 return services 25 } 26 27 func adaptFunctionApps(modules terraform.Modules) []appservice.FunctionApp { 28 var functionApps []appservice.FunctionApp 29 30 for _, module := range modules { 31 for _, resource := range module.GetResourcesByType("azurerm_function_app") { 32 functionApps = append(functionApps, adaptFunctionApp(resource)) 33 } 34 } 35 return functionApps 36 } 37 38 func adaptService(resource *terraform.Block) appservice.Service { 39 enableClientCertAttr := resource.GetAttribute("client_cert_enabled") 40 enableClientCertVal := enableClientCertAttr.AsBoolValueOrDefault(false, resource) 41 42 identityBlock := resource.GetBlock("identity") 43 typeVal := defsecTypes.String("", resource.GetMetadata()) 44 if identityBlock.IsNotNil() { 45 typeAttr := identityBlock.GetAttribute("type") 46 typeVal = typeAttr.AsStringValueOrDefault("", identityBlock) 47 } 48 49 authBlock := resource.GetBlock("auth_settings") 50 enabledVal := defsecTypes.Bool(false, resource.GetMetadata()) 51 if authBlock.IsNotNil() { 52 enabledAttr := authBlock.GetAttribute("enabled") 53 enabledVal = enabledAttr.AsBoolValueOrDefault(false, authBlock) 54 } 55 56 siteBlock := resource.GetBlock("site_config") 57 enableHTTP2Val := defsecTypes.Bool(false, resource.GetMetadata()) 58 minTLSVersionVal := defsecTypes.String("1.2", resource.GetMetadata()) 59 if siteBlock.IsNotNil() { 60 enableHTTP2Attr := siteBlock.GetAttribute("http2_enabled") 61 enableHTTP2Val = enableHTTP2Attr.AsBoolValueOrDefault(false, siteBlock) 62 63 minTLSVersionAttr := siteBlock.GetAttribute("min_tls_version") 64 minTLSVersionVal = minTLSVersionAttr.AsStringValueOrDefault("1.2", siteBlock) 65 } 66 67 return appservice.Service{ 68 Metadata: resource.GetMetadata(), 69 EnableClientCert: enableClientCertVal, 70 Identity: struct{ Type defsecTypes.StringValue }{ 71 Type: typeVal, 72 }, 73 Authentication: struct{ Enabled defsecTypes.BoolValue }{ 74 Enabled: enabledVal, 75 }, 76 Site: struct { 77 EnableHTTP2 defsecTypes.BoolValue 78 MinimumTLSVersion defsecTypes.StringValue 79 }{ 80 EnableHTTP2: enableHTTP2Val, 81 MinimumTLSVersion: minTLSVersionVal, 82 }, 83 } 84 } 85 86 func adaptFunctionApp(resource *terraform.Block) appservice.FunctionApp { 87 HTTPSOnlyAttr := resource.GetAttribute("https_only") 88 HTTPSOnlyVal := HTTPSOnlyAttr.AsBoolValueOrDefault(false, resource) 89 90 return appservice.FunctionApp{ 91 Metadata: resource.GetMetadata(), 92 HTTPSOnly: HTTPSOnlyVal, 93 } 94 }