Skip to content

Commit 75982b5

Browse files
committed
Finalize front pt 2
1 parent 05237d7 commit 75982b5

File tree

8 files changed

+98
-11
lines changed

8 files changed

+98
-11
lines changed

openbas-api/src/main/java/io/openbas/rest/asset/security_platforms/SecurityPlatformApi.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
import jakarta.transaction.Transactional;
1414
import jakarta.validation.Valid;
1515
import jakarta.validation.constraints.NotBlank;
16+
1617
import java.util.Optional;
18+
1719
import lombok.RequiredArgsConstructor;
1820
import org.springframework.beans.factory.annotation.Value;
1921
import org.springframework.data.domain.Page;
@@ -118,6 +120,15 @@ public SecurityPlatform securityPlatform(
118120
.orElseThrow(ElementNotFoundException::new);
119121
}
120122

123+
@GetMapping(SECURITY_PLATFORM_URI + "/externalReference")
124+
@PreAuthorize("isPlanner()")
125+
public SecurityPlatform securityPlatformFromExternalReference(
126+
@RequestParam @NotBlank final String externalReference) {
127+
return this.securityPlatformRepository
128+
.findByExternalReference(externalReference)
129+
.orElseThrow(ElementNotFoundException::new);
130+
}
131+
121132
@PostMapping(SECURITY_PLATFORM_URI + "/search")
122133
public Page<SecurityPlatform> securityPlatforms(
123134
@RequestBody @Valid SearchPaginationInput searchPaginationInput) {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,9 @@ public List<InjectExpectationTrace> getInjectExpectationTracesFromCollector(
5252
injectExpectationId, collector.getSecurityPlatform().getId());
5353
}
5454

55+
@GetMapping("/count")
56+
public long getAlertLinksNumber(@RequestParam String injectExpectationId, @RequestParam String sourceId) {
57+
return this.injectExpectationTraceService.getAlertLinksNumber(injectExpectationId, sourceId);
58+
}
5559

