Ejemplo n.º 1
0
        public CustomMembershipProvider()
        {
            _requiresUniqueEmail                  = true;
            _applicationName                      = "/";
            _enablePasswordReset                  = false;
            _enablePasswordRetrieval              = false;
            _maxInvalidPasswordAttempts           = 0;
            _requiresQuestionAndAnswer            = true;
            _minRequiredNonAlphanumericCharacters = 0;
            _minRequiredPasswordLength            = 6;
            _passwordAttemptWindow                = 5;
            _passwordFormat = MembershipPasswordFormat.Hashed;
            _passwordStrengthRegularExpression = "";

            ProviderSettings providerSettings = SecurityUtility.GetMembershipProviderSettings();

            _providerName = providerSettings.Name;
            foreach (string index in providerSettings.Parameters.AllKeys)
            {
                switch (index.ToLower())
                {
                case "applicationname":
                    _applicationName = providerSettings.Parameters[index];
                    break;

                case "enablepasswordreset":
                    _enablePasswordReset = ValueUtilities.GetBoolean(providerSettings.Parameters[index], false);
                    break;

                case "enablepasswordretrieval":
                    _enablePasswordRetrieval = ValueUtilities.GetBoolean(providerSettings.Parameters[index], false);
                    break;

                case "maxinvalidpasswordattempts":
                    _maxInvalidPasswordAttempts = ValueUtilities.GetInt32(providerSettings.Parameters[index], 5);
                    break;

                case "minrequirednonalphanumericcharacters":
                    _minRequiredNonAlphanumericCharacters = ValueUtilities.GetInt32(providerSettings.Parameters[index], 3);
                    break;

                case "minrequiredpasswordlength":
                    _minRequiredPasswordLength = ValueUtilities.GetInt32(providerSettings.Parameters[index], 8);
                    break;

                case "passwordattemptwindow":
                    _passwordAttemptWindow = ValueUtilities.GetInt32(providerSettings.Parameters[index], 5);
                    break;

                case "passwordformat":
                    _passwordFormat = ValueUtilities.GetEnumerationValue <MembershipPasswordFormat>(providerSettings.Parameters[index]);
                    break;

                case "passwordstrengthregularexpression":
                    _passwordStrengthRegularExpression = providerSettings.Parameters[index] ?? string.Empty;
                    break;

                case "requiresquestionandanswer":
                    _requiresQuestionAndAnswer = ValueUtilities.GetBoolean(providerSettings.Parameters[index], true);
                    break;

                case "requiresuniqueemail":
                    _requiresUniqueEmail = ValueUtilities.GetBoolean(providerSettings.Parameters[index], true);
                    break;
                }
            }
        }
Ejemplo n.º 2
0
        //public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
        //{
        //  throw new NotImplementedException();
        //}

        public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
        {
            #region Check valid username
            if (!SecurityUtility.IsUsernameValid(username))
            {
                status = MembershipCreateStatus.InvalidUserName;
                return(null);
            }
            #endregion

            #region Check for valid PersonId

            string _username = username;
            string _domain   = string.Empty;

            try
            {
                if (SecurityUtility.UsernameContainsDomain(username))
                {
                    _username = SecurityUtility.ExtractUsername(username);
                    _domain   = SecurityUtility.ExtractDomain(username);
                }
            }
            catch
            {
                // Username was flagged as having a domain attached, but the extraction failed for unknown reason
                status = MembershipCreateStatus.InvalidUserName;
                return(null);
            }

            Guid personId;
            bool locked = false;
            try
            {
                if (providerUserKey != null && providerUserKey.ToString().Length >= 32)
                {
                    personId = new Guid(providerUserKey.ToString().Substring(0, 32));
                    locked   = ValueUtilities.GetBoolean(providerUserKey.ToString().Substring(32), false);
                }
                else if (providerUserKey == null || providerUserKey.ToString().Length == 0)
                {
                    personId = Guid.Empty;
                }
                else
                {
                    status = MembershipCreateStatus.InvalidProviderUserKey;
                    return(null);
                }
            }
            catch
            {
                status = MembershipCreateStatus.InvalidProviderUserKey;
                return(null);
            }

            #endregion

            #region Test for valid email
            //if ((RequiresUniqueEmail || EnablePasswordRetrieval || EnablePasswordReset) && !password.Equals(SOCIAL_LOGIN_DEFAULT_PASSWORD))
            //{

            //  if (email == null || EmailUtilities.ValidateEmailAddress(email) == false)
            //  {
            //    status = MembershipCreateStatus.InvalidEmail;
            //    return null;
            //  }
            //}
            #endregion

            #region Test for valid password


            if (!SecurityUtility.IsPasswordValid(password))
            {
                status = MembershipCreateStatus.InvalidPassword;
                return(null);
            }


            #endregion

            IRepositoryProvider _repositoryProvider = new RepositoryProvider(new RepositoryFactories());
            var unitofWork = new UnitOfWork(new MisukaDBContext(), _repositoryProvider);

            #region Check for unique username
            Domain.Entity.User user = unitofWork.Repository <User>().Query(u => String.Compare(u.UserName, username, StringComparison.InvariantCultureIgnoreCase) == 0).Select().FirstOrDefault();
            if (user != null)
            {
                status = MembershipCreateStatus.DuplicateUserName;
                return(null);
            }
            #endregion

            #region Test for valid question/answer
            if (RequiresQuestionAndAnswer)
            {
                if (passwordQuestion == null || passwordQuestion.Length > 200 || passwordQuestion.Length < 1)
                {
                    status = MembershipCreateStatus.InvalidQuestion;
                    return(null);
                }

                if (passwordAnswer == null || passwordAnswer.Length > 200 || passwordAnswer.Length < 1)
                {
                    status = MembershipCreateStatus.InvalidAnswer;
                    return(null);
                }
            }

            #endregion

            DateTime dt = DateTime.Now;
            user = new User
            {
                UserName         = _username,
                CreationDate     = dt,
                Domain           = _domain,
                PersonId         = personId,
                Locked           = locked,
                FailedLoginTimes = 0,
                CurrentLanguage  = System.Threading.Thread.CurrentThread.CurrentCulture.ToString()
            };


            user.Password = Cryptography.EncryptPassword(password, user.Salt);
            try
            {
                unitofWork.RepositoryAsync <Domain.Entity.User>().Insert(user);
                unitofWork.SaveChanges();
            }
            catch
            {
                status = MembershipCreateStatus.UserRejected;
                //  Log.Debug(this, string.Format("Create new user: {0} - failed", identity.Username));
                return(null);
            }

            status = MembershipCreateStatus.Success;
            //Log.Debug(this, string.Format("Create new user: {0} - successfully", identity.Username));
            return(new MembershipUser(_providerName, username, providerUserKey, email, passwordQuestion, "", isApproved, false, dt, dt, dt, dt, DateTime.MinValue));
        }