github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/terraform/nifcloud/network/load_balancer.go (about)

     1  package network
     2  
     3  import (
     4  	"github.com/khulnasoft-lab/defsec/pkg/providers/nifcloud/network"
     5  	"github.com/khulnasoft-lab/defsec/pkg/terraform"
     6  	defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types"
     7  )
     8  
     9  func adaptLoadBalancers(modules terraform.Modules) []network.LoadBalancer {
    10  	var loadBalancers []network.LoadBalancer
    11  
    12  	for _, resource := range modules.GetResourcesByType("nifcloud_load_balancer") {
    13  		loadBalancers = append(loadBalancers, adaptLoadBalancer(resource, modules))
    14  	}
    15  
    16  	return loadBalancers
    17  }
    18  
    19  func adaptLoadBalancer(resource *terraform.Block, modules terraform.Modules) network.LoadBalancer {
    20  	var listeners []network.LoadBalancerListener
    21  
    22  	listeners = append(listeners, adaptListener(resource))
    23  	for _, listenerBlock := range modules.GetReferencingResources(resource, "nifcloud_load_balancer_listener", "load_balancer_name") {
    24  		listeners = append(listeners, adaptListener(listenerBlock))
    25  	}
    26  
    27  	return network.LoadBalancer{
    28  		Metadata:  resource.GetMetadata(),
    29  		Listeners: listeners,
    30  	}
    31  }
    32  
    33  func adaptListener(resource *terraform.Block) network.LoadBalancerListener {
    34  	protocolVal := defsecTypes.String("", resource.GetMetadata())
    35  	policyVal := defsecTypes.String("", resource.GetMetadata())
    36  
    37  	portAttr := resource.GetAttribute("load_balancer_port")
    38  	if portAttr.IsNotNil() && portAttr.IsNumber() {
    39  		port := portAttr.AsNumber()
    40  		switch port {
    41  		case 21:
    42  			protocolVal = defsecTypes.String("FTP", portAttr.GetMetadata())
    43  		case 80:
    44  			protocolVal = defsecTypes.String("HTTP", portAttr.GetMetadata())
    45  		case 443:
    46  			protocolVal = defsecTypes.String("HTTPS", portAttr.GetMetadata())
    47  		default:
    48  			protocolVal = defsecTypes.String("custom", portAttr.GetMetadata())
    49  		}
    50  	}
    51  
    52  	policyIDAttr := resource.GetAttribute("ssl_policy_id")
    53  	if policyIDAttr.IsNotNil() && policyIDAttr.IsString() {
    54  		policyVal = policyIDAttr.AsStringValueOrDefault("", resource)
    55  	}
    56  
    57  	policyNameAttr := resource.GetAttribute("ssl_policy_name")
    58  	if policyNameAttr.IsNotNil() && policyNameAttr.IsString() {
    59  		policyVal = policyNameAttr.AsStringValueOrDefault("", resource)
    60  	}
    61  
    62  	return network.LoadBalancerListener{
    63  		Metadata:  resource.GetMetadata(),
    64  		Protocol:  protocolVal,
    65  		TLSPolicy: policyVal,
    66  	}
    67  }