Merge remote-tracking branch 'origin/master'

This commit is contained in:
HopeLi 2025-07-30 17:40:36 +08:00
commit 377f6924b1
14 changed files with 245 additions and 46 deletions

View File

@ -25,27 +25,26 @@ public class DataAnalysisController {
@Operation(summary = "人数,任务次数,漏洞总数,高危漏洞 统计") @Operation(summary = "人数,任务次数,漏洞总数,高危漏洞 统计")
@GetMapping("/userAndTaskCount") @GetMapping("/userAndTaskCount")
public CommonResult userAndTaskDataCount(@RequestParam(required = false,value = "country") String country){ public CommonResult userAndTaskDataCount(@RequestParam(required = false,value = "city") String city){
return CommonResult.success(dataAnalysisService.getUserAndTaskDataCount()); return CommonResult.success(dataAnalysisService.getUserAndTaskDataCount(city));
} }
@Operation(summary = "漏洞监测分布概览") @Operation(summary = "漏洞监测分布概览")
@GetMapping("/HoopVulCount") @GetMapping("/HoopVulCount")
public CommonResult HoopVulDataCount(@RequestParam(required = false,value = "country") String country){ public CommonResult HoopVulDataCount(@RequestParam(required = false,value = "city") String city){
return CommonResult.success(dataAnalysisService.getHoopVulCountList()); return CommonResult.success(dataAnalysisService.getHoopVulCountList());
} }
@Operation(summary = "资源分配数据概览") @Operation(summary = "资源分配数据概览")
@GetMapping("/ResourceDistList") @GetMapping("/ResourceDistList")
public CommonResult ResourceDistList(@RequestParam(required = false,value = "country") String country){ public CommonResult ResourceDistList(@RequestParam(required = false,value = "city") String city){
return CommonResult.success(dataAnalysisService.getResourceDistCountList()); return CommonResult.success(dataAnalysisService.getResourceDistCountList(city));
} }
@Operation(summary = "漏洞监测数据概览") @Operation(summary = "漏洞监测数据概览")
@GetMapping("/VulMonitorDataList") @GetMapping("/VulMonitorDataList")
public CommonResult VulMonitorDataList(@RequestParam(required = false,value = "country") String country){ public CommonResult VulMonitorDataList(@RequestParam(required = false,value = "city") String city){
return CommonResult.success(dataAnalysisService.getVulMonitorCountList(city));
return CommonResult.success();
} }

View File

@ -145,4 +145,8 @@ public class SastController {
SastApplicationStatusResp applicationStatus = sastService.getApplicationStatus(applicationId); SastApplicationStatusResp applicationStatus = sastService.getApplicationStatus(applicationId);
return CommonResult.success(applicationStatus); return CommonResult.success(applicationStatus);
} }
@PostMapping("/applicationBinaryStash")
CommonResult<SastApplicationBinaryStashResp> applicationBinaryStash(@RequestBody SastApplicationBinaryStashReq req) {
return CommonResult.success(sastService.applicationBinaryStash(req));
}
} }

View File

@ -1,5 +1,6 @@
package cd.casic.ci.process.dto.req.sast; package cd.casic.ci.process.dto.req.sast;
import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
@ -55,4 +56,13 @@ public class SastApplicationBinaryStashReq {
* z3 是否能够超时 * z3 是否能够超时
* */ * */
private Boolean z3TimeoutMsStatus;//需要用户填写 private Boolean z3TimeoutMsStatus;//需要用户填写
/**
* z3超时时间
* */
private Integer z3TimeoutMs;
/**
* 流水线id
* */
@NotBlank
private String pipelineId;
} }

View File

