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

     1  package repositories
     2  
     3  import (
     4  	"github.com/khulnasoft-lab/defsec/pkg/providers/github"
     5  	"github.com/khulnasoft-lab/defsec/pkg/terraform"
     6  	"github.com/khulnasoft-lab/defsec/pkg/types"
     7  )
     8  
     9  func Adapt(modules terraform.Modules) []github.Repository {
    10  	return adaptRepositories(modules)
    11  }
    12  
    13  func adaptRepositories(modules terraform.Modules) []github.Repository {
    14  	var repositories []github.Repository
    15  	for _, module := range modules {
    16  		for _, resource := range module.GetResourcesByType("github_repository") {
    17  			repositories = append(repositories, adaptRepository(resource))
    18  		}
    19  	}
    20  	return repositories
    21  }
    22  
    23  func adaptRepository(resource *terraform.Block) github.Repository {
    24  
    25  	repo := github.Repository{
    26  		Metadata:            resource.GetMetadata(),
    27  		Public:              types.Bool(true, resource.GetMetadata()),
    28  		VulnerabilityAlerts: resource.GetAttribute("vulnerability_alerts").AsBoolValueOrDefault(false, resource),
    29  		Archived:            resource.GetAttribute("archived").AsBoolValueOrDefault(false, resource),
    30  	}
    31  
    32  	privateAttr := resource.GetAttribute("private")
    33  	if privateAttr.IsTrue() {
    34  		repo.Public = types.Bool(false, privateAttr.GetMetadata())
    35  	} else if privateAttr.IsFalse() {
    36  		repo.Public = types.Bool(true, privateAttr.GetMetadata())
    37  	}
    38  
    39  	// visibility overrides private
    40  	visibilityAttr := resource.GetAttribute("visibility")
    41  	if visibilityAttr.Equals("private") || visibilityAttr.Equals("internal") {
    42  		repo.Public = types.Bool(false, visibilityAttr.GetMetadata())
    43  	} else if visibilityAttr.Equals("public") {
    44  		repo.Public = types.Bool(true, visibilityAttr.GetMetadata())
    45  	}
    46  
    47  	return repo
    48  }