github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/terraform/type.go (about)

     1  package terraform
     2  
     3  import "fmt"
     4  
     5  type Type struct {
     6  	name                  string
     7  	refName               string
     8  	removeTypeInReference bool
     9  }
    10  
    11  func (t Type) Name() string {
    12  	return t.name
    13  }
    14  
    15  func (t Type) ShortName() string {
    16  	if t.refName != "" {
    17  		return t.refName
    18  	}
    19  	return t.name
    20  }
    21  
    22  var TypeCheck = Type{
    23  	name: "check",
    24  }
    25  
    26  var TypeData = Type{
    27  	name: "data",
    28  }
    29  
    30  var TypeResource = Type{
    31  	name:                  "resource",
    32  	removeTypeInReference: true,
    33  }
    34  
    35  var TypeVariable = Type{
    36  	name:    "variable",
    37  	refName: "var",
    38  }
    39  
    40  var TypeImport = Type{
    41  	name: "import",
    42  }
    43  
    44  var TypeLocal = Type{
    45  	name:    "locals",
    46  	refName: "local",
    47  }
    48  
    49  var TypeMoved = Type{
    50  	name: "moved",
    51  }
    52  
    53  var TypeProvider = Type{
    54  	name: "provider",
    55  }
    56  
    57  var TypeOutput = Type{
    58  	name: "output",
    59  }
    60  
    61  var TypeModule = Type{
    62  	name: "module",
    63  }
    64  
    65  var TypeTerraform = Type{
    66  	name: "terraform",
    67  }
    68  
    69  var ValidTypes = []Type{
    70  	TypeCheck,
    71  	TypeData,
    72  	TypeImport,
    73  	TypeLocal,
    74  	TypeModule,
    75  	TypeMoved,
    76  	TypeOutput,
    77  	TypeProvider,
    78  	TypeResource,
    79  	TypeTerraform,
    80  	TypeVariable,
    81  }
    82  
    83  func IsValidType(name string) bool {
    84  	for _, valid := range ValidTypes {
    85  		if valid.name == name {
    86  			return true
    87  		}
    88  	}
    89  	return false
    90  }
    91  
    92  func IsValidBlockReference(name string) bool {
    93  	for _, valid := range ValidTypes {
    94  		if valid.refName == name {
    95  			return true
    96  		}
    97  	}
    98  	return false
    99  }
   100  
   101  func TypeFromRefName(name string) (*Type, error) {
   102  	for _, valid := range ValidTypes {
   103  		if valid.refName == name || (valid.refName == "" && valid.name == name) {
   104  			return &valid, nil
   105  		}
   106  	}
   107  	return nil, fmt.Errorf("block type not found")
   108  }