Пример #1
0
        public Response <RequestPasswordResetDto> RequestPasswordReset(RequestPasswordResetRequest request)
        {
            try
            {
                SetUserRepositoryByEmail(request.EmailAddress);

                var user = _userRepository.FindUserByEmail(request.EmailAddress);

                if (user == null)
                {
                    throw new ServiceException(ResponseCode.NotFound, "Selected Agents does not exist.");
                }

                var expiryLength = _settingRepository.FindSettingAsInt(SettingName.PasswordResetLength);

                var passwordResetRequest = new ForgottenPassword(Guid.NewGuid());

                user.AddPasswordResetRequest(passwordResetRequest, expiryLength);

                _userRepository.Save();

                var dto = new RequestPasswordResetDto
                {
                    UserGuid = user.UserGuid,
                    Key      = passwordResetRequest.Key
                };

                return(new Response <RequestPasswordResetDto>(dto));
            }
            catch (Exception e)
            {
                return(HandleException <RequestPasswordResetDto>(e));
            }
        }
Пример #2
0
        public ServiceResult <object> RequestPasswordReset(string email)
        {
            var requestPasswordResetRequest = new RequestPasswordResetRequest
            {
                Email = SanitizeEmailAddress(email)
            };

            return(ExecuteWithExceptionHandling(
                       context => RequestPasswordResetTransactionScript.RequestPasswordReset(
                           context,
                           requestPasswordResetRequest)));
        }
Пример #3
0
        public void RequestPasswordResetServiceExceptionUserNotFoundTest()
        {
            _rootRepoMock.Setup(x => x.FindConnectionByEmail(It.IsAny <string>())).Returns(_connection);
            _settingRepoMock.Setup(x => x.FindSettingAsString(SettingName.EncryptionSalt)).Returns(Salt);
            _settingRepoMock.Setup(x => x.FindSettingAsString(SettingName.EncryptionKey)).Returns(Key);
            _customerContextFactoryMock.Setup(x => x.CreateDbContext(It.IsAny <string>())).Returns(_customerDatabaseMock.Object);

            _requestPasswordResetRequest = new RequestPasswordResetRequest("Wrong Email");

            var response = _userService.RequestPasswordReset(_requestPasswordResetRequest);

            Assert.IsNotNull(response);
            Assert.AreEqual(ResponseCode.NotFound, response.Code);
            Assert.IsNotEmpty(response.ErrorMessage);
            Assert.IsNull(response.Entity);
        }
