github.com/aquasecurity/trivy-iac@v0.8.1-0.20240127024015-3d8e412cf0ab/internal/adapters/terraform/google/dns/adapt.go (about)

     1  package dns
     2  
     3  import (
     4  	"github.com/aquasecurity/defsec/pkg/providers/google/dns"
     5  	"github.com/aquasecurity/defsec/pkg/terraform"
     6  	defsecTypes "github.com/aquasecurity/defsec/pkg/types"
     7  )
     8  
     9  func Adapt(modules terraform.Modules) dns.DNS {
    10  	return dns.DNS{
    11  		ManagedZones: adaptManagedZones(modules),
    12  	}
    13  }
    14  
    15  func adaptManagedZones(modules terraform.Modules) []dns.ManagedZone {
    16  	var managedZones []dns.ManagedZone
    17  	for _, module := range modules {
    18  		for _, resource := range module.GetResourcesByType("google_dns_managed_zone") {
    19  			managedZones = append(managedZones, adaptManagedZone(resource))
    20  		}
    21  	}
    22  	return managedZones
    23  }
    24  
    25  func adaptManagedZone(resource *terraform.Block) dns.ManagedZone {
    26  	zone := dns.ManagedZone{
    27  		Metadata:   resource.GetMetadata(),
    28  		Visibility: resource.GetAttribute("visibility").AsStringValueOrDefault("public", resource),
    29  		DNSSec:     adaptDNSSec(resource),
    30  	}
    31  	return zone
    32  }
    33  
    34  func adaptDNSSec(b *terraform.Block) dns.DNSSec {
    35  	DNSSecBlock := b.GetBlock("dnssec_config")
    36  	if DNSSecBlock.IsNil() {
    37  		return dns.DNSSec{
    38  			Metadata: b.GetMetadata(),
    39  			Enabled:  defsecTypes.BoolDefault(false, b.GetMetadata()),
    40  		}
    41  	}
    42  
    43  	stateAttr := DNSSecBlock.GetAttribute("state")
    44  
    45  	DNSSec := dns.DNSSec{
    46  		Metadata:        DNSSecBlock.GetMetadata(),
    47  		Enabled:         defsecTypes.Bool(stateAttr.Equals("on"), stateAttr.GetMetadata()),
    48  		DefaultKeySpecs: adaptKeySpecs(DNSSecBlock),
    49  	}
    50  
    51  	return DNSSec
    52  }
    53  
    54  func adaptKeySpecs(b *terraform.Block) []dns.KeySpecs {
    55  	var keySpecs []dns.KeySpecs
    56  	for _, keySpecsBlock := range b.GetBlocks("default_key_specs") {
    57  		keySpecs = append(keySpecs, dns.KeySpecs{
    58  			Metadata:  keySpecsBlock.GetMetadata(),
    59  			Algorithm: keySpecsBlock.GetAttribute("algorithm").AsStringValueOrDefault("", keySpecsBlock),
    60  			KeyType:   keySpecsBlock.GetAttribute("key_type").AsStringValueOrDefault("", keySpecsBlock),
    61  		})
    62  	}
    63  	return keySpecs
    64  }