@ -0,0 +1,56 @@
package cd.casic.ci.process.dto.req.sast;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SastVulInfoReq {
private String id;
private String name;
/**
* UN_KNOWN("未知"),
* DEADLY("严重"),
* SEVERITY("高危"),
* POOR_RISK("中危"),
* LOW_RISK("低危"),
* SAFE("安全");
* */
private String severity;
private int count;
private List<DefectDetail> defectDetails = new ArrayList<>();
// 便捷方法
public void addDefectDetail(DefectDetail detail) {
if (defectDetails == null) {
defectDetails = new ArrayList<>();
}
defectDetails.add(detail);
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class DefectDetail {
private String file;
private int line;
private String path;
private List<String> propagationPath = new ArrayList<>();
private String description;
private String potentialRisk;
// 便捷方法
public void addPropagationPath(String path) {
if (propagationPath == null) {
propagationPath = new ArrayList<>();
}
propagationPath.add(path);
}
}
}

View File

@ -1,6 +1,7 @@
package cd.casic.ci.process.dto.resp.dataAnalysis; package cd.casic.ci.process.dto.resp.dataAnalysis;
import cd.casic.ci.process.enums.MachineSystemEnum; import cd.casic.ci.process.enums.MachineSystemEnum;
import cd.casic.ci.process.process.dataObject.volumnInfo.VulInfo;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Builder; import lombok.Builder;
@ -40,26 +41,38 @@ public class DataAnalysisResp {
*/ */
private String perilousVulSUM; private String perilousVulSUM;
/**
* 漏洞监测分布概览
*/
private List<HoopVulCount> hoopVulCountList; private List<HoopVulCount> hoopVulCountList;
/**
* 资源分配数据概览
*/
private List<ResourceDistCount> resourceDistCountList; private List<ResourceDistCount> resourceDistCountList;
/**
* 漏洞监测数据概览
*/
private List<VulInfo> VulMonitorCountList;
/** /**
* 漏洞监测分布概览 * 漏洞监测分布概览
*/ */
@Data @Data
@Builder
public static class HoopVulCount{ public static class HoopVulCount{
/** /**
* 城市 * 城市
*/ */
private String country; private String city;
/** /**
* 百分比 两位小数 * 百分比 两位小数
*/ */
private BigDecimal value; private BigDecimal value;
private String count;
} }
/** /**
@ -68,8 +81,8 @@ public class DataAnalysisResp {
@Data @Data
public static class ResourceDistCount{ public static class ResourceDistCount{
private static final List<String> CITIES = List.of( private static final List<String> CITIES = List.of(
"北京", "上海", "广州", "深圳", "杭州", "北京", "上海", "天津", "重庆",
"成都", "武汉", "西安", "长沙", "厦门" "成都", "长沙"
); );
/** /**
* 机器id * 机器id
@ -104,12 +117,4 @@ public class DataAnalysisResp {
} }
} }
/**
*
*/
/*@Data
static class VulMonitorCount{
}*/
} }

View File

@ -132,7 +132,8 @@ public class SastWorker extends BaseWorker {
if (reportStatus.getStatus().equals("FAIL")) { if (reportStatus.getStatus().equals("FAIL")) {
throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"生成sast报告失败"); throw new ServiceException(GlobalErrorCodeConstants.PIPELINE_ERROR.getCode(),"生成sast报告失败");
} }
JSONObject jsonObject = getJSONString(reportId).getJSONObject("task_summary"); JSONObject reportJson = getJSONString(reportId);
JSONObject jsonObject = reportJson.getJSONObject("task_summary");
JSONObject severity = jsonObject.getJSONObject("defect_severity_distribution"); JSONObject severity = jsonObject.getJSONObject("defect_severity_distribution");
JSONObject rule = jsonObject.getJSONObject("detection_rule_distribution"); JSONObject rule = jsonObject.getJSONObject("detection_rule_distribution");
JSONObject res = new JSONObject(); JSONObject res = new JSONObject();

View File

@ -138,4 +138,5 @@ public class PipPipeline extends PipBaseElement {
* 机器id * 机器id
* */ * */
private String machineId; private String machineId;
private Long tenantId;
} }

View File

