public virtual DataResultUserCantAccess CantAccessYourAccount(string activateFormVirtualPath, string email)
        {
            //DataResultUserCantAccess result;
            DataResultUserCantAccess result;
            MembershipUserCollection usersFound = Membership.FindUsersByEmail(email);
            MembershipUser[] usersResult = new MembershipUser[usersFound.Count];
            usersFound.CopyTo(usersResult, 0);

            List<MembershipUserWrapper> users = (from u in usersResult select new MembershipUserWrapper(u)).ToList();

            if (users.Count > 1)
            {
                throw new Exception(string.Format("Duplicated emails found: {0}", email));
            }

            if (users.Count == 1)
            {
                MembershipUserWrapper user = (MembershipUserWrapper)users.First();
                CantAccessMyAccountModel resultModel = new CantAccessMyAccountModel();
                resultModel.User = user;

                result = new DataResultUserCantAccess() {
                    Data = resultModel,
                    Message = Resources.Account.AccountResources.CantAccessYourAccount_EmailSent
                };
            }
            else
            {
                result = new DataResultUserCantAccess()
                {
                    IsValid = false,
                    Message = Resources.Account.AccountResources.CantAccessYourAccount_EmailNotFound,
                    MessageType = DataResultMessageType.Error
                };
            }
            return result;
        }
        public DataResultUserCantAccess ResetPassword(Guid guid, string newPassword, string confirmNewPassword)
        {
            DataResultUserCantAccess result;

            if (!this.ValidatePasswordStrength(newPassword))
            {
                result = new DataResultUserCantAccess()
                {
                    IsValid = false,
                    Message = Resources.Account.AccountResources.InvalidPassword,
                    MessageType = DataResultMessageType.Error
                };
            }
            else
            {
                if (!newPassword.Equals(confirmNewPassword))
                {
                    result = new DataResultUserCantAccess()
                    {
                        IsValid = false,
                        Message = Resources.Account.AccountResources.NewPasswordConfirmError,
                        MessageType = DataResultMessageType.Error
                    };

                }
                else
                {
                    ITokenTemporaryPersistenceBL<MembershipUserWrapper> tokenServices = null;
                    try
                    {
                        tokenServices = new TokenTemporaryPersistenceBL<MembershipUserWrapper>();
                        object tokenTempItem = tokenServices.GetById(guid);
                        if (tokenTempItem == null)
                        {
                            result = new DataResultUserCantAccess()
                            {
                                IsValid = false,
                                Message = AccountResources.CantAccessYourAccount_TokenExpired,
                                MessageType = DataResultMessageType.Error
                            };
                        }
                        else
                        {
                            using (TransactionScope trans = this.TransactionScopeCreate())
                            {
                                MembershipUserWrapper userChangingPassword = ((TokenTemporaryPersistenceServiceItem<MembershipUserWrapper>)tokenTempItem).TokenObject;
                                result = this._dal.ResetPassword(userChangingPassword, newPassword, confirmNewPassword);
                                if (result.IsValid)
                                {

                                    MailMessage mail = new MailMessage();
                                    mail.From = new MailAddress(ApplicationConfiguration.MailingSettingsSection.SupportTeamEmailAddress);
                                    mail.Bcc.Add(new MailAddress(result.Data.User.Email));
                                    mail.Subject = string.Format(AccountResources.ChangePassword_EmailTitle, ApplicationConfiguration.DomainInfoSettingsSection.DomainName);
                                    mail.Body = string.Format(AccountResources.ChangePassword_EmailBody, ApplicationConfiguration.DomainInfoSettingsSection.DomainName);

                                    using (ISmtpClient smtp = DependencyFactory.Resolve<ISmtpClient>())
                                    {
                                        // Do not use SendAsync -> otherwise transaction could commit without sending mail
                                        smtp.Send(mail);
                                    }

                                    tokenServices.Delete(new TokenTemporaryPersistenceServiceItem<MembershipUserWrapper>() { Token = guid });
                                    trans.Complete();
                                    this.ForceAuthentication(userChangingPassword.UserName);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                    finally
                    {
                        if (tokenServices != null)
                        {
                            tokenServices.Dispose();
                        }
                    }
                }
            }
            return result;
        }
        public DataResultUserCantAccess ResetPassword(Guid guid, string newPassword, string confirmNewPassword)
        {
            DataResultUserCantAccess result;

            if (!this.ValidatePasswordStrength(newPassword))
            {
                result = new DataResultUserCantAccess()
                {
                    IsValid = false,
                    Message = Resources.Account.AccountResources.InvalidPassword,
                    MessageType = DataResultMessageType.Error
                };
            }
            else
            {
                if (!newPassword.Equals(confirmNewPassword))
                {
                    result = new DataResultUserCantAccess()
                    {
                        IsValid = false,
                        Message = Resources.Account.AccountResources.NewPasswordConfirmError,
                        MessageType = DataResultMessageType.Error
                    };

                }
                else
                {
                    ITokenTemporaryPersistenceBL<MembershipUserWrapper> tokenServices = null;
                    try
                    {
                        tokenServices = new TokenTemporaryPersistenceBL<MembershipUserWrapper>();
                        object tokenTempItem = tokenServices.GetById(guid);
                        if (tokenTempItem == null)
                        {
                            result = new DataResultUserCantAccess()
                            {
                                IsValid = false,
                                Message = AccountResources.CantAccessYourAccount_TokenExpired,
                                MessageType = DataResultMessageType.Error
                            };
                        }
                        else
                        {
                            using (TransactionScope trans = this.TransactionScopeCreate())
                            {
                                MembershipUserWrapper userChangingPassword = ((TokenTemporaryPersistenceServiceItem<MembershipUserWrapper>)tokenTempItem).TokenObject;
                                result = this._dal.ResetPassword(userChangingPassword, newPassword, confirmNewPassword);
                                if (result.IsValid)
                                {
                                    MailingHelper.Send(delegate()
                                    {
                                        MailMessage mail = new MailMessage();
                                        mail.From = new MailAddress(MailingHelper.MailingConfig.SupportTeamEmailAddress);
                                        mail.Bcc.Add(new MailAddress(result.Data.User.Email));
                                        mail.Subject = string.Format(AccountResources.ChangePassword_EmailTitle, MailingHelper.DomainConfig.DomainName);
                                        mail.Body = string.Format(AccountResources.ChangePassword_EmailBody, MailingHelper.DomainConfig.DomainName);
                                        return mail;
                                    });
                                    tokenServices.Delete(new TokenTemporaryPersistenceServiceItem<MembershipUserWrapper>() { Token = guid });
                                    trans.Complete();
                                    this.ForceAuthentication(userChangingPassword.UserName);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                    finally
                    {
                        if (tokenServices != null)
                        {
                            tokenServices.Dispose();
                        }
                    }
                }
            }
            return result;
        }