diff --git a/amber/src/main/scala/org/apache/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala b/amber/src/main/scala/org/apache/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala index 315418516d3..43eb4bb5c55 100644 --- a/amber/src/main/scala/org/apache/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala +++ b/amber/src/main/scala/org/apache/texera/web/resource/dashboard/user/workflow/WorkflowResource.scala @@ -840,6 +840,9 @@ class WorkflowResource extends LazyLogging { .where(WORKFLOW.WID.eq(wid)) .and(WORKFLOW.IS_PUBLIC.isTrue) .fetchOne() + if (workflow == null) { + throw new NotFoundException(s"Public workflow with id $wid not found") + } WorkflowWithPrivilege( workflow.getName, workflow.getDescription, diff --git a/amber/src/test/scala/org/apache/texera/web/resource/dashboard/file/WorkflowResourceSpec.scala b/amber/src/test/scala/org/apache/texera/web/resource/dashboard/file/WorkflowResourceSpec.scala index c2852fc6548..9d7883f102e 100644 --- a/amber/src/test/scala/org/apache/texera/web/resource/dashboard/file/WorkflowResourceSpec.scala +++ b/amber/src/test/scala/org/apache/texera/web/resource/dashboard/file/WorkflowResourceSpec.scala @@ -1027,6 +1027,12 @@ class WorkflowResourceSpec assertThrows[ForbiddenException](workflowResource.makePublic(wid, sessionUser2)) } + "WorkflowResource.retrievePublicWorkflow" should "hide private and missing workflows" in { + val wid = seedWorkflow(sessionUser1, "private-wf").workflow.getWid + assertThrows[NotFoundException](workflowResource.retrievePublicWorkflow(wid)) + assertThrows[NotFoundException](workflowResource.retrievePublicWorkflow(wid + 100000)) + } + "WorkflowResource.searchWorkflowByOperator" should "return only workflows whose content contains the operator" in { val wid = seedWorkflow( sessionUser1,