Skip to content

Commit 6579d55

Browse files
committed
Resolve PR comments
1 parent 7e3c974 commit 6579d55

File tree

13 files changed

+70
-73
lines changed

13 files changed

+70
-73
lines changed

openbas-api/src/main/java/io/openbas/migration/V3_74__Add_table_injects_expectations_traces.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ inject_expectation_trace_expectation VARCHAR(255) NOT NULL CONSTRAINT injects_ex
2121
inject_expectation_trace_source_id VARCHAR(255) NOT NULL CONSTRAINT inject_expectation_trace_source_id_fk REFERENCES assets (asset_id) ON DELETE CASCADE,
2222
inject_expectation_trace_alert_name text,
2323
inject_expectation_trace_alert_link text,
24-
inject_expectation_trace_date timestamp,
25-
inject_expectation_trace_created_at timestamp not null default now(),
26-
inject_expectation_trace_updated_at timestamp not null default now()
24+
inject_expectation_trace_date timestamp(0) with time zone,
25+
inject_expectation_trace_created_at timestamp(0) with time zone not null default now(),
26+
inject_expectation_trace_updated_at timestamp(0) with time zone not null default now()
2727
);
2828
CREATE INDEX idx_inject_expectation_trace_expectation ON injects_expectations_traces(inject_expectation_trace_expectation);
2929
CREATE INDEX idx_inject_expectation_trace_source_id ON injects_expectations_traces(inject_expectation_trace_source_id);

openbas-api/src/main/java/io/openbas/rest/expectation/ExpectationApi.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,19 @@ public InjectExpectation deleteInjectExpectationResult(
4848
public List<InjectExpectation> getInjectExpectationsNotFilledOrNotExpired(
4949
@RequestParam(required = false, name = "expiration_time") final Integer expirationTime) {
5050
if (expirationTime == null) {
51-
return Stream.concat(
52-
injectExpectationService.manualExpectationsNotFill().stream(),
53-
Stream.concat(
54-
injectExpectationService.preventionExpectationsNotFill().stream(),
55-
injectExpectationService.detectionExpectationsNotFill().stream()))
51+
return Stream.of(
52+
injectExpectationService.manualExpectationsNotFill(),
53+
injectExpectationService.preventionExpectationsNotFill(),
54+
injectExpectationService.detectionExpectationsNotFill())
55+
.flatMap(List::stream)
5656
.toList();
5757
}
58-
return Stream.concat(
59-
injectExpectationService.manualExpectationsNotExpired(expirationTime).stream(),
60-
Stream.concat(
61-
injectExpectationService.preventionExpectationsNotExpired(expirationTime).stream(),
62-
injectExpectationService.detectionExpectationsNotExpired(expirationTime).stream()))
58+
59+
return Stream.of(
60+
injectExpectationService.manualExpectationsNotExpired(expirationTime),
61+
injectExpectationService.preventionExpectationsNotExpired(expirationTime),
62+
injectExpectationService.detectionExpectationsNotExpired(expirationTime))
63+
.flatMap(List::stream)
6364
.toList();
6465
}
6566

openbas-api/src/main/java/io/openbas/rest/inject_expectation_trace/InjectExpectationTraceApi.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import io.openbas.database.model.InjectExpectationTrace;
55
import io.openbas.database.repository.CollectorRepository;
66
import io.openbas.database.repository.InjectExpectationRepository;
7-
import io.openbas.database.repository.SecurityPlatformRepository;
87
import io.openbas.rest.exception.ElementNotFoundException;
98
import io.openbas.rest.helper.RestBehavior;
109
import io.openbas.rest.inject_expectation_trace.form.InjectExpectationTraceInput;
@@ -24,7 +23,6 @@ public class InjectExpectationTraceApi extends RestBehavior {
2423
private final InjectExpectationTraceService injectExpectationTraceService;
2524
private final InjectExpectationRepository injectExpectationRepository;
2625
private final CollectorRepository collectorRepository;
27-
private final SecurityPlatformRepository securityPlatformRepository;
2826

2927
@PostMapping()
3028
public InjectExpectationTrace createInjectExpectationTraceForCollector(

openbas-api/src/main/java/io/openbas/service/InjectExpectationService.java

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ public class InjectExpectationService {
4646
private final AssetGroupService assetGroupService;
4747
private final EndpointService endpointService;
4848
private final CollectorRepository collectorRepository;
49-
private final AgentService agentService;
5049

5150
@Resource protected ObjectMapper mapper;
5251

@@ -547,7 +546,9 @@ public void computeExpectationGroup(
547546
}
548547

549548
private boolean isSuccess(List<InjectExpectation> expectations, boolean isGroup) {
550-
if (expectations.isEmpty()) return false;
549+
if (expectations.isEmpty()) {
550+
return false;
551+
}
551552
return isGroup
552553
? expectations.stream().anyMatch(e -> e.getExpectedScore().equals(e.getScore()))
553554
: expectations.stream().allMatch(e -> e.getExpectedScore().equals(e.getScore()));
@@ -649,14 +650,11 @@ public List<InjectExpectation> preventionExpectationsNotExpired(final Integer ex
649650
return this.injectExpectationRepository.findAll(
650651
Specification.where(
651652
InjectExpectationSpecification.type(PREVENTION)
653+
.and(InjectExpectationSpecification.agentNotNull())
654+
.and(InjectExpectationSpecification.assetNotNull())
652655
.and(
653-
InjectExpectationSpecification.agentNotNull()
654-
.and(
655-
InjectExpectationSpecification.assetNotNull()
656-
.and(
657-
InjectExpectationSpecification.from(
658-
Instant.now()
659-
.minus(expirationTime, ChronoUnit.MINUTES)))))));
656+
InjectExpectationSpecification.from(
657+
Instant.now().minus(expirationTime, ChronoUnit.MINUTES)))));
660658
}
661659

662660
public List<InjectExpectation> preventionExpectationsNotFill(@NotBlank final String source) {
@@ -683,14 +681,11 @@ public List<InjectExpectation> detectionExpectationsNotExpired(final Integer exp
683681
return this.injectExpectationRepository.findAll(
684682
Specification.where(
685683
InjectExpectationSpecification.type(DETECTION)
684+
.and(InjectExpectationSpecification.agentNotNull())
685+
.and(InjectExpectationSpecification.assetNotNull())
686686
.and(
687-
InjectExpectationSpecification.agentNotNull()
688-
.and(
689-
InjectExpectationSpecification.assetNotNull()
690-
.and(
691-
InjectExpectationSpecification.from(
692-
Instant.now()
693-
.minus(expirationTime, ChronoUnit.MINUTES)))))));
687+
InjectExpectationSpecification.from(
688+
Instant.now().minus(expirationTime, ChronoUnit.MINUTES)))));
694689
}
695690

