public async Task <IActionResult> InviteToRegistrantPortal(string registrantId, InviteRequest request) { var inviteRequest = new InviteRegistrantCommand { RegistrantId = registrantId, Email = request.Email, RequestingUserId = currentUserId }; var inviteId = await messagingClient.Send(inviteRequest); return(Ok(inviteId)); }
public async Task <string> Handle(InviteRegistrantCommand cmd) { var contact = (await contactRepository.QueryContact(new RegistrantQuery { ContactId = cmd.RegistrantId })).Items.SingleOrDefault(); if (contact == null) { throw new NotFoundException($"registrant not found", cmd.RegistrantId); } if (contact.Authenticated) { throw new BusinessLogicException($"registrant {cmd.RegistrantId} is already authenticated"); } var inviteId = (await contactRepository.ManageContactInvite(new CreateNewContactEmailInvite { ContactId = cmd.RegistrantId, Email = cmd.Email, InviteDate = DateTime.UtcNow, RequestingUserId = cmd.RequestingUserId })).InviteId; var invite = (await contactRepository.QueryContactInvite(new ContactEmailInviteQuery { InviteId = inviteId })).Items.Single(); var dp = dataProtectionProvider.CreateProtector(nameof(InviteRegistrantCommand)).ToTimeLimitedDataProtector(); var encryptedInviteId = dp.Protect(inviteId, invite.ExpiryDate); await SendEmailNotification( SubmissionTemplateType.InviteProfile, email : cmd.Email, name : $"{contact.LastName}, {contact.FirstName}", tokens : new[] { KeyValuePair.Create("inviteExpiryDate", invite.ExpiryDate.ToShortDateString()), KeyValuePair.Create("inviteUrl", $"{configuration.GetValue<string>("REGISTRANTS_PORTAL_BASE_URL")}/verified-registration?inviteId={WebUtility.UrlEncode(encryptedInviteId)}") }); return(inviteId); }