public DataResultUserActivate ActivateAccount(Guid activateUserToken)
        {
            DataResultUserActivate result = null;
            ITokenTemporaryPersistenceBL<MembershipUserWrapper> _tokenServices = new TokenTemporaryPersistenceBL<MembershipUserWrapper>();
            TokenTemporaryPersistenceServiceItem<MembershipUserWrapper> _tokenItem = _tokenServices.GetById(activateUserToken);

            if (_tokenItem == null)
            {
                result = new DataResultUserActivate()
                {
                    IsValid = false,
                    Message = UserAdminTexts.ActivationTokenExpired,
                    Data = new AccountActivationModel()
                    {
                        ActivateUserToken = activateUserToken
                    }
                };
            }
            else
            {
                using (TransactionScope trans = this.TransactionScopeCreate())
                {
                    try
                    {
                        result = this._dal.ActivateAccount((MembershipUserWrapper)_tokenItem.TokenObject, activateUserToken);

                        _tokenServices.Delete(new TokenTemporaryPersistenceServiceItem<MembershipUserWrapper>() { Token = activateUserToken });

                        trans.Complete();

                        this.ForceAuthentication(((MembershipUserWrapper)_tokenItem.TokenObject).UserName);
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                    finally
                    {
                        _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)
                                {

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