Skip to content

Commit 5cfaca4

Browse files
authored
Merge pull request #39 from IDEAS-AI-Vulns/feature/KAN-30-uzupełnienie-constraint-z-wykorzystaniem-LLM-Gemini
Feature/kan 30 uzupełnienie constraint z wykorzystaniem llm gemini
2 parents 0d75109 + bdfdf5c commit 5cfaca4

30 files changed

+6623
-44
lines changed

backend/pom.xml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.springframework.boot</groupId>
77
<artifactId>spring-boot-starter-parent</artifactId>
8-
<version>3.3.2-SNAPSHOT</version>
8+
<version>3.3.2</version>
99
<relativePath/> <!-- lookup parent from repository -->
1010
</parent>
1111
<groupId>io.mixeway</groupId>
@@ -60,6 +60,8 @@
6060
<groupId>org.projectlombok</groupId>
6161
<artifactId>lombok</artifactId>
6262
<optional>true</optional>
63+
<version>1.18.38</version>
64+
<scope>provided</scope>
6365
</dependency>
6466
<!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-api -->
6567
<dependency>
@@ -162,6 +164,11 @@
162164
<artifactId>zap-clientapi</artifactId>
163165
<version>1.16.0</version>
164166
</dependency>
167+
<dependency>
168+
<groupId>com.google.genai</groupId>
169+
<artifactId>google-genai</artifactId>
170+
<version>1.0.0</version>
171+
</dependency>
165172
</dependencies>
166173

167174
<build>
@@ -178,6 +185,19 @@
178185
</excludes>
179186
</configuration>
180187
</plugin>
188+
<plugin>
189+
<groupId>org.apache.maven.plugins</groupId>
190+
<artifactId>maven-compiler-plugin</artifactId>
191+
<configuration>
192+
<annotationProcessorPaths>
193+
<path>
194+
<groupId>org.projectlombok</groupId>
195+
<artifactId>lombok</artifactId>
196+
<version>1.18.38</version>
197+
</path>
198+
</annotationProcessorPaths>
199+
</configuration>
200+
</plugin>
181201
</plugins>
182202
</build>
183203
<repositories>

backend/src/main/java/io/mixeway/mixewayflowapi/MixewayFlowApiApplication.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
import lombok.extern.log4j.Log4j2;
44
import org.springframework.boot.SpringApplication;
55
import org.springframework.boot.autoconfigure.SpringBootApplication;
6+
import org.springframework.scheduling.annotation.EnableAsync;
67
import org.springframework.scheduling.annotation.EnableScheduling;
78

89
@SpringBootApplication
910
@EnableScheduling
11+
@EnableAsync
1012
@Log4j2
1113
public class MixewayFlowApiApplication {
1214

backend/src/main/java/io/mixeway/mixewayflowapi/api/admin/controller/AdminController.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package io.mixeway.mixewayflowapi.api.admin.controller;
22

3-
import io.mixeway.mixewayflowapi.api.admin.dto.AdditionalScannerConfigDto;
4-
import io.mixeway.mixewayflowapi.api.admin.dto.ConfigScaRequestDto;
5-
import io.mixeway.mixewayflowapi.api.admin.dto.ConfigSmtpRequestDto;
6-
import io.mixeway.mixewayflowapi.api.admin.dto.ConfigWizRequestDto;
3+
import io.mixeway.mixewayflowapi.api.admin.dto.*;
74
import io.mixeway.mixewayflowapi.api.admin.service.AdminApiService;
85
import io.mixeway.mixewayflowapi.db.entity.Settings;
96
import io.mixeway.mixewayflowapi.utils.StatusDTO;
@@ -73,6 +70,17 @@ public ResponseEntity<StatusDTO> changeWizConfig(@Valid @RequestBody ConfigWizRe
7370
return new ResponseEntity<>(new StatusDTO("Not ok"), HttpStatus.BAD_REQUEST);
7471
}
7572
}
73+
@PreAuthorize("hasAuthority('ADMIN')")
74+
@PostMapping(value = "/api/v1/admin/settings/other")
75+
public ResponseEntity<StatusDTO> changeOtherConfig(@Valid @RequestBody OtherConfigRequestDto otherConfigRequestDto) {
76+
try {
77+
adminApiService.otherConfig(otherConfigRequestDto);
78+
return new ResponseEntity<>(new StatusDTO("ok"), HttpStatus.OK);
79+
} catch (Exception e) {
80+
log.error("[AdminSettings] Error changing config {}", e.getLocalizedMessage());
81+
return new ResponseEntity<>(new StatusDTO("Not ok"), HttpStatus.BAD_REQUEST);
82+
}
83+
}
7684

