in pkg/source/gcp/task/gke/k8s_audit/query/query.go [80:117]
func generateK8sAuditNamespaceFilter(filter *queryutil.SetFilterParseResult) string {
if filter.ValidationError != "" {
return fmt.Sprintf(`-- Failed to generate namespace filter due to the validation error "%s"`, filter.ValidationError)
}
if filter.SubtractMode {
return "-- Unsupported operation"
} else {
hasClusterScope := slices.Contains(filter.Additives, "#cluster-scoped")
hasNamespacedScope := slices.Contains(filter.Additives, "#namespaced")
if hasClusterScope && hasNamespacedScope {
return "-- No namespace filter"
}
if !hasClusterScope && hasNamespacedScope {
return `protoPayload.resourceName:"namespaces/"`
}
if hasClusterScope && !hasNamespacedScope {
if len(filter.Additives) == 1 { // 1 is used for #cluster-scope
return `-protoPayload.resourceName:"/namespaces/"`
}
resourceNameContains := []string{}
for _, additive := range filter.Additives {
if strings.HasPrefix(additive, "#") {
continue
}
resourceNameContains = append(resourceNameContains, fmt.Sprintf(`"/namespaces/%s"`, additive))
}
return fmt.Sprintf(`(protoPayload.resourceName:(%s) OR NOT (protoPayload.resourceName:"/namespaces/"))`, strings.Join(resourceNameContains, " OR "))
}
if len(filter.Additives) == 0 {
return `-- Invalid: none of the resources will be selected. Ignoreing namespace filter.`
}
resourceNameContains := []string{}
for _, additive := range filter.Additives {
resourceNameContains = append(resourceNameContains, fmt.Sprintf(`"/namespaces/%s"`, additive))
}
return fmt.Sprintf(`protoPayload.resourceName:(%s)`, strings.Join(resourceNameContains, " OR "))
}
}