private UserCreateStatus ValidateForProfanity(UserInfo user) { var portalSecurity = new PortalSecurity(); var createStatus = UserCreateStatus.AddUser; Hashtable settings = UserController.GetUserSettings(user.PortalID); bool useProfanityFilter = Convert.ToBoolean(settings["Registration_UseProfanityFilter"]); //Validate Profanity if (useProfanityFilter) { if (!portalSecurity.ValidateInput(user.Username, PortalSecurity.FilterFlag.NoProfanity)) { createStatus = UserCreateStatus.InvalidUserName; } if (!String.IsNullOrEmpty(user.DisplayName)) { if (!portalSecurity.ValidateInput(user.DisplayName, PortalSecurity.FilterFlag.NoProfanity)) { createStatus = UserCreateStatus.InvalidDisplayName; } } } return createStatus; }
private bool Validate() { CreateStatus = UserCreateStatus.AddUser; var portalSecurity = new PortalSecurity(); //Check User Editor bool _IsValid = userForm.IsValid; if (RegistrationFormType == 0) { //Update UserName if (UseEmailAsUserName) { User.Username = User.Email; if (String.IsNullOrEmpty(User.DisplayName)) { User.DisplayName = User.Email.Substring(0, User.Email.IndexOf("@", StringComparison.Ordinal)); } } //Check Password is valid if (!RandomPassword) { //Check Password is Valid if (CreateStatus == UserCreateStatus.AddUser && !UserController.ValidatePassword(User.Membership.Password)) { CreateStatus = UserCreateStatus.InvalidPassword; } if (RequirePasswordConfirm && String.IsNullOrEmpty(AuthenticationType)) { if (User.Membership.Password != User.Membership.PasswordConfirm) { CreateStatus = UserCreateStatus.PasswordMismatch; } } } else { //Generate a random password for the user User.Membership.Password = UserController.GeneratePassword(); User.Membership.PasswordConfirm = User.Membership.Password; } } else { //Set Username to Email if (String.IsNullOrEmpty(User.Username)) { User.Username = User.Email; } //Set DisplayName if (String.IsNullOrEmpty(User.DisplayName)) { User.DisplayName = String.IsNullOrEmpty(User.FirstName + " " + User.LastName) ? User.Email.Substring(0, User.Email.IndexOf("@", StringComparison.Ordinal)) : User.FirstName + " " + User.LastName; } //Random Password if (String.IsNullOrEmpty(User.Membership.Password)) { //Generate a random password for the user User.Membership.Password = UserController.GeneratePassword(); } //Password Confirm if (!String.IsNullOrEmpty(User.Membership.PasswordConfirm)) { if (User.Membership.Password != User.Membership.PasswordConfirm) { CreateStatus = UserCreateStatus.PasswordMismatch; } } } ////Validate Exclude Terms //if (!String.IsNullOrEmpty(ExcludeTerms)) //{ // string[] excludeTerms = ExcludeTerms.Split(','); // foreach (string term in excludeTerms) // { // var trimmedTerm = term.Trim().ToLowerInvariant(); // if (User.Username.ToLowerInvariant().Contains(trimmedTerm)) // { // CreateStatus = UserCreateStatus.InvalidUserName; // } // if (User.DisplayName.ToLowerInvariant().Contains(trimmedTerm)) // { // CreateStatus = UserCreateStatus.InvalidDisplayName; // } // } //} //Validate Profanity if (UseProfanityFilter) { if (!portalSecurity.ValidateInput(User.Username, PortalSecurity.FilterFlag.NoProfanity)) { CreateStatus = UserCreateStatus.InvalidUserName; } if (!String.IsNullOrEmpty(User.DisplayName)) { if (!portalSecurity.ValidateInput(User.DisplayName, PortalSecurity.FilterFlag.NoProfanity)) { CreateStatus = UserCreateStatus.InvalidDisplayName; } } } //Validate Unique User Name UserInfo user = UserController.GetUserByName(PortalId, User.Username); if (user != null) { if (UseEmailAsUserName) { CreateStatus = UserCreateStatus.DuplicateEmail; } else { CreateStatus = UserCreateStatus.DuplicateUserName; int i = 1; string userName = null; while (user != null) { userName = User.Username + "0" + i.ToString(CultureInfo.InvariantCulture); user = UserController.GetUserByName(PortalId, userName); i++; } User.Username = userName; } } //Validate Unique Display Name if (CreateStatus == UserCreateStatus.AddUser && RequireUniqueDisplayName) { user = TestableUserController.Instance.GetUserByDisplayname(PortalId, User.DisplayName); if (user != null) { CreateStatus = UserCreateStatus.DuplicateDisplayName; int i = 1; string displayName = null; while (user != null) { displayName = User.DisplayName + " 0" + i.ToString(CultureInfo.InvariantCulture); user = TestableUserController.Instance.GetUserByDisplayname(PortalId, displayName); i++; } User.DisplayName = displayName; } } //Check Question/Answer if (CreateStatus == UserCreateStatus.AddUser && MembershipProviderConfig.RequiresQuestionAndAnswer) { if (string.IsNullOrEmpty(User.Membership.PasswordQuestion)) { //Invalid Question CreateStatus = UserCreateStatus.InvalidQuestion; } if (CreateStatus == UserCreateStatus.AddUser) { if (string.IsNullOrEmpty(User.Membership.PasswordAnswer)) { //Invalid Question CreateStatus = UserCreateStatus.InvalidAnswer; } } } if (CreateStatus != UserCreateStatus.AddUser) { _IsValid = false; } return(_IsValid); }
//public static ActionResult Register(RegisterationDetails registerationDetails) //{ // ActionResult actionResult = new ActionResult(); // var portalSettings = registerationDetails.PortalSettings; // var username = registerationDetails.UserName; // var email = registerationDetails.Email; // Requires.NotNullOrEmpty("email", email); // var disallowRegistration = !registerationDetails.IgnoreRegistrationMode && ((portalSettings.UserRegistration == (int)Globals.PortalRegistrationType.NoRegistration) || (portalSettings.UserRegistration == (int)Globals.PortalRegistrationType.PrivateRegistration)); // if (disallowRegistration) // throw new Exception(Localization.GetString("RegistrationNotAllowed", Components.Constants.LocalResourcesFile)); // //initial creation of the new User object // var newUser = new UserInfo // { // PortalID = portalSettings.PortalId, // Email = email // }; // var cleanUsername = PortalSecurity.Instance.InputFilter(username, // PortalSecurity.FilterFlag.NoScripting | // PortalSecurity.FilterFlag.NoAngleBrackets | // PortalSecurity.FilterFlag.NoMarkup); // if (!cleanUsername.Equals(username)) // throw new ArgumentException(Localization.GetExceptionMessage("InvalidUserName", "The username specified is invalid.")); // var valid = UserController.Instance.IsValidUserName(username); // if (!valid) // throw new ArgumentException(Localization.GetExceptionMessage("InvalidUserName", "The username specified is invalid.")); // //ensure this user doesn't exist // if (!string.IsNullOrEmpty(username) && UserController.GetUserByName(portalSettings.PortalId, username) != null) // throw new Exception(Localization.GetString("RegistrationUsernameAlreadyPresent", Components.Constants.LocalResourcesFile)); // //set username as email if not specified // newUser.Username = string.IsNullOrEmpty(username) ? email : username; // if (!string.IsNullOrEmpty(registerationDetails.Password) && !registerationDetails.RandomPassword) // newUser.Membership.Password = registerationDetails.Password; // else // //Generate a random password for the user // newUser.Membership.Password = UserController.GeneratePassword(); // newUser.Membership.PasswordConfirm = newUser.Membership.Password; // //set other profile properties // newUser.Profile.PreferredLocale = new Localization().CurrentUICulture; // newUser.Profile.InitialiseProfile(portalSettings.PortalId); // newUser.Profile.PreferredTimeZone = portalSettings.TimeZone; // //derive display name from supplied firstname, lastname or from email // if (!string.IsNullOrEmpty(registerationDetails.FirstName) && !string.IsNullOrEmpty(registerationDetails.LastName)) // { // newUser.DisplayName = registerationDetails.FirstName + " " + registerationDetails.LastName; // newUser.FirstName = registerationDetails.FirstName; // newUser.LastName = registerationDetails.LastName; // } // else // newUser.DisplayName = newUser.Email.Substring(0, newUser.Email.IndexOf("@", StringComparison.Ordinal)); // //read all the user account settings // var settings = UserController.GetUserSettings(portalSettings.PortalId); // //Verify Profanity filter // if (GetBoolSetting(settings, "Registration_UseProfanityFilter")) // { // var portalSecurity = PortalSecurity.Instance; // if (!portalSecurity.ValidateInput(newUser.Username, PortalSecurity.FilterFlag.NoProfanity) || !portalSecurity.ValidateInput(newUser.DisplayName, PortalSecurity.FilterFlag.NoProfanity)) // throw new Exception(Localization.GetString("RegistrationProfanityNotAllowed", Components.Constants.LocalResourcesFile)); // } // //Email Address Validation // var emailValidator = GetStringSetting(settings, "Security_EmailValidation"); // if (!string.IsNullOrEmpty(emailValidator)) // { // var regExp = RegexUtils.GetCachedRegex(emailValidator, RegexOptions.IgnoreCase | RegexOptions.Multiline); // var matches = regExp.Matches(newUser.Email); // if (matches.Count == 0) // throw new Exception(Localization.GetString("RegistrationInvalidEmailUsed", Components.Constants.LocalResourcesFile)); // } // //Excluded Terms Verification // var excludeRegex = GetExcludeTermsRegex(settings); // if (!string.IsNullOrEmpty(excludeRegex)) // { // var regExp = RegexUtils.GetCachedRegex(excludeRegex, RegexOptions.IgnoreCase | RegexOptions.Multiline); // var matches = regExp.Matches(newUser.Username); // if (matches.Count > 0) // throw new Exception(Localization.GetString("RegistrationExcludedTermsUsed", Components.Constants.LocalResourcesFile)); // } // //User Name Validation // var userNameValidator = GetStringSetting(settings, "Security_UserNameValidation"); // if (!string.IsNullOrEmpty(userNameValidator)) // { // var regExp = RegexUtils.GetCachedRegex(userNameValidator, RegexOptions.IgnoreCase | RegexOptions.Multiline); // var matches = regExp.Matches(newUser.Username); // if (matches.Count == 0) // throw new Exception(Localization.GetString("RegistrationInvalidUserNameUsed", Components.Constants.LocalResourcesFile)); // } // //ensure unique username // var user = UserController.GetUserByName(portalSettings.PortalId, newUser.Username); // if (user != null) // { // if (GetBoolSetting(settings, "Registration_UseEmailAsUserName")) // throw new Exception(UserController.GetUserCreateStatus(UserCreateStatus.DuplicateEmail)); // var i = 1; // string userName = null; // while (user != null) // { // userName = newUser.Username + "0" + i.ToString(CultureInfo.InvariantCulture); // user = UserController.GetUserByName(portalSettings.PortalId, userName); // i++; // } // newUser.Username = userName; // } // //ensure unique display name // if (GetBoolSetting(settings, "Registration_RequireUniqueDisplayName")) // { // user = UserController.Instance.GetUserByDisplayname(portalSettings.PortalId, newUser.DisplayName); // if (user != null) // { // var i = 1; // string displayName = null; // while (user != null) // { // displayName = newUser.DisplayName + " 0" + i.ToString(CultureInfo.InvariantCulture); // user = UserController.Instance.GetUserByDisplayname(portalSettings.PortalId, displayName); // i++; // } // newUser.DisplayName = displayName; // } // } // //Update display name format // var displaynameFormat = GetStringSetting(settings, "Security_DisplayNameFormat"); // if (!string.IsNullOrEmpty(displaynameFormat)) // newUser.UpdateDisplayName(displaynameFormat); // //membership is approved only for public registration // newUser.Membership.Approved = (registerationDetails.IgnoreRegistrationMode || portalSettings.UserRegistration == (int)Globals.PortalRegistrationType.PublicRegistration) && registerationDetails.Authorize; // newUser.Membership.PasswordQuestion = registerationDetails.Question; // newUser.Membership.PasswordAnswer = registerationDetails.Answer; // //final creation of user // var createStatus = UserController.CreateUser(ref newUser, registerationDetails.Notify); // //clear cache // if (createStatus == UserCreateStatus.Success) // CachingProvider.Instance().Remove(string.Format(DataCache.PortalUserCountCacheKey, portalSettings.PortalId)); // if (createStatus != UserCreateStatus.Success) // throw new Exception(UserController.GetUserCreateStatus(createStatus)); // // if (registerationDetails.IgnoreRegistrationMode) // // { // // Mail.SendMail(newUser, MessageType.UserRegistrationPublic, portalSettings); // // return UserBasicDto.FromUserInfo(newUser); // // } // //send notification to portal administrator of new user registration // //check the receive notification setting first, but if register type is Private, we will always send the notification email. // //because the user need administrators to do the approve action so that he can continue use the website. // if (!registerationDetails.IgnoreRegistrationMode && (portalSettings.EnableRegisterNotification || portalSettings.UserRegistration == (int)Globals.PortalRegistrationType.PrivateRegistration)) // { // Mail.SendMail(newUser, MessageType.UserRegistrationAdmin, portalSettings); // SendAdminNotification(newUser, portalSettings); // } // if (actionResult.IsSuccess) // actionResult.Data = UserBasicDto.FromUserInfo(newUser); // return actionResult; //} public static UserBasicDto Register(RegisterationDetails registerationDetails) { PortalSettings portalSettings = registerationDetails.PortalSettings; string username = registerationDetails.UserName; string email = registerationDetails.Email; Requires.NotNullOrEmpty("email", email); bool disallowRegistration = !registerationDetails.IgnoreRegistrationMode && ((portalSettings.UserRegistration == (int)Globals.PortalRegistrationType.NoRegistration) || (portalSettings.UserRegistration == (int)Globals.PortalRegistrationType.PrivateRegistration)); if (disallowRegistration) { throw new Exception(Localization.GetString("RegistrationNotAllowed", Components.Constants.LocalResourcesFile)); } //initial creation of the new User object UserInfo newUser = new UserInfo { PortalID = portalSettings.PortalId, Email = email }; string cleanUsername = PortalSecurity.Instance.InputFilter(username, PortalSecurity.FilterFlag.NoScripting | PortalSecurity.FilterFlag.NoAngleBrackets | PortalSecurity.FilterFlag.NoMarkup); if (!cleanUsername.Equals(username)) { throw new ArgumentException(Localization.GetExceptionMessage("InvalidUserName", "The username specified is invalid.")); } bool valid = UserController.Instance.IsValidUserName(username); if (!valid) { throw new ArgumentException(Localization.GetExceptionMessage("InvalidUserName", "The username specified is invalid.")); } //ensure this user doesn't exist if (!string.IsNullOrEmpty(username) && UserController.GetUserByName(portalSettings.PortalId, username) != null) { throw new Exception(Localization.GetString("RegistrationUsernameAlreadyPresent", Components.Constants.LocalResourcesFile)); } //set username as email if not specified newUser.Username = string.IsNullOrEmpty(username) ? email : username; if (!string.IsNullOrEmpty(registerationDetails.Password) && !registerationDetails.RandomPassword) { newUser.Membership.Password = registerationDetails.Password; } else { //Generate a random password for the user newUser.Membership.Password = UserController.GeneratePassword(); } newUser.Membership.PasswordConfirm = newUser.Membership.Password; //set other profile properties newUser.Profile.PreferredLocale = new Localization().CurrentUICulture; newUser.Profile.InitialiseProfile(portalSettings.PortalId); newUser.Profile.PreferredTimeZone = portalSettings.TimeZone; //derive display name from supplied firstname, lastname or from email if (!string.IsNullOrEmpty(registerationDetails.FirstName)) { newUser.DisplayName = registerationDetails.FirstName.Trim(); if (registerationDetails.FirstName.Trim().Split(' ').Length > 0) { newUser.FirstName = registerationDetails.FirstName.Split(' ')[0].Trim(); } if (registerationDetails.FirstName.Trim().Split(' ').Length > 1) { newUser.LastName = registerationDetails.FirstName.Split(' ')[1].Trim(); } } else { newUser.DisplayName = newUser.Email.Substring(0, newUser.Email.IndexOf("@", StringComparison.Ordinal)); } //read all the user account settings Hashtable settings = UserController.GetUserSettings(portalSettings.PortalId); //Verify Profanity filter if (GetBoolSetting(settings, "Registration_UseProfanityFilter")) { PortalSecurity portalSecurity = PortalSecurity.Instance; if (!portalSecurity.ValidateInput(newUser.Username, PortalSecurity.FilterFlag.NoProfanity) || !portalSecurity.ValidateInput(newUser.DisplayName, PortalSecurity.FilterFlag.NoProfanity)) { throw new Exception(Localization.GetString("RegistrationProfanityNotAllowed", Components.Constants.LocalResourcesFile)); } } //Email Address Validation string emailValidator = GetStringSetting(settings, "Security_EmailValidation"); if (!string.IsNullOrEmpty(emailValidator)) { Regex regExp = RegexUtils.GetCachedRegex(emailValidator, RegexOptions.IgnoreCase | RegexOptions.Multiline); MatchCollection matches = regExp.Matches(newUser.Email); if (matches.Count == 0) { throw new Exception(Localization.GetString("RegistrationInvalidEmailUsed", Components.Constants.LocalResourcesFile)); } } //Excluded Terms Verification string excludeRegex = GetExcludeTermsRegex(settings); if (!string.IsNullOrEmpty(excludeRegex)) { Regex regExp = RegexUtils.GetCachedRegex(excludeRegex, RegexOptions.IgnoreCase | RegexOptions.Multiline); MatchCollection matches = regExp.Matches(newUser.Username); if (matches.Count > 0) { throw new Exception(Localization.GetString("RegistrationExcludedTermsUsed", Components.Constants.LocalResourcesFile)); } } //User Name Validation string userNameValidator = GetStringSetting(settings, "Security_UserNameValidation"); if (!string.IsNullOrEmpty(userNameValidator)) { Regex regExp = RegexUtils.GetCachedRegex(userNameValidator, RegexOptions.IgnoreCase | RegexOptions.Multiline); MatchCollection matches = regExp.Matches(newUser.Username); if (matches.Count == 0) { throw new Exception(Localization.GetString("RegistrationInvalidUserNameUsed", Components.Constants.LocalResourcesFile)); } } //ensure unique username UserInfo user = UserController.GetUserByName(portalSettings.PortalId, newUser.Username); if (user != null) { if (GetBoolSetting(settings, "Registration_UseEmailAsUserName")) { throw new Exception(UserController.GetUserCreateStatus(UserCreateStatus.DuplicateEmail)); } int i = 1; string userName = null; while (user != null) { userName = newUser.Username + "0" + i.ToString(CultureInfo.InvariantCulture); user = UserController.GetUserByName(portalSettings.PortalId, userName); i++; } newUser.Username = userName; } //ensure unique display name if (GetBoolSetting(settings, "Registration_RequireUniqueDisplayName")) { user = UserController.Instance.GetUserByDisplayname(portalSettings.PortalId, newUser.DisplayName); if (user != null) { int i = 1; string displayName = null; while (user != null) { displayName = newUser.DisplayName + " 0" + i.ToString(CultureInfo.InvariantCulture); user = UserController.Instance.GetUserByDisplayname(portalSettings.PortalId, displayName); i++; } newUser.DisplayName = displayName; } } //Update display name format string displaynameFormat = GetStringSetting(settings, "Security_DisplayNameFormat"); if (!string.IsNullOrEmpty(displaynameFormat)) { newUser.UpdateDisplayName(displaynameFormat); } //membership is approved only for public registration newUser.Membership.Approved = (registerationDetails.IgnoreRegistrationMode || portalSettings.UserRegistration == (int)Globals.PortalRegistrationType.PublicRegistration) && registerationDetails.Authorize; newUser.Membership.PasswordQuestion = registerationDetails.Question; newUser.Membership.PasswordAnswer = registerationDetails.Answer; //final creation of user UserCreateStatus createStatus = UserController.CreateUser(ref newUser, registerationDetails.Notify); //clear cache if (createStatus == UserCreateStatus.Success) { CachingProvider.Instance().Remove(string.Format(DataCache.PortalUserCountCacheKey, portalSettings.PortalId)); } if (createStatus != UserCreateStatus.Success) { throw new Exception(UserController.GetUserCreateStatus(createStatus)); } // if (registerationDetails.IgnoreRegistrationMode) // { // Mail.SendMail(newUser, MessageType.UserRegistrationPublic, portalSettings); // return UserBasicDto.FromUserInfo(newUser); // } //send notification to portal administrator of new user registration //check the receive notification setting first, but if register type is Private, we will always send the notification email. //because the user need administrators to do the approve action so that he can continue use the website. if (!registerationDetails.IgnoreRegistrationMode && (portalSettings.EnableRegisterNotification || portalSettings.UserRegistration == (int)Globals.PortalRegistrationType.PrivateRegistration)) { Mail.SendMail(newUser, MessageType.UserRegistrationAdmin, portalSettings); SendAdminNotification(newUser, portalSettings); } return(UserBasicDto.FromUserInfo(newUser)); }
private bool Validate() { if (!string.IsNullOrEmpty(gotcha.Value)) { return(false); } CreateStatus = UserCreateStatus.AddUser; var portalSecurity = new PortalSecurity(); //Check User Editor bool _IsValid = userForm.IsValid; if (PortalSettings.Registration.RegistrationFormType == 0) { //Update UserName if (PortalSettings.Registration.UseEmailAsUserName) { User.Username = User.Email; if (String.IsNullOrEmpty(User.DisplayName)) { User.DisplayName = User.Email.Substring(0, User.Email.IndexOf("@", StringComparison.Ordinal)); } } //Check Password is valid if (!PortalSettings.Registration.RandomPassword) { //Check Password is Valid if (CreateStatus == UserCreateStatus.AddUser && !UserController.ValidatePassword(User.Membership.Password)) { CreateStatus = UserCreateStatus.InvalidPassword; } if (PortalSettings.Registration.RequirePasswordConfirm && String.IsNullOrEmpty(AuthenticationType)) { if (User.Membership.Password != User.Membership.PasswordConfirm) { CreateStatus = UserCreateStatus.PasswordMismatch; } } } else { //Generate a random password for the user User.Membership.Password = UserController.GeneratePassword(); User.Membership.PasswordConfirm = User.Membership.Password; } } else { //Set Username to Email if (String.IsNullOrEmpty(User.Username)) { User.Username = User.Email; } //Set DisplayName if (String.IsNullOrEmpty(User.DisplayName)) { User.DisplayName = String.IsNullOrEmpty(User.FirstName + " " + User.LastName) ? User.Email.Substring(0, User.Email.IndexOf("@", StringComparison.Ordinal)) : User.FirstName + " " + User.LastName; } //Random Password if (String.IsNullOrEmpty(User.Membership.Password)) { //Generate a random password for the user User.Membership.Password = UserController.GeneratePassword(); } //Password Confirm if (!String.IsNullOrEmpty(User.Membership.PasswordConfirm)) { if (User.Membership.Password != User.Membership.PasswordConfirm) { CreateStatus = UserCreateStatus.PasswordMismatch; } } } //Validate banned password var settings = new MembershipPasswordSettings(User.PortalID); if (settings.EnableBannedList) { var m = new MembershipPasswordController(); if (m.FoundBannedPassword(User.Membership.Password) || User.Username == User.Membership.Password) { CreateStatus = UserCreateStatus.BannedPasswordUsed; } } //Validate Profanity if (PortalSettings.Registration.UseProfanityFilter) { if (!portalSecurity.ValidateInput(User.Username, PortalSecurity.FilterFlag.NoProfanity)) { CreateStatus = UserCreateStatus.InvalidUserName; } if (!String.IsNullOrEmpty(User.DisplayName)) { if (!portalSecurity.ValidateInput(User.DisplayName, PortalSecurity.FilterFlag.NoProfanity)) { CreateStatus = UserCreateStatus.InvalidDisplayName; } } } //Validate Unique User Name UserInfo user = UserController.GetUserByName(PortalId, User.Username); if (user != null) { if (PortalSettings.Registration.UseEmailAsUserName) { CreateStatus = UserCreateStatus.DuplicateEmail; } else { CreateStatus = UserCreateStatus.DuplicateUserName; int i = 1; string userName = null; while (user != null) { userName = User.Username + "0" + i.ToString(CultureInfo.InvariantCulture); user = UserController.GetUserByName(PortalId, userName); i++; } User.Username = userName; } } //Validate Unique Display Name if (CreateStatus == UserCreateStatus.AddUser && PortalSettings.Registration.RequireUniqueDisplayName) { user = UserController.Instance.GetUserByDisplayname(PortalId, User.DisplayName); if (user != null) { CreateStatus = UserCreateStatus.DuplicateDisplayName; int i = 1; string displayName = null; while (user != null) { displayName = User.DisplayName + " 0" + i.ToString(CultureInfo.InvariantCulture); user = UserController.Instance.GetUserByDisplayname(PortalId, displayName); i++; } User.DisplayName = displayName; } } //Check Question/Answer if (CreateStatus == UserCreateStatus.AddUser && MembershipProviderConfig.RequiresQuestionAndAnswer) { if (string.IsNullOrEmpty(User.Membership.PasswordQuestion)) { //Invalid Question CreateStatus = UserCreateStatus.InvalidQuestion; } if (CreateStatus == UserCreateStatus.AddUser) { if (string.IsNullOrEmpty(User.Membership.PasswordAnswer)) { //Invalid Question CreateStatus = UserCreateStatus.InvalidAnswer; } } } if (CreateStatus != UserCreateStatus.AddUser) { _IsValid = false; } return(_IsValid); }
/// <summary> /// /// </summary> /// <param name="portalId"></param> /// <param name="AuthenticationType"></param> /// <param name="newUser"></param> /// <returns></returns> public UserCreateStatus Validate(int portalId, string AuthenticationType, UserInfo newUser) { var membUtils = new DnnMembershipUtilities(portalId); UserCreateStatus CreateStatus = UserCreateStatus.AddUser; var portalSecurity = new PortalSecurity(); //Check User Editor //bool _IsValid = base.View.RegistrationForm.IsValid; if (membUtils.RegistrationFormType == 0) { //Update UserName if (membUtils.UseEmailAsUserName) { newUser.Username = newUser.Email; if (String.IsNullOrEmpty(newUser.DisplayName)) { newUser.DisplayName = newUser.Email.Substring(0, newUser.Email.IndexOf("@", StringComparison.Ordinal)); } } //Check Password is valid if (!membUtils.RandomPassword) { //Check Password is Valid if (CreateStatus == UserCreateStatus.AddUser && !UserController.ValidatePassword(newUser.Membership.Password)) { CreateStatus = UserCreateStatus.InvalidPassword; } if (membUtils.RequirePasswordConfirm && String.IsNullOrEmpty(AuthenticationType)) { if (newUser.Membership.Password != newUser.Membership.PasswordConfirm) { CreateStatus = UserCreateStatus.PasswordMismatch; } } } else { //Generate a random password for the user newUser.Membership.Password = UserController.GeneratePassword(); newUser.Membership.PasswordConfirm = newUser.Membership.Password; } } else { //Set Username to Email if (String.IsNullOrEmpty(newUser.Username)) { newUser.Username = newUser.Email; } //Set DisplayName if (String.IsNullOrEmpty(newUser.DisplayName)) { newUser.DisplayName = String.IsNullOrEmpty(String.Format("{0} {1}", newUser.FirstName, newUser.LastName)) ? newUser.Email.Substring(0, newUser.Email.IndexOf("@", StringComparison.Ordinal)) : String.Format("{0} {1}", newUser.FirstName, newUser.LastName); } //Random Password if (String.IsNullOrEmpty(newUser.Membership.Password)) { //Generate a random password for the user newUser.Membership.Password = UserController.GeneratePassword(); } //Password Confirm if (!String.IsNullOrEmpty(newUser.Membership.PasswordConfirm)) { if (newUser.Membership.Password != newUser.Membership.PasswordConfirm) { CreateStatus = UserCreateStatus.PasswordMismatch; } } } //Validate banned password var settings = new MembershipPasswordSettings(newUser.PortalID); if (settings.EnableBannedList) { var m = new MembershipPasswordController(); if (m.FoundBannedPassword(newUser.Membership.Password) || newUser.Username == newUser.Membership.Password) { CreateStatus = UserCreateStatus.BannedPasswordUsed; } } //Validate Profanity if (UseProfanityFilter) { if (!portalSecurity.ValidateInput(newUser.Username, PortalSecurity.FilterFlag.NoProfanity)) { CreateStatus = UserCreateStatus.InvalidUserName; } if (!String.IsNullOrEmpty(newUser.DisplayName)) { if (!portalSecurity.ValidateInput(newUser.DisplayName, PortalSecurity.FilterFlag.NoProfanity)) { CreateStatus = UserCreateStatus.InvalidDisplayName; } } } //Validate Unique User Name UserInfo user = UserController.GetUserByName(portalId, newUser.Username); if (user != null) { if (membUtils.UseEmailAsUserName) { CreateStatus = UserCreateStatus.DuplicateEmail; } else { CreateStatus = UserCreateStatus.DuplicateUserName; int i = 1; string userName = null; while (user != null) { userName = String.Format("{0}0{1}", newUser.Username, i.ToString(CultureInfo.InvariantCulture)); user = UserController.GetUserByName(portalId, userName); i++; } newUser.Username = userName; } } //Validate Unique Display Name if (CreateStatus == UserCreateStatus.AddUser && RequireUniqueDisplayName) { user = TestableUserController.Instance.GetUserByDisplayname(portalId, newUser.DisplayName); if (user != null) { CreateStatus = UserCreateStatus.DuplicateDisplayName; int i = 1; string displayName = null; while (user != null) { displayName = String.Format("{0} 0{1}", newUser.DisplayName, i.ToString(CultureInfo.InvariantCulture)); user = TestableUserController.Instance.GetUserByDisplayname(portalId, displayName); i++; } newUser.DisplayName = displayName; } } //Check Question/Answer if (CreateStatus == UserCreateStatus.AddUser && MembershipProviderConfig.RequiresQuestionAndAnswer) { if (string.IsNullOrEmpty(newUser.Membership.PasswordQuestion)) { //Invalid Question CreateStatus = UserCreateStatus.InvalidQuestion; } if (CreateStatus == UserCreateStatus.AddUser) { if (string.IsNullOrEmpty(newUser.Membership.PasswordAnswer)) { //Invalid Question CreateStatus = UserCreateStatus.InvalidAnswer; } } } return(CreateStatus); }
//NOTE - While making modifications in this method, developer must refer to call tree in Register.ascx.cs. //Especially Validate and CreateUser methods. Register class inherits from UserModuleBase, which also contains bunch of logic. //This method can easily be modified to pass passowrd, display name, etc. //It is recommended to write unit tests. public UserBasicDto Register(RegisterationDetails registerationDetails) { var portalSettings = registerationDetails.PortalSettings; var username = registerationDetails.UserName; var email = registerationDetails.Email; Requires.NotNullOrEmpty("email", email); var disallowRegistration = !registerationDetails.IgnoreRegistrationMode && ((portalSettings.UserRegistration == (int)Globals.PortalRegistrationType.NoRegistration) || (portalSettings.UserRegistration == (int)Globals.PortalRegistrationType.PrivateRegistration)); if (disallowRegistration) { throw new Exception(Localization.GetString("RegistrationNotAllowed", Library.Constants.SharedResources)); } //initial creation of the new User object var newUser = new UserInfo { PortalID = portalSettings.PortalId, Email = email }; //ensure this user doesn't exist if (!string.IsNullOrEmpty(username) && UserController.GetUserByName(portalSettings.PortalId, username) != null) { throw new Exception(Localization.GetString("RegistrationUsernameAlreadyPresent", Library.Constants.SharedResources)); } //set username as email if not specified newUser.Username = string.IsNullOrEmpty(username) ? email : username; if (!string.IsNullOrEmpty(registerationDetails.Password) && !registerationDetails.RandomPassword) { newUser.Membership.Password = registerationDetails.Password; } else { //Generate a random password for the user newUser.Membership.Password = UserController.GeneratePassword(); } newUser.Membership.PasswordConfirm = newUser.Membership.Password; //set other profile properties newUser.Profile.PreferredLocale = new Localization().CurrentUICulture; newUser.Profile.InitialiseProfile(portalSettings.PortalId); newUser.Profile.PreferredTimeZone = portalSettings.TimeZone; //derive display name from supplied firstname, lastname or from email if (!string.IsNullOrEmpty(registerationDetails.FirstName) && !string.IsNullOrEmpty(registerationDetails.LastName)) { newUser.DisplayName = registerationDetails.FirstName + " " + registerationDetails.LastName; newUser.FirstName = registerationDetails.FirstName; newUser.LastName = registerationDetails.LastName; } else { newUser.DisplayName = newUser.Email.Substring(0, newUser.Email.IndexOf("@", StringComparison.Ordinal)); } //read all the user account settings var settings = UserController.GetUserSettings(portalSettings.PortalId); //Verify Profanity filter if (GetBoolSetting(settings, "Registration_UseProfanityFilter")) { var portalSecurity = new PortalSecurity(); if (!portalSecurity.ValidateInput(newUser.Username, PortalSecurity.FilterFlag.NoProfanity) || !portalSecurity.ValidateInput(newUser.DisplayName, PortalSecurity.FilterFlag.NoProfanity)) { throw new Exception(Localization.GetString("RegistrationProfanityNotAllowed", Library.Constants.SharedResources)); } } //Email Address Validation var emailValidator = GetStringSetting(settings, "Security_EmailValidation"); if (!string.IsNullOrEmpty(emailValidator)) { var regExp = RegexUtils.GetCachedRegex(emailValidator, RegexOptions.IgnoreCase | RegexOptions.Multiline); var matches = regExp.Matches(newUser.Email); if (matches.Count == 0) { throw new Exception(Localization.GetString("RegistrationInvalidEmailUsed", Library.Constants.SharedResources)); } } //Excluded Terms Verification var excludeRegex = GetExcludeTermsRegex(settings); if (!string.IsNullOrEmpty(excludeRegex)) { var regExp = RegexUtils.GetCachedRegex(excludeRegex, RegexOptions.IgnoreCase | RegexOptions.Multiline); var matches = regExp.Matches(newUser.Username); if (matches.Count > 0) { throw new Exception(Localization.GetString("RegistrationExcludedTermsUsed", Library.Constants.SharedResources)); } } //User Name Validation var userNameValidator = GetStringSetting(settings, "Security_UserNameValidation"); if (!string.IsNullOrEmpty(userNameValidator)) { var regExp = RegexUtils.GetCachedRegex(userNameValidator, RegexOptions.IgnoreCase | RegexOptions.Multiline); var matches = regExp.Matches(newUser.Username); if (matches.Count == 0) { throw new Exception(Localization.GetString("RegistrationInvalidUserNameUsed", Library.Constants.SharedResources)); } } //ensure unique username var user = UserController.GetUserByName(portalSettings.PortalId, newUser.Username); if (user != null) { if (GetBoolSetting(settings, "Registration_UseEmailAsUserName")) { throw new Exception(UserController.GetUserCreateStatus(UserCreateStatus.DuplicateEmail)); } var i = 1; string userName = null; while (user != null) { userName = newUser.Username + "0" + i.ToString(CultureInfo.InvariantCulture); user = UserController.GetUserByName(portalSettings.PortalId, userName); i++; } newUser.Username = userName; } //ensure unique display name if (GetBoolSetting(settings, "Registration_RequireUniqueDisplayName")) { user = UserController.Instance.GetUserByDisplayname(portalSettings.PortalId, newUser.DisplayName); if (user != null) { var i = 1; string displayName = null; while (user != null) { displayName = newUser.DisplayName + " 0" + i.ToString(CultureInfo.InvariantCulture); user = UserController.Instance.GetUserByDisplayname(portalSettings.PortalId, displayName); i++; } newUser.DisplayName = displayName; } } //Update display name format var displaynameFormat = GetStringSetting(settings, "Security_DisplayNameFormat"); if (!string.IsNullOrEmpty(displaynameFormat)) { newUser.UpdateDisplayName(displaynameFormat); } //membership is approved only for public registration newUser.Membership.Approved = (registerationDetails.IgnoreRegistrationMode || portalSettings.UserRegistration == (int)Globals.PortalRegistrationType.PublicRegistration) && registerationDetails.Authorize; //final creation of user var createStatus = UserController.CreateUser(ref newUser); //clear cache if (createStatus == UserCreateStatus.Success) { DataCache.ClearPortalCache(portalSettings.PortalId, true); } if (createStatus != UserCreateStatus.Success) { throw new Exception(UserController.GetUserCreateStatus(createStatus)); } // if (registerationDetails.IgnoreRegistrationMode) // { // Mail.SendMail(newUser, MessageType.UserRegistrationPublic, portalSettings); // return UserBasicDto.FromUserInfo(newUser); // } //send notification to portal administrator of new user registration //check the receive notification setting first, but if register type is Private, we will always send the notification email. //because the user need administrators to do the approve action so that he can continue use the website. if (!registerationDetails.IgnoreRegistrationMode && (portalSettings.EnableRegisterNotification || portalSettings.UserRegistration == (int)Globals.PortalRegistrationType.PrivateRegistration)) { Mail.SendMail(newUser, MessageType.UserRegistrationAdmin, portalSettings); SendAdminNotification(newUser, portalSettings); } //send email to user if (registerationDetails.Notify) { switch (portalSettings.UserRegistration) { case (int)Globals.PortalRegistrationType.PrivateRegistration: Mail.SendMail(newUser, MessageType.UserRegistrationPrivate, portalSettings); break; case (int)Globals.PortalRegistrationType.PublicRegistration: Mail.SendMail(newUser, MessageType.UserRegistrationPublic, portalSettings); break; case (int)Globals.PortalRegistrationType.VerifiedRegistration: Mail.SendMail(newUser, MessageType.UserRegistrationVerified, portalSettings); break; } } return(UserBasicDto.FromUserInfo(newUser)); }