diff --git a/modules/module-ci-machine/pom.xml b/modules/module-ci-machine/pom.xml index e36adc39..506a3bd5 100644 --- a/modules/module-ci-machine/pom.xml +++ b/modules/module-ci-machine/pom.xml @@ -24,10 +24,17 @@ cd.casic.boot spring-boot-starter-security + com.antherd sm-crypto - 0.3.2.1-RELEASE + 0.3.2 + + org.openjdk.nashorn + nashorn-core + 15.4 + + diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java index 1624b1c2..c2cea7e2 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/controller/SecretKeyController.java @@ -12,6 +12,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -64,6 +65,13 @@ public class SecretKeyController { return success(true); } + @DeleteMapping("/delete") + @Operation(summary = "删除密钥") + @PreAuthorize("@ss.hasPermission('ci:secretKey:delete')") + public CommonResult deleteSecretKeyList(@RequestParam("id") Long id) { + return success(secretKeyService.deleteById(id)); + } + @PostMapping("/list") @Operation(summary = "获取密钥信息列表") public CommonResult> getSecretKeyPage(@Valid @RequestBody SecretKeyVO secretKeyVO) { diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java index 19326057..08751530 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/SecretKeyService.java @@ -1,5 +1,6 @@ package cd.casic.module.machine.service; +import cd.casic.framework.commons.pojo.CommonResult; import cd.casic.framework.commons.pojo.PageResult; import cd.casic.module.machine.dal.dataobject.MachineInfoDO; import cd.casic.module.machine.dal.dataobject.SecretKeyDO; @@ -30,6 +31,9 @@ public interface SecretKeyService { */ void deleteSecretKeyList(List ids); + + Integer deleteById(Long id); + /** * 根据id获取密钥对象 */ diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineInfoServiceImpl.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineInfoServiceImpl.java index 90428a99..d3137a52 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineInfoServiceImpl.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/MachineInfoServiceImpl.java @@ -10,6 +10,7 @@ import cd.casic.module.machine.dal.dataobject.MachineInfoDO; import cd.casic.module.machine.enums.MachineInfoStatus; import cd.casic.module.machine.service.MachineInfoService; import cd.casic.module.machine.service.SecretKeyService; +import cd.casic.module.machine.utils.CryptogramUtil; import com.google.common.annotations.VisibleForTesting; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -47,6 +48,9 @@ public class MachineInfoServiceImpl implements MachineInfoService { throw exception(SECRET_KEY_NOT_EXISTS); } } + if (Objects.nonNull(machineInfoDO.getPassword())) { + machineInfoDO.setPassword(CryptogramUtil.doEncrypt(machineInfoDO.getPassword())); + } machineInfoMapper.insert(machineInfoDO); return machineInfoDO.getId(); } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java index b322a954..81e44218 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/service/impl/SecretKeyServiceImpl.java @@ -1,5 +1,6 @@ package cd.casic.module.machine.service.impl; +import cd.casic.framework.commons.pojo.CommonResult; import cd.casic.framework.commons.pojo.PageResult; import cd.casic.framework.commons.util.object.BeanUtils; import cd.casic.module.machine.controller.vo.SecretKeyVO; @@ -54,14 +55,11 @@ public class SecretKeyServiceImpl implements SecretKeyService { public Long createSecretKey(SecretKeyVO secretKeyVO) { validateSecretKeyAdd(secretKeyVO); SecretKeyDO secretKeyDO = BeanUtils.toBean(secretKeyVO, SecretKeyDO.class); - try { - //密码加密 - secretKeyDO.setPassword(CryptogramUtil.doEncrypt(secretKeyVO.getPassword())); - //公钥加密 - secretKeyDO.setPublicKey(CryptogramUtil.doEncrypt(secretKeyVO.getPublicKey())); - } catch (ScriptException e) { - throw exception(ENCRYPT_OR_DECRYPT_FAIL); - } + //密码加密 + secretKeyDO.setPassword(CryptogramUtil.doEncrypt(secretKeyVO.getPassword())); + //公私钥加密 + secretKeyDO.setPublicKey(CryptogramUtil.doEncrypt(secretKeyVO.getPublicKey())); + secretKeyDO.setPrivateKey(CryptogramUtil.doEncrypt(secretKeyVO.getPrivateKey())); secretKeyMapper.insert(secretKeyDO); return secretKeyDO.getId(); } @@ -108,4 +106,8 @@ public class SecretKeyServiceImpl implements SecretKeyService { } return secretKeyDO; } + @Override + public Integer deleteById(Long id){ + return secretKeyMapper.deleteById(id); + } } diff --git a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/CryptogramUtil.java b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/CryptogramUtil.java index 0a91bfd1..421aeef7 100644 --- a/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/CryptogramUtil.java +++ b/modules/module-ci-machine/src/main/java/cd/casic/module/machine/utils/CryptogramUtil.java @@ -1,5 +1,6 @@ package cd.casic.module.machine.utils; + import cd.casic.module.machine.dal.model.Keypair; import cn.hutool.log.Log; import com.antherd.smcrypto.sm2.Sm2; @@ -7,8 +8,12 @@ import com.antherd.smcrypto.sm3.Sm3; import com.antherd.smcrypto.sm4.Sm4; import com.antherd.smcrypto.sm4.Sm4Options; -import javax.script.ScriptException; - +/** + * 加密工具类,本框架目前使用 https://github.com/antherd/sm-crypto 项目中一些加解密方式 + * 使用小伙伴需要过等保密评相关,请在此处更改为自己的加密方法,或加密机,使用加密机同时需要替换公钥,私钥在内部无法导出,提供加密的方法 + * + * @author yubaoshan + */ public class CryptogramUtil { private static final Log log = Log.get(); @@ -16,11 +21,11 @@ public class CryptogramUtil { /** * 加密方法(Sm2 的专门针对前后端分离,非对称秘钥对的方式,暴露出去的公钥,对传输过程中的密码加个密) * + * @author yubaoshan * @param str 待加密数据 * @return 加密后的密文 - * @author yubaoshan */ - public static String doSm2Encrypt(String str) throws ScriptException { + public static String doSm2Encrypt (String str) { return Sm2.doEncrypt(str, Keypair.PUBLIC_KEY); } @@ -28,11 +33,11 @@ public class CryptogramUtil { * 解密方法 * 如果采用加密机的方法,用try catch 捕捉异常,返回原文值即可 * + * @author yubaoshan * @param str 密文 * @return 解密后的明文 - * @author yubaoshan */ - public static String doSm2Decrypt(String str) throws ScriptException { + public static String doSm2Decrypt (String str) { // 解密 return Sm2.doDecrypt(str, Keypair.PRIVATE_KEY); } @@ -40,11 +45,11 @@ public class CryptogramUtil { /** * 加密方法 * + * @author yubaoshan * @param str 待加密数据 * @return 加密后的密文 - * @author yubaoshan */ - public static String doEncrypt(String str) throws ScriptException { + public static String doEncrypt (String str) { // SM4 加密 cbc模式 Sm4Options sm4Options4 = new Sm4Options(); sm4Options4.setMode("cbc"); @@ -56,17 +61,17 @@ public class CryptogramUtil { * 解密方法 * 如果采用加密机的方法,用try catch 捕捉异常,返回原文值即可 * + * @author yubaoshan * @param str 密文 * @return 解密后的明文 - * @author yubaoshan */ - public static String doDecrypt(String str) throws ScriptException { + public static String doDecrypt (String str) { // 解密,cbc 模式,输出 utf8 字符串 Sm4Options sm4Options8 = new Sm4Options(); sm4Options8.setMode("cbc"); sm4Options8.setIv("fedcba98765432100123456789abcdef"); - String docString = Sm4.decrypt(str, Keypair.KEY, sm4Options8); - if (docString.isEmpty()) { + String docString = Sm4.decrypt(str, Keypair.KEY, sm4Options8); + if (docString.equals("")) { log.warn(">>> 字段解密失败,返回原文值:{}", str); return str; } else { @@ -77,34 +82,34 @@ public class CryptogramUtil { /** * 纯签名 * + * @author yubaoshan * @param str 待签名数据 * @return 签名结果 - * @author yubaoshan */ - public static String doSignature(String str) throws ScriptException { + public static String doSignature (String str) { return Sm2.doSignature(str, Keypair.PRIVATE_KEY); } /** * 验证签名结果 * - * @param originalStr 签名原文数据 - * @param str 签名结果 - * @return 是否通过 * @author yubaoshan + * @param originalStr 签名原文数据 + * @param str 签名结果 + * @return 是否通过 */ - public static boolean doVerifySignature(String originalStr, String str) throws ScriptException { + public static boolean doVerifySignature (String originalStr, String str) { return Sm2.doVerifySignature(originalStr, str, Keypair.PUBLIC_KEY); } /** * 通过杂凑算法取得hash值,用于做数据完整性保护 * + * @author yubaoshan * @param str 字符串 * @return hash 值 - * @author yubaoshan */ - public static String doHashValue(String str) throws ScriptException { + public static String doHashValue (String str) { return Sm3.sm3(str); } diff --git a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/PipelineController.java b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/PipelineController.java index bd6eafb7..04c4401a 100644 --- a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/PipelineController.java +++ b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/PipelineController.java @@ -10,6 +10,7 @@ import cd.casic.ci.process.dto.resp.pipeline.PipelineFindResp; import cd.casic.ci.process.engine.executor.PipelineExecutor; import cd.casic.ci.process.engine.runContext.PipelineRunContext; import cd.casic.ci.process.enums.PiplineTriggerModeEnum; +import cd.casic.ci.process.process.dataObject.base.BaseIdReq; import cd.casic.ci.process.process.service.pipeline.PipelineService; import cd.casic.framework.commons.pojo.CommonResult; import cd.casic.framework.commons.pojo.PageResult; @@ -117,4 +118,12 @@ public class PipelineController { pipelineExecutor.traversePipelineContext(pipelineId); return CommonResult.success(); } + + @PostMapping(path="/transformTemplateByPipeline") + public CommonResult transformTemplateByPipeline(@RequestBody @Valid BaseIdReq req){ + + pipelineService.transformTemplateByPipeline(req); + + return CommonResult.success(); + } } diff --git a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TemplateManagerController.java b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TemplateManagerController.java index 9a965e70..31f7a76a 100644 --- a/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TemplateManagerController.java +++ b/modules/module-ci-process-api/src/main/java/cd/casic/ci/api/TemplateManagerController.java @@ -1,6 +1,7 @@ package cd.casic.ci.api; +import cd.casic.ci.process.dto.req.template.TemplateCreateByDataReq; import cd.casic.ci.process.dto.req.template.TemplateCreateReq; import cd.casic.ci.process.dto.req.template.TemplateQueryReq; import cd.casic.ci.process.dto.req.template.TemplateUpdateReq; @@ -38,6 +39,16 @@ public class TemplateManagerController { String templateId = templateManagerService.createTemplateManager(req); return CommonResult.success(templateId); } + + + + @PostMapping(path="/createTemplateByData") + public CommonResult createTemplateByData(@RequestBody @Valid TemplateCreateByDataReq req){ + String templateId = templateManagerService.createTemplateByData(req); + return CommonResult.success(templateId); + } + + @PostMapping(path="/updateTemplateManager") public CommonResult updateTemplateManager(@RequestBody TemplateUpdateReq req){ String templateId = templateManagerService.updateTemplateManager(req); diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateCreateByDataReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateCreateByDataReq.java new file mode 100644 index 00000000..7d7a39c3 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateCreateByDataReq.java @@ -0,0 +1,33 @@ +package cd.casic.ci.process.dto.req.template; + +import lombok.Data; + +import java.util.List; + +/** + * @author HopeLi + * @version v1.0 + * @ClassName TemplateCreateReq + * @Date: 2025/5/29 10:41 + * @Description: + */ + +@Data +public class TemplateCreateByDataReq { + /** + * 模板名称 + */ + private String templateName; + + /** + * 模板分类 + */ + private String templateType; + + /** + * 描述 + */ + private String remark; + + private List stageCreateByDataReqList; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateStageCreateByDataReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateStageCreateByDataReq.java new file mode 100644 index 00000000..9617c2f3 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateStageCreateByDataReq.java @@ -0,0 +1,43 @@ +package cd.casic.ci.process.dto.req.template; + +import lombok.Data; + +import java.util.List; + +/** + * @ClassName TemplateStageCreateByDataReq + * @Author hopeli + * @Date 2025/7/20 18:34 + * @Version 1.0 + */ +@Data +public class TemplateStageCreateByDataReq { + /** + * 阶段名称 + */ + private String stageName; + + /** + * 流水线模板ID + */ + private String templateId; + + /** + * 阶段排序 + */ + private Integer stageSort; + + /** + * 父级阶段ID + */ + private String parentId; + + /** + * 是否是代码阶段 + */ + private Boolean code = false; + + private List stageCreateByDataReqList; + + private List taskCreateByDataReqList; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateTaskCreateByDataReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateTaskCreateByDataReq.java new file mode 100644 index 00000000..ab478560 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dto/req/template/TemplateTaskCreateByDataReq.java @@ -0,0 +1,53 @@ +package cd.casic.ci.process.dto.req.template; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.Data; +import org.apache.ibatis.type.JdbcType; + +import java.util.Map; + +/** + * @ClassName TemplateTaskCreateByDataReq + * @Author hopeli + * @Date 2025/7/20 18:50 + * @Version 1.0 + */ +@Data +public class TemplateTaskCreateByDataReq { + /** + * 阶段ID + */ + private String stageId; + + /** + * 任务名称 + */ + private String taskName; + + /** + * 流水线模板ID + */ + private String templateId; + + /** + * 任务类型 + */ + private String taskType; + + /** + * 任务排序 + */ + private Integer taskSort; + + /** + * 后置处理器ID + */ + private String postprocessId; + + /** + * 任务配置(JSON格式存储) + */ + @TableField(typeHandler = JacksonTypeHandler.class,jdbcType = JdbcType.VARCHAR) + private Map taskProperties; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateConverter.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateConverter.java index f4fdb35e..7738050b 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateConverter.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateConverter.java @@ -1,5 +1,6 @@ package cd.casic.ci.process.process.converter; +import cd.casic.ci.process.dto.req.template.TemplateCreateByDataReq; import cd.casic.ci.process.dto.req.template.TemplateCreateReq; import cd.casic.ci.process.dto.req.template.TemplateUpdateReq; import cd.casic.ci.process.dto.resp.template.TemplateFindResp; @@ -31,4 +32,6 @@ public interface TemplateConverter { PipTask templateTaskToTask(TemplateTasksResp resp); TemplateManager managerCreateReqToManager(TemplateCreateReq req); TemplateManager managerUpdateReqToManager(TemplateUpdateReq req); + + TemplateManager managerDataToManagerModule(TemplateCreateByDataReq req); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateStageConverter.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateStageConverter.java index f83aeb9a..bf09029f 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateStageConverter.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateStageConverter.java @@ -1,8 +1,7 @@ package cd.casic.ci.process.process.converter; -import cd.casic.ci.process.dto.resp.stage.StageResp; +import cd.casic.ci.process.dto.req.template.TemplateStageCreateByDataReq; import cd.casic.ci.process.dto.resp.template.TemplateStageResp; -import cd.casic.ci.process.process.dataObject.stage.PipStage; import cd.casic.ci.process.process.dataObject.template.TemplateStage; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -15,4 +14,5 @@ public interface TemplateStageConverter { public TemplateStageResp converter(TemplateStage stage); public List converter(List stage); + TemplateStage stageDataToStageModule(TemplateStageCreateByDataReq o); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateTaskConverter.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateTaskConverter.java index 9bfc1181..a5c3409c 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateTaskConverter.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/TemplateTaskConverter.java @@ -1,8 +1,7 @@ package cd.casic.ci.process.process.converter; -import cd.casic.ci.process.dto.resp.task.TasksResp; +import cd.casic.ci.process.dto.req.template.TemplateTaskCreateByDataReq; import cd.casic.ci.process.dto.resp.template.TemplateTasksResp; -import cd.casic.ci.process.process.dataObject.task.PipTask; import cd.casic.ci.process.process.dataObject.template.TemplateTask; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -11,4 +10,6 @@ import org.mapstruct.factory.Mappers; public interface TemplateTaskConverter { TemplateTaskConverter INSTANCE = Mappers.getMapper(TemplateTaskConverter.class); TemplateTasksResp doToResp(TemplateTask task); + + TemplateTask taskDataToTaskModule(TemplateTaskCreateByDataReq k); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/template/TemplateStage.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/template/TemplateStage.java index 8b4e3818..ed55948f 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/template/TemplateStage.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/template/TemplateStage.java @@ -41,7 +41,7 @@ public class TemplateStage extends PipBaseElement { /** * 是否为源码(0-否,1-是) */ - private String code; + private Boolean code = false; /** * 触发方式(0-手动触发,1-自动触发) diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/PipelineService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/PipelineService.java index 30c2e38d..0ab39fba 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/PipelineService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/PipelineService.java @@ -7,6 +7,7 @@ import cd.casic.ci.process.dto.req.pipeline.PipelineReq; import cd.casic.ci.process.dto.req.pipeline.PipelineUpdateReq; import cd.casic.ci.process.dto.resp.context.TreeRunContextResp; import cd.casic.ci.process.dto.resp.pipeline.PipelineFindResp; +import cd.casic.ci.process.process.dataObject.base.BaseIdReq; import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; import cd.casic.framework.commons.pojo.PageResult; import com.baomidou.mybatisplus.extension.service.IService; @@ -38,5 +39,7 @@ public interface PipelineService extends IService { TreeRunContextResp getPipelineRunState(String pipelineId); Long getGroupCount(String groupId); + + void transformTemplateByPipeline(@Valid BaseIdReq req); Boolean targetVersionInUse(List targetVersionId); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java index 8e2cfde4..49e5aef6 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java @@ -5,6 +5,9 @@ import cd.casic.ci.process.dto.req.pipeline.PipelineCreateReq; import cd.casic.ci.process.dto.req.pipeline.PipelineQueryReq; import cd.casic.ci.process.dto.req.pipeline.PipelineReq; import cd.casic.ci.process.dto.req.pipeline.PipelineUpdateReq; +import cd.casic.ci.process.dto.req.template.TemplateCreateByDataReq; +import cd.casic.ci.process.dto.req.template.TemplateStageCreateByDataReq; +import cd.casic.ci.process.dto.req.template.TemplateTaskCreateByDataReq; import cd.casic.ci.process.dto.resp.context.TreeRunContextResp; import cd.casic.ci.process.dto.resp.pipeline.PipelineFindResp; import cd.casic.ci.process.dto.resp.stage.StageResp; @@ -19,6 +22,7 @@ import cd.casic.ci.process.process.dao.pipeline.PipStageDao; import cd.casic.ci.process.process.dao.pipeline.PipTaskDao; import cd.casic.ci.process.process.dao.pipeline.PipelineDao; import cd.casic.ci.process.process.dao.pipeline.TargetVersionDao; +import cd.casic.ci.process.process.dataObject.base.BaseIdReq; import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; import cd.casic.ci.process.process.dataObject.stage.PipStage; import cd.casic.ci.process.process.dataObject.target.TargetVersion; @@ -48,7 +52,13 @@ import org.springframework.util.ObjectUtils; import java.time.Duration; import java.time.LocalDateTime; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -156,8 +166,6 @@ public class PipelineServiceImpl extends ServiceImpl i PipStage pipStage = templateConverter.respToStage(o); pipStage.setId(idWork.nextUUID(null)); pipStage.setPipelineId(pipeline.getId()); - pipStage.setCreateTime(LocalDateTime.now()); - pipStage.setCreator(String.valueOf(WebFrameworkUtils.getLoginUserId())); if (o.isCode()){ pipStage.setCode(true); }else { @@ -540,6 +548,73 @@ public class PipelineServiceImpl extends ServiceImpl i return pipelineDao.selectCount(wrapper); } + @Override + public void transformTemplateByPipeline(BaseIdReq req) { + if (ObjectUtils.isEmpty(req.getId())){ + throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"id不能为空"); + } + + PipelineQueryReq pipelineQueryReq = new PipelineQueryReq(); + pipelineQueryReq.setId(req.getId()); + PipelineFindResp pipeline = this.findPipelineById(pipelineQueryReq); + + if (ObjectUtils.isEmpty(pipeline)){ + throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"数据错误,请联系管理员"); + } + + TemplateCreateByDataReq templateCreateByDataReq = new TemplateCreateByDataReq(); + + templateCreateByDataReq.setTemplateName(pipeline.getName()); + templateCreateByDataReq.setTemplateType(pipeline.getTargetType()); + templateCreateByDataReq.setRemark(pipeline.getRemark()); + + if (!ObjectUtils.isEmpty(pipeline.getStageList())){ + List parentTemplateStageList = new ArrayList<>(); + pipeline.getStageList().forEach(o->{ + TemplateStageCreateByDataReq parentTemplateStage = new TemplateStageCreateByDataReq(); + parentTemplateStage.setStageName(o.getStageName()); + parentTemplateStage.setStageSort(o.getStageSort()); + if (o.isCode()){ + parentTemplateStage.setCode(true); + } + + if (!ObjectUtils.isEmpty(o.getStageList())){ + List childTemplateStageList = new ArrayList<>(); + o.getStageList().forEach(j->{ + TemplateStageCreateByDataReq childTemplateStage = new TemplateStageCreateByDataReq(); + childTemplateStage.setStageName(j.getStageName()); + childTemplateStage.setStageSort(j.getStageSort()); + if (j.isCode()){ + childTemplateStage.setCode(true); + } + + if (!ObjectUtils.isEmpty(j.getTaskValues())){ + List templateTaskList = new ArrayList<>(); + j.getTaskValues().forEach(k->{ + TemplateTaskCreateByDataReq templateTaskCreateByDataReq = new TemplateTaskCreateByDataReq(); + templateTaskCreateByDataReq.setTaskName(k.getTaskName()); + templateTaskCreateByDataReq.setTaskType(k.getTaskType()); + templateTaskCreateByDataReq.setTaskSort(k.getTaskSort()); + templateTaskCreateByDataReq.setTaskProperties(k.getTaskProperties()); + templateTaskList.add(templateTaskCreateByDataReq); + }); + childTemplateStage.setTaskCreateByDataReqList(templateTaskList); + } + + childTemplateStageList.add(childTemplateStage); + }); + + parentTemplateStage.setStageCreateByDataReqList(childTemplateStageList); + } + + parentTemplateStageList.add(parentTemplateStage); + }); + + templateCreateByDataReq.setStageCreateByDataReqList(parentTemplateStageList); + } + templateService.createTemplateByData(templateCreateByDataReq); + } + @Override public Boolean targetVersionInUse(List targetVersionId) { if (CollectionUtils.isEmpty(targetVersionId)) { diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java index da5f8e8d..f4541c2e 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/target/impl/TargetManagerServiceImpl.java @@ -6,9 +6,11 @@ import cd.casic.ci.process.dto.resp.target.TargetManagerResp; import cd.casic.ci.process.dto.resp.target.TargetVersionResp; import cd.casic.ci.process.process.converter.TargetConverter; import cd.casic.ci.process.process.converter.TargetVersionConverter; +import cd.casic.ci.process.process.dao.pipeline.PipelineDao; import cd.casic.ci.process.process.dao.pipeline.TargetManagerDao; import cd.casic.ci.process.process.dao.pipeline.TargetVersionDao; import cd.casic.ci.process.process.dataObject.base.BaseIdReq; +import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; import cd.casic.ci.process.process.dataObject.target.TargetManager; import cd.casic.ci.process.process.dataObject.target.TargetVersion; import cd.casic.ci.process.process.service.pipeline.PipelineService; @@ -65,6 +67,10 @@ public class TargetManagerServiceImpl extends ServiceImpl versionList = targetVersionService.selectListByManagerId(targetManager.getId()); List versionIdList = versionList.stream().map(TargetVersionResp::getId).toList(); - if (pipelineService.targetVersionInUse(versionIdList)) { - throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"当前目标正在被流水线使用无法删除"); - } targetVersionDao.deleteByIds(versionIdList); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/TemplateManagerService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/TemplateManagerService.java index 35a19bc3..8ff118f5 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/TemplateManagerService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/TemplateManagerService.java @@ -1,6 +1,7 @@ package cd.casic.ci.process.process.service.template; +import cd.casic.ci.process.dto.req.template.TemplateCreateByDataReq; import cd.casic.ci.process.dto.req.template.TemplateCreateReq; import cd.casic.ci.process.dto.req.template.TemplateQueryReq; import cd.casic.ci.process.dto.req.template.TemplateUpdateReq; @@ -28,4 +29,6 @@ public interface TemplateManagerService extends IService { List findTemplateList(@Valid TemplateQueryReq query); TemplateFindResp findTemplateById(String id); + + String createTemplateByData(@Valid TemplateCreateByDataReq req); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/impl/TemplateManagerServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/impl/TemplateManagerServiceImpl.java index 56cc7b57..a720e2ff 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/impl/TemplateManagerServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/template/impl/TemplateManagerServiceImpl.java @@ -1,12 +1,15 @@ package cd.casic.ci.process.process.service.template.impl; +import cd.casic.ci.process.dto.req.template.TemplateCreateByDataReq; import cd.casic.ci.process.dto.req.template.TemplateCreateReq; import cd.casic.ci.process.dto.req.template.TemplateQueryReq; import cd.casic.ci.process.dto.req.template.TemplateUpdateReq; import cd.casic.ci.process.dto.resp.template.TemplateFindResp; import cd.casic.ci.process.dto.resp.template.TemplateStageResp; import cd.casic.ci.process.process.converter.TemplateConverter; +import cd.casic.ci.process.process.converter.TemplateStageConverter; +import cd.casic.ci.process.process.converter.TemplateTaskConverter; import cd.casic.ci.process.process.dao.template.TemplateManagerDao; import cd.casic.ci.process.process.dao.template.TemplateStageDao; import cd.casic.ci.process.process.dao.template.TemplateTaskDao; @@ -15,14 +18,12 @@ import cd.casic.ci.process.process.dataObject.template.TemplateStage; import cd.casic.ci.process.process.dataObject.template.TemplateTask; import cd.casic.ci.process.process.service.template.TemplateManagerService; import cd.casic.ci.process.process.service.template.TemplateStageService; -import cd.casic.ci.process.process.service.template.TemplateTaskService; import cd.casic.ci.process.util.snowflake.SnowflakeIdentifierGenerator; import cd.casic.framework.commons.exception.ServiceException; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.framework.commons.pojo.PageResult; import cd.casic.framework.security.dal.user.AdminUserDO; import cd.casic.framework.tenant.core.service.AdminUserServiceImpl; -import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -67,6 +68,8 @@ public class TemplateManagerServiceImpl extends ServiceImpl stageList = new ArrayList<>(); + List taskList = new ArrayList<>(); + if (!ObjectUtils.isEmpty(req.getStageCreateByDataReqList())){ + req.getStageCreateByDataReqList().forEach(o->{ + TemplateStage templateStage = templateStageConverter.stageDataToStageModule(o); + templateStage.setId(idWork.nextUUID(null)); + templateStage.setTemplateId(templateManager.getId()); + templateStage.setParentId("-1"); + stageList.add(templateStage); + + if (!ObjectUtils.isEmpty(o.getStageCreateByDataReqList())){ + o.getStageCreateByDataReqList().forEach(j->{ + TemplateStage childTemplateStage = templateStageConverter.stageDataToStageModule(j); + childTemplateStage.setId(idWork.nextUUID(null)); + childTemplateStage.setParentId(templateStage.getId()); + childTemplateStage.setTemplateId(templateStage.getTemplateId()); + stageList.add(childTemplateStage); + + if (!ObjectUtils.isEmpty(j.getTaskCreateByDataReqList())){ + j.getTaskCreateByDataReqList().forEach(k->{ + TemplateTask templateTask = TemplateTaskConverter.INSTANCE.taskDataToTaskModule(k); + templateTask.setId(idWork.nextUUID(null)); + templateTask.setStageId(childTemplateStage.getId()); + templateTask.setTemplateId(templateManager.getId()); + taskList.add(templateTask); + }); + } + }); + } + }); + } + templateStageDao.insertBatch(stageList); + templateTaskDao.insertBatch(taskList); + return templateManager.getId(); + } + private void setUserName(TemplateFindResp templateFindResp) { if (!StringUtils.isEmpty(templateFindResp.getCreator())){ AdminUserDO user = adminUserService.getUser(Long.valueOf(templateFindResp.getCreator())); diff --git a/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/controller/dto/TerminalAccessDTO.java b/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/controller/dto/TerminalAccessDTO.java index 867c5795..88785d99 100644 --- a/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/controller/dto/TerminalAccessDTO.java +++ b/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/controller/dto/TerminalAccessDTO.java @@ -18,7 +18,7 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -//@DesensitizeObject 、、todo 自动脱敏的注解 +//@DesensitizeObject 自动脱敏的注解 @Schema(name = "TerminalAccessDTO", description = "终端访问参数") public class TerminalAccessDTO { diff --git a/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/host/jsch/SessionStores.java b/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/host/jsch/SessionStores.java index 2f7c264e..31df4aa4 100644 --- a/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/host/jsch/SessionStores.java +++ b/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/host/jsch/SessionStores.java @@ -1,6 +1,7 @@ package cd.casic.module.terminal.host.jsch; +import cd.casic.module.machine.utils.CryptogramUtil; import cd.casic.module.terminal.common.AesEncryptUtils; import cd.casic.module.terminal.common.AppConst; import cd.casic.module.terminal.controller.dto.TerminalConnectDTO; @@ -72,13 +73,13 @@ public class SessionStores { if (useKey) { // 加载密钥 String publicKey = Optional.ofNullable(conn.getPublicKey()) - .map(AesEncryptUtils::decryptAsString) + .map(CryptogramUtil::doDecrypt) .orElse(null); String privateKey = Optional.ofNullable(conn.getPrivateKey()) - .map(AesEncryptUtils::decryptAsString) + .map(CryptogramUtil::doDecrypt) .orElse(null); String password = Optional.ofNullable(conn.getPrivateKeyPassword()) - .map(AesEncryptUtils::decryptAsString) + .map(CryptogramUtil::doDecrypt) .orElse(null); sessionHolder.addIdentityValue(String.valueOf(conn.getKeyId()), privateKey, @@ -91,8 +92,7 @@ public class SessionStores { if (!useKey) { String password = conn.getPassword(); if (!Strings.isEmpty(password)) { -// session.password(AesEncryptUtils.decryptAsString(password)); - session.password(password); + session.password(CryptogramUtil.doDecrypt(password)); } } // 超时时间 diff --git a/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/service/impl/HostConnectServiceImpl.java b/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/service/impl/HostConnectServiceImpl.java index 0056ca1e..d1a5e53a 100644 --- a/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/service/impl/HostConnectServiceImpl.java +++ b/modules/module-ci-terminal/src/main/java/cd/casic/module/terminal/service/impl/HostConnectServiceImpl.java @@ -5,6 +5,7 @@ import cd.casic.module.machine.dal.dataobject.MachineInfoDO; import cd.casic.module.machine.dal.dataobject.SecretKeyDO; import cd.casic.module.machine.dal.mysql.MachineInfoMapper; import cd.casic.module.machine.dal.mysql.SecretKeyMapper; +import cd.casic.module.machine.utils.CryptogramUtil; import cd.casic.module.terminal.common.ErrorMessage; import cd.casic.module.terminal.controller.dto.TerminalConnectDTO; import cd.casic.module.terminal.enums.*; @@ -64,7 +65,7 @@ public class HostConnectServiceImpl implements HostConnectService { CONFIG.setUsername(host.getUsername()); if (host.getAuthenticationType().equals(1)){ CONFIG.setAuthType(HostSshAuthTypeEnum.PASSWORD.name()); - CONFIG.setPassword(host.getPassword()); + CONFIG.setPassword(CryptogramUtil.doDecrypt(host.getPassword())); }else { CONFIG.setKeyId(host.getSecretKeyId()); }