Enrich trigger validation to take into consideration path and method uniquness (#4363)

This commit is contained in:
MariusVuscanNx 2023-08-25 10:11:22 +03:00 committed by GitHub
parent 811f8b4c93
commit 06f92d8d7e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -17,7 +17,7 @@ public class ValidateWorkflowRequestHandler : IRequestHandler<ValidateWorkflowRe
{
private readonly ITriggerStore _triggerStore;
private readonly ITriggerIndexer _triggerIndexer;
/// <summary>
/// Constructor.
/// </summary>
@ -33,23 +33,27 @@ public class ValidateWorkflowRequestHandler : IRequestHandler<ValidateWorkflowRe
var workflow = request.Workflow;
var httpEndpointTriggers = (await _triggerIndexer.GetTriggersAsync(workflow, cancellationToken)).Where(x => x.Payload is HttpEndpointBookmarkPayload).ToList();
var publishedWorkflowsTriggers = (await _triggerStore.FindManyAsync(new TriggerFilter { Name = ActivityTypeNameHelper.GenerateTypeName(typeof(HttpEndpoint)) }, cancellationToken)).ToList();
var validationErrors = new List<WorkflowValidationError>();
var validationErrors = new List<WorkflowValidationError>();
foreach (var httpEndpointTrigger in httpEndpointTriggers)
{
var path = httpEndpointTrigger.GetPayload<HttpEndpointBookmarkPayload>().Path;
var triggerPayload = httpEndpointTrigger.GetPayload<HttpEndpointBookmarkPayload>();
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);
}
}