func LoadFilters()

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
}