Skip to content

Commit 08e46c3

Browse files
🎨 Improve code
1 parent fc9eaa0 commit 08e46c3

File tree

35 files changed

+119
-114
lines changed

35 files changed

+119
-114
lines changed

openaev-api/src/main/java/io/openaev/importer/V1_DataImporter.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ private Tag createTag(JsonNode jsonNode) {
223223
}
224224

225225
// -- DOMAINS PATTERN --
226-
private Set<Domain> importDomain(JsonNode importNode, String prefix) {
226+
private Set<Domain> importDomains(JsonNode importNode, String prefix) {
227227
Set<Domain> domains = new HashSet<>();
228228
resolveJsonElements(importNode, prefix + "domains")
229229
.forEach(
@@ -239,7 +239,7 @@ private Set<Domain> importDomain(JsonNode importNode, String prefix) {
239239
domains.add(domainCreated);
240240
});
241241
if (domains.isEmpty()) {
242-
return Set.of(new Domain(null, "Unclassified", "#FFFFFF", Instant.now(), null));
242+
return Set.of(new Domain(null, "To classify", "#FFFFFF", Instant.now(), null));
243243
}
244244
return domains;
245245
}
@@ -1377,7 +1377,7 @@ private String importPayloadAsMain(
13771377
PayloadCreateInput payloadCreateInput = buildPayload(payloadNode);
13781378
payloadCreateInput.setOutputParsers(
13791379
buildOutputParsersFromPayloadJsonNode(payloadNode, baseIds));
1380-
payloadCreateInput.setDomains(importDomain(payloadNode, "payload_"));
1380+
payloadCreateInput.setDomains(importDomains(payloadNode, "payload_"));
13811381

13821382
List<String> attackPatternIds = importAttackPattern(payloadNode, "payload_", baseIds);
13831383

@@ -1418,7 +1418,7 @@ private Optional<InjectorContract> importPayload(
14181418
payloadCreateInput.setOutputParsers(
14191419
buildOutputParsersFromPayloadJsonNode(payloadNode, baseIds));
14201420

1421-
payloadCreateInput.setDomains(importDomain(payloadNode, "payload_"));
1421+
payloadCreateInput.setDomains(importDomains(payloadNode, "payload_"));
14221422

14231423
List<String> attackPatternIds = importAttackPattern(payloadNode, "payload_", baseIds);
14241424
payloadCreateInput.setAttackPatternsIds(attackPatternIds);

openaev-api/src/main/java/io/openaev/migration/V4_52__Implement_Domains_notion.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ CREATE TABLE domains (
2121
);
2222
""");
2323

24+
stmt.execute(
25+
"""
26+
CREATE INDEX idx_domains_domain_name
27+
ON domains(domain_name);
28+
""");
29+
2430
stmt.execute(
2531
"""
2632
CREATE TABLE payloads_domains (
@@ -60,7 +66,7 @@ REFERENCES domains(domain_id)
6066

6167
stmt.execute(
6268
"INSERT INTO domains (domain_id, domain_name, domain_color) VALUES "
63-
+ " (gen_random_uuid(), 'Endpoint', '#003366'),"
69+
+ " (gen_random_uuid(), 'Endpoint', '#389CFF'),"
6470
+ " (gen_random_uuid(), 'Network', '#009933'),"
6571
+ " (gen_random_uuid(), 'Web App', '#FF9933'),"
6672
+ " (gen_random_uuid(), 'E-mail Infiltration', '#FF6666'),"

openaev-api/src/main/java/io/openaev/rest/domain/DomainApi.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import io.openaev.database.model.Action;
66
import io.openaev.database.model.Domain;
77
import io.openaev.database.model.ResourceType;
8-
import io.openaev.rest.domain.form.DomainCreateInput;
8+
import io.openaev.rest.domain.form.DomainBaseInput;
99
import io.openaev.rest.helper.RestBehavior;
1010
import io.swagger.v3.oas.annotations.Operation;
1111
import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -48,7 +48,7 @@ public Domain getDomain(@PathVariable String domainId) {
4848
@Transactional(rollbackOn = Exception.class)
4949
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The upserted domain")})
5050
@Operation(description = "Upsert a domain", summary = "Upsert domain")
51-
public Domain upsertDomain(@Valid @RequestBody DomainCreateInput input) {
51+
public Domain upsertDomain(@Valid @RequestBody DomainBaseInput input) {
5252
return domainService.upsertDomain(input);
5353
}
5454
}

openaev-api/src/main/java/io/openaev/rest/domain/DomainService.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import io.openaev.database.model.Domain;
44
import io.openaev.database.repository.DomainRepository;
5-
import io.openaev.rest.domain.form.DomainCreateInput;
5+
import io.openaev.rest.domain.form.DomainBaseInput;
66
import io.openaev.rest.exception.ElementNotFoundException;
77
import java.time.Instant;
88
import java.util.List;
@@ -13,18 +13,20 @@
1313
import lombok.RequiredArgsConstructor;
1414
import lombok.extern.slf4j.Slf4j;
1515
import org.springframework.stereotype.Service;
16+
import static io.openaev.helper.StreamHelper.fromIterable;
17+
import static io.openaev.utils.StringUtils.generateRandomColor;
1618

1719
@Slf4j
1820
@Service
1921
@RequiredArgsConstructor
2022
public class DomainService {
2123

22-
private static final String DOMAIN_NOT_FOUND_MSG = "Domain not found with name";
24+
private static final String DOMAIN_ID_NOT_FOUND_MSG = "Domain not found with id";
2325

2426
private final DomainRepository domainRepository;
2527

2628
public List<Domain> searchDomains() {
27-
return (List<Domain>) domainRepository.findAll();
29+
return fromIterable(domainRepository.findAll());
2830
}
2931

3032
private Optional<Domain> findByName(final String name) {
@@ -34,10 +36,10 @@ private Optional<Domain> findByName(final String name) {
3436
public Domain findById(final String domainId) {
3537
return domainRepository
3638
.findById(domainId)
37-
.orElseThrow(() -> new ElementNotFoundException(DOMAIN_NOT_FOUND_MSG + domainId));
39+
.orElseThrow(() -> new ElementNotFoundException((String.format("%s: %s", DOMAIN_ID_NOT_FOUND_MSG, domainId))));
3840
}
3941

40-
public Domain upsertDomain(final DomainCreateInput input) {
42+
public Domain upsertDomain(final DomainBaseInput input) {
4143
return this.upsert(input.getName(), input.getColor());
4244
}
4345

@@ -51,15 +53,10 @@ public Domain upsert(final String name, final String color) {
5153
() ->
5254
domainRepository.save(
5355
new Domain(
54-
null, name, color != null ? color : randomColor(), Instant.now(), null)));
56+
null, name, color != null ? color : generateRandomColor() , Instant.now(), null)));
5557
}
5658

5759
public Set<Domain> upserts(final Set<Domain> domains) {
5860
return domains.stream().map(this::upsert).collect(Collectors.toSet());
5961
}
60-
61-
private String randomColor() {
62-
Random rand = new Random();
63-
return String.format("#%06x", rand.nextInt(0xffffff + 1));
64-
}
6562
}

openaev-api/src/main/java/io/openaev/rest/domain/form/DomainBaseInput.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class DomainBaseInput {
1616
@Schema(description = "Name of the domain")
1717
private String name;
1818

19+
@NotBlank(message = MANDATORY_MESSAGE)
1920
@JsonProperty("domain_color")
2021
@Schema(description = "Color of the domain")
2122
private String color;

openaev-api/src/main/java/io/openaev/rest/domain/form/DomainCreateInput.java

Lines changed: 0 additions & 3 deletions
This file was deleted.

openaev-api/src/main/java/io/openaev/rest/injector_contract/output/InjectorContractFullOutput.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import jakarta.validation.constraints.NotBlank;
88
import java.time.Instant;
99
import java.util.*;
10+
11+
import jakarta.validation.constraints.NotEmpty;
1012
import lombok.Data;
1113

1214
@Data
@@ -40,6 +42,7 @@ public class InjectorContractFullOutput extends InjectorContractBaseOutput {
4042
@JsonProperty("injector_contract_attack_patterns")
4143
private List<String> attackPatterns;
4244

45+
@NotEmpty
4346
@Schema(description = "Domain IDs")
4447
@JsonProperty("injector_contract_domains")
4548
private List<String> domains;

openaev-api/src/main/java/io/openaev/rest/payload/service/PayloadService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ private void setInjectorContractPropertyBasedOnPayload(
8282
injectorContract.setPlatforms(payload.getPlatforms());
8383
injectorContract.setDomains(
8484
domainService.upserts(
85-
Set.of(new Domain(null, "Unclassified", "#FFFFFF", Instant.now(), null))));
85+
Set.of(new Domain(null, "To classify", "#FFFFFF", Instant.now(), null))));
8686
injectorContract.setAttackPatterns(
8787
fromIterable(
8888
attackPatternRepository.findAllById(

openaev-api/src/main/java/io/openaev/rest/payload/service/PayloadUpsertService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ private Payload createPayloadFromUpsert(
7777
? domainService.upserts(input.getDomains())
7878
: Set.of(
7979
domainService.upsert(
80-
new Domain(null, "Unclassified", "#FFFFFF", Instant.now(), null))));
80+
new Domain(null, "To classify", "#FFFFFF", Instant.now(), null))));
8181
payload.setAttackPatterns(attackPatterns);
8282
payload.setTags(this.tagService.tagSet((input.getTagIds())));
8383

openaev-api/src/test/java/io/openaev/api/detection_remediation/DetectionRemediationApiTest.java

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public class DetectionRemediationApiTest extends IntegrationTest {
8484
@DisplayName("Generate AI rules detection remediation by payload , EE not available")
8585
public void getDetectionRemediationRuleByPayloadWithoutLicenceEE() {
8686
// -- PREPARE -
87-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
87+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
8888

8989
Command payload =
9090
(Command) payloadComposer.forPayload(PayloadFixture.createDefaultCommand(domains)).get();
@@ -115,7 +115,7 @@ public void getDetectionRemediationRuleByPayloadWithoutLicenceEE() {
115115
@DisplayName("Generate AI rules detection remediation by payload for unknow collector type")
116116
public void getDetectionRemediationRuleByPayloadForUnknowCollectorType() {
117117
// -- PREPARE -
118-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
118+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
119119

120120
Command payload =
121121
(Command) payloadComposer.forPayload(PayloadFixture.createDefaultCommand(domains)).get();
@@ -144,7 +144,7 @@ public void getDetectionRemediationRuleByPayloadForUnknowCollectorType() {
144144
public void getDetectionRemediationRuleByPayloadWithBadDetectionRemediationAIResponse()
145145
throws Exception {
146146
// -- PREPARE -
147-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
147+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
148148

149149
Command payload =
150150
(Command) payloadComposer.forPayload(PayloadFixture.createDefaultCommand(domains)).get();
@@ -179,7 +179,7 @@ public void getDetectionRemediationRuleByPayloadWithBadDetectionRemediationAIRes
179179
getDetectionRemediationRuleByPayloadWithRetryDetectionRemediationAIResponseUnavailable()
180180
throws Exception {
181181
// -- PREPARE -
182-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
182+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
183183

184184
Command payload =
185185
(Command) payloadComposer.forPayload(PayloadFixture.createDefaultCommand(domains)).get();
@@ -224,7 +224,7 @@ public void getDetectionRemediationRuleByPayloadWithBadDetectionRemediationAIRes
224224
getDetectionRemediationRuleByPayloadWithRetryDetectionRemediationAIResponseBadGateway()
225225
throws Exception {
226226
// -- PREPARE -
227-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
227+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
228228

229229
Command payload =
230230
(Command) payloadComposer.forPayload(PayloadFixture.createDefaultCommand(domains)).get();
@@ -270,7 +270,7 @@ public void getDetectionRemediationRuleByPayloadWithBadDetectionRemediationAIRes
270270
public void getDetectionRemediationRuleByPayloadWithRetryDetectionRemediationAIResponse()
271271
throws Exception {
272272
// -- PREPARE -
273-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
273+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
274274

275275
Command payload =
276276
(Command) payloadComposer.forPayload(PayloadFixture.createDefaultCommand(domains)).get();
@@ -317,7 +317,7 @@ public void getDetectionRemediationRuleByPayloadWithRetryDetectionRemediationAIR
317317
public void getDetectionRemediationRuleBasedPayloadCommandCrowdStrikeWithRules() {
318318

319319
// -- PREPARE -
320-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
320+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
321321

322322
Command payload =
323323
(Command) payloadComposer.forPayload(PayloadFixture.createDefaultCommand(domains)).get();
@@ -356,7 +356,7 @@ public void getDetectionRemediationRuleBasedPayloadCommandCrowdStrikeWithRules()
356356
getDetectionRemediationRuleBasedOnPayloadCommandCrowdStrikeWithoutAttackPatternAndArguments()
357357
throws Exception {
358358
// -- PREPARE -
359-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
359+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
360360

361361
Command payload =
362362
(Command) payloadComposer.forPayload(PayloadFixture.createDefaultCommand(domains)).get();
@@ -425,7 +425,7 @@ public void getDetectionRemediationRuleBasedOnPayloadCommandCrowdStrike() throws
425425

426426
List<PayloadArgument> payloadArguments = getPayloadArguments();
427427

428-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
428+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
429429

430430
Command payload =
431431
(Command)
@@ -497,7 +497,7 @@ public void getDetectionRemediationRuleBasedOnPayloadCommandSplunk() throws Exce
497497

498498
List<PayloadArgument> payloadArguments = getPayloadArguments();
499499

500-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
500+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
501501

502502
Command payload =
503503
(Command)
@@ -552,7 +552,7 @@ public void getDetectionRemediationRuleBasedOnPayloadDnsResolutionCrowdStrike()
552552

553553
List<PayloadArgument> payloadArguments = getPayloadArguments();
554554

555-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
555+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
556556
DnsResolution payload =
557557
(DnsResolution)
558558
payloadComposer
@@ -623,7 +623,7 @@ public void getDetectionRemediationRuleBasedOnPayloadDnsResolutionSplunk() throw
623623

624624
List<PayloadArgument> payloadArguments = getPayloadArguments();
625625

626-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
626+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
627627
DnsResolution payload =
628628
(DnsResolution)
629629
payloadComposer
@@ -676,7 +676,7 @@ public void getDetectionRemediationRuleBasedOnPayloadFileDropCrowdStrike() throw
676676

677677
List<PayloadArgument> payloadArguments = getPayloadArguments();
678678

679-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
679+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
680680

681681
FileDrop payload =
682682
(FileDrop)
@@ -716,7 +716,7 @@ public void getDetectionRemediationRuleBasedOnPayloadFileDropSplunk() throws Exc
716716

717717
List<PayloadArgument> payloadArguments = getPayloadArguments();
718718

719-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
719+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
720720

721721
FileDrop payload =
722722
(FileDrop)
@@ -756,7 +756,7 @@ public void getDetectionRemediationRuleBasedOnPayloadExecutableCrowdStrike() thr
756756

757757
List<PayloadArgument> payloadArguments = getPayloadArguments();
758758

759-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
759+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
760760
Executable payload =
761761
(Executable)
762762
payloadComposer
@@ -795,7 +795,7 @@ public void getDetectionRemediationRuleBasedOnPayloadExecutableSplunk() throws E
795795

796796
List<PayloadArgument> payloadArguments = getPayloadArguments();
797797

798-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
798+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
799799
Executable payload =
800800
(Executable)
801801
payloadComposer
@@ -1350,7 +1350,7 @@ private Inject getInjectCommandWithPlatformsAndArchitectureAndAttackPatternAndAr
13501350

13511351
List<PayloadArgument> payloadArguments = getPayloadArguments();
13521352

1353-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
1353+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
13541354

13551355
Command payloadCommand =
13561356
(Command)
@@ -1386,7 +1386,7 @@ private Inject getInjectCommandWithPlatformsAndArchitectureAndAttackPatternAndAr
13861386

13871387
List<PayloadArgument> payloadArguments = getPayloadArguments();
13881388

1389-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
1389+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
13901390

13911391
DetectionRemediation detectionRemediation = new DetectionRemediation();
13921392
detectionRemediation.setValues("I have a rule");
@@ -1420,7 +1420,7 @@ private Inject getInjectCommandWithPlatformsAndArchitectureAndAttackPatternAndAr
14201420

14211421
List<PayloadArgument> payloadArguments = getPayloadArguments();
14221422

1423-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
1423+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
14241424

14251425
DetectionRemediation detectionRemediation = new DetectionRemediation();
14261426
detectionRemediation.setValues("");
@@ -1453,7 +1453,7 @@ private Inject getInjectDnsResolutionWithPlatformsAndArchitectureAndAttackPatter
14531453

14541454
List<PayloadArgument> payloadArguments = getPayloadArguments();
14551455

1456-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
1456+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
14571457
DnsResolution payload =
14581458
(DnsResolution)
14591459
payloadComposer
@@ -1485,7 +1485,7 @@ private Inject getInjectFileDropWithPlatformsAndArchitectureAndAttackPatternAndA
14851485
throws JsonProcessingException {
14861486
List<AttackPattern> attackPatterns = saveAndGetAttackPatterns();
14871487
List<PayloadArgument> payloadArguments = getPayloadArguments();
1488-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
1488+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
14891489

14901490
FileDrop payload =
14911491
(FileDrop)
@@ -1521,7 +1521,7 @@ private Inject getInjectExecutableWithPlatformsAndArchitectureAndAttackPatternAn
15211521
throws JsonProcessingException {
15221522
List<AttackPattern> attackPatterns = saveAndGetAttackPatterns();
15231523

1524-
Set<Domain> domains = domainComposer.forDefaultUnclassifiedDomain().persist().getSet();
1524+
Set<Domain> domains = domainComposer.forDefaultToClassifyDomain().persist().getSet();
15251525
List<PayloadArgument> payloadArguments = getPayloadArguments();
15261526
Executable payload =
15271527
(Executable)

0 commit comments

Comments
 (0)