Skip to content

Commit f60ffbf

Browse files
committed
Functionality to render stats and vulnerbilities on new page
1 parent 784c421 commit f60ffbf

File tree

21 files changed

+371
-171
lines changed

21 files changed

+371
-171
lines changed

src/main/java/com/codeboy/Main.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
11
package com.codeboy;
22

3-
import com.codeboy.controller.FileController;
43
import com.codeboy.controller.ViewController;
5-
import com.codeboy.controller.VulnerabilityController;
6-
import com.codeboy.controller.WeaknessController;
7-
import com.codeboy.utility.FileReaderUtility;
8-
import com.codeboy.utility.JavaScriptBridge;
94
import javafx.application.Application;
105
import javafx.scene.Scene;
116
import javafx.scene.image.Image;
127
import javafx.scene.layout.StackPane;
138
import javafx.scene.web.WebEngine;
149
import javafx.scene.web.WebView;
1510
import javafx.stage.Stage;
16-
import netscape.javascript.JSObject;
1711

1812
import java.awt.*;
1913
import java.io.File;
@@ -30,18 +24,20 @@ public static void main(String[] args) {
3024
public void start(Stage stage) {
3125
WebView webView = new WebView();
3226
WebEngine webEngine = webView.getEngine();
27+
webEngine.setJavaScriptEnabled(true);
3328

34-
ViewController viewController = new ViewController(webEngine);
29+
new ViewController(webEngine);
3530

3631
webEngine.setOnError(event -> LOGGER.warning("[Frontend] An error occured on the frontend: " + event.getMessage()));
32+
3733
File htmlFile = new File(getClass().getResource("/html/index.html").getFile());
3834
webEngine.load(htmlFile.toURI().toString());
39-
webEngine.setJavaScriptEnabled(true);
4035

4136
StackPane root = new StackPane(webView);
4237
Scene scene = new Scene(root, 1500, 900);
4338
stage.setScene(scene);
4439
stage.setTitle("CodeBoy Desktop");
40+
4541
if (Taskbar.isTaskbarSupported()) {
4642
Taskbar taskbar = Taskbar.getTaskbar();
4743

@@ -55,6 +51,4 @@ public void start(Stage stage) {
5551
}
5652
stage.show();
5753
}
58-
59-
6054
}

src/main/java/com/codeboy/controller/ViewController.java

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,40 +2,40 @@
22

33
import com.codeboy.utility.FileReaderUtility;
44
import com.codeboy.utility.JavaScriptBridge;
5-
import javafx.concurrent.Worker;
65
import javafx.scene.web.WebEngine;
76
import netscape.javascript.JSObject;
87

9-
import java.io.File;
10-
import java.util.function.Consumer;
11-
12-
// TODO:
13-
// https://stackoverflow.com/questions/32564195/load-a-new-page-in-javafx-webview
148
public class ViewController {
159

16-
private JSObject window;
10+
private final WebEngine webEngine;
1711

1812
public ViewController(WebEngine webEngine) {
13+
this.webEngine = webEngine;
1914
webEngine.getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> {
2015
if (newState == javafx.concurrent.Worker.State.SUCCEEDED) {
21-
JSObject window = (JSObject) webEngine.executeScript("window");
22-
window.setMember("viewController", new ViewController(webEngine));
23-
window.setMember("fileController", FileController.getInstance());
24-
window.setMember("weaknessController", WeaknessController.getInstance());
25-
window.setMember("vulnerabilityController", VulnerabilityController.getInstance());
26-
window.setMember("fileReader", FileReaderUtility.getInstance());
27-
28-
// TODO: remove later - just for debugging purposes
29-
window.setMember("javascriptBridge", new JavaScriptBridge());
30-
webEngine.executeScript("""
31-
console.log = function(msg) {
32-
javascriptBridge.log(msg);
33-
};
34-
console.error = function(msg) {
35-
javascriptBridge.error(msg);
36-
};
37-
""");
16+
injectJavaControllers();
3817
}
3918
});
4019
}
20+
21+
private void injectJavaControllers() {
22+
JSObject window = (JSObject) webEngine.executeScript("window");
23+
24+
window.setMember("viewController", this);
25+
window.setMember("fileController", FileController.getInstance());
26+
window.setMember("weaknessController", WeaknessController.getInstance());
27+
window.setMember("vulnerabilityController", VulnerabilityController.getInstance());
28+
window.setMember("fileReader", FileReaderUtility.getInstance());
29+
30+
// TODO: remove later - just for debugging purposes
31+
window.setMember("javascriptBridge", new JavaScriptBridge());
32+
webEngine.executeScript("""
33+
console.log = function(msg) {
34+
javascriptBridge.log(msg);
35+
};
36+
console.error = function(msg) {
37+
javascriptBridge.error(msg);
38+
};
39+
""");
40+
}
4141
}

