1
- # pylint: disable=R0912,C0121
1
+ # pylint: disable=R0912,C0121,R0915
2
2
# Standard Library
3
3
from typing import List
4
4
@@ -46,6 +46,18 @@ def get_detailed_findings(db_connection: Session, findings_filter: FindingsFilte
46
46
func .max (model .DBaudit .id_ ).label ("audit_id" )) \
47
47
.group_by (model .DBaudit .finding_id ).subquery ()
48
48
49
+ rule_tag_subquery = db_connection .query (model .DBruleTag .rule_id ) \
50
+ .join (model .DBtag , model .DBruleTag .tag_id == model .DBtag .id_ )
51
+ if findings_filter .rule_tags :
52
+ rule_tag_subquery = rule_tag_subquery .filter (model .DBtag .name .in_ (findings_filter .rule_tags ))
53
+ if findings_filter .rule_pack_versions or findings_filter .rule_names :
54
+ rule_tag_subquery = rule_tag_subquery .join (model .DBrule , model .DBrule .id_ == model .DBruleTag .rule_id )
55
+ if findings_filter .rule_pack_versions :
56
+ rule_tag_subquery = rule_tag_subquery .filter (model .DBrule .rule_pack .in_ (findings_filter .rule_pack_versions ))
57
+ if findings_filter .rule_names :
58
+ rule_tag_subquery = rule_tag_subquery .filter (model .DBrule .rule_name .in_ (findings_filter .rule_names ))
59
+ rule_tag_subquery = rule_tag_subquery .group_by (model .DBruleTag .rule_id ).subquery ()
60
+
49
61
limit_val = MAX_RECORDS_PER_PAGE_LIMIT if limit > MAX_RECORDS_PER_PAGE_LIMIT else limit
50
62
51
63
query = db_connection .query (
@@ -96,8 +108,8 @@ def get_detailed_findings(db_connection: Session, findings_filter: FindingsFilte
96
108
if findings_filter .rule_tags :
97
109
query = query .join (model .DBrule , and_ (model .DBrule .rule_name == model .DBfinding .rule_name ,
98
110
model .DBrule .rule_pack == model .DBscan .rule_pack ))
99
- for tag in findings_filter . rule_tags :
100
- query = query . filter ( model . DBrule . tags . like ( f"% { tag } %" ))
111
+ query = query . join ( rule_tag_subquery , model . DBrule . id_ == rule_tag_subquery . c . rule_id )
112
+
101
113
if findings_filter .rule_pack_versions :
102
114
query = query .filter (model .DBscan .rule_pack .in_ (findings_filter .rule_pack_versions ))
103
115
if findings_filter .start_date_time :
@@ -158,6 +170,18 @@ def get_detailed_findings_count(db_connection: Session, findings_filter: Finding
158
170
model .DBscan .rule_pack .in_ (findings_filter .rule_pack_versions ))
159
171
max_base_scan_subquery = max_base_scan_subquery .group_by (model .DBscan .branch_id ).subquery ()
160
172
173
+ rule_tag_subquery = db_connection .query (model .DBruleTag .rule_id ) \
174
+ .join (model .DBtag , model .DBruleTag .tag_id == model .DBtag .id_ )
175
+ if findings_filter .rule_tags :
176
+ rule_tag_subquery = rule_tag_subquery .filter (model .DBtag .name .in_ (findings_filter .rule_tags ))
177
+ if findings_filter .rule_pack_versions or findings_filter .rule_names :
178
+ rule_tag_subquery = rule_tag_subquery .join (model .DBrule , model .DBrule .id_ == model .DBruleTag .rule_id )
179
+ if findings_filter .rule_pack_versions :
180
+ rule_tag_subquery = rule_tag_subquery .filter (model .DBrule .rule_pack .in_ (findings_filter .rule_pack_versions ))
181
+ if findings_filter .rule_names :
182
+ rule_tag_subquery = rule_tag_subquery .filter (model .DBrule .rule_name .in_ (findings_filter .rule_names ))
183
+ rule_tag_subquery = rule_tag_subquery .group_by (model .DBruleTag .rule_id ).subquery ()
184
+
161
185
query = db_connection .query (func .count (model .DBfinding .id_ ))
162
186
163
187
query = query .join (model .DBscanFinding , model .DBfinding .id_ == model .DBscanFinding .finding_id )
@@ -184,8 +208,7 @@ def get_detailed_findings_count(db_connection: Session, findings_filter: Finding
184
208
if findings_filter .rule_tags :
185
209
query = query .join (model .DBrule , and_ (model .DBrule .rule_name == model .DBfinding .rule_name ,
186
210
model .DBrule .rule_pack == model .DBscan .rule_pack ))
187
- for tag in findings_filter .rule_tags :
188
- query = query .filter (model .DBrule .tags .like (f"%{ tag } %" ))
211
+ query = query .join (rule_tag_subquery , model .DBrule .id_ == rule_tag_subquery .c .rule_id )
189
212
190
213
if findings_filter .rule_pack_versions :
191
214
query = query .filter (model .DBscan .rule_pack .in_ (findings_filter .rule_pack_versions ))
0 commit comments