Skip to content

Commit 7b4e064

Browse files
committed
Merge remote-tracking branch 'origin/feature/10.6.0/new_correlation' into feature/10.6.0/new_correlation
2 parents c1d910a + 08b33b3 commit 7b4e064

File tree

54 files changed

+656
-390
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+656
-390
lines changed

backend/src/main/java/com/park/utmstack/domain/chart_builder/types/query/OperatorType.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ public enum OperatorType {
44
IS,
55
IS_NOT,
66
CONTAIN,
7+
CONTAIN_ONE_OF,
8+
DOES_NOT_CONTAIN_ONE_OF,
79
DOES_NOT_CONTAIN,
810
IS_ONE_OF,
911
IS_NOT_ONE_OF,

backend/src/main/java/com/park/utmstack/domain/compliance/UtmComplianceReportConfig.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,12 @@ public class UtmComplianceReportConfig implements Serializable {
8383
@Column(name = "config_url")
8484
private String configUrl;
8585

86+
@Column(name = "config_report_note")
87+
private String configReportNote;
88+
89+
@Column(name = "config_report_name", length = 50)
90+
private String configReportName;
91+
8692
@Transient
8793
@JsonSerialize
8894
@JsonDeserialize
@@ -111,7 +117,6 @@ public class UtmComplianceReportConfig implements Serializable {
111117
@JsonDeserialize
112118
private List<RequestParamFilter> requestParamFilters;
113119

114-
private String note;
115120

116121
public Long getId() {
117122
return id;
@@ -305,11 +310,19 @@ public void setAssociatedDashboard(UtmDashboard associatedDashboard) {
305310
this.associatedDashboard = associatedDashboard;
306311
}
307312

308-
public String getNote() {
309-
return note;
313+
public String getConfigReportNote() {
314+
return configReportNote;
315+
}
316+
317+
public void setConfigReportNote(String configReportNote) {
318+
this.configReportNote = configReportNote;
319+
}
320+
321+
public String getConfigReportName() {
322+
return configReportName;
310323
}
311324

312-
public void setNote(String note) {
313-
this.note = note;
325+
public void setConfigReportName(String configReportName) {
326+
this.configReportName = configReportName;
314327
}
315328
}

backend/src/main/java/com/park/utmstack/service/compliance/config/UtmComplianceReportConfigQueryService.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,23 @@ private Specification<UtmComplianceReportConfig> createSpecification(UtmComplian
4646
}
4747
if (criteria.getConfigReportEditable() != null) {
4848
specification = specification.and(
49-
buildSpecification(criteria.getConfigReportEditable(), UtmComplianceReportConfig_.configReportEditable));
49+
buildSpecification(criteria.getConfigReportEditable(), UtmComplianceReportConfig_.configReportEditable));
5050
}
51-
if (criteria.getConfigSolution() != null) {
51+
if (criteria.getConfigSolution() != null || criteria.getConfigReportName() != null) {
5252
specification = specification.and(
53-
buildStringSpecification(criteria.getConfigSolution(), UtmComplianceReportConfig_.configSolution));
53+
buildStringSpecification(criteria.getConfigSolution(), UtmComplianceReportConfig_.configSolution)
54+
.or(buildStringSpecification(criteria.getConfigSolution(), UtmComplianceReportConfig_.configReportName)));
55+
}
56+
if (criteria.getConfigReportName() != null) {
57+
specification = specification.and(
58+
buildStringSpecification(criteria.getConfigReportName(), UtmComplianceReportConfig_.configReportName));
5459
}
5560
if (criteria.getStandardSectionId() != null) {
5661
specification = specification.and(
57-
buildRangeSpecification(criteria.getStandardSectionId(), UtmComplianceReportConfig_.standardSectionId));
62+
buildRangeSpecification(criteria.getStandardSectionId(), UtmComplianceReportConfig_.standardSectionId));
5863
}
5964
}
6065
return specification;
6166
}
67+
6268
}

backend/src/main/java/com/park/utmstack/service/compliance/config/UtmComplianceReportConfigService.java

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.park.utmstack.util.exceptions.UtmPageNumberNotSupported;
1010
import org.springframework.dao.DataIntegrityViolationException;
1111
import org.springframework.data.domain.Page;
12+
import org.springframework.data.domain.PageImpl;
1213
import org.springframework.data.domain.Pageable;
1314
import org.springframework.stereotype.Service;
1415
import org.springframework.transaction.annotation.Transactional;
@@ -79,34 +80,65 @@ public void deleteReportsByStandardIdAndIdNotIn(Long standardId, List<Long> repo
7980
complianceReportConfigRepository.deleteReportsByStandardIdAndIdNotIn(standardId, reportIds);
8081
}
8182

