package com.qmth.ops.api.controller.admin; import com.qmth.boot.api.annotation.Aac; import com.qmth.ops.api.binder.FileFormatBinder; import com.qmth.ops.api.constants.OpsApiConstants; import com.qmth.ops.api.security.AdminSession; import com.qmth.ops.api.security.Permission; import com.qmth.ops.api.vo.CodeNameVO; import com.qmth.ops.api.vo.SuccessVO; import com.qmth.ops.biz.domain.*; import com.qmth.ops.biz.service.*; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; import java.util.Arrays; import java.util.List; @RestController @RequestMapping(OpsApiConstants.ADMIN_URI_PREFIX + "/property") public class PropertyController { @Resource private PropertyGroupService propertyGroupService; @Resource private PropertyService propertyService; @Resource private ModuleService moduleService; @Resource private VersionService versionService; @Resource private EnvService envService; @Resource private UserPermissionService userPermissionService; @InitBinder public void initBinder(WebDataBinder dataBinder) { dataBinder.addCustomFormatter(new FileFormatBinder()); } @RequestMapping("/groups") @Aac(auth = false) public List listGroups() { return propertyGroupService.getPropertyGroupList(); } @RequestMapping("/modes") @Aac(auth = false) public Object listModes() { return Arrays.stream(PropertyMode.values()).map(model -> new CodeNameVO(model.getCode(), model.getName())) .toArray(); } @PostMapping("/baseline") public List listBaseline(@RequestAttribute AdminSession adminSession, @RequestParam Long versionId, @RequestParam Long moduleId) { return propertyService.listBaseline(versionId, moduleId); } @PostMapping("/baseline/update") public Object updateBaseline(@RequestAttribute AdminSession adminSession, @RequestParam Long versionId, @RequestParam Long moduleId, @RequestParam MultipartFile file, @RequestParam FileFormat extension, @RequestParam(required = false) Long inheritVersionId) throws IOException { Version version = versionService.getById(versionId); adminSession.hasPermission(Permission.PROPERTY_BASELINE_EDIT, version.getAppId()); return propertyService .updateBaseline(version, moduleService.getById(moduleId), file.getInputStream(), extension, inheritVersionId != null ? versionService.getById(inheritVersionId) : null); } @PostMapping("/baseline/item/update") public PropertyItem updateBaselineItem(@RequestAttribute AdminSession adminSession, PropertyItem item) { Version version = versionService.getById(item.getVersionId()); adminSession.hasPermission(Permission.PROPERTY_BASELINE_EDIT, version.getAppId()); return propertyService.updateBaselineItem(item); } @PostMapping("/list") public List listPropertyItem(@RequestAttribute AdminSession adminSession, @RequestParam Long versionId, @RequestParam Long moduleId, @RequestParam Long envId) { Env env = envService.getById(envId); List list = propertyService.listPropertyItem(versionId, moduleId, env.getId()); //且非环境可编辑用户,需要隐藏机密信息 if (!userPermissionService.hasPermission(adminSession.getUser(), Permission.PROPERTY_EDIT, env.getId())) { for (PropertyItem item : list) { //包含密钥/密码类信息 if (item.getKey().contains("secret") || item.getKey().contains("password")) { //直接引用其他变量时不隐藏 if (!(item.getValue().startsWith("${") && item.getValue().endsWith("}"))) { item.setValue("***"); } } //core-fss在oss模式下隐藏AK信息 else if (item.getKey().startsWith("com.qmth.fss") && item.getKey().endsWith("config")) { if (item.getValue().startsWith("oss")) { String value = item.getValue(); item.setValue("oss://***" + value.substring(value.indexOf("@"))); } } //云阅卷file.store配置oss开头的配置值 else if (item.getKey().equals("file.store")) { if (item.getValue().startsWith("oss")) { String value = item.getValue(); item.setValue("oss://***" + value.substring(value.indexOf("@"))); } } } } return list; } @PostMapping("/item/update") public PropertyItem updatePropertyItem(@RequestAttribute AdminSession adminSession, PropertyItem item) { Env env = envService.getById(item.getEnvId()); adminSession.hasPermission(Permission.PROPERTY_EDIT, env.getId()); return propertyService.updatePropertyItem(item); } @PostMapping("/item/delete") public Object deletePropertyItem(@RequestAttribute AdminSession adminSession, PropertyItem item) { Env env = envService.getById(item.getEnvId()); adminSession.hasPermission(Permission.PROPERTY_EDIT, env.getId()); propertyService.deletePropertyItem(item); return new SuccessVO(true); } }