public async Task <ControllerResponseDTO <UserInvite> > SendInvite(UserInviteRequestDTO userInviteRequestDTO) { if (userInviteRequestDTO == null) { throw new ArgumentNullException(nameof(userInviteRequestDTO)); } var newUserUnconfirmedEmail = new IdentityUser() { UserName = Guid.NewGuid().ToString(), // create a dummy user name that will be overridden when the user confirms their email Email = userInviteRequestDTO.UserInvite.EmailAddress }; var userCreationResult = await UserManager.CreateAsync(newUserUnconfirmedEmail); if (userCreationResult.Succeeded) { var accessToken = await UserManager.GenerateEmailConfirmationTokenAsync(newUserUnconfirmedEmail); var uriBuilder = new UriBuilder(userInviteRequestDTO.ConfirmationUri); var content = new FormUrlEncodedContent(new Dictionary <string, string>() { { "accessToken", accessToken }, { "email", newUserUnconfirmedEmail.Email } }); uriBuilder.Query = content.ReadAsStringAsync().Result; var response = await SendGridEmailService.SendEmailInvite(userInviteRequestDTO.UserInvite, uriBuilder.Uri); if (response.StatusCode == HttpStatusCode.Accepted) { return(new ControllerResponseDTO <UserInvite>() { Content = userInviteRequestDTO.UserInvite }); } else { return(new ControllerResponseDTO <UserInvite>() { ErrorMessage = string.Format("The SendGrid email service is currently erroring with code {0}, please contact your administrator", response.StatusCode.ToString()), Content = userInviteRequestDTO.UserInvite }); } } else { return(new ControllerResponseDTO <UserInvite>() { ErrorMessage = userCreationResult.Errors.First().Description, // Only the first error will be surfaced to the user. Content = userInviteRequestDTO.UserInvite }); } }
public async Task <UserInvite> SendInviteEmail(UserInvite userInvite) { var path = "SendInvite"; var userInviteRequestDto = new UserInviteRequestDTO() { ConfirmationUri = CreateConfirmationUri(), UserInvite = userInvite }; var controllerResponseDTO = await Post <UserInviteRequestDTO>(path, userInviteRequestDto); return(controllerResponseDTO.Content.UserInvite); }