public static async Task <EmailConfirmationInfo> Orchestrator_SendEmailConfirmation( [OrchestrationTrigger] IDurableOrchestrationContext context, ILogger log) { if (!context.IsReplaying) { log.LogInformation("SendEmailConfirmation orchestration started."); } EmailConfirmationInput input = context.GetInput <EmailConfirmationInput>(); var confirmationInfo = new EmailConfirmationInfo { Id = context.NewGuid(), RequestUri = input.RequestUri, Email = input.Email, OrchestrationId = context.InstanceId, Result = "Sent" }; await context.CallActivityAsync(nameof(Activity_SendEmailConfirmation), confirmationInfo); using (var cts = new CancellationTokenSource()) { DateTime timeoutAt = context.CurrentUtcDateTime.AddSeconds(30); Task timeoutTask = context.CreateTimer(timeoutAt, cts.Token); Task <string> confirmResultTask = context.WaitForExternalEvent <string>(_eventName); if (!context.IsReplaying) { context.SetCustomStatus($"Waiting for human interaction or timeout at: {timeoutAt.ToString("hh:mm:ss")} UTC."); } Task winnerTask = await Task.WhenAny(confirmResultTask, timeoutTask); if (winnerTask == confirmResultTask) { cts.Cancel(); confirmationInfo.Result = confirmResultTask.Result; } else { confirmationInfo.Result = "Timed Out"; } } await context.CallActivityAsync(nameof(Activity_SaveEmailConfirmationResult), confirmationInfo); return(confirmationInfo); }
public static async Task <HttpResponseMessage> Client_StartEmailConfirmation( [HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequestMessage request, [DurableClient] IDurableClient starter) { // All this process is just for demo purpose to take advantage of the Durable Functions features. string email = request.RequestUri.ParseQueryString()["email"]; if (string.IsNullOrWhiteSpace(email)) { return(request.CreateResponse(HttpStatusCode.BadRequest, "Missing email field in the query.")); } var input = new EmailConfirmationInput(email, request.RequestUri); string instanceId = await starter.StartNewAsync(nameof(Orchestrator_SendEmailConfirmation), input); return(starter.CreateCheckStatusResponse(request, instanceId)); }
public async Task <IActionResult> ConfirmEmail([FromBody] EmailConfirmationInput input) { var user = await this.userManager.FindByEmailAsync(input.Email); var result = await this.userManager.ConfirmEmailAsync(user, input.Token); if (result.Succeeded) { return(this.Ok()); } var error = new ApiErrorModel() { Code = nameof(user), Description = "Email wasn't confirmed", }; return(this.BadRequest(new List <ApiErrorModel> { error })); }
public async Task ConfirmEmail(EmailConfirmationInput model) { await this.httpService.Post("api/users/email/confirm", model); this.appDataService.StateHasChanged(); }