protected override void Context()
        {
            _handler = Resolve<AccountPasswordHandlers>();
            _accountPasswordRepository = Resolve<IAccountPasswordRepository>();

            _handler.AsDynamic().Handle(new AccountCreated(_id, "John Doe BVBA", "John", "Doe", "*****@*****.**", DateTime.UtcNow) { Version = 1 });
        }
        public TimeWarpAuthenticationManager(IAuthenticationSessionRepository authenticationSessionRepository, IAccountPasswordRepository accountPasswords, INowProvider nowProvider)
        {
            _accountPasswords = accountPasswords;
            _nowProvider      = nowProvider;
            _log = LogManager.GetLogger(GetType());

            _sessionIdProvider = new SessionIdProvider();
            _authenticationSessionRepository = authenticationSessionRepository;
        }
        public AccountCreator(IAccountRepository accountRepository,
                              IAccountPasswordRepository passwordRepository,
                              ITimeWarpUserStateRepository userStateRepository,
                              ITimeWarpAuthenticationManager authenticationManager

                              )
        {
            _accountRepository     = accountRepository;
            _passwordRepository    = passwordRepository;
            _userStateRepository   = userStateRepository;
            _authenticationManager = authenticationManager;
            _validator             = new AccountCreationInformationValidator(accountRepository);
        }
        public AccountModule(IAccountRepository accountRepository,
                             IAccountPasswordRepository accountPasswordRepository) 
            : base("/account")
        {
            Get["/login"] = parameters => View["Login", new LoginModel { ReturnUrl = parameters.returnUrl }];

            Get["/logout"] = parameters => this.LogoutAndRedirect("/account/login");

            Post["/login"] = parameters =>
            {
                var model = this.BindAndValidate<LoginModel>();
           
                if (ModelValidationResult.IsValid)
                {
                    var account = accountRepository
                        .Where(a => a.Email == model.Email)
                        .FirstOrDefault();

                    if (account != null)
                    {
                        var accountPassword = accountPasswordRepository.GetById(account.Id);

                        if (accountPassword != null && VerifyPassword(accountPassword, model.Password))
                        {
                            
                            if (!string.IsNullOrWhiteSpace(model.ReturnUrl))
                                return this.LoginAndRedirect(account.Id, fallbackRedirectUrl: model.ReturnUrl);

                            return this.LoginAndRedirect(account.Id);
                        }
                    }
                }

                ModelValidationResult.Errors.Add("", "The email address or password provided is incorrect");

                return View["Login", model];
            };
        }