82-
public List<UtmComplianceReportConfig> getReportsByFilters(Long standardId, String solution, Long sectionId, Pageable pageable) throws
83-
UtmPageNumberNotSupported {
83+
public Page<UtmComplianceReportConfig> getReportsByFilters(Long standardId, String solution, Long sectionId,
84+
String search, Pageable pageable) {
8485
StringBuilder script = new StringBuilder(
85-
"SELECT cfg.* FROM utm_compliance_report_config cfg INNER JOIN utm_compliance_standard_section sec ON cfg.standard_section_id=sec.id INNER JOIN utm_compliance_standard st ON sec.standard_id=st.id");
86+
"SELECT cfg.* FROM utm_compliance_report_config cfg " +
87+
"INNER JOIN utm_compliance_standard_section sec ON cfg.standard_section_id = sec.id " +
88+
"INNER JOIN utm_compliance_standard st ON sec.standard_id = st.id " +
89+
"LEFT JOIN utm_dashboard d ON cfg.dashboard_id = d.id");
90+
91+
StringBuilder countScript = new StringBuilder(
92+
"SELECT COUNT(cfg.id) FROM utm_compliance_report_config cfg " +
93+
"INNER JOIN utm_compliance_standard_section sec ON cfg.standard_section_id = sec.id " +
94+
"INNER JOIN utm_compliance_standard st ON sec.standard_id = st.id " +
95+
"LEFT JOIN utm_dashboard d ON cfg.dashboard_id = d.id");
8696

8797
boolean hasWhere = false;
8898

8999
if (standardId != null) {
90100
hasWhere = true;
91-
script.append(" WHERE").append(" st.id = ").append(standardId);
101+
script.append(" WHERE st.id = ").append(standardId);
102+
countScript.append(" WHERE st.id = ").append(standardId);
92103
}
93104

94105
if (StringUtils.hasText(solution)) {
95106
String condition = "cfg.config_solution ILIKE '%" + solution + "%'";
96107
script.append(hasWhere ? " AND " : " WHERE ").append(condition);
108+
countScript.append(hasWhere ? " AND " : " WHERE ").append(condition);
97109
hasWhere = true;
98110
}
99111

100112
if (sectionId != null) {
101113
String condition = "sec.id = " + sectionId;
102114
script.append(hasWhere ? " AND " : " WHERE ").append(condition);
115+
countScript.append(hasWhere ? " AND " : " WHERE ").append(condition);
116+
}
117+
118+
if (StringUtils.hasText(search)) {
119+
String condition = "(cfg.config_report_name ILIKE '%" + search + "%' OR d.name ILIKE '%" + search + "%')";
120+
script.append(hasWhere ? " AND " : " WHERE ").append(condition);
121+
countScript.append(hasWhere ? " AND " : " WHERE ").append(condition);
122+
}
123+
124+
if (StringUtils.hasText(solution)) {
125+
pageable.getSort();
126+
String sortField = pageable.getSort().iterator().next().getProperty();
127+
String sortDirection = pageable.getSort().iterator().next().getDirection().name();
128+
script.append(" ORDER BY ").append(sortField).append(" ").append(sortDirection);
103129
}
104130

105-
return em.createNativeQuery(script.toString(), UtmComplianceReportConfig.class).setFirstResult(
106-
UtilPagination.getFirstForNativeSql(pageable.getPageSize(), pageable.getPageNumber())).setMaxResults(
107-
pageable.getPageSize()).getResultList();
131+
List<UtmComplianceReportConfig> results = em.createNativeQuery(script.toString(), UtmComplianceReportConfig.class)
132+
.setFirstResult(UtilPagination.getFirstForNativeSql(pageable.getPageSize(), pageable.getPageNumber()))
133+
.setMaxResults(pageable.getPageSize())
134+
.getResultList();
135+
136+
long total = ((Number) em.createNativeQuery(countScript.toString()).getSingleResult()).longValue();
137+
138+
return new PageImpl<>(results, pageable, total);
108139
}
109140

141+
110142
public void deleteAllByConfigSolutionAndSectionIdAndDashboardId(String configSolution, Long sectionId, Long dashboardId) {
111143
complianceReportConfigRepository.deleteAllByConfigSolutionAndStandardSectionIdAndDashboardId(configSolution, sectionId, dashboardId);
112144
}
@@ -135,15 +167,15 @@ public void importReports(List<UtmComplianceReportConfig> reports, boolean overr
135167

136168
// Standards
137169
Optional<UtmComplianceStandard> eStandard = standardService.findByStandardNameLike(
138-
standard.getStandardName());
170+
standard.getStandardName());
139171

140172
if (eStandard.isPresent())
141173
standard.setId(eStandard.get().getId());
142174
standard = standardService.saveAndFlush(standard);
143175