5660
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public InjectExpectationTrace createInjectExpectationTrace(
2525
@NotNull InjectExpectationTrace injectExpectationTrace) {
2626
Optional<InjectExpectationTrace> existingTrace =
2727
this.injectExpectationTraceRepository
28-
.findByAlertLinkAndAlertNameAndCollectorAndInjectExpectation(
28+
.findByAlertLinkAndAlertNameAndSecurityPlatformAndInjectExpectation(
2929
injectExpectationTrace.getAlertLink(),
3030
injectExpectationTrace.getAlertName(),
3131
injectExpectationTrace.getSecurityPlatform(),
@@ -40,4 +40,8 @@ public List<InjectExpectationTrace> getInjectExpectationTracesFromCollector(
4040
injectExpectationId, sourceId);
4141
}
4242

43+
public long getAlertLinksNumber(@NotNull String injectExpectationId, @NotNull String sourceId) {
44+
return this.injectExpectationTraceRepository.countAlerts(injectExpectationId, sourceId);
45+
}
46+
4347
}

openbas-front/src/actions/assets/securityPlatform-actions.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { type Dispatch } from 'redux';
22

3-
import { delReferential, getReferential, postReferential, putReferential, simplePostCall } from '../../utils/Action';
3+
import { delReferential, getReferential, postReferential, putReferential, simpleCall, simplePostCall } from '../../utils/Action';
44
import { type SearchPaginationInput, type SecurityPlatform, type SecurityPlatformInput } from '../../utils/api-types';
55
import { arrayOfSecurityPlatforms, securityPlatform } from './asset-schema';
66

@@ -32,3 +32,8 @@ export const searchSecurityPlatforms = (searchPaginationInput: SearchPaginationI
3232
const uri = `${SECURITY_PLATFORM_URI}/search`;
3333
return simplePostCall(uri, data);
3434
};
35+
36+
export const getSecurityPlatformFromExternalReference = (externalReference: string | undefined) => {
37+
const uri = `${SECURITY_PLATFORM_URI}/externalReference?externalReference=${externalReference}`;
38+
return simpleCall(uri);
39+
};

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

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

44
const ATOMIC_TESTING_URI = '/api/atomic-testings';
55

@@ -63,8 +63,13 @@ export const searchAtomicTestingTeams = (paginationInput: SearchPaginationInput,
6363
return simplePostCall(uri, paginationInput);
6464
};
6565

66-
// -- EXPECTATIONS --
66+
// -- EXPECTATION TRACES --
6767
export const fetchExpectationTraces = (injectExpectationId: string, sourceId: string) => {
6868
const uri = `/api/inject-expectations-traces?injectExpectationId=${injectExpectationId}&sourceId=${sourceId}`;
6969
return simpleCall(uri);
7070
};
71+
72+
export const getAlertLinksCount = (injectExpectationId: string, sourceId: string | undefined) => {
73+
const uri = `/api/inject-expectations-traces/count?injectExpectationId=${injectExpectationId}&sourceId=${sourceId}`;
74+
return simpleCall(uri);
75+
};
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { type FunctionComponent, useEffect, useState } from 'react';
2+
3+
import { getSecurityPlatformFromExternalReference } from '../../../../actions/assets/securityPlatform-actions';
4+
import { getAlertLinksCount } from '../../../../actions/atomic_testings/atomic-testing-actions';
5+
import { type InjectExpectationResult, type SecurityPlatform } from '../../../../utils/api-types';
6+
7+
interface Props {
8+
injectExpectationId: string;
9+
expectationResult: InjectExpectationResult;
10+
}
11+
12+
const TargetResultAlertNumber: FunctionComponent<Props> = ({
13+
injectExpectationId,
14+
expectationResult,
15+
}) => {
16+
const [sourceId, setSourceId] = useState<string | undefined>('');
17+
const [alertLinksNumber, setAlertLinksNumber] = useState<number | null>(0);
18+
if (expectationResult.sourceType === 'collector' && expectationResult.sourceId !== undefined) {
19+
useEffect(() => {
20+
getSecurityPlatformFromExternalReference(expectationResult.sourceId).then((result: { data: SecurityPlatform }) => setSourceId(result.data.asset_id ?? ''));
21+
}, [expectationResult.sourceId]);
22+
} else {
23+
setSourceId(expectationResult.sourceId);
24+
}
25+
26+
useEffect(() => {
27+
getAlertLinksCount(injectExpectationId, sourceId).then((result: { data: number }) => setAlertLinksNumber(result.data ?? 0));
28+
}, [injectExpectationId, sourceId]);
29+
30+
return (
31+
<div>
32+
{alertLinksNumber}
33+
</div>
34+
);
35+
};
36+
37+
export default TargetResultAlertNumber;

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

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import DetectionPreventionExpectationsValidationForm from '../../simulations/sim
4040
import ManualExpectationsValidationForm from '../../simulations/simulation/validation/expectations/ManualExpectationsValidationForm';
4141
import { InjectResultOverviewOutputContext, type InjectResultOverviewOutputContextType } from '../InjectResultOverviewOutputContext';
4242
import ExpirationChip from './ExpirationChip';
43+
import TargetResultAlertNumber from './TargetResultAlertNumber';
4344
import TargetResultsSecurityPlatform from './TargetResultsSecurityPlatform';
4445
import nodeTypes from './types/nodes';
4546
import { type NodeResultStep } from './types/nodes/NodeResultStep';
@@ -790,10 +791,26 @@ const TargetResultsDetailFlow: FunctionComponent<Props> = ({
790791
<ItemResult label={expectationResult.result} status={expectationResult.result} />
791792
</TableCell>
792793
<TableCell>
793-
{emptyFilled(nsdt(expectationResult.date))}
794+
{
795+
(expectationResult.result === 'Prevented' || expectationResult.result === 'Detected' || expectationResult.result === 'SUCCESS') ? nsdt(expectationResult.date) : '-'
796+
}
794797
</TableCell>
795798
<TableCell>
796-
{emptyFilled('3')}
799+
{
800+
expectationResult.sourceId && injectExpectation.inject_expectation_agent && (expectationResult.result === 'Prevented' || expectationResult.result === 'Detected') && (
801+
<TargetResultAlertNumber expectationResult={expectationResult} injectExpectationId={injectExpectation.inject_expectation_id} />
802+
)
803+
}
804+
{
805+
!injectExpectation.inject_expectation_agent && (
806+
'-'
807+
)
808+
}
809+
{
810+
injectExpectation.inject_expectation_agent && (expectationResult.result === 'Not Detected' || expectationResult.result === 'Not Prevented') && (
811+
'-'
812+
)
813+
}
797814
</TableCell>
798815
<TableCell>
799816
<IconButton

openbas-model/src/main/java/io/openbas/database/repository/InjectExpectationTraceRepository.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,19 @@ public interface InjectExpectationTraceRepository
2626

2727
@NotNull
2828
Optional<InjectExpectationTrace>
29-
findByAlertLinkAndAlertNameAndCollectorAndInjectExpectation(
30-
String alertLink,
31-
String alertName,
32-
Collector collector,
33-
InjectExpectation injectExpectation);
29+
findByAlertLinkAndAlertNameAndSecurityPlatformAndInjectExpectation(
30+
String alertLink,
31+
String alertName,
32+
SecurityPlatform securityPlatform,
33+
InjectExpectation injectExpectation);
3434

3535
@Query(
3636
"select t from InjectExpectationTrace t where t.injectExpectation.id = :expectationId and t.securityPlatform.id = :sourceId")
3737
List<InjectExpectationTrace> findByExpectationAndSecurityPlatform(
3838
@Param("expectationId") final String expectationId,
3939
@Param("sourceId") final String sourceId);
40+
41+
@Query("select count(distinct t) from InjectExpectationTrace t where t.injectExpectation.id = :expectationId and t.securityPlatform.id = :sourceId")
42+
long countAlerts(@Param("expectationId") final String expectationId,
43+
@Param("sourceId") final String sourceId);
4044
}

0 commit comments

Comments
 (0)