696691
public List<InjectExpectation> detectionExpectationsNotFill(@NotBlank final String source) {
@@ -717,14 +712,11 @@ public List<InjectExpectation> manualExpectationsNotExpired(final Integer expira
717712
return this.injectExpectationRepository.findAll(
718713
Specification.where(
719714
InjectExpectationSpecification.type(MANUAL)
715+
.and(InjectExpectationSpecification.agentNotNull())
716+
.and(InjectExpectationSpecification.assetNotNull())
720717
.and(
721-
InjectExpectationSpecification.agentNotNull()
722-
.and(
723-
InjectExpectationSpecification.assetNotNull()
724-
.and(
725-
InjectExpectationSpecification.from(
726-
Instant.now()
727-
.minus(expirationTime, ChronoUnit.MINUTES)))))));
718+
InjectExpectationSpecification.from(
719+
Instant.now().minus(expirationTime, ChronoUnit.MINUTES)))));
728720
}
729721

730722
public List<InjectExpectation> manualExpectationsNotFill(@NotBlank final String source) {

openbas-api/src/main/java/io/openbas/service/InjectExpectationTraceService.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,22 @@
44
import io.openbas.database.model.SecurityPlatform;
55
import io.openbas.database.repository.InjectExpectationTraceRepository;
66
import io.openbas.database.repository.SecurityPlatformRepository;
7+
import io.openbas.rest.exception.ElementNotFoundException;
78
import jakarta.validation.constraints.NotNull;
89
import java.util.List;
910
import java.util.Optional;
1011
import lombok.RequiredArgsConstructor;
12+
import lombok.extern.java.Log;
1113
import org.springframework.stereotype.Service;
1214

1315
@Service
16+
@Log
1417
@RequiredArgsConstructor
1518
public class InjectExpectationTraceService {
1619

1720
private final InjectExpectationTraceRepository injectExpectationTraceRepository;
1821
private final SecurityPlatformRepository securityPlatformRepository;
22+
private static final String COLLECTOR_TYPE = "collector";
1923

2024
public InjectExpectationTrace createInjectExpectationTrace(
2125
@NotNull InjectExpectationTrace injectExpectationTrace) {
@@ -26,8 +30,12 @@ public InjectExpectationTrace createInjectExpectationTrace(
2630
injectExpectationTrace.getAlertName(),
2731
injectExpectationTrace.getSecurityPlatform(),
2832
injectExpectationTrace.getInjectExpectation());
29-
return existingTrace.orElseGet(
30-
() -> this.injectExpectationTraceRepository.save(injectExpectationTrace));
33+
if (existingTrace.isPresent()) {
34+
log.info("Existing trace present, no creation");
35+
return existingTrace.get();
36+
} else {
37+
return this.injectExpectationTraceRepository.save(injectExpectationTrace);
38+
}
3139
}
3240

3341
public List<InjectExpectationTrace> getInjectExpectationTracesFromCollector(
@@ -40,9 +48,11 @@ public long getAlertLinksNumber(
4048
@NotNull String injectExpectationId,
4149
@NotNull String sourceId,
4250
String expectationResultSourceType) {
43-
if (expectationResultSourceType.equalsIgnoreCase("collector")) {
51+
if (expectationResultSourceType.equalsIgnoreCase(COLLECTOR_TYPE)) {
4452
SecurityPlatform securityPlatform =
45-
securityPlatformRepository.findByExternalReference(sourceId).orElseThrow();
53+
securityPlatformRepository
54+
.findByExternalReference(sourceId)
55+
.orElseThrow(() -> new ElementNotFoundException("Security platform not found"));
4656
return this.injectExpectationTraceRepository.countAlerts(
4757
injectExpectationId, securityPlatform.getId());
4858
} else {

openbas-front/src/actions/atomic_testings/atomic-testing-actions.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { simpleCall, simpleDelCall, simplePostCall, simplePutCall } from '../../
22
import { type AtomicTestingInput, type SearchPaginationInput } from '../../utils/api-types';
33

44
const ATOMIC_TESTING_URI = '/api/atomic-testings';
5+
const EXPECTATION_TRACE_URI = '/api/inject-expectations-traces';
56

67
export const searchAtomicTestings = (searchPaginationInput: SearchPaginationInput) => {
78
const data = searchPaginationInput;
@@ -65,11 +66,11 @@ export const searchAtomicTestingTeams = (paginationInput: SearchPaginationInput,
6566

6667
// -- EXPECTATION TRACES --
6768
export const fetchExpectationTraces = (injectExpectationId: string, sourceId: string) => {
68-
const uri = `/api/inject-expectations-traces?injectExpectationId=${injectExpectationId}&sourceId=${sourceId}`;
69+
const uri = `${EXPECTATION_TRACE_URI}?injectExpectationId=${injectExpectationId}&sourceId=${sourceId}`;
6970
return simpleCall(uri);
7071
};
7172

7273
export const getAlertLinksCount = (injectExpectationId: string, sourceId: string | undefined, expectationResultSourceType: string | undefined) => {
73-
const uri = `/api/inject-expectations-traces/count?injectExpectationId=${injectExpectationId}&sourceId=${sourceId}&expectationResultSourceType=${expectationResultSourceType}`;
74+
const uri = `${EXPECTATION_TRACE_URI}/count?injectExpectationId=${injectExpectationId}&sourceId=${sourceId}&expectationResultSourceType=${expectationResultSourceType}`;
7475
return simpleCall(uri);
7576
};

openbas-front/src/admin/components/atomic_testings/atomic_testing/ExpirationChip.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ import { useFormatter } from '../../../../components/i18n';
77
import countdown from '../../../../utils/hooks/countDown';
88
import { splitDuration } from '../../../../utils/Time';
99

10-
const useStyles = makeStyles()(() => ({
10+
const useStyles = makeStyles()(theme => ({
1111
score: {
1212
fontSize: '0.75rem',
1313
height: '20px',
14-
padding: '0 4px',
14+
padding: theme.spacing(1),
1515
},
1616
}));
1717

openbas-front/src/admin/components/atomic_testings/atomic_testing/TargetResultsDetail.tsx

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ const useStyles = makeStyles()(theme => ({
113113
overflow: 'hidden',
114114
height: '100%',
115115
},
116+
tableFontSize: { fontSize: '12px' },
116117
}));
117118

118119
interface Props {
@@ -761,10 +762,6 @@ const TargetResultsDetailFlow: FunctionComponent<Props> = ({
761762
{injectExpectation.inject_expectation_type !== 'MANUAL' && (
762763
<TableContainer>
763764
<Table
764-
sx={{
765-
minWidth: 650,
766-
fontSize: '12 px',
767-
}}
768765
size="small"
769766
>
770767
<TableHead>
@@ -790,7 +787,7 @@ const TargetResultsDetailFlow: FunctionComponent<Props> = ({
790787
sx={{ cursor: `${injectExpectation.inject_expectation_agent ? 'pointer' : 'default'}` }}
791788
selected={expectationResult.sourceId === selectedResult?.sourceId}
792789
>
793-
<TableCell>
790+
<TableCell className={classes.tableFontSize}>
794791
<div className={classes.flexContainer}>
795792
<div>
796793
{getAvatar(injectExpectation, expectationResult)}
@@ -800,16 +797,14 @@ const TargetResultsDetailFlow: FunctionComponent<Props> = ({
800797
alignSelf: 'center',
801798
}}
802799
>
803-
<Typography variant="body1">
804-
{expectationResult.sourceName ? t(expectationResult.sourceName) : t('Unknown')}
805-
</Typography>
800+
{expectationResult.sourceName ? t(expectationResult.sourceName) : t('Unknown')}
806801
</div>
807802
</div>
808803
</TableCell>
809804
<TableCell>
810805
<ItemResult label={expectationResult.result} status={expectationResult.result} />
811806
</TableCell>
812-
<TableCell>
807+
<TableCell className={classes.tableFontSize}>
813808
{
814809
(expectationResult.result === 'Prevented' || expectationResult.result === 'Detected' || expectationResult.result === 'SUCCESS') ? nsdt(expectationResult.date) : '-'
815810
}
@@ -876,20 +871,20 @@ const TargetResultsDetailFlow: FunctionComponent<Props> = ({
876871
</Table>
877872
</TableContainer>
878873
)}
874+
{
875+
selectedResult !== null && selectedResult.sourceId !== undefined && selectedExpectationForResults !== null
876+
&& (
877+
<TargetResultsSecurityPlatform
878+
injectExpectation={selectedExpectationForResults}
879+
sourceId={selectedResult.sourceId}
880+
expectationResult={selectedResult}
881+
open={true}
882+
handleClose={() => handleCloseSecurityPlatformResult()}
883+
/>
884+
)
885+
}
879886
</Paper>
880887

881-
{
882-
selectedResult !== null && selectedResult.sourceId !== undefined && selectedExpectationForResults !== null
883-
&& (
884-
<TargetResultsSecurityPlatform
885-
injectExpectation={selectedExpectationForResults}
886-
sourceId={selectedResult.sourceId}
887-
expectationResult={selectedResult}
888-
open={true}
889-
handleClose={() => handleCloseSecurityPlatformResult()}
890-
/>
891-
)
892-
}
893888
</div>
894889
);
895890
})}

openbas-front/src/admin/components/atomic_testings/atomic_testing/TargetResultsSecurityPlatform.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,15 @@ const TargetResultsSecurityPlatform: FunctionComponent<Props> = ({
5454
<TableHead>
5555
<TableRow sx={{ textTransform: 'uppercase' }}>
5656
<TableCell>{t('Name')}</TableCell>
57-
<TableCell>{t('Prevention date')}</TableCell>
57+
<TableCell>{`${injectExpectation.inject_expectation_type} ${t('Date')}`}</TableCell>
5858
</TableRow>
5959
</TableHead>
6060
<TableBody>
6161
{
62-
expectationTraces.map((expectationTrace: InjectExpectationTrace, index) => {
62+
expectationTraces.map((expectationTrace: InjectExpectationTrace) => {
6363
return (
6464
<TableRow
65-
key={index}
65+
key={expectationTrace.inject_expectation_trace_id}
6666
sx={{ height: '50px' }}
6767
>
6868
<TableCell sx={{ fontSize: '14px' }}>

openbas-front/src/utils/lang/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@
286286
"Data ingestion": "Data ingestion",
287287
"data will be reset, do you want to restart?": "data will be reset, do you want to restart?",
288288
"data-exfiltration": "Data Exfiltration",
289+
"Date": "Date",
289290
"Date should be at least today": "Date should be at least today",
290291
"Day of week": "Day of week",
291292
"Days": "Days",

0 commit comments

Comments
 (0)