144176
// Sections
145177
Optional<UtmComplianceStandardSection> eSection = standardSectionService.findByStandardSectionNameLike(
146-
section.getStandardSectionName());
178+
section.getStandardSectionName());
147179

148180
if (eSection.isPresent())
149181
section.setId(eSection.get().getId());
@@ -154,7 +186,7 @@ public void importReports(List<UtmComplianceReportConfig> reports, boolean overr
154186

155187
// Compliance report
156188
Optional<UtmComplianceReportConfig> eReport = complianceReportConfigRepository.
157-
findByConfigSolutionAndStandardSectionIdAndDashboardId(report.getConfigSolution(), report.getStandardSectionId(), report.getDashboardId());
189+
findByConfigSolutionAndStandardSectionIdAndDashboardId(report.getConfigSolution(), report.getStandardSectionId(), report.getDashboardId());
158190

159191
eReport.ifPresent(utmComplianceReportConfig -> report.setId(utmComplianceReportConfig.getId()));
160192
report.setStandardSectionId(section.getId());

backend/src/main/java/com/park/utmstack/service/dto/compliance/UtmComplianceReportConfigCriteria.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
public class UtmComplianceReportConfigCriteria {
88
private LongFilter id;
99
private StringFilter configSolution;
10+
private StringFilter configReportName;
1011
private LongFilter standardSectionId;
1112
private BooleanFilter configReportEditable;
1213
private BooleanFilter expandDashboard;
@@ -50,4 +51,12 @@ public BooleanFilter getExpandDashboard() {
5051
public void setExpandDashboard(BooleanFilter expandDashboard) {
5152
this.expandDashboard = expandDashboard;
5253
}
54+
55+
public StringFilter getConfigReportName() {
56+
return configReportName;
57+
}
58+
59+
public void setConfigReportName(StringFilter configReportName) {
60+
this.configReportName = configReportName;
61+
}
5362
}

backend/src/main/java/com/park/utmstack/service/elasticsearch/SearchUtil.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ public static Query toQuery(List<FilterType> filters) {
4949
case DOES_NOT_CONTAIN:
5050
buildDoesNotContainOperator(bool, filter);
5151
break;
52+
case CONTAIN_ONE_OF:
53+
buildContainOnOneOfOperator(bool, filter);
54+
break;
55+
case DOES_NOT_CONTAIN_ONE_OF:
56+
buildDoesNotContainOnOneOfOperator(bool, filter);
57+
break;
5258
case IS_ONE_OF:
5359
buildIsOneOfOperator(bool, filter);
5460
break;
@@ -138,6 +144,43 @@ private static void buildContainOperator(BoolQuery.Builder bool, FilterType filt
138144
}
139145
}
140146

147+
private static void buildContainOnOneOfOperator(BoolQuery.Builder bool, FilterType filter) {
148+
final String ctx = CLASSNAME + ".buildContainOnOneOfOperator";
149+
try {
150+
filter.validate();
151+
152+
BoolQuery.Builder shouldQuery = new BoolQuery.Builder();
153+
for (Object val : (List<?>) filter.getValue()) {
154+
shouldQuery.should(f -> f.matchPhrase(m -> m.field(filter.getField()).query(String.valueOf(val))));
155+
}
156+
157+
shouldQuery.minimumShouldMatch(String.valueOf(1));
158+
159+
bool.filter(f -> f.bool(shouldQuery.build()));
160+
161+
} catch (Exception e) {
162+
throw new RuntimeException(ctx + ": " + e.getLocalizedMessage());
163+
}
164+
}
165+
166+
private static void buildDoesNotContainOnOneOfOperator(BoolQuery.Builder bool, FilterType filter) {
167+
final String ctx = CLASSNAME + ".buildExcludeAllOfOperator";
168+
try {
169+
filter.validate();
170+
171+
BoolQuery.Builder mustNotQuery = new BoolQuery.Builder();
172+
for (Object val : (List<?>) filter.getValue()) {
173+
mustNotQuery.mustNot(f -> f.matchPhrase(m -> m.field(filter.getField()).query(String.valueOf(val))));
174+
}
175+
176+
bool.filter(f -> f.bool(mustNotQuery.build()));
177+
178+
} catch (Exception e) {
179+
throw new RuntimeException(ctx + ": " + e.getLocalizedMessage());
180+
}
181+
}
182+
183+
141184
private static void buildDoesNotContainOperator(BoolQuery.Builder bool, FilterType filter) {
142185
final String ctx = CLASSNAME + ".buildDoesNotContainOperator";
143186
try {

backend/src/main/java/com/park/utmstack/web/rest/compliance/config/UtmComplianceReportConfigResource.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,17 +172,19 @@ public ResponseEntity<Void> deleteComplianceReportConfig(@PathVariable Long id)
172172
public ResponseEntity<List<UtmComplianceReportConfig>> getReportsByFilters(@RequestParam(required = false) Long standardId,
173173
@RequestParam(required = false) String solution,
174174
@RequestParam(required = false) Long sectionId,
175+
@RequestParam(required = false) String search,
175176
@RequestParam(required = false) Boolean expandDashboard,
176177
Pageable pageable) {
177178
final String ctx = CLASS_NAME + ".getReportsByFilters";
178179
try {
179-
List<UtmComplianceReportConfig> page = complianceReportConfigService.getReportsByFilters(standardId, solution, sectionId, pageable);
180+
Page<UtmComplianceReportConfig> page = complianceReportConfigService.getReportsByFilters(standardId, solution, sectionId, search, pageable);
180181

181182
if (!Objects.isNull(expandDashboard) && expandDashboard) {
182183
for (UtmComplianceReportConfig report : page)
183184
dashboardVisualizationService.findAllByIdDashboard(report.getDashboardId()).ifPresent(report::setDashboard);
184185
}
185-
return ResponseEntity.ok().body(page);
186+
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/utm-asset-groups/searchGroupsByFilter");
187+
return ResponseEntity.ok().headers(headers).body(page.getContent());
186188
} catch (Exception e) {
187189
String msg = ctx + ": " + e.getMessage();
188190
log.error(msg);

backend/src/main/resources/config/liquibase/changelog/20241120001_add_new_compliance_menu.xml

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,45 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<databaseChangeLog
3-
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
4-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5-
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
3+
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
66

77
<changeSet id="20241120001" author="Manuel">
88
<sql dbms="postgresql" splitStatements="true" stripComments="true">
9+
<![CDATA[
910
UPDATE utm_menu
10-
SET
11-
name = 'Overview',
12-
url = 'compliance/report-viewer'
11+
SET url = 'compliance/report-viewer?standardId=100&standardName=Account Management',
12+
menu_active = true
13+
WHERE id = 502;
14+
15+
UPDATE utm_menu
16+
SET url = 'compliance/report-viewer?standardId=200&standardName=Device Activity',
17+
menu_active = true
18+
WHERE id = 503;
19+
20+
UPDATE utm_menu
21+
SET url = 'compliance/report-viewer?standardId=300&standardName=Application Audit',
22+
menu_active = true
23+
WHERE id = 504;
24+
25+
UPDATE utm_menu
26+
SET url = 'compliance/report-viewer?standardId=400&standardName=Alerts and Incidents',
27+
name = 'Alerts And Incidents',
28+
menu_active = true
1329
WHERE id = 505;
1430
31+
/*INSERT INTO public.utm_menu (id, name, url, parent_id, type, dashboard_id, position, menu_active, menu_action, menu_icon, module_name_short)
32+
VALUES (507, 'CMMC', 'compliance/report-viewer?standardId=1000000&standardName=CMMC', 500, 1, null, 6, true, false, null, null);
33+
34+
INSERT INTO utm_menu_authority (menu_id, authority_name) VALUES (507, 'ROLE_ADMIN');
35+
INSERT INTO utm_menu_authority (menu_id, authority_name) VALUES (507, 'ROLE_USER');*/
36+
1537
ALTER TABLE utm_compliance_report_config
16-
ADD COLUMN note TEXT;
38+
ADD COLUMN config_report_note TEXT;
1739
40+
ALTER TABLE utm_compliance_report_config
41+
ADD COLUMN config_report_name varchar(250);
42+
]]>
1843
</sql>
1944
</changeSet>
2045
</databaseChangeLog>

backend/src/main/resources/config/liquibase/master.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,6 @@
7777

7878
<include file="/config/liquibase/changelog/20240820001_add_notification.xml" relativeToChangelogFile="false"/>
7979

80-
<include file="/config/liquibase/changelog/20241120001_update_compliance_menu.xml" relativeToChangelogFile="false"/>
81-
8280
<include file="/config/liquibase/changelog/20241122001_alter_action_detail_length.xml" relativeToChangelogFile="false"/>
8381

8482
<include file="/config/liquibase/changelog/20241213001_updating_asa_and_firepower_filters.xml" relativeToChangelogFile="false"/>
@@ -87,4 +85,7 @@
8785

8886
<include file="/config/liquibase/changelog/20241227002_updating-menu-index-pattern.xml" relativeToChangelogFile="false"/>
8987

88+
<include file="/config/liquibase/changelog/20241120001_update_compliance_menu.xml" relativeToChangelogFile="false"/>
89+
90+
9091
</databaseChangeLog>

0 commit comments

Comments
 (0)