@ -1,22 +1,25 @@
package cd.casic.ci.process.process.service.dataAnalysis; package cd.casic.ci.process.process.service.dataAnalysis;
import cd.casic.ci.process.dto.resp.dataAnalysis.DataAnalysisResp; import cd.casic.ci.process.dto.resp.dataAnalysis.DataAnalysisResp;
import cd.casic.ci.process.process.dataObject.volumnInfo.VulInfo;
import java.util.List; import java.util.List;
public interface DataAnalysisService { public interface DataAnalysisService {
String getUseUserSUM(); String getUseUserSUM(String city);
String getTaskSUM(); String getTaskSUM(String city);
String getVulSUM(); String getVulSUM(String city);
DataAnalysisResp getUserAndTaskDataCount(); DataAnalysisResp getUserAndTaskDataCount(String city);
List<DataAnalysisResp.HoopVulCount> getHoopVulCountList(); List<DataAnalysisResp.HoopVulCount> getHoopVulCountList();
List<DataAnalysisResp.ResourceDistCount> getResourceDistCountList(); List<DataAnalysisResp.ResourceDistCount> getResourceDistCountList(String city);
List<VulInfo> getVulMonitorCountList(String city);

View File

@ -3,15 +3,20 @@ package cd.casic.ci.process.process.service.dataAnalysis.Impl;
import cd.casic.ci.process.dto.resp.dataAnalysis.DataAnalysisResp; import cd.casic.ci.process.dto.resp.dataAnalysis.DataAnalysisResp;
import cd.casic.ci.process.process.dao.history.PipPipelineHisInstanceDao; import cd.casic.ci.process.process.dao.history.PipPipelineHisInstanceDao;
import cd.casic.ci.process.process.dao.vulInfo.VulInfoDao; import cd.casic.ci.process.process.dao.vulInfo.VulInfoDao;
import cd.casic.ci.process.process.dataObject.volumnInfo.VulInfo;
import cd.casic.ci.process.process.service.dataAnalysis.DataAnalysisService; import cd.casic.ci.process.process.service.dataAnalysis.DataAnalysisService;
import cd.casic.framework.datapermission.core.dal.AdminUserMapper; import cd.casic.framework.datapermission.core.dal.AdminUserMapper;
import cd.casic.module.machine.dal.dataobject.MachineInfoDO; import cd.casic.module.machine.dal.dataobject.MachineInfoDO;
import cd.casic.module.machine.dal.mysql.MachineInfoMapper; import cd.casic.module.machine.dal.mysql.MachineInfoMapper;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List; import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -34,45 +39,66 @@ public class DataAnalysisServiceImpl implements DataAnalysisService {
private MachineInfoMapper machineInfoMapper; private MachineInfoMapper machineInfoMapper;
@Override @Override
public String getUseUserSUM() { public String getUseUserSUM(String city) {
return userMapper.selectCount().toString(); return userMapper.selectCount().toString();
} }
@Override @Override
public String getTaskSUM() { public String getTaskSUM(String city) {
return pipelineHisInstanceDao.selectCount().toString(); return pipelineHisInstanceDao.selectCount().toString();
} }
@Override @Override
public String getVulSUM() { public String getVulSUM(String city) {
return vulInfoDao.selectCount().toString(); return vulInfoDao.selectCount(new QueryWrapper<VulInfo>().lambda().eq(Objects.nonNull(city),VulInfo::getCity,city)).toString();
} }
public String getPerilousVulSUM(){ public String getPerilousVulSUM(String city){
return vulInfoDao.selectCount("severity", 2).toString(); return vulInfoDao.selectCount(new LambdaQueryWrapper<VulInfo>().eq(Objects.nonNull(city),VulInfo::getCity,city).eq(VulInfo::getSeverity,2)).toString();
} }
@Override @Override
public DataAnalysisResp getUserAndTaskDataCount() { public DataAnalysisResp getUserAndTaskDataCount(String city) {
return DataAnalysisResp.builder().scanVulSUM("101125698234").useUserSUM(getUseUserSUM()) return DataAnalysisResp.builder().scanVulSUM("101125698234").useUserSUM(getUseUserSUM(city))
.taskSUM(getTaskSUM()).vulSUM(getVulSUM()).perilousVulSUM(getPerilousVulSUM()).build(); .taskSUM(getTaskSUM(city)).vulSUM(getVulSUM(city)).perilousVulSUM(getPerilousVulSUM(city)).build();
} }
@Override @Override
public List<DataAnalysisResp.HoopVulCount> getHoopVulCountList() { public List<DataAnalysisResp.HoopVulCount> getHoopVulCountList() {
Integer integer = Integer.decode(getVulSUM(null));
return null; if (integer == 0) {
return null;
}
QueryWrapper<VulInfo> wrapper = new QueryWrapper<>();
wrapper.select("city", "COUNT(*) as value")
.groupBy("city");
List<Map<String, Object>> listMaps = vulInfoDao.selectMaps(wrapper);
List<DataAnalysisResp.HoopVulCount> rest = new ArrayList<>();
listMaps.forEach(map -> {
DataAnalysisResp.HoopVulCount hoopVulCount = BeanUtil.mapToBean(map, DataAnalysisResp.HoopVulCount.class, false);
String format = new DecimalFormat("0.00%").format(hoopVulCount.getValue().divide(new BigDecimal(integer), 4, RoundingMode.HALF_UP));
hoopVulCount.setCount(format);
rest.add(hoopVulCount);
});
return rest;
} }
@Override @Override
public List<DataAnalysisResp.ResourceDistCount> getResourceDistCountList() { public List<DataAnalysisResp.ResourceDistCount> getResourceDistCountList(String city) {
List<MachineInfoDO> machineInfoDOS = machineInfoMapper.selectList(); List<MachineInfoDO> machineInfoDOS = machineInfoMapper.selectList();
List<DataAnalysisResp.ResourceDistCount> distCountList = machineInfoDOS.stream().map(obj -> { List<DataAnalysisResp.ResourceDistCount> distCountList = machineInfoDOS.stream().map(obj -> {
DataAnalysisResp.ResourceDistCount distCount = new DataAnalysisResp.ResourceDistCount(); DataAnalysisResp.ResourceDistCount distCount = new DataAnalysisResp.ResourceDistCount();
BeanUtil.copyProperties(obj, distCount); BeanUtil.copyProperties(obj, distCount);
return distCount; return distCount;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
if (Objects.nonNull(city)) {
return distCountList.stream().filter(a -> city.equals(a.getCountry())).toList();
}
return distCountList; return distCountList;
} }
@Override
public List<VulInfo> getVulMonitorCountList(String city) {
return vulInfoDao.selectList(new QueryWrapper<VulInfo>().lambda().eq(Objects.nonNull(city),VulInfo::getCity,city).orderByDesc(VulInfo::getCreateTime));
}
} }

View File

@ -109,7 +109,8 @@ public class PipelineServiceImpl extends ServiceImpl<PipelineDao, PipPipeline> i
List<PipTask> pipTaskList = new ArrayList<>(0); List<PipTask> pipTaskList = new ArrayList<>(0);
PipPipeline pipeline = pipelineConverter.reqToDO(pipelineReq); PipPipeline pipeline = pipelineConverter.reqToDO(pipelineReq);
Long tenantId = WebFrameworkUtils.getLoginUser().getTenantId();
pipeline.setTenantId(tenantId);
// 随机颜色 // 随机颜色
int randomNumber = (int)(Math.random() * 5) + 1; int randomNumber = (int)(Math.random() * 5) + 1;
pipeline.setColor(randomNumber); pipeline.setColor(randomNumber);

View File

@ -37,4 +37,5 @@ public interface SastService {
List<SastEngineLogResp> engineLog(String applicationId); List<SastEngineLogResp> engineLog(String applicationId);
SastApplicationBinaryStashResp applicationBinaryStash(SastApplicationBinaryStashReq req) ; SastApplicationBinaryStashResp applicationBinaryStash(SastApplicationBinaryStashReq req) ;
SastApplicationStashResp binaryStashScan(String applicationId); SastApplicationStashResp binaryStashScan(String applicationId);
void saveReportVulInfo(List<SastVulInfoReq> list,String targetType,String targetName,String city,String instanceId,String taskId,String taskType);
} }

View File

@ -3,8 +3,16 @@ package cd.casic.ci.process.process.service.sast.impl;
import cd.casic.ci.process.dto.req.sast.*; import cd.casic.ci.process.dto.req.sast.*;
import cd.casic.ci.process.dto.resp.report.ReportResp; import cd.casic.ci.process.dto.resp.report.ReportResp;
import cd.casic.ci.process.dto.resp.sast.*; import cd.casic.ci.process.dto.resp.sast.*;
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
import cd.casic.ci.process.process.dataObject.target.TargetVersion;
import cd.casic.ci.process.process.dataObject.volumnInfo.VulInfo;
import cd.casic.ci.process.process.service.pipeline.PipelineService;
import cd.casic.ci.process.process.service.sast.SastService; import cd.casic.ci.process.process.service.sast.SastService;
import cd.casic.ci.process.process.service.target.TargetVersionService;
import cd.casic.ci.process.process.service.vulInfo.VulInfoService;
import cd.casic.ci.process.properties.SastProperties; import cd.casic.ci.process.properties.SastProperties;
import cd.casic.framework.commons.exception.ServiceException;
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
import cd.casic.framework.commons.pojo.PageParam; import cd.casic.framework.commons.pojo.PageParam;
import cd.casic.framework.commons.pojo.PageResult; import cd.casic.framework.commons.pojo.PageResult;
import cd.casic.framework.redis.core.RedisTemplateUtils; import cd.casic.framework.redis.core.RedisTemplateUtils;
@ -20,6 +28,7 @@ import org.luaj.vm2.ast.Str;
import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.FileSystemResource;
import org.springframework.http.*; import org.springframework.http.*;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
@ -31,9 +40,7 @@ import java.io.InputStream;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.HashMap; import java.util.*;
import java.util.List;
import java.util.Map;
import static cd.casic.ci.process.constant.SastUrlConstant.*; import static cd.casic.ci.process.constant.SastUrlConstant.*;
@ -46,10 +53,17 @@ public class SastServiceImpl implements SastService {
private SastProperties sastProperties; private SastProperties sastProperties;
@Resource @Resource
private RestTemplate restTemplate; private RestTemplate restTemplate;
@Resource
private PipelineService pipelineService;
@Resource
private TargetVersionService targetVersionService;
@Resource
private VulInfoService vulInfoService;
public static final String TOKEN_PREFIX = "Bearer "; public static final String TOKEN_PREFIX = "Bearer ";
public static final String TOKEN_HEADER_KEY = "authorization"; public static final String TOKEN_HEADER_KEY = "authorization";
public static final String REDIS_SAST_TOKEN_KEY = "REDIS_SAST_TOKEN_KEY"; public static final String REDIS_SAST_TOKEN_KEY = "REDIS_SAST_TOKEN_KEY";
private SastTokenResp getTokenRemote(){ private SastTokenResp getTokenRemote(){
HttpHeaders httpHeaders = new HttpHeaders(); HttpHeaders httpHeaders = new HttpHeaders();
HttpEntity<SastProperties> httpEntity = new HttpEntity<SastProperties>(sastProperties,httpHeaders); HttpEntity<SastProperties> httpEntity = new HttpEntity<SastProperties>(sastProperties,httpHeaders);
@ -299,6 +313,19 @@ public class SastServiceImpl implements SastService {
@Override @Override
public SastApplicationBinaryStashResp applicationBinaryStash(SastApplicationBinaryStashReq req) { public SastApplicationBinaryStashResp applicationBinaryStash(SastApplicationBinaryStashReq req) {
HttpHeaders httpHeaders = getHeaders(); HttpHeaders httpHeaders = getHeaders();
req.setProjectId("893ed995-5b81-474a-96a9-2800281421cd");
req.setApplicationName("二进制任务"+ UUID.randomUUID().toString());
req.setCodeSourceFrom("BINARY");
req.setArchAutoIdentify(true);
String pipelineId = req.getPipelineId();
PipPipeline pipeline = pipelineService.getById(pipelineId);
String targetVersionId = pipeline.getTargetVersionId();
TargetVersion targetVersion = targetVersionService.getById(targetVersionId);
File targetFile=new File(targetVersion.getFilePath());
SastFileUploadResp uploadResp = uploadFile(targetFile);
String id = uploadResp.getId();
req.setFileId(Collections.singletonList(id));
log.info("sast二进制上传文件成功开始调用接口{}",req);
HttpEntity<SastApplicationBinaryStashReq> entity = new HttpEntity<>(req,httpHeaders); HttpEntity<SastApplicationBinaryStashReq> entity = new HttpEntity<>(req,httpHeaders);
httpHeaders.setContentType(MediaType.APPLICATION_JSON); httpHeaders.setContentType(MediaType.APPLICATION_JSON);
ResponseEntity<SastApplicationBinaryStashResp> exchange = restTemplate.exchange(sastProperties.getBaseUrl() +applicationBinaryStash, HttpMethod.POST,entity,SastApplicationBinaryStashResp.class,new HashMap<>()); ResponseEntity<SastApplicationBinaryStashResp> exchange = restTemplate.exchange(sastProperties.getBaseUrl() +applicationBinaryStash, HttpMethod.POST,entity,SastApplicationBinaryStashResp.class,new HashMap<>());
@ -315,9 +342,56 @@ public class SastServiceImpl implements SastService {
return exchange.getBody(); return exchange.getBody();
} }
@Override
public void saveReportVulInfo(List<SastVulInfoReq> list,String targetType,String targetName,String city,String instanceId,String taskId,String taskType) {
if (CollectionUtils.isEmpty(list)) {
return;
}
List<VulInfo> vulInfos = new ArrayList<>(list.size());
for (SastVulInfoReq req : list) {
VulInfo vulInfo = new VulInfo();
// 设置安全等级名称
vulInfo.setVulTitle(req.getName());
String severity = req.getSeverity();
List<SastVulInfoReq.DefectDetail> defectDetails = req.getDefectDetails();
// 设置描述修复措施
if (CollectionUtils.isEmpty(defectDetails)) {
continue;
}
//设置流水线相关属性,因为漏洞描述还有漏洞修复建议列表里面每一项都是一样的所以直接取第一个
SastVulInfoReq.DefectDetail first = defectDetails.getFirst();
String description = first.getDescription();
String potentialRisk = first.getPotentialRisk();
vulInfo.setSolution(potentialRisk);
vulInfo.setVulDescription(description);
vulInfo.setSeverity(securityLevelToSeverity(severity));
vulInfo.setTargetType(targetType);
vulInfo.setTargetName(targetName);
vulInfo.setCity(city);
vulInfo.setInstanceId(instanceId);
vulInfo.setTaskId(taskId);
vulInfo.setTaskType(taskType);
vulInfos.add(vulInfo);
}
vulInfoService.saveBatch(vulInfos);
}
private HttpHeaders getHeaders(){ private HttpHeaders getHeaders(){
HttpHeaders httpHeaders = new HttpHeaders(); HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set(TOKEN_HEADER_KEY,TOKEN_PREFIX+getToken()); httpHeaders.set(TOKEN_HEADER_KEY,TOKEN_PREFIX+getToken());
return httpHeaders; return httpHeaders;
} }
private Integer securityLevelToSeverity(String securityLevel) {
if (securityLevel == null) {
return 0;
}
// 映射规则严重 -> 1, 高危 -> 2, 中危 -> 3, 低危 -> 4
return switch (securityLevel) {
case "严重" -> 1;
case "高危" -> 2;
case "中危" -> 3;
case "安全", "低危" -> 4;
default -> 0;
};
}
} }

View File

@ -40,6 +40,14 @@ public class WebFrameworkUtils {
return null; return null;
} }
} }
public static LoginUser getLoginUser() {
try {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
return (LoginUser) authentication.getPrincipal();
} catch (Exception e){
return null;
}
}
public static String getLoginUserIdStr(){ public static String getLoginUserIdStr(){
Long loginUserId = getLoginUserId(); Long loginUserId = getLoginUserId();
if (loginUserId!=null) { if (loginUserId!=null) {

View File

@ -1,13 +1,17 @@
package cd.casic.server; package cd.casic.server;
import cd.casic.ci.process.constant.PipelineTargetTypeConstant; import cd.casic.ci.process.constant.PipelineTargetTypeConstant;
import cd.casic.ci.process.dto.req.sast.SastVulInfoReq;
import cd.casic.ci.process.dto.req.testCase.TestCaseAITaskCreateReq; import cd.casic.ci.process.dto.req.testCase.TestCaseAITaskCreateReq;
import cd.casic.ci.process.dto.resp.ScaVulInfoResp; import cd.casic.ci.process.dto.resp.ScaVulInfoResp;
import cd.casic.ci.process.process.converter.VulInfoConverter; import cd.casic.ci.process.process.converter.VulInfoConverter;
import cd.casic.ci.process.process.dataObject.target.TargetVersion; import cd.casic.ci.process.process.dataObject.target.TargetVersion;
import cd.casic.ci.process.process.dataObject.volumnInfo.VulInfo; import cd.casic.ci.process.process.dataObject.volumnInfo.VulInfo;
import cd.casic.ci.process.process.service.sast.SastService;
import cd.casic.ci.process.process.service.testCase.TestCaseAIGeneratorService; import cd.casic.ci.process.process.service.testCase.TestCaseAIGeneratorService;
import cd.casic.ci.process.process.service.vulInfo.VulInfoService; import cd.casic.ci.process.process.service.vulInfo.VulInfoService;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -34,6 +38,8 @@ public class VulInfoTest {
private VulInfoService vulInfoService; private VulInfoService vulInfoService;
@Resource @Resource
private VulInfoConverter converter; private VulInfoConverter converter;
@Resource
private SastService sastService;
@Test @Test
public void test() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException { public void test() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
System.out.println(vulInfoService.scaVulCountGet(681)); System.out.println(vulInfoService.scaVulCountGet(681));
@ -61,5 +67,9 @@ public class VulInfoTest {
}); });
vulInfoService.saveBatch(vulInfos); vulInfoService.saveBatch(vulInfos);
}
@Test
public void sastTest(){
} }
} }