From 06f92d8d7e3180fcc2f7d060435ec2de24b22912 Mon Sep 17 00:00:00 2001 From: MariusVuscanNx <96233009+MariusVuscanNx@users.noreply.github.com> Date: Fri, 25 Aug 2023 10:11:22 +0300 Subject: [PATCH] Enrich trigger validation to take into consideration path and method uniquness (#4363) --- .../ValidateWorkflowRequestHandler.cs | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/modules/Elsa.Http/Handlers/ValidateWorkflowRequestHandler.cs b/src/modules/Elsa.Http/Handlers/ValidateWorkflowRequestHandler.cs index 2d50330c2..bd29eadf5 100644 --- a/src/modules/Elsa.Http/Handlers/ValidateWorkflowRequestHandler.cs +++ b/src/modules/Elsa.Http/Handlers/ValidateWorkflowRequestHandler.cs @@ -17,7 +17,7 @@ public class ValidateWorkflowRequestHandler : IRequestHandler /// Constructor. /// @@ -33,23 +33,27 @@ public class ValidateWorkflowRequestHandler : IRequestHandler x.Payload is HttpEndpointBookmarkPayload).ToList(); var publishedWorkflowsTriggers = (await _triggerStore.FindManyAsync(new TriggerFilter { Name = ActivityTypeNameHelper.GenerateTypeName(typeof(HttpEndpoint)) }, cancellationToken)).ToList(); - var validationErrors = new List(); - + var validationErrors = new List(); + foreach (var httpEndpointTrigger in httpEndpointTriggers) { - var path = httpEndpointTrigger.GetPayload().Path; - + var triggerPayload = httpEndpointTrigger.GetPayload(); + var otherWorkflowsWithSamePath = publishedWorkflowsTriggers - .Where(x => x.WorkflowDefinitionId != workflow.Identity.DefinitionId && x.Payload is HttpEndpointBookmarkPayload payload && payload.Path == path) + .Where(x => + x.WorkflowDefinitionId != workflow.Identity.DefinitionId && + x.Payload is HttpEndpointBookmarkPayload payload && + payload.Path == triggerPayload.Path && + payload.Method == triggerPayload.Method) .ToList(); - if (!otherWorkflowsWithSamePath.Any()) + if (!otherWorkflowsWithSamePath.Any()) continue; - - var message = $"The following path is already in use by another workflow: {path}"; + + var message = $"The {triggerPayload.Path} path and {triggerPayload.Method} method are already in use by another workflow!"; validationErrors.Add(new WorkflowValidationError(message, httpEndpointTrigger.ActivityId)); } - + return new ValidateWorkflowResponse(validationErrors); } } \ No newline at end of file