in internal/models/filters.go [129:188]
func LoadFilters(filterFile string, scannerKeys []string) *Filters {
filters := NewFilters()
if filterFile != "" {
data, err := os.ReadFile(filterFile)
if err != nil {
log.Fatal().Err(err).Msgf("failed reading data from file: %s", filterFile)
}
err = yaml.Unmarshal([]byte(data), &filters)
if err != nil {
log.Fatal().Err(err).Msgf("failed parsing yaml from file: %s", filterFile)
}
}
filters.Azqr.xResourceGroups = make(map[string]bool)
for _, id := range filters.Azqr.Exclude.ResourceGroups {
filters.Azqr.xResourceGroups[strings.ToLower(id)] = true
}
filters.Azqr.xSubscriptions = make(map[string]bool)
for _, id := range filters.Azqr.Exclude.Subscriptions {
filters.Azqr.xSubscriptions[strings.ToLower(id)] = true
}
filters.Azqr.xServices = make(map[string]bool)
for _, id := range filters.Azqr.Exclude.Services {
filters.Azqr.xServices[strings.ToLower(id)] = true
}
filters.Azqr.xRecommendations = make(map[string]bool)
for _, id := range filters.Azqr.Exclude.Recommendations {
filters.Azqr.xRecommendations[strings.ToLower(id)] = true
}
s := []IAzureScanner{}
if len(scannerKeys) > 1 && len(filters.Azqr.Include.ResourceTypes) > 0 {
for _, key := range filters.Azqr.Include.ResourceTypes {
if scannerList, exists := ScannerList[key]; exists {
s = append(s, scannerList...)
}
}
} else if len(scannerKeys) == 1 {
s = append(s, ScannerList[scannerKeys[0]]...)
} else {
_, s = GetScanners()
}
filters.Azqr.Scanners = s
filters.Azqr.iResourceTypes = make(map[string]bool)
for _, t := range s {
for _, r := range t.ResourceTypes() {
filters.Azqr.iResourceTypes[strings.ToLower(r)] = true
}
}
return filters
}