コード例 #1
0
        public async Task ConfirmEmail_WhenUserNotFound_ReturnsUserNotFoundResponses()
        {
            var request = new EmailConfirmationRequest()
            {
                Code = "emailCode"
            };
            var httpResponse = await GetAsync(AuthControllerRoutes.ConfirmEmail + "?" + request.ToQueryString());

            httpResponse.EnsureSuccessStatusCode();
            var response = await httpResponse.BodyAs <ApiResponse>();

            response.CheckValidationException(1);

            request = new EmailConfirmationRequest()
            {
                Code = "emailCode"
            };
            httpResponse = await GetAsync(AuthControllerRoutes.ConfirmEmail + "?" + request.ToQueryString());

            httpResponse.EnsureSuccessStatusCode();
            response = await httpResponse.BodyAs <ApiResponse>();

            response.CheckValidationException(1);

            request      = new EmailConfirmationRequest();
            httpResponse = await GetAsync(AuthControllerRoutes.ConfirmEmail + "?" + request.ToQueryString());

            httpResponse.EnsureSuccessStatusCode();
            response = await httpResponse.BodyAs <ApiResponse>();

            response.CheckValidationException(3);
        }
コード例 #2
0
        public async Task <IActionResult> EmailConfirmation(string id, EmailConfirmationRequest confirmationRequest)
        {
            if (id != confirmationRequest.UserId)
            {
                return(BadRequest());
            }

            var user = await _userManager.FindByIdAsync(confirmationRequest.UserId);

            if (user == null)
            {
                return(NotFound());
            }

            try
            {
                var result = await _userManager.ConfirmEmailAsync(user, confirmationRequest.Code);

                return(Ok(result.Succeeded));
            }
            catch (DbUpdateConcurrencyException) when(!_userManager.Users.AsNoTracking().Any(u => u.Id == id))
            {
                return(NotFound());
            }
        }
コード例 #3
0
 public async Task <ApiResponse> ConfirmEmail([FromBody] EmailConfirmationRequest request)
 {
     if (request == null)
     {
         return(ApiResponse.Failed());
     }
     return(await _userIdentityService.ConfirmEmailAsync(request));
 }
        public async Task <IActionResult> GetEmailPriorityCode(EmailConfirmationRequest model)
        {
            var result = await _emailConfirmationService.GetPriorityCode(model.Email, model.PartnerId);

            if (result == null)
            {
                return(BadRequest("Code not found."));
            }

            var response = new EmailVerificationCode(result.Code, result.CreationDateTime, result.ExpirationDate);

            return(Ok(response));
        }
コード例 #5
0
        /// <summary> Creates a confirmation token that will be used to verify a user's email adress and stores it in the database.</summary>
        /// <param name="userId"> The user ascociated with the email confirmation.</param>
        /// <returns> Token that will be sent to the user's email adress to verify their email adress.</returns>
        public async Task <string> GenerateEmailConfiramtionTokenAsync(long userId)
        {
            Guid token = new Guid();

            var emailRequest = new EmailConfirmationRequest()
            {
                UserId            = userId,
                ConfirmationToken = token,
                ExpirationDate    = DateTime.UtcNow.AddDays(7)
            };

            await _context.EmailConfirmationRequests.AddAsync(emailRequest);

            await _context.SaveChangesAsync();

            return(token.ToString());
        }
コード例 #6
0
        public async Task ConfirmEmailAsync_WhenUserNotFound_ShouldReturnUserNotFound()
        {
            var request = new EmailConfirmationRequest()
            {
                Code   = "code",
                UserId = Guid.NewGuid(),
            };

            _mockUserManger.Setup(e => e.FindByIdAsync(request.UserId.ToString()))
            .ReturnsAsync((User)null);

            var response = await sut.ConfirmEmailAsync(request);

            response.IsSuccess.Should().BeFalse();
            response.ResponseException !.ErrorCode.Should().Be(ErrorCode.UserNotFound);
            response.ResponseException.ErrorMessage.Should().Be(ErrorCode.UserNotFound.GetDescription());
        }
コード例 #7
0
        public async Task ConfirmEmail_WhenCodeNotValid_ReturnsUserNotFoundResponses()
        {
            var context          = GetService <TimeTrackingIdentityDbContext>();
            var userFromDatabase = await context.Users.FirstOrDefaultAsync();

            var request = new EmailConfirmationRequest()
            {
                UserId = userFromDatabase.Id,
                Code   = "emailCode"
            };

            var httpResponse = await GetAsync(AuthControllerRoutes.ConfirmEmail + "?" + request.ToQueryString());

            httpResponse.EnsureSuccessStatusCode();
            var response = await httpResponse.BodyAs <ApiResponse>();

            response.ResponseException !.ErrorCode.Should().Be(ErrorCode.EmailConfirmationFailed);
            response.ResponseException !.ErrorMessage.Should().Be(ErrorCode.EmailConfirmationFailed.GetDescription());
        }
コード例 #8
0
        public async Task <IActionResult> VerifyEmail([FromQuery] EmailConfirmationRequest request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new EmailConfirmationResponse
                {
                    Errors = ModelState.Values.SelectMany(x => x.Errors.Select(xx => xx.ErrorMessage))
                }));
            }

            var emailConfirmationResponse = await _identityService.ConfirmEmailAsync(request.Email, request.Token);

            if (!emailConfirmationResponse.Success)
            {
                return(BadRequest(emailConfirmationResponse.Errors));
            }

            return(Ok(emailConfirmationResponse));
        }
