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];
            };
        }