fix: Override vulnerability #1050

This commit is contained in:
tjq 2025-01-22 00:15:08 +08:00
parent a406602b09
commit 024b1a4f87
6 changed files with 146 additions and 69 deletions

View File

@ -22,6 +22,7 @@ import tech.powerjob.server.auth.Permission;
import tech.powerjob.server.auth.Role;
import tech.powerjob.server.auth.RoleScope;
import tech.powerjob.server.auth.common.AuthConstants;
import tech.powerjob.server.auth.common.utils.HttpHeaderUtils;
import tech.powerjob.server.auth.interceptor.ApiPermission;
import tech.powerjob.server.auth.plugin.ModifyOrCreateDynamicPermission;
import tech.powerjob.server.auth.plugin.SaveAppGrantPermissionPlugin;
@ -43,6 +44,7 @@ import tech.powerjob.server.web.service.AppWebService;
import tech.powerjob.server.web.service.NamespaceWebService;
import tech.powerjob.server.web.service.UserWebService;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@ -81,9 +83,11 @@ public class AppInfoController {
@PostMapping("/delete")
@ApiPermission(name = "App-Delete", roleScope = RoleScope.APP, requiredPermission = Permission.SU)
public ResultDTO<Void> deleteApp(Long appId) {
public ResultDTO<Void> deleteApp(HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
appWebService.delete(appId);
return ResultDTO.success(null);
}

View File

@ -7,12 +7,13 @@ import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import tech.powerjob.common.OmsConstant;
import tech.powerjob.common.enums.SwitchableStatus;
import tech.powerjob.common.response.ResultDTO;
import tech.powerjob.server.auth.Permission;
import tech.powerjob.server.auth.RoleScope;
import tech.powerjob.server.auth.common.utils.HttpHeaderUtils;
import tech.powerjob.server.auth.interceptor.ApiPermission;
import tech.powerjob.server.common.constants.ContainerSourceType;
import tech.powerjob.common.enums.SwitchableStatus;
import tech.powerjob.server.common.utils.OmsFileUtils;
import tech.powerjob.server.core.container.ContainerService;
import tech.powerjob.server.core.container.ContainerTemplateGenerator;
@ -24,6 +25,7 @@ import tech.powerjob.server.web.request.GenerateContainerTemplateRequest;
import tech.powerjob.server.web.request.SaveContainerInfoRequest;
import tech.powerjob.server.web.response.ContainerInfoVO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
@ -71,7 +73,6 @@ public class ContainerController {
}
@PostMapping("/downloadContainerTemplate")
@ApiPermission(name = "Container-DownloadContainerTemplate", roleScope = RoleScope.APP, requiredPermission = Permission.READ)
public void downloadContainerTemplate(@RequestBody GenerateContainerTemplateRequest req, HttpServletResponse response) throws IOException {
File zipFile = ContainerTemplateGenerator.generate(req.getGroup(), req.getArtifact(), req.getName(), req.getPackageName(), req.getJavaVersion());
OmsFileUtils.file2HttpResponse(zipFile, response);
@ -88,7 +89,11 @@ public class ContainerController {
@PostMapping("/save")
@ApiPermission(name = "Container-Save", roleScope = RoleScope.APP, requiredPermission = Permission.OPS)
public ResultDTO<Void> saveContainer(@RequestBody SaveContainerInfoRequest request) {
public ResultDTO<Void> saveContainer(@RequestBody SaveContainerInfoRequest request, HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
request.setAppId(appId);
request.valid();
ContainerInfoDO container = new ContainerInfoDO();
@ -102,14 +107,16 @@ public class ContainerController {
@GetMapping("/delete")
@ApiPermission(name = "Container-Delete", roleScope = RoleScope.APP, requiredPermission = Permission.OPS)
public ResultDTO<Void> deleteContainer(Long appId, Long containerId) {
public ResultDTO<Void> deleteContainer(Long containerId, HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
containerService.delete(appId, containerId);
return ResultDTO.success(null);
}
@GetMapping("/list")
@ApiPermission(name = "Container-List", roleScope = RoleScope.APP, requiredPermission = Permission.READ)
public ResultDTO<List<ContainerInfoVO>> listContainers(Long appId) {
public ResultDTO<List<ContainerInfoVO>> listContainers(HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
List<ContainerInfoVO> res = containerInfoRepository.findByAppIdAndStatusNot(appId, SwitchableStatus.DELETED.getV())
.stream().map(ContainerController::convert).collect(Collectors.toList());
return ResultDTO.success(res);
@ -117,7 +124,9 @@ public class ContainerController {
@GetMapping("/listDeployedWorker")
@ApiPermission(name = "Container-ListDeployedWorker", roleScope = RoleScope.APP, requiredPermission = Permission.READ)
public ResultDTO<String> listDeployedWorker(Long appId, Long containerId, HttpServletResponse response) {
public ResultDTO<String> listDeployedWorker(Long containerId, HttpServletResponse response, HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
AppInfoDO appInfoDO = appInfoRepository.findById(appId).orElseThrow(() -> new IllegalArgumentException("can't find app by id:" + appId));
String targetServer = appInfoDO.getCurrentServer();

View File

@ -1,35 +1,39 @@
package tech.powerjob.server.web.controller;
import tech.powerjob.common.OmsConstant;
import tech.powerjob.common.enums.InstanceStatus;
import tech.powerjob.common.response.ResultDTO;
import tech.powerjob.server.auth.Permission;
import tech.powerjob.server.auth.RoleScope;
import tech.powerjob.server.auth.interceptor.ApiPermission;
import tech.powerjob.server.common.utils.OmsFileUtils;
import tech.powerjob.server.persistence.PageResult;
import tech.powerjob.server.persistence.StringPage;
import tech.powerjob.server.persistence.remote.model.InstanceInfoDO;
import tech.powerjob.server.persistence.remote.repository.InstanceInfoRepository;
import tech.powerjob.server.core.service.CacheService;
import tech.powerjob.server.core.instance.InstanceLogService;
import tech.powerjob.server.core.instance.InstanceService;
import tech.powerjob.server.web.request.QueryInstanceDetailRequest;
import tech.powerjob.server.web.request.QueryInstanceRequest;
import tech.powerjob.server.web.response.InstanceDetailVO;
import tech.powerjob.server.web.response.InstanceInfoVO;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import tech.powerjob.common.OmsConstant;
import tech.powerjob.common.enums.ErrorCodes;
import tech.powerjob.common.enums.InstanceStatus;
import tech.powerjob.common.exception.PowerJobException;
import tech.powerjob.common.response.ResultDTO;
import tech.powerjob.server.auth.Permission;
import tech.powerjob.server.auth.RoleScope;
import tech.powerjob.server.auth.common.utils.HttpHeaderUtils;
import tech.powerjob.server.auth.interceptor.ApiPermission;
import tech.powerjob.server.common.utils.OmsFileUtils;
import tech.powerjob.server.core.instance.InstanceLogService;
import tech.powerjob.server.core.instance.InstanceService;
import tech.powerjob.server.core.service.CacheService;
import tech.powerjob.server.persistence.PageResult;
import tech.powerjob.server.persistence.StringPage;
import tech.powerjob.server.persistence.remote.model.InstanceInfoDO;
import tech.powerjob.server.persistence.remote.repository.InstanceInfoRepository;
import tech.powerjob.server.web.request.QueryInstanceDetailRequest;
import tech.powerjob.server.web.request.QueryInstanceRequest;
import tech.powerjob.server.web.response.InstanceDetailVO;
import tech.powerjob.server.web.response.InstanceInfoVO;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.net.URL;
@ -61,29 +65,38 @@ public class InstanceController {
@GetMapping("/stop")
@ApiPermission(name = "Instance-Stop", roleScope = RoleScope.APP, requiredPermission = Permission.OPS)
public ResultDTO<Void> stopInstance(Long appId,Long instanceId) {
instanceService.stopInstance(appId,instanceId);
public ResultDTO<Void> stopInstance(Long instanceId, HttpServletRequest hsr) {
preCheck(instanceId, hsr);
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
instanceService.stopInstance(appId, instanceId);
return ResultDTO.success(null);
}
@GetMapping("/retry")
@ApiPermission(name = "Instance-Retry", roleScope = RoleScope.APP, requiredPermission = Permission.OPS)
public ResultDTO<Void> retryInstance(String appId, Long instanceId) {
instanceService.retryInstance(Long.valueOf(appId), instanceId);
public ResultDTO<Void> retryInstance(Long instanceId, HttpServletRequest hsr) {
preCheck(instanceId, hsr);
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
instanceService.retryInstance(appId, instanceId);
return ResultDTO.success(null);
}
@GetMapping("/detail")
@ApiPermission(name = "Instance-Detail", roleScope = RoleScope.APP, requiredPermission = Permission.READ)
public ResultDTO<InstanceDetailVO> getInstanceDetail(Long appId, Long instanceId) {
public ResultDTO<InstanceDetailVO> getInstanceDetail(Long instanceId, HttpServletRequest hsr) {
QueryInstanceDetailRequest queryInstanceDetailRequest = new QueryInstanceDetailRequest();
queryInstanceDetailRequest.setAppId(appId);
queryInstanceDetailRequest.setAppId(Long.valueOf(HttpHeaderUtils.fetchAppId(hsr)));
queryInstanceDetailRequest.setInstanceId(instanceId);
return getInstanceDetailPlus(queryInstanceDetailRequest);
return getInstanceDetailPlus(queryInstanceDetailRequest, hsr);
}
@PostMapping("/detailPlus")
public ResultDTO<InstanceDetailVO> getInstanceDetailPlus(@RequestBody QueryInstanceDetailRequest req) {
@ApiPermission(name = "Instance-DetailPlus", roleScope = RoleScope.APP, requiredPermission = Permission.READ)
public ResultDTO<InstanceDetailVO> getInstanceDetailPlus(@RequestBody QueryInstanceDetailRequest req, HttpServletRequest hsr) {
// 非法请求参数校验
String customQuery = req.getCustomQuery();
@ -95,6 +108,8 @@ public class InstanceController {
// 兼容老版本前端不存在 appId 的场景
if (req.getAppId() == null) {
req.setAppId(instanceService.getInstanceInfo(req.getInstanceId()).getAppId());
} else {
req.setAppId(Long.valueOf(HttpHeaderUtils.fetchAppId(hsr)));
}
return ResultDTO.success(InstanceDetailVO.from(instanceService.getInstanceDetail(req.getAppId(), req.getInstanceId(), customQuery)));
@ -102,13 +117,20 @@ public class InstanceController {
@GetMapping("/log")
@ApiPermission(name = "Instance-Log", roleScope = RoleScope.APP, requiredPermission = Permission.OPS)
public ResultDTO<StringPage> getInstanceLog(Long appId, Long instanceId, Long index) {
public ResultDTO<StringPage> getInstanceLog(Long instanceId, Long index, HttpServletRequest hsr) {
preCheck(instanceId, hsr);
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
return ResultDTO.success(instanceLogService.fetchInstanceLog(appId, instanceId, index));
}
@GetMapping("/downloadLogUrl")
@ApiPermission(name = "Instance-FetchDownloadLogUrl", roleScope = RoleScope.APP, requiredPermission = Permission.READ)
public ResultDTO<String> getDownloadUrl(Long appId, Long instanceId) {
public ResultDTO<String> getDownloadUrl(Long instanceId, HttpServletRequest hsr) {
preCheck(instanceId, hsr);
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
return ResultDTO.success(instanceLogService.fetchDownloadUrl(appId, instanceId));
}
@ -140,7 +162,10 @@ public class InstanceController {
@PostMapping("/list")
@ApiPermission(name = "Instance-List", roleScope = RoleScope.APP, requiredPermission = Permission.READ)
public ResultDTO<PageResult<InstanceInfoVO>> list(@RequestBody QueryInstanceRequest request) {
public ResultDTO<PageResult<InstanceInfoVO>> list(@RequestBody QueryInstanceRequest request, HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
request.setAppId(appId);
Sort sort = Sort.by(Sort.Direction.DESC, "gmtModified");
PageRequest pageable = PageRequest.of(request.getIndex(), request.getPageSize(), sort);
@ -166,4 +191,16 @@ public class InstanceController {
return pageResult;
}
private void preCheck(Long instanceId, HttpServletRequest hsr) {
Optional<InstanceInfoDO> instanceInfoOpt = instanceInfoRepository.findById(instanceId);
if (!instanceInfoOpt.isPresent()) {
throw new PowerJobException(ErrorCodes.ILLEGAL_ARGS_ERROR, "Can'tFindInstanceInfoById:" + instanceId);
}
Long appId = instanceInfoOpt.get().getAppId();
String targetId = HttpHeaderUtils.fetchAppId(hsr);
if (!targetId.equalsIgnoreCase(String.valueOf(appId))) {
throw new PowerJobException(ErrorCodes.INVALID_REQUEST, String.format("AppIdNotMatch(%d!=%d)", targetId, appId));
}
}
}

View File

@ -8,6 +8,7 @@ import tech.powerjob.common.response.ResultDTO;
import tech.powerjob.server.auth.Permission;
import tech.powerjob.server.auth.RoleScope;
import tech.powerjob.server.auth.common.AuthConstants;
import tech.powerjob.server.auth.common.utils.HttpHeaderUtils;
import tech.powerjob.server.auth.interceptor.ApiPermission;
import tech.powerjob.server.auth.plugin.ModifyOrCreateDynamicPermission;
import tech.powerjob.server.auth.plugin.SaveNamespaceGrantPermissionPlugin;
@ -25,6 +26,7 @@ import tech.powerjob.server.web.service.NamespaceWebService;
import tech.powerjob.server.web.service.UserWebService;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.stream.Collectors;
@ -57,8 +59,9 @@ public class NamespaceController {
@DeleteMapping("/delete")
@ApiPermission(name = "Namespace-Delete", roleScope = RoleScope.NAMESPACE, requiredPermission = Permission.SU)
public ResultDTO<Void> deleteNamespace(Long id) {
namespaceWebService.delete(id);
public ResultDTO<Void> deleteNamespace(HttpServletRequest hsr) {
Long namespaceId = Long.valueOf(HttpHeaderUtils.fetchNamespaceId(hsr));
namespaceWebService.delete(namespaceId);
return ResultDTO.success(null);
}

View File

@ -5,13 +5,14 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.*;
import tech.powerjob.common.enums.SwitchableStatus;
import tech.powerjob.common.request.http.SaveWorkflowNodeRequest;
import tech.powerjob.common.request.http.SaveWorkflowRequest;
import tech.powerjob.common.response.ResultDTO;
import tech.powerjob.server.auth.Permission;
import tech.powerjob.server.auth.RoleScope;
import tech.powerjob.server.auth.common.utils.HttpHeaderUtils;
import tech.powerjob.server.auth.interceptor.ApiPermission;
import tech.powerjob.common.enums.SwitchableStatus;
import tech.powerjob.server.core.workflow.WorkflowService;
import tech.powerjob.server.persistence.PageResult;
import tech.powerjob.server.persistence.remote.model.WorkflowInfoDO;
@ -21,6 +22,7 @@ import tech.powerjob.server.web.request.QueryWorkflowInfoRequest;
import tech.powerjob.server.web.response.WorkflowInfoVO;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.text.ParseException;
import java.util.List;
import java.util.stream.Collectors;
@ -43,40 +45,51 @@ public class WorkflowController {
@PostMapping("/save")
@ApiPermission(name = "Workflow-Save", roleScope = RoleScope.APP, requiredPermission = Permission.WRITE)
public ResultDTO<Long> save(@RequestBody SaveWorkflowRequest req) throws ParseException {
public ResultDTO<Long> save(@RequestBody SaveWorkflowRequest req, HttpServletRequest hsr) throws ParseException {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
req.setAppId(appId);
return ResultDTO.success(workflowService.saveWorkflow(req));
}
@PostMapping("/copy")
@ApiPermission(name = "Workflow-Copy", roleScope = RoleScope.APP, requiredPermission = Permission.WRITE)
public ResultDTO<Long> copy(Long workflowId, Long appId) {
return ResultDTO.success(workflowService.copyWorkflow(workflowId,appId));
public ResultDTO<Long> copy(Long workflowId, HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
return ResultDTO.success(workflowService.copyWorkflow(workflowId, appId));
}
@GetMapping("/disable")
@ApiPermission(name = "Workflow-Disable", roleScope = RoleScope.APP, requiredPermission = Permission.WRITE)
public ResultDTO<Void> disableWorkflow(Long workflowId, Long appId) {
public ResultDTO<Void> disableWorkflow(Long workflowId, HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
workflowService.disableWorkflow(workflowId, appId);
return ResultDTO.success(null);
}
@GetMapping("/enable")
@ApiPermission(name = "Workflow-Enable", roleScope = RoleScope.APP, requiredPermission = Permission.WRITE)
public ResultDTO<Void> enableWorkflow(Long workflowId, Long appId) {
public ResultDTO<Void> enableWorkflow(Long workflowId, HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
workflowService.enableWorkflow(workflowId, appId);
return ResultDTO.success(null);
}
@GetMapping("/delete")
@ApiPermission(name = "Workflow-Delete", roleScope = RoleScope.APP, requiredPermission = Permission.WRITE)
public ResultDTO<Void> deleteWorkflow(Long workflowId, Long appId) {
public ResultDTO<Void> deleteWorkflow(Long workflowId, HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
workflowService.deleteWorkflow(workflowId, appId);
return ResultDTO.success(null);
}
@PostMapping("/list")
@ApiPermission(name = "Workflow-List", roleScope = RoleScope.APP, requiredPermission = Permission.READ)
public ResultDTO<PageResult<WorkflowInfoVO>> list(@RequestBody QueryWorkflowInfoRequest req) {
public ResultDTO<PageResult<WorkflowInfoVO>> list(@RequestBody QueryWorkflowInfoRequest req, HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
req.setAppId(appId);
Sort sort = Sort.by(Sort.Direction.DESC, "gmtCreate");
PageRequest pageRequest = PageRequest.of(req.getIndex(), req.getPageSize(), sort);
@ -98,23 +111,28 @@ public class WorkflowController {
@GetMapping("/run")
@ApiPermission(name = "Workflow-Run", roleScope = RoleScope.APP, requiredPermission = Permission.OPS)
public ResultDTO<Long> runWorkflow(Long workflowId, Long appId,
public ResultDTO<Long> runWorkflow(Long workflowId,
@RequestParam(required = false,defaultValue = "0") Long delay,
@RequestParam(required = false) String initParams
@RequestParam(required = false) String initParams,
HttpServletRequest hsr
) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
return ResultDTO.success(workflowService.runWorkflow(workflowId, appId, initParams, delay));
}
@GetMapping("/fetch")
@ApiPermission(name = "Workflow-Fetch", roleScope = RoleScope.APP, requiredPermission = Permission.READ)
public ResultDTO<WorkflowInfoVO> fetchWorkflow(Long workflowId, Long appId) {
public ResultDTO<WorkflowInfoVO> fetchWorkflow(Long workflowId, HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
WorkflowInfoDO workflowInfoDO = workflowService.fetchWorkflow(workflowId, appId);
return ResultDTO.success(WorkflowInfoVO.from(workflowInfoDO));
}
@PostMapping("/saveNode")
@ApiPermission(name = "Workflow-SaveNode", roleScope = RoleScope.APP, requiredPermission = Permission.WRITE)
public ResultDTO<List<WorkflowNodeInfoDO>> addWorkflowNode(@RequestBody List<SaveWorkflowNodeRequest> request) {
public ResultDTO<List<WorkflowNodeInfoDO>> addWorkflowNode(@RequestBody List<SaveWorkflowNodeRequest> request, HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
request.forEach(r -> r.setAppId(appId));
return ResultDTO.success(workflowService.saveWorkflowNode(request));
}

View File

@ -1,26 +1,28 @@
package tech.powerjob.server.web.controller;
import tech.powerjob.common.enums.WorkflowInstanceStatus;
import tech.powerjob.common.response.ResultDTO;
import tech.powerjob.server.auth.Permission;
import tech.powerjob.server.auth.RoleScope;
import tech.powerjob.server.auth.interceptor.ApiPermission;
import tech.powerjob.server.persistence.PageResult;
import tech.powerjob.server.persistence.remote.model.WorkflowInstanceInfoDO;
import tech.powerjob.server.persistence.remote.repository.WorkflowInstanceInfoRepository;
import tech.powerjob.server.core.service.CacheService;
import tech.powerjob.server.core.workflow.WorkflowInstanceService;
import tech.powerjob.server.web.request.QueryWorkflowInstanceRequest;
import tech.powerjob.server.web.response.WorkflowInstanceInfoVO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import tech.powerjob.common.enums.WorkflowInstanceStatus;
import tech.powerjob.common.response.ResultDTO;
import tech.powerjob.server.auth.Permission;
import tech.powerjob.server.auth.RoleScope;
import tech.powerjob.server.auth.common.utils.HttpHeaderUtils;
import tech.powerjob.server.auth.interceptor.ApiPermission;
import tech.powerjob.server.core.service.CacheService;
import tech.powerjob.server.core.workflow.WorkflowInstanceService;
import tech.powerjob.server.persistence.PageResult;
import tech.powerjob.server.persistence.remote.model.WorkflowInstanceInfoDO;
import tech.powerjob.server.persistence.remote.repository.WorkflowInstanceInfoRepository;
import tech.powerjob.server.web.request.QueryWorkflowInstanceRequest;
import tech.powerjob.server.web.response.WorkflowInstanceInfoVO;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.stream.Collectors;
/**
@ -42,21 +44,24 @@ public class WorkflowInstanceController {
@GetMapping("/stop")
@ApiPermission(name = "WorkflowInstance-Stop", roleScope = RoleScope.APP, requiredPermission = Permission.OPS)
public ResultDTO<Void> stopWfInstance(Long wfInstanceId, Long appId) {
public ResultDTO<Void> stopWfInstance(Long wfInstanceId, HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
workflowInstanceService.stopWorkflowInstanceEntrance(wfInstanceId, appId);
return ResultDTO.success(null);
}
@RequestMapping("/retry")
@ApiPermission(name = "WorkflowInstance-Retry", roleScope = RoleScope.APP, requiredPermission = Permission.OPS)
public ResultDTO<Void> retryWfInstance(Long wfInstanceId, Long appId) {
public ResultDTO<Void> retryWfInstance(Long wfInstanceId, HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
workflowInstanceService.retryWorkflowInstance(wfInstanceId, appId);
return ResultDTO.success(null);
}
@RequestMapping("/markNodeAsSuccess")
@ApiPermission(name = "WorkflowInstance-MarkNodeAsSuccess", roleScope = RoleScope.APP, requiredPermission = Permission.OPS)
public ResultDTO<Void> markNodeAsSuccess(Long wfInstanceId, Long appId, Long nodeId) {
public ResultDTO<Void> markNodeAsSuccess(Long wfInstanceId, Long nodeId, HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
workflowInstanceService.markNodeAsSuccess(appId, wfInstanceId, nodeId);
return ResultDTO.success(null);
}
@ -64,14 +69,15 @@ public class WorkflowInstanceController {
@GetMapping("/info")
@ApiPermission(name = "WorkflowInstance-Info", roleScope = RoleScope.APP, requiredPermission = Permission.READ)
public ResultDTO<WorkflowInstanceInfoVO> getInfo(Long wfInstanceId, Long appId) {
public ResultDTO<WorkflowInstanceInfoVO> getInfo(Long wfInstanceId, HttpServletRequest hsr) {
Long appId = Long.valueOf(HttpHeaderUtils.fetchAppId(hsr));
WorkflowInstanceInfoDO wfInstanceDO = workflowInstanceService.fetchWfInstance(wfInstanceId, appId);
return ResultDTO.success(WorkflowInstanceInfoVO.from(wfInstanceDO, cacheService.getWorkflowName(wfInstanceDO.getWorkflowId())));
}
@PostMapping("/list")
@ApiPermission(name = "WorkflowInstance-List", roleScope = RoleScope.APP, requiredPermission = Permission.READ)
public ResultDTO<PageResult<WorkflowInstanceInfoVO>> listWfInstance(@RequestBody QueryWorkflowInstanceRequest req) {
public ResultDTO<PageResult<WorkflowInstanceInfoVO>> listWfInstance(@RequestBody QueryWorkflowInstanceRequest req, HttpServletRequest hsr) {
Sort sort = Sort.by(Sort.Direction.DESC, "gmtModified");
PageRequest pageable = PageRequest.of(req.getIndex(), req.getPageSize(), sort);