コード例 #9
0
        public async Task <ApiResponse> ConfirmEmailAsync(EmailConfirmationRequest request)
        {
            var userFoundedResponse = await FindUserByIdAsync(request.UserId);

            if (!userFoundedResponse.IsSuccess)
            {
                return(userFoundedResponse);
            }

            var result = await _userManager.ConfirmEmailAsync(userFoundedResponse.Data, request.Code);

            if (result.Succeeded)
            {
                var addToRoleAsync = await _userManager.AddToRoleAsync(userFoundedResponse.Data,
                                                                       AuthorizationData.DefaultRole.ToString());

                if (!addToRoleAsync.Succeeded)
                {
                    _logger.LogError("Failed to add user to to role with reason {0}",
                                     addToRoleAsync.ToString());
                    return(new ApiResponse(
                               new ApiError()
                    {
                        ErrorCode = ErrorCode.AddUserToRoleFailed,
                        ErrorMessage = ErrorCode.AddUserToRoleFailed.GetDescription(),
                    }));
                }
                return(ApiResponse.Success());
            }

            _logger.LogWarning("Email confirmation failed for user with id {0} by reason {1}",
                               request.UserId, result.Errors.ToString());
            return(new ApiResponse()
            {
                ResponseException = new ApiError()
                {
                    ErrorCode = ErrorCode.EmailConfirmationFailed,
                    ErrorMessage = ErrorCode.EmailConfirmationFailed.GetDescription(),
                },
                StatusCode = 400,
                IsSuccess = false,
            });
        }
コード例 #10
0
        public async Task ConfirmEmailAsync_WhenConfirmEmailFailed_ShouldReturnEmailConfirmationFailed()
        {
            var request = new EmailConfirmationRequest()
            {
                Code   = "code",
                UserId = Guid.NewGuid(),
            };

            _mockUserManger.Setup(e => e.FindByIdAsync(request.UserId.ToString()))
            .ReturnsAsync((new User()));
            _mockUserManger.Setup(e => e.ConfirmEmailAsync(It.IsAny <User>(), request.Code))
            .ReturnsAsync(IdentityResult.Failed());

            var response = await sut.ConfirmEmailAsync(request);

            response.IsSuccess.Should().BeFalse();
            response.ResponseException !.ErrorCode.Should().Be(ErrorCode.EmailConfirmationFailed);
            response.ResponseException.ErrorMessage.Should().Be(ErrorCode.EmailConfirmationFailed.GetDescription());
        }
コード例 #11
0
        public async Task <IActionResult> EmailConfirmation([FromBody] EmailConfirmationRequest confirmationRequest)
        {
            try
            {
                var user = await _userManager.FindByIdAsync(confirmationRequest.UserId);

                if (user == null)
                {
                    throw new Exception("User not found");
                }

                var result = await _userManager.ConfirmEmailAsync(user, confirmationRequest.Code);

                return(Ok(result.Succeeded));
            } catch (Exception ex)
            {
                _logger.LogError($"Email confirmation error: {ex.Message} - UserID: {confirmationRequest.UserId} - Code: {confirmationRequest.Code}");
                return(Ok(false));
            }
        }
コード例 #12
0
        public IActionResult ConfirmEmail(EmailConfirmationRequest model)
        {
            if (string.IsNullOrEmpty(model.UserId) || model.UserId.Length < 2)
            {
                return(View("ConfirmEmailFail", null));
            }

            if (string.IsNullOrEmpty(model.Token) || model.Token.Length < 2)
            {
                return(View("ConfirmEmailFail", null));
            }

            var response = WebAPI <AuthenticationResult, EmailConfirmationRequest> .Consume(SharedEndpoints.ConfirmEmail, model, "");

            if (!response.IsSuccessful)
            {
                return(View("ConfirmEmailFail", response.DebugMessage));
            }

            return(View());
        }
コード例 #13
0
        public async Task ConfirmEmailAsync_WhenAddToRoleSuccess_ShouldReturnSuccessResponse()
        {
            var request = new EmailConfirmationRequest()
            {
                Code   = "code",
                UserId = Guid.NewGuid(),
            };
            var user = new User();

            _mockUserManger.Setup(e => e.FindByIdAsync(request.UserId.ToString()))
            .ReturnsAsync(user);
            _mockUserManger.Setup(e => e.ConfirmEmailAsync(It.IsAny <User>(), request.Code))
            .ReturnsAsync(IdentityResult.Success);
            _mockUserManger.Setup(e => e.AddToRoleAsync(user, AuthorizationData.DefaultRole.ToString()))
            .ReturnsAsync(IdentityResult.Success);

            var response = await sut.ConfirmEmailAsync(request);

            response.IsSuccess.Should().BeTrue();
            response.StatusCode.Should().Be(200);
        }
        public async Task <IActionResult> Delete([FromBody] EmailConfirmationRequest model)
        {
            await _emailConfirmationService.DeleteCodes(model.Email, model.PartnerId);

            return(Ok());
        }