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 }