Skip to content

Commit 243f42a

Browse files
committed
bug: improved ARG results parsing #248
1 parent 0872a3a commit 243f42a

File tree

2 files changed

+34
-9
lines changed

2 files changed

+34
-9
lines changed

internal/aprl_scanner.go

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ package internal
66
import (
77
"context"
88
"embed"
9+
"encoding/json"
10+
"fmt"
911
"io/fs"
1012
"math"
1113
"strings"
@@ -189,39 +191,42 @@ func (sc AprlScanner) graphScan(ctx context.Context, graphClient *graph.GraphQue
189191
m := row.(map[string]interface{})
190192

191193
tags := ""
192-
// if m["tags"] != nil {
193-
// tags = m["tags"].(string)
194-
// }
194+
if m["tags"] != nil {
195+
tags = convertInterfaceToString(m["tags"])
196+
}
195197

196198
param1 := ""
197199
if m["param1"] != nil {
198-
param1 = m["param1"].(string)
200+
param1 = convertInterfaceToString(m["param1"])
199201
}
200202

201203
param2 := ""
202204
if m["param2"] != nil {
203-
param2 = m["param2"].(string)
205+
param2 = convertInterfaceToString(m["param2"])
204206
}
205207

206208
param3 := ""
207209
if m["param3"] != nil {
208-
param3 = m["param3"].(string)
210+
param3 = convertInterfaceToString(m["param3"])
209211
}
210212

211213
param4 := ""
212214
if m["param4"] != nil {
213-
param4 = m["param4"].(string)
215+
param4 = convertInterfaceToString(m["param4"])
214216
}
215217

216218
param5 := ""
217219
if m["param5"] != nil {
218-
param5 = m["param5"].(string)
220+
param5 = convertInterfaceToString(m["param5"])
219221
}
220222

221223
log.Debug().Msg(rule.GraphQuery)
222224

223225
subscription := azqr.GetSubsctiptionFromResourceID(m["id"].(string))
224-
subscriptionName := subscriptions[subscription]
226+
subscriptionName, ok := subscriptions[subscription]
227+
if !ok {
228+
subscriptionName = ""
229+
}
225230

226231
results = append(results, azqr.AprlResult{
227232
RecommendationID: rule.RecommendationID,
@@ -270,3 +275,20 @@ func (sc AprlScanner) getGraphRules(service string, filters *azqr.Filters, aprl
270275
}
271276
return r
272277
}
278+
279+
func convertInterfaceToString(i interface{}) string {
280+
switch v := i.(type) {
281+
case string:
282+
return v
283+
case int:
284+
return fmt.Sprintf("%d", v)
285+
case bool:
286+
return fmt.Sprintf("%t", v)
287+
default:
288+
jsonStr, err := json.Marshal(i)
289+
if err != nil {
290+
log.Fatal().Err(err).Msg("unssupported type in ARG query result")
291+
}
292+
return string(jsonStr)
293+
}
294+
}

internal/azqr/azqr.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,9 @@ func ListResourceGroup(ctx context.Context, cred azcore.TokenCredential, subscri
271271
// GetSubsctiptionFromResourceID - Get Subscription ID from Resource ID
272272
func GetSubsctiptionFromResourceID(resourceID string) string {
273273
parts := strings.Split(resourceID, "/")
274+
if len(parts) < 3 {
275+
return ""
276+
}
274277
return parts[2]
275278
}
276279

0 commit comments

Comments
 (0)