Пример #4
0
        public void SetUp()
        {
            _rootRepoMock               = new Mock <IRootRepository>();
            _settingRepoMock            = new Mock <ISettingRepository>();
            _customerContextFactoryMock = new Mock <IDbCustomerDatabaseFactory>();
            _customerDatabaseMock       = new Mock <dbCustomerDatabase>();
            _userDbSetMock              = new Mock <DbSet <User> >();

            var user = new User(new Guid(UserGuid), "Name", "Email", "Password");

            user.AddPasswordResetRequest(new ForgottenPassword(new Guid(UsedForgottenPasswordGuid)), 1);
            user.AddPasswordResetRequest(new ForgottenPassword(new Guid(ForgottenPasswordGuid)), 1);

            //Having to due all of this due to multi-tenency set up, I can't inject UserRepo
            var data = new List <User>
            {
                user
            }
            .AsQueryable();

            _userDbSetMock.As <IQueryable <User> >().Setup(m => m.Provider).Returns(data.Provider);
            _userDbSetMock.As <IQueryable <User> >().Setup(m => m.Expression).Returns(data.Expression);
            _userDbSetMock.As <IQueryable <User> >().Setup(m => m.ElementType).Returns(data.ElementType);
            _userDbSetMock.As <IQueryable <User> >().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());

            _customerDatabaseMock.Setup(c => c.Users).Returns(_userDbSetMock.Object);

            _userService = new UserService(
                _rootRepoMock.Object,
                _settingRepoMock.Object,
                _customerContextFactoryMock.Object);

            _isValidKeyRequest           = new IsValidKeyRequest(new Guid(ForgottenPasswordGuid), new Guid(UserGuid));
            _requestPasswordResetRequest = new RequestPasswordResetRequest("Email");
            _resetPasswordRequest        = new ResetPasswordRequest(new Guid(ForgottenPasswordGuid), "Password2", new Guid(UserGuid));

            var guid             = Guid.NewGuid();
            var connectionString =
                new Encryption(
                    Key,
                    Salt,
                    guid.ToByteArray())
                .EncryptString("Connection String");

            _connection = new RootConnection(guid, connectionString);
        }
        public async Task <IActionResult> RequestPasswordReset([FromBody] RequestPasswordResetRequest request)
        {
            string baseUrl;

            if (Request != null)
            {
                baseUrl = Request.Host.ToString();
            }
            else
            {
                baseUrl = "https://SudokuCollective.com";
            }

            string emailtTemplatePath;

            if (!string.IsNullOrEmpty(hostEnvironment.WebRootPath))
            {
                emailtTemplatePath = Path.Combine(hostEnvironment.WebRootPath, "/Content/EmailTemplates/password-reset-requested-inlined.html");

                emailtTemplatePath = string.Format("../SudokuCollective.Api{0}", emailtTemplatePath);
            }
            else
            {
                emailtTemplatePath = "../../Content/EmailTemplates/confirm-old-email-inlined.html";
            }

            var result = await usersService.RequestPasswordReset(request, baseUrl, emailtTemplatePath);

            if (result.Success)
            {
                result.Message = ControllerMessages.StatusCode200(result.Message);

                return(Ok(result));
            }
            else
            {
                result.Message = ControllerMessages.StatusCode404(result.Message);

                return(NotFound(result));
            }
        }
        public async Task ReturnsFalseIfRequestPasswordResetFails()
        {
            // Arrange
            var requestPasswordReset = new RequestPasswordResetRequest
            {
                License = context.Apps.Select(a => a.License).FirstOrDefault(),
                Email   = "*****@*****.**"
            };

            var baseUrl = "https://example.com";

            var html = "../../../../SudokuCollective.Api/Content/EmailTemplates/confirm-old-email-inlined.html";

            // Act
            var result = await sutFailure.RequestPasswordReset(
                requestPasswordReset,
                baseUrl,
                html);

            // Assert
            Assert.That(result.Success, Is.False);
            Assert.That(result.Message, Is.EqualTo("No User is using this Email"));
        }
        public async Task RequestPasswordReset()
        {
            // Arrange
            var requestPasswordReset = new RequestPasswordResetRequest
            {
                License = context.Apps.Select(a => a.License).FirstOrDefault(),
                Email   = context.Users.Select(u => u.Email).FirstOrDefault()
            };

            var baseUrl = "https://example.com";

            var html = "../../../../SudokuCollective.Api/Content/EmailTemplates/confirm-old-email-inlined.html";

            // Act
            var result = await sutRequestPasswordReset.RequestPasswordReset(
                requestPasswordReset,
                baseUrl,
                html);

            // Assert
            Assert.That(result.Success, Is.True);
            Assert.That(result.Message, Is.EqualTo("Processed Password Reset Request"));
        }
Пример #8
0
        public void RequestPasswordReset(TodoContext context, RequestPasswordResetRequest requestPasswordResetRequest)
        {
            _requestPasswordResetRequestValidator.ValidateAndThrow(requestPasswordResetRequest);

            var email = requestPasswordResetRequest.Email;
            var user  = context.Users.SingleOrDefault(u => u.Email == email);

            if (user == null)
            {
                throw new TodoException(ServiceError.NoSuchUser);
            }

            var resetPasswordRequestSecret = _secretGenerator.GenerateSecret();
            var pendingPasswordReset       = new PendingPasswordReset
            {
                UserId = user.UserId,
                Secret = resetPasswordRequestSecret
            };

            context.PendingPasswordResets.Add(pendingPasswordReset);
            context.SaveChanges();

            _resetPasswordNotifier.Notify(email, resetPasswordRequestSecret);
        }