Skip to content

Commit 2dad6ed

Browse files
authored
Merge pull request #72 from init-cloud/dev
feat: improve stability, fix bugs, add asynchronous scans.
2 parents 45295f5 + b956ae7 commit 2dad6ed

104 files changed

Lines changed: 1984 additions & 1200 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/main/java/scanner/controller/CheckListController.java renamed to src/main/java/scanner/checklist/controller/CheckListController.java

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
1-
package scanner.controller;
1+
package scanner.checklist.controller;
22

33
import io.swagger.annotations.ApiImplicitParam;
44
import io.swagger.annotations.ApiImplicitParams;
55
import io.swagger.annotations.ApiOperation;
66
import lombok.RequiredArgsConstructor;
7-
7+
import scanner.checklist.dto.CheckListDetailDto;
8+
import scanner.checklist.dto.CheckListModifyDto;
9+
import scanner.checklist.dto.CheckListSimpleDto;
10+
import scanner.checklist.service.CheckListService;
11+
import scanner.common.dto.CommonResponse;
12+
import scanner.common.enums.Language;
13+
14+
import org.springframework.lang.Nullable;
815
import org.springframework.web.bind.annotation.*;
916

10-
import scanner.dto.rule.CheckListDetailDto;
11-
import scanner.dto.rule.CheckListModifyDto;
12-
import scanner.dto.rule.CheckListSimpleDto;
13-
import scanner.dto.CommonResponse;
14-
import scanner.service.rule.CheckListService;
15-
1617
@ApiOperation("Checklist API. Checklist is same as Rule.")
1718
@RestController
1819
@RequestMapping("/api/v1/checklist")
@@ -23,18 +24,17 @@ public class CheckListController {
2324

2425
@ApiOperation(value = "Retrieve Checklist", notes = "Retrieve all checklists. You can use Search", response = CommonResponse.class)
2526
@ApiImplicitParams({
26-
@ApiImplicitParam(name = "Authorization", paramType = "header", value = "Access Token", required = true, dataTypeClass = String.class),
27-
@ApiImplicitParam(name = "rule", paramType = "query", value = "Checklist(rule) ID. It's Option.", required = false, dataTypeClass = String.class, example = "CKV_NCP_1")})
27+
@ApiImplicitParam(name = "Authorization", paramType = "header", value = "Access Token", required = true, dataTypeClass = String.class)})
2828
@GetMapping
29-
public CommonResponse<CheckListSimpleDto.Response> checkLists(@RequestParam("rule") String ruleId) {
30-
CheckListSimpleDto.Response dto = checkListService.getCheckLists(ruleId);
29+
public CommonResponse<CheckListSimpleDto.Response> checkLists() {
30+
CheckListSimpleDto.Response dto = checkListService.getCheckLists(null);
3131

3232
return new CommonResponse<>(dto);
3333
}
3434

3535
@ApiOperation(value = "Create Custom Checklist", notes = "Create custom new checklist from origin.", response = CommonResponse.class)
3636
@ApiImplicitParams({
37-
@ApiImplicitParam(name = "Authorization", paramType = "header", value = "Access Token", required = true, dataTypeClass = String.class),})
37+
@ApiImplicitParam(name = "Authorization", paramType = "header", value = "Access Token", required = true, dataTypeClass = String.class)})
3838
@PostMapping
3939
public CommonResponse<CheckListDetailDto.Detail> addCheckList(CheckListDetailDto.Detail data) {
4040
CheckListDetailDto.Detail dto = checkListService.addCheckListDetails(data);
@@ -45,10 +45,12 @@ public CommonResponse<CheckListDetailDto.Detail> addCheckList(CheckListDetailDto
4545
@ApiOperation(value = "Retrieve Checklist Details", notes = "Retrieve checklists.", response = CommonResponse.class)
4646
@ApiImplicitParams({
4747
@ApiImplicitParam(name = "Authorization", paramType = "header", value = "Access Token", required = true, dataTypeClass = String.class),
48-
@ApiImplicitParam(name = "ruleId", paramType = "path", value = "Checklist(rule) ID", required = true, dataTypeClass = String.class, example = "CKV_NCP_1")})
48+
@ApiImplicitParam(name = "ruleId", paramType = "path", value = "Checklist(rule) ID", required = true, dataTypeClass = String.class, example = "CKV_NCP_1"),
49+
@ApiImplicitParam(name = "lang", paramType = "query", value = "eng, kor", required = false, dataTypeClass = String.class)})
4950
@GetMapping("/{ruleId}")
50-
public CommonResponse<CheckListDetailDto.Detail> checkListDetails(@PathVariable String ruleId) {
51-
CheckListDetailDto.Detail dto = checkListService.getCheckListDetails(ruleId);
51+
public CommonResponse<CheckListDetailDto.Detail> checkListDetails(@PathVariable String ruleId,
52+
@Nullable @RequestParam String lang) {
53+
CheckListDetailDto.Detail dto = checkListService.getCheckListDetails(ruleId, Language.of(lang));
5254

5355
return new CommonResponse<>(dto);
5456
}
@@ -57,7 +59,7 @@ public CommonResponse<CheckListDetailDto.Detail> checkListDetails(@PathVariable
5759
@ApiImplicitParams({
5860
@ApiImplicitParam(name = "Authorization", paramType = "header", value = "Access Token", required = true, dataTypeClass = String.class),
5961
@ApiImplicitParam(name = "ruleId", paramType = "path", value = "ruleId.", required = true, dataTypeClass = String.class),
60-
@ApiImplicitParam(paramType = "body", value = "Modify ruleOnOff n to y, y to n", required = true, dataTypeClass = CheckListModifyDto.Modifying.class)})
62+
@ApiImplicitParam(name = "CheckListSimpleDto.Simple", paramType = "body", value = "Modify ruleOnOff n to y, y to n", required = true, dataTypeClass = CheckListModifyDto.Modifying.class)})
6163
@PatchMapping("/{ruleId}")
6264
public CommonResponse<CheckListSimpleDto.Simple> modifyCheckListDetails(@PathVariable String ruleId,
6365
@RequestBody CheckListModifyDto.Modifying data) {
@@ -70,7 +72,7 @@ public CommonResponse<CheckListSimpleDto.Simple> modifyCheckListDetails(@PathVar
7072
@ApiImplicitParams({
7173
@ApiImplicitParam(name = "Authorization", paramType = "header", value = "Access Token", required = true, dataTypeClass = String.class),
7274
@ApiImplicitParam(name = "ruleId", paramType = "path", value = "ruleId.", required = true, dataTypeClass = String.class),
73-
@ApiImplicitParam(paramType = "body", value = "Modify ruleOnOff n to y, y to n", required = true, dataTypeClass = CheckListModifyDto.State.class)})
75+
@ApiImplicitParam(name = "CheckListSimpleDto.Simple", paramType = "body", value = "Modify ruleOnOff n to y, y to n", required = true, dataTypeClass = CheckListModifyDto.State.class)})
7476
@PatchMapping("/state/{ruleId}")
7577
public CommonResponse<CheckListSimpleDto.Simple> modifyCheckListOnOff(@PathVariable String ruleId,
7678
@RequestBody CheckListSimpleDto.Simple data) {
@@ -82,11 +84,12 @@ public CommonResponse<CheckListSimpleDto.Simple> modifyCheckListOnOff(@PathVaria
8284
@ApiOperation(value = "Reset Checklist", notes = "Reset custom checklist to origin.", response = CommonResponse.class)
8385
@ApiImplicitParams({
8486
@ApiImplicitParam(name = "Authorization", paramType = "header", value = "Access Token", required = true, dataTypeClass = String.class),
85-
@ApiImplicitParam(paramType = "body", value = "Body need ruleId.", required = true, dataTypeClass = CheckListSimpleDto.Simple.class)})
87+
@ApiImplicitParam(name = "CheckListSimpleDto.Simple", paramType = "body", value = "Body need ruleId.", required = true, dataTypeClass = CheckListSimpleDto.Simple.class)})
8688
@PostMapping("/state")
8789
public CommonResponse<CheckListSimpleDto.Simple> resetCheckList(@RequestBody CheckListSimpleDto.Simple data) {
8890
CheckListSimpleDto.Simple dto = checkListService.resetCheckList(data);
8991

9092
return new CommonResponse<>(dto);
9193
}
9294
}
95+

