github.com/aquasecurity/trivy-iac@v0.8.1-0.20240127024015-3d8e412cf0ab/pkg/scanners/cloudformation/parser/fn_if.go (about) 1 package parser 2 3 func ResolveIf(property *Property) (resolved *Property, success bool) { 4 if !property.isFunction() { 5 return property, true 6 } 7 8 refValue := property.AsMap()["Fn::If"].AsList() 9 10 if len(refValue) != 3 { 11 return abortIntrinsic(property, "Fn::If should have exactly 3 values, returning original Property") 12 } 13 14 condition, _ := refValue[0].resolveValue() 15 trueState, _ := refValue[1].resolveValue() 16 falseState, _ := refValue[2].resolveValue() 17 18 conditionMet := false 19 20 con, _ := condition.resolveValue() 21 if con.IsBool() { 22 conditionMet = con.AsBool() 23 } else if property.ctx.Conditions != nil && 24 condition.IsString() { 25 26 condition := property.ctx.Conditions[condition.AsString()] 27 if condition.isFunction() { 28 con, _ := condition.resolveValue() 29 if con.IsBool() { 30 conditionMet = con.AsBool() 31 } 32 } 33 } 34 35 if conditionMet { 36 return trueState, true 37 } else { 38 return falseState, true 39 } 40 }