Ejemplo n.º 1
0
        /// <summary>
        /// Creates a new Email verification request for the given user
        /// </summary>
        /// <param name="user"></param>
        private async Task CreateEmailVerificationRequest(UserEntity user)
        {
            // get any current verification requests for the user, and mark them as unsucessful and inactive
            var currentRequests   = _userEmailVerificationRequestRepository.GetActiveForUser(user.UserId).ToList();
            var mostRecentRequest = currentRequests.OrderByDescending(x => x.CreateDate).FirstOrDefault();

            if (mostRecentRequest != null)
            {
                //TODO: Currently dates in entities are in server's timestamp not UTC
                if (mostRecentRequest.CreateDate + TimeSpan.FromMinutes(10) > DateTime.Now)
                {
                    throw new EntityValidationException(
                              "We recently sent you an email verification request. Please wait a bit before re-requesting.");
                }
            }

            foreach (var request in currentRequests)
            {
                request.Active     = false;
                request.Successful = false;

                _userEmailVerificationRequestRepository.Update(request);
            }

            var validationRequest = new UserEmailVerificationRequestEntity()
            {
                ValidationKey = Guid.NewGuid().ToString(),
                UserId        = user.UserId,
                Email         = user.Email,
                Successful    = false,
                Active        = true
            };

            _userEmailVerificationRequestRepository.Create(validationRequest);

            var success = await _emailService.SendEmailVerificationEmail(user, validationRequest.ValidationKey);

            if (!success)
            {
                validationRequest.Active     = false;
                validationRequest.Successful = false;
                _userEmailVerificationRequestRepository.Update(validationRequest);

                throw new EntityValidationException("Unable to send verification email.");
            }
        }
 public void Update(UserEmailVerificationRequestEntity entity)
 {
     _db.UserEmailVerificationRequests.Attach(entity);
     _db.SaveChanges();
 }
 public void Create(UserEmailVerificationRequestEntity entity)
 {
     _db.UserEmailVerificationRequests.Add(entity);
     _db.SaveChanges();
 }