src/main/java/scanner/dto/rule/CheckListDetailDto.java renamed to src/main/java/scanner/checklist/dto/CheckListDetailDto.java

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
package scanner.dto.rule;
1+
package scanner.checklist.dto;
22

33
import java.util.List;
44

55
import lombok.*;
66

7-
import scanner.model.rule.CustomRule;
8-
import scanner.model.enums.SecurityType;
7+
import scanner.checklist.entity.CustomRule;
8+
import scanner.checklist.entity.CustomRuleDetails;
9+
import scanner.checklist.enums.SecurityType;
910

1011
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1112
public class CheckListDetailDto {
@@ -30,9 +31,7 @@ public static class Detail {
3031
private Character isModified;
3132

3233
@Builder
33-
public Detail(
34-
CustomRule rule
35-
) {
34+
public Detail(CustomRule rule) {
3635
this.ruleId = rule.getRuleId();
3736
this.tags = rule.getTagDto();
3837
this.type = null;
@@ -57,6 +56,24 @@ public static class Solution {
5756
private String code;
5857
}
5958

59+
public static Detail toDto(CustomRule rule, CustomRuleDetails details) {
60+
return Detail.builder()
61+
.ruleId(rule.getRuleId())
62+
.tags(rule.getTagDto())
63+
.level(rule.getLevel())
64+
.description(details.getDescription())
65+
.explanation(details.getExplanation())
66+
.possibleImpact(details.getPossibleImpact())
67+
.insecureExample(rule.getInsecureExample())
68+
.secureExample(rule.getSecureExample())
69+
.solution(new Solution(details.getSol(), rule.getCode()))
70+
.state(rule.getRuleOnOff())
71+
.isModifiable(rule.getIsModifiable())
72+
.isModified(rule.getIsModified())
73+
.customDetail(rule.getCustomDetail())
74+
.build();
75+
}
76+
6077
public static Detail toDto(CustomRule rule) {
6178
return Detail.builder()
6279
.ruleId(rule.getRuleId())
@@ -84,3 +101,4 @@ public static CustomRule toEntity(final Detail dto) {
84101
.build();
85102
}
86103
}
104+
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package scanner.checklist.dto;
2+
3+
import java.util.List;
4+
5+
import lombok.AccessLevel;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
9+
10+
import com.fasterxml.jackson.core.JsonProcessingException;
11+
import com.fasterxml.jackson.databind.ObjectMapper;
12+
13+
import scanner.common.enums.ResponseCode;
14+
import scanner.common.exception.ApiException;
15+
16+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
17+
public class CheckListModifyDto {
18+
19+
/**
20+
* @ToDo Need to Modifying Camel Case with DB Update.
21+
*/
22+
@Getter
23+
@AllArgsConstructor
24+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
25+
public static class Modifying {
26+
private String rule_id;
27+
private List<Details> custom;
28+
29+
public static String toJsonString(List<Details> dto) {
30+
try {
31+
ObjectMapper objectMapper = new ObjectMapper();
32+
return objectMapper.writeValueAsString(dto);
33+
} catch (JsonProcessingException e) {
34+
throw new ApiException(ResponseCode.INVALID_REQUEST);
35+
}
36+
}
37+
}
38+
39+
@Getter
40+
@AllArgsConstructor
41+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
42+
public static class Details {
43+
private String name;
44+
private String value;
45+
}
46+
47+
@Getter
48+
@AllArgsConstructor
49+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
50+
public static class State {
51+
private String rule_id;
52+
private String ruleOnOff;
53+
}
54+
}
55+

src/main/java/scanner/dto/rule/CheckListSimpleDto.java renamed to src/main/java/scanner/checklist/dto/CheckListSimpleDto.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package scanner.dto.rule;
1+
package scanner.checklist.dto;
22

33
import lombok.*;
4-
import scanner.model.rule.CustomRule;
4+
import scanner.checklist.entity.CustomRule;
55

66
import java.util.List;
77

src/main/java/scanner/dto/rule/TagDto.java renamed to src/main/java/scanner/checklist/dto/TagDto.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package scanner.dto.rule;
1+
package scanner.checklist.dto;
22

33
import lombok.*;
4-
import scanner.model.rule.Tag;
4+
import scanner.checklist.entity.Tag;
55

66
@Builder
77
@Getter

src/main/java/scanner/model/rule/Compliance.java renamed to src/main/java/scanner/checklist/entity/ComplianceEng.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package scanner.model.rule;
1+
package scanner.checklist.entity;
22

33
import javax.persistence.Column;
44
import javax.persistence.Entity;
@@ -12,13 +12,13 @@
1212
import javax.validation.constraints.Size;
1313

1414
import lombok.*;
15-
import scanner.model.BaseEntity;
15+
import scanner.common.entity.BaseEntity;
1616

1717
@Entity
1818
@Getter
1919
@NoArgsConstructor(access = AccessLevel.PROTECTED)
2020
@Table(name = "COMPLIANCE")
21-
public class Compliance extends BaseEntity {
21+
public class ComplianceEng extends BaseEntity {
2222

2323
@Id
2424
@Column(name = "COMP_ID", updatable = false)
@@ -56,7 +56,7 @@ public class Compliance extends BaseEntity {
5656
private String detail;
5757

5858
@Builder
59-
public Compliance(CustomRule ruleSeq, String complianceName, String complianceNumber, String category,
59+
public ComplianceEng(CustomRule ruleSeq, String complianceName, String complianceNumber, String category,
6060
String article, String description, String detail) {
6161
this.ruleSeq = ruleSeq;
6262
this.complianceName = complianceName;
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package scanner.checklist.entity;
2+
3+
import javax.persistence.Column;
4+
import javax.persistence.Entity;
5+
import javax.persistence.FetchType;
6+
import javax.persistence.GeneratedValue;
7+
import javax.persistence.GenerationType;
8+
import javax.persistence.Id;
9+
import javax.persistence.JoinColumn;
10+
import javax.persistence.ManyToOne;
11+
import javax.persistence.Table;
12+
import javax.validation.constraints.NotNull;
13+
import javax.validation.constraints.Size;
14+
15+
import lombok.AccessLevel;
16+
import lombok.Builder;
17+
import lombok.Getter;
18+
import lombok.NoArgsConstructor;
19+
import scanner.common.entity.BaseEntity;
20+
21+
@Entity
22+
@Getter
23+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
24+
@Table(name = "COMPLIANCE_KOR")
25+
public class ComplianceKor extends BaseEntity {
26+
27+
@Id
28+
@Column(name = "COMP_ID", updatable = false)
29+
@GeneratedValue(strategy = GenerationType.IDENTITY)
30+
private Long compId;
31+
32+
@ManyToOne(fetch = FetchType.LAZY)
33+
@JoinColumn(name = "rule_seq", updatable = false)
34+
private CustomRule ruleSeq;
35+
36+
@Column(name = "COMPLIANCE_NAME")
37+
@NotNull
38+
@Size(max = 16)
39+
private String complianceName;
40+
41+
@Column(name = "COMPLIANCE_NUMBER")
42+
@NotNull
43+
@Size(max = 8)
44+
private String complianceNumber;
45+
46+
@Column(name = "CATEGORY")
47+
@NotNull
48+
@Size(max = 128)
49+
private String category;
50+
51+
@Column(name = "ARTICLE")
52+
@NotNull
53+
@Size(max = 128)
54+
private String article;
55+
56+
@Column(name = "DESCRIPTION")
57+
private String description;
58+
59+
@Column(name = "DETAIL")
60+
private String detail;
61+
62+
@Builder
63+
public ComplianceKor(CustomRule ruleSeq, String complianceName, String complianceNumber, String category,
64+
String article, String description, String detail) {
65+
this.ruleSeq = ruleSeq;
66+
this.complianceName = complianceName;
67+
this.complianceNumber = complianceNumber;
68+
this.category = category;
69+
this.article = article;
70+
this.description = description;
71+
this.detail = detail;
72+
}
73+
}

0 commit comments

Comments
 (0)