From b00b8adf9b814f6f458b2473c28cb796dfabe20c Mon Sep 17 00:00:00 2001 From: lihengheng Date: Mon, 28 Oct 2024 10:06:18 +0800 Subject: [PATCH] publishSbom API supports JSON format --- build.gradle.kts | 1 + ...66\345\223\201\345\217\221\345\270\203.md" | 27 ++++++++++- .../request/sbom/PublishSbomJsonRequest.java | 46 +++++++++++++++++++ .../sbom/controller/SbomController.java | 28 +++++++++++ 4 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 model/src/main/java/org/opensourceway/sbom/model/pojo/request/sbom/PublishSbomJsonRequest.java diff --git a/build.gradle.kts b/build.gradle.kts index ba0d402..2896dbd 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 e07ce0f..2eda1f3 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 0000000..d09b440 --- /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 5df8f7c..0efd996 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); -- Gitee