7785
@PreAuthorize("hasAuthority('TEAM_MANAGER')")
7886
@GetMapping(value = "/api/v1/admin/settings/additionalscannerconfig")
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.mixeway.mixewayflowapi.api.admin.dto;
2+
3+
import jakarta.validation.constraints.NotNull;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
import lombok.Setter;
7+
8+
@Getter
9+
@Setter
10+
@NoArgsConstructor
11+
public class OtherConfigRequestDto {
12+
@NotNull
13+
private String geminiApiKey;
14+
}

backend/src/main/java/io/mixeway/mixewayflowapi/api/admin/service/AdminApiService.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package io.mixeway.mixewayflowapi.api.admin.service;
22

3-
import io.mixeway.mixewayflowapi.api.admin.dto.AdditionalScannerConfigDto;
4-
import io.mixeway.mixewayflowapi.api.admin.dto.ConfigScaRequestDto;
5-
import io.mixeway.mixewayflowapi.api.admin.dto.ConfigSmtpRequestDto;
6-
import io.mixeway.mixewayflowapi.api.admin.dto.ConfigWizRequestDto;
3+
import io.mixeway.mixewayflowapi.api.admin.dto.*;
74
import io.mixeway.mixewayflowapi.db.entity.Settings;
85
import io.mixeway.mixewayflowapi.domain.settings.FindSettingsService;
96
import io.mixeway.mixewayflowapi.domain.settings.UpdateSettingsService;
107
import io.mixeway.mixewayflowapi.exceptions.SettingsException;
8+
import jakarta.validation.Valid;
119
import lombok.RequiredArgsConstructor;
1210
import org.springframework.stereotype.Service;
1311

@@ -42,4 +40,7 @@ public boolean isWizEnabled() {
4240
return settings.isEnableWiz();
4341
}
4442

43+
public void otherConfig(OtherConfigRequestDto otherConfigRequestDto) throws SettingsException {
44+
updateSettingsService.changeSettingsOther(otherConfigRequestDto);
45+
}
4546
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package io.mixeway.mixewayflowapi.api.constraint.controller;
2+
3+
import io.mixeway.mixewayflowapi.api.constraint.dto.ConstraintDto;
4+
import io.mixeway.mixewayflowapi.api.constraint.service.ConstraintService;
5+
import lombok.RequiredArgsConstructor;
6+
import lombok.extern.log4j.Log4j2;
7+
import org.springframework.http.HttpStatus;
8+
import org.springframework.http.ResponseEntity;
9+
import org.springframework.security.access.prepost.PreAuthorize;
10+
import org.springframework.validation.annotation.Validated;
11+
import org.springframework.web.bind.annotation.*;
12+
13+
14+
import java.util.List;
15+
16+
@RestController
17+
@Validated
18+
@RequiredArgsConstructor
19+
@Log4j2
20+
public class ConstraintController {
21+
22+
private final ConstraintService constraintService;
23+
24+
@PreAuthorize("hasAuthority('ADMIN')")
25+
@GetMapping(value = "/api/v1/constraints")
26+
public ResponseEntity<List<ConstraintDto>> getConstraints() {
27+
try {
28+
return new ResponseEntity<List<ConstraintDto>>(constraintService.getAllConstraints(), HttpStatus.OK);
29+
} catch (Exception e) {
30+
log.error("Failed to retrieve constraints", e);
31+
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
32+
}
33+
}
34+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.mixeway.mixewayflowapi.api.constraint.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
6+
@Data
7+
@AllArgsConstructor
8+
public class ConstraintDto {
9+
Long id;
10+
String text;
11+
Long vulnerabilityId;
12+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package io.mixeway.mixewayflowapi.api.constraint.service;
2+
3+
import io.mixeway.mixewayflowapi.api.constraint.dto.ConstraintDto;
4+
import io.mixeway.mixewayflowapi.db.entity.Constraint;
5+
import io.mixeway.mixewayflowapi.db.entity.Vulnerability;
6+
import io.mixeway.mixewayflowapi.db.repository.ConstraintRepository;
7+
import io.mixeway.mixewayflowapi.db.repository.VulnerabilityRepository;
8+
import lombok.RequiredArgsConstructor;
9+
import org.springframework.stereotype.Service;
10+
11+
import java.util.List;
12+
13+
@Service
14+
@RequiredArgsConstructor
15+
public class ConstraintService {
16+
17+
private final ConstraintRepository constraintRepository;
18+
private final VulnerabilityRepository vulnerabilityRepository;
19+
20+
21+
public List<ConstraintDto> getAllConstraints() {
22+
return constraintRepository.findAll()
23+
.stream()
24+
.map(c -> new ConstraintDto(c.getId(), c.getText(), c.getVulnerability().getId()))
25+
.toList();
26+
}
27+
28+
public ConstraintDto createConstraint(Long vulnerabilityId, String text) {
29+
Vulnerability vulnerability = vulnerabilityRepository.findById(vulnerabilityId)
30+
.orElseThrow(() -> new IllegalArgumentException("Vulnerability not found with id: " + vulnerabilityId));
31+
Constraint constraint = new Constraint(text);
32+
constraint.setVulnerability(vulnerability);
33+
34+
Constraint saved = constraintRepository.save(constraint);
35+
return new ConstraintDto(saved.getId(), saved.getText(), saved.getVulnerability().getId());
36+
}
37+
38+
public void deleteConstraint(Long id) {
39+
constraintRepository.deleteById(id);
40+
}
41+
42+
}

backend/src/main/java/io/mixeway/mixewayflowapi/api/vulnerabilities/controller/VulnerabilityController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package io.mixeway.mixewayflowapi.api.vulnerabilities.controller;
22

3-
import io.mixeway.mixewayflowapi.api.components.dto.GetComponentsResponseDto;
43
import io.mixeway.mixewayflowapi.api.vulnerabilities.dto.EditVulnerabilityRequestDto;
54
import io.mixeway.mixewayflowapi.api.vulnerabilities.dto.GetVulnerabilitiesResponseDto;
65
import io.mixeway.mixewayflowapi.api.vulnerabilities.dto.VulnerabilityDto;
76
import io.mixeway.mixewayflowapi.api.vulnerabilities.service.VulnerabilityService;
7+
import io.mixeway.mixewayflowapi.db.entity.Vulnerability;
8+
import io.mixeway.mixewayflowapi.domain.vulnerability.UpdateVulnerabilityService;
89
import io.mixeway.mixewayflowapi.utils.StatusDTO;
910
import lombok.RequiredArgsConstructor;
1011
import lombok.extern.log4j.Log4j2;
@@ -17,7 +18,6 @@
1718
import java.security.Principal;
1819
import java.util.List;
1920

20-
2121
/**
2222
* REST controller responsible for handling API requests related to vulnerabilities.
2323
*/
@@ -27,6 +27,7 @@
2727
@Log4j2
2828
public class VulnerabilityController {
2929
private final VulnerabilityService vulnerabilityService;
30+
private final UpdateVulnerabilityService updateVulnerabilityService;
3031

3132
/**
3233
* Retrieves a list of vulnerabilities along with the repositories affected by each vulnerability.
@@ -83,5 +84,4 @@ public ResponseEntity<StatusDTO> editVuln(@RequestBody EditVulnerabilityRequestD
8384
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
8485
}
8586
}
86-
8787
}

backend/src/main/java/io/mixeway/mixewayflowapi/api/vulnerabilities/service/VulnerabilityService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.mixeway.mixewayflowapi.domain.vulnerability.FindVulnerabilityService;
1212
import io.mixeway.mixewayflowapi.domain.vulnerability.UpdateVulnerabilityService;
1313
import lombok.RequiredArgsConstructor;
14+
import lombok.extern.log4j.Log4j2;
1415
import org.springframework.stereotype.Service;
1516

1617
import java.security.Principal;
@@ -19,13 +20,13 @@
1920

2021
@Service
2122
@RequiredArgsConstructor
23+
@Log4j2
2224
public class VulnerabilityService {
2325
private final FindVulnerabilityService findVulnerabilityService;
2426
private final FindFindingService findFindingService;
2527
private final FindCodeRepoService findCodeRepoService;
2628
private final UpdateVulnerabilityService updateVulnerabilityService;
2729

28-
2930
/**
3031
* Retrieves all vulnerabilities along with the repositories where they were detected.
3132
* The repositories included in the response are filtered based on the user's access rights.

0 commit comments

Comments
 (0)