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
                });
            }
        }
Пример #2
0
        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);
        }