src/main/java/com/codeboy/controller/VulnerabilityController.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package com.codeboy.controller;
22

33
import com.codeboy.dto.VulnerabilityDto;
4+
import com.codeboy.model.vulnerability.VulnerabilityModel;
45
import com.codeboy.service.VulnerabilityService;
6+
import com.codeboy.utility.JsonParser;
7+
8+
import java.util.List;
59

610
public class VulnerabilityController {
7-
private static VulnerabilityController instance;
11+
private static VulnerabilityController instance;
812
private static VulnerabilityService vulnerabilityService;
913

1014
private VulnerabilityController() {
@@ -20,4 +24,12 @@ public static VulnerabilityController getInstance() {
2024
public VulnerabilityDto getById(Integer id) {
2125
return vulnerabilityService.getById(id);
2226
}
27+
28+
public String getAll() {
29+
return JsonParser.asJsonString(vulnerabilityService.getAll());
30+
}
31+
32+
public String fetchStatistics() {
33+
return JsonParser.asJsonString(vulnerabilityService.getStatistics());
34+
}
2335
}

src/main/java/com/codeboy/controller/WeaknessController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.codeboy.controller;
22

3-
import com.codeboy.model.weakness.WeaknessDto;
3+
import com.codeboy.dto.WeaknessDto;
44
import com.codeboy.service.WeaknessService;
55

66
public class WeaknessController {

src/main/java/com/codeboy/dao/WeaknessDao.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public List<WeaknessModel> readAll() {
9494
public List<WeaknessModel> fetchAllByVulnerabilityId(Integer vulnerabilityId) {
9595
EntityManager entityManager = JPAManager.getEntityManager();
9696

97-
String query = "SELECT w FROM WeaknessModel WHERE w.vulnerability_id = :vulnerabilityId";
97+
String query = "SELECT w FROM WeaknessModel w WHERE w.vulnerability.id = :vulnerabilityId";
9898

9999
try {
100100
List<WeaknessModel> weaknessModels = entityManager.createQuery(query, WeaknessModel.class)

src/main/java/com/codeboy/dto/VulnerabilityDto.java

Lines changed: 68 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,81 @@
55

66
import java.util.List;
77

8-
public class VulnerabilityDto extends VulnerabilityModel {
9-
private List<WeaknessModel> weaknesses;
8+
public class VulnerabilityDto {
9+
private String id;
10+
public String category;
11+
public String name;
12+
public String description;
13+
public String cve;
14+
public String severity;
15+
public String locationFile;
16+
public String locationLineStart;
17+
public String locationLineEnd;
18+
private List<WeaknessDto> weaknesses;
1019

11-
public VulnerabilityDto(Integer id, String category, String name, String description, String cve, String severity, String locationFile, String locationLineStart, List<WeaknessModel> weaknesses) {
12-
super(category, name, description, cve, severity, locationFile, locationLineStart);
20+
public VulnerabilityDto(String id, String category, String name, String description, String cve, String severity, String locationFile, String locationLineStart, List<WeaknessDto> weaknesses) {
21+
this.id = id;
22+
this.category = category;
23+
this.name = name;
24+
this.description = description;
25+
this.cve = cve;
26+
this.severity = severity;
27+
this.locationFile = locationFile;
28+
this.locationLineStart = locationLineStart;
1329
this.weaknesses = weaknesses;
1430
}
1531

16-
public VulnerabilityDto(VulnerabilityModel vulnerability, List<WeaknessModel> weaknesses) {
17-
super(
32+
public static VulnerabilityDto from(VulnerabilityModel vulnerability, List<WeaknessDto> weaknesses) {
33+
return new VulnerabilityDto(
34+
String.valueOf(vulnerability.getId()),
1835
vulnerability.getCategory(),
1936
vulnerability.getName(),
2037
vulnerability.getDescription(),
2138
vulnerability.getCve(),
2239
vulnerability.getSeverity(),
2340
vulnerability.getLocationFile(),
24-
vulnerability.getLocationLineStart()
41+
vulnerability.getLocationLineStart(),
42+
weaknesses
2543
);
26-
this.weaknesses = weaknesses;
2744
}
2845

29-
public List<WeaknessModel> getWeaknesses() {
46+
public String getId() {
47+
return id;
48+
}
49+
50+
public String getCategory() {
51+
return category;
52+
}
53+
54+
public String getName() {
55+
return name;
56+
}
57+
58+
public String getDescription() {
59+
return description;
60+
}
61+
62+
public String getCve() {
63+
return cve;
64+
}
65+
66+
public String getSeverity() {
67+
return severity;
68+
}
69+
70+
public String getLocationFile() {
71+
return locationFile;
72+
}
73+
74+
public String getLocationLineStart() {
75+
return locationLineStart;
76+
}
77+
78+
public String getLocationLineEnd() {
79+
return locationLineEnd;
80+
}
81+
82+
public List<WeaknessDto> getWeaknesses() {
3083
return this.weaknesses;
3184
}
3285

@@ -41,4 +94,10 @@ public VulnerabilityModel toModel() {
4194
this.getLocationLineStart()
4295
);
4396
}
97+
98+
@Override
99+
public String toString() {
100+
return "id: " + this.id + ", severity: " + this.severity + ", category: " + this.category + ", name: " + this.name;
101+
}
44102
}
103+

src/main/java/com/codeboy/model/weakness/WeaknessDto.java renamed to src/main/java/com/codeboy/dto/WeaknessDto.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
package com.codeboy.model.weakness;
1+
package com.codeboy.dto;
22

33
import com.codeboy.model.vulnerability.VulnerabilityModel;
4+
import com.codeboy.model.weakness.WeaknessModel;
45
import com.codeboy.utility.JsonParser;
56

67
/**

src/main/java/com/codeboy/model/vulnerability/VulnerabilityModel.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.codeboy.model.vulnerability;
22

3+
import com.codeboy.dto.WeaknessDto;
34
import com.fasterxml.jackson.databind.JsonNode;
45
import com.codeboy.dto.VulnerabilityDto;
56
import com.codeboy.model.weakness.WeaknessModel;
@@ -119,8 +120,8 @@ public String asSQLValues() {
119120
);
120121
}
121122

122-
public VulnerabilityDto toDto(List<WeaknessModel> weaknesses) {
123-
return new VulnerabilityDto(this, weaknesses);
123+
public VulnerabilityDto toDto(List<WeaknessDto> weaknessDtos) {
124+
return VulnerabilityDto.from(this, weaknessDtos);
124125
}
125126

126127
private String escape(String s) {

src/main/java/com/codeboy/model/weakness/WeaknessModel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.codeboy.model.weakness;
22

3+
import com.codeboy.dto.WeaknessDto;
34
import com.fasterxml.jackson.databind.JsonNode;
45
import com.codeboy.model.vulnerability.VulnerabilityModel;
56
import com.codeboy.utility.JsonParser;
@@ -48,7 +49,7 @@ public WeaknessModel(VulnerabilityModel vulnerability, String type, String name,
4849
public String getValue() { return value; }
4950
public String getUrl() { return url; }
5051

51-
public WeaknessDto toWeaknessDto() {
52+
public WeaknessDto toDto() {
5253
return new WeaknessDto(type, name, value, url);
5354
}
5455

src/main/java/com/codeboy/service/VulnerabilityService.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.codeboy.service;
22

33
import com.codeboy.dto.VulnerabilityDto;
4+
import com.codeboy.dto.WeaknessDto;
45
import com.codeboy.model.vulnerability.VulnerabilityModel;
56
import com.codeboy.model.weakness.WeaknessModel;
67
import com.codeboy.repository.VulnerabilityRepository;
78
import com.codeboy.repository.WeaknessRepository;
89

10+
import java.util.ArrayList;
911
import java.util.HashMap;
1012
import java.util.List;
1113

@@ -25,11 +27,22 @@ public HashMap<String, Integer> getStatistics() {
2527

2628
public VulnerabilityDto getById(Integer id) {
2729
VulnerabilityModel vulnerability = this.vulnerabilityRepository.getByID(id);
28-
List<WeaknessModel> weaknesses = this.weaknessRepository.getAllByVulnerabilityId(id);
30+
List<WeaknessDto> weaknesses = this.weaknessRepository.getAllByVulnerabilityId(vulnerability.getId()).stream()
31+
.map(WeaknessModel::toDto)
32+
.toList();
2933
return vulnerability.toDto(weaknesses);
3034
}
3135

32-
public void getAll() {
33-
// TODO: implement method
36+
public List<VulnerabilityDto> getAll() {
37+
List<VulnerabilityModel> models = this.vulnerabilityRepository.getAll();
38+
if (models == null || models.isEmpty()) {
39+
throw new RuntimeException("No VulnerabilityModels found");
40+
}
41+
List<VulnerabilityDto> dtos = new ArrayList<>();
42+
for (VulnerabilityModel vulnerabilityModel : models) {
43+
List<WeaknessModel> weaknessModels = weaknessRepository.getAllByVulnerabilityId(vulnerabilityModel.getId());
44+
dtos.add(vulnerabilityModel.toDto(weaknessModels.stream().map(WeaknessModel::toDto).toList()));
45+
}
46+
return dtos;
3447
}
3548
}

0 commit comments

Comments
 (0)