diff --git a/build.gradle.kts b/build.gradle.kts index ba0d402611a47dd485477f70de5d3ef73974d646..2896dbda74dda76747ec7df9c372bd92d583b5a2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,6 +56,7 @@ dependencies { implementation("org.springframework:spring-web:5.3.34") implementation("org.springframework:spring-webmvc:5.3.34") implementation("org.springframework.boot:spring-boot-starter-webflux:2.7.18") + implementation("com.alibaba:fastjson:1.1.23") implementation("com.auth0:java-jwt:3.19.1") implementation("com.google.code.gson:gson:2.9.0") implementation("com.squareup.okhttp3:okhttp:4.12.0") diff --git "a/doc/api/\345\210\266\345\223\201\345\217\221\345\270\203.md" "b/doc/api/\345\210\266\345\223\201\345\217\221\345\270\203.md" index e07ce0fc94647d4dbcefdb07faebf1949a395bcd..2eda1f30ecbd5f754fdd3e5c88ca7f200b3d5505 100644 --- "a/doc/api/\345\210\266\345\223\201\345\217\221\345\270\203.md" +++ "b/doc/api/\345\210\266\345\223\201\345\217\221\345\270\203.md" @@ -84,7 +84,7 @@ taskId: 任务ID string ### 样例 -#### 请求-1 +#### 请求-1.1 POST /sbom-api/publishSbomFile @@ -109,6 +109,31 @@ Body } ``` +#### 请求-1.2 + +POST +/sbom-api/publishSbomFileJson + +Body + +```json +{ + "productName": "openEuler-22.03-LTS-everything-x86_64-dvd.iso", + "sbomContentType": "spdx_2.2_json_sbom", + "sbomContent": {"SPDXID": "SPDXRef-DOCUMENT",...} +} +``` + +#### 返回-1 + +```json +{ + "success": true, + "errorInfo": null, + "taskId": "0cac8adc-154c-4e11-bd12-d53043e7288a" +} +``` + #### 请求-2 POST diff --git a/model/src/main/java/org/opensourceway/sbom/model/pojo/request/sbom/PublishSbomJsonRequest.java b/model/src/main/java/org/opensourceway/sbom/model/pojo/request/sbom/PublishSbomJsonRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..d09b4408b262570000b671cb3056f018f42e6f82 --- /dev/null +++ b/model/src/main/java/org/opensourceway/sbom/model/pojo/request/sbom/PublishSbomJsonRequest.java @@ -0,0 +1,46 @@ +package org.opensourceway.sbom.model.pojo.request.sbom; + + +import java.io.Serializable; +import java.util.Map; + +public class PublishSbomJsonRequest implements Serializable { + + private String productName; + + private Map sbomContent; + + private String sbomContentType; + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public Map getSbomContent() { + return sbomContent; + } + + public void setSbomContent(Map sbomContent) { + this.sbomContent = sbomContent; + } + + public String getSbomContentType() { + return sbomContentType; + } + + public void setSbomContentType(String sbomContentType) { + this.sbomContentType = sbomContentType; + } + + @Override + public String toString() { + return "PublishSbomRequest{" + + "productName='" + productName + '\'' + + ", sbomContentType='" + sbomContentType + '\'' + + '}'; + } +} diff --git a/src/main/java/org/opensourceway/sbom/controller/SbomController.java b/src/main/java/org/opensourceway/sbom/controller/SbomController.java index 5df8f7c527edb5d6c37932509f332abbc34598bd..0efd996748b1e7a3ff45f81c1de9ae3604eb647f 100644 --- a/src/main/java/org/opensourceway/sbom/controller/SbomController.java +++ b/src/main/java/org/opensourceway/sbom/controller/SbomController.java @@ -1,6 +1,7 @@ package org.opensourceway.sbom.controller; import com.auth0.jwt.interfaces.DecodedJWT; +import com.alibaba.fastjson.JSON; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.opensourceway.sbom.api.repo.RepoService; @@ -19,6 +20,7 @@ import org.opensourceway.sbom.model.entity.SbomUser; import org.opensourceway.sbom.model.exception.AddProductException; import org.opensourceway.sbom.model.pojo.request.sbom.AddProductRequest; import org.opensourceway.sbom.model.pojo.request.sbom.PublishSbomRequest; +import org.opensourceway.sbom.model.pojo.request.sbom.PublishSbomJsonRequest; import org.opensourceway.sbom.model.pojo.request.sbom.QuerySbomPackagesRequest; import org.opensourceway.sbom.model.pojo.request.sbom.SbomUserVo; import org.opensourceway.sbom.model.pojo.response.sbom.PublishResultResponse; @@ -119,6 +121,32 @@ public class SbomController { return ResponseEntity.status(HttpStatus.ACCEPTED).body(response); } + + @PostMapping("/publishSbomFileJson") + public @ResponseBody ResponseEntity publishSbomFileJson(@RequestBody PublishSbomJsonRequest publishSbomJsonRequest) { + logger.info("publish sbom file request:{}", publishSbomJsonRequest); + PublishSbomResponse response = new PublishSbomResponse(); + + UUID taskId; + try { + PublishSbomRequest publishSbomRequest = new PublishSbomRequest(); + publishSbomRequest.setProductName(publishSbomJsonRequest.getProductName()); + publishSbomRequest.setSbomContentType(publishSbomJsonRequest.getSbomContentType()); + publishSbomRequest.setSbomContent(JSON.toJSONString(publishSbomJsonRequest.getSbomContent())); + + taskId = sbomService.publishSbom(publishSbomRequest); + } catch (Exception e) { + logger.error("publish sbom failed", e); + response.setSuccess(Boolean.FALSE); + response.setErrorInfo("publish sbom failed!"); + return ResponseEntity.status(HttpStatus.ACCEPTED).body(response); + } + + response.setSuccess(Boolean.TRUE); + response.setTaskId(taskId); + return ResponseEntity.status(HttpStatus.ACCEPTED).body(response); + } + @GetMapping("/querySbomPublishResult/{taskId}") public @ResponseBody ResponseEntity querySbomPublishResult(@PathVariable("taskId") String taskId) { logger.info("query sbom publish result, taskId:{}", taskId);