using System;
using System.Web.Security;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.Administration;
using System.Web.UI.WebControls;
using Microsoft.SharePoint.Utilities;
using System.Web;
namespace CKS.FormsBasedAuthentication
{
///
/// Code behind for UserNew.aspx
///
public partial class UserNew : LayoutsPageBase
{
protected override bool RequireSiteAdministrator
{
get { return true; }
}
protected override void OnLoad(EventArgs e)
{
this.CheckRights();
bool _showRoles = (new MembershipSettings(SPContext.Current.Web)).EnableRoles;
ReqValEmailSubject.Enabled = emailUser.Checked;
if (!Page.IsPostBack)
{
try
{
// if roles activated display roles
if (_showRoles)
{
RolesSection.Visible = true;
GroupSection.Visible = false;
// load roles
rolesList.DataSource = Utils.BaseRoleProvider().GetAllRoles();
rolesList.DataBind();
}
// otherwise display groups
else
{
GroupSection.Visible = true;
RolesSection.Visible = false;
// load groups
groupList.DataSource = this.Web.SiteGroups;
groupList.DataBind();
}
// Display Question and answer if required by provider
if (Utils.BaseMembershipProvider().RequiresQuestionAndAnswer)
{
QuestionSection.Visible = true;
AnswerSection.Visible = true;
}
else
{
QuestionSection.Visible = false;
AnswerSection.Visible = false;
}
}
catch (Exception ex)
{
Utils.LogError(ex, true);
}
}
}
protected void OnSubmit(object sender, EventArgs e)
{
// ModifiedBySolvion
// bhi - 09.01.2012
// Reset message labels
lblMessage.Text = lblAnswerMessage.Text = lblEmailMessage.Text = lblPasswordMessage.Text = lblQuestionMessage.Text = "";
// EndModifiedBySolvion
bool _showRoles = (new MembershipSettings(SPContext.Current.Web)).EnableRoles;
// check to see if username already in use
MembershipUser user = Utils.BaseMembershipProvider().GetUser(txtUsername.Text,false);
if (user == null)
{
try
{
// get site reference
string provider = Utils.GetMembershipProvider(this.Site);
// create FBA database user
MembershipCreateStatus createStatus;
if (Utils.BaseMembershipProvider().RequiresQuestionAndAnswer)
{
user = Utils.BaseMembershipProvider().CreateUser(txtUsername.Text, txtPassword.Text, txtEmail.Text, txtQuestion.Text, txtAnswer.Text, isActive.Checked, null, out createStatus);
}
else
{
user = Utils.BaseMembershipProvider().CreateUser(txtUsername.Text, txtPassword.Text, txtEmail.Text, null, null, isActive.Checked, null, out createStatus);
}
if (createStatus != MembershipCreateStatus.Success)
{
SetErrorMessage(createStatus);
return;
}
if (user == null)
{
lblMessage.Text = LocalizedString.GetGlobalString("FBAPackWebPages", "UnknownError");
return;
}
bool groupAdded = false;
if (_showRoles)
{
for (int i = 0; i < rolesList.Items.Count; i++)
{
if (rolesList.Items[i].Selected)
{
Utils.BaseRoleProvider().AddUsersToRoles(new string[] {user.UserName}, new string[] {rolesList.Items[i].Value});
}
}
// add user to SharePoint whether a role was selected or not
AddUserToSite(Utils.EncodeUsername(user.UserName), user.Email, txtFullName.Text);
}
else
{
// add user to each group that was selected
for (int i = 0; i < groupList.Items.Count; i++)
{
if (groupList.Items[i].Selected)
{
// add user to group
SPGroup group = this.Web.SiteGroups[groupList.Items[i].Value];
group.AddUser(
Utils.EncodeUsername(user.UserName),
user.Email,
txtFullName.Text,
"");
// update
group.Update();
groupAdded = true;
}
}
// if no group selected, add to site with no permissions
if (!groupAdded)
{
AddUserToSite(Utils.EncodeUsername(user.UserName), user.Email, txtFullName.Text);
}
}
// Email User
if ((emailUser.Checked == true))
{
//InputFormTextBox txtEmailSubject = (InputFormTextBox)emailUser.FindControl("txtEmailSubject");
//InputFormTextBox txtEmailBody = (InputFormTextBox)emailUser.FindControl("txtEmailBody");
if ((!string.IsNullOrEmpty(txtEmailSubject.Text)) && (!string.IsNullOrEmpty(txtEmailBody.Text)))
Email.SendEmail(this.Web, user.Email, txtEmailSubject.Text, txtEmailBody.Text);
}
SPUtility.Redirect("FBA/Management/UsersDisp.aspx", SPRedirectFlags.RelativeToLayoutsPage | SPRedirectFlags.UseSource, this.Context);
}
catch (Exception ex)
{
Utils.LogError(ex, true);
}
}
else
{
lblMessage.Text = LocalizedString.GetGlobalString("FBAPackWebPages", "DuplicateUserName"); ;
}
}
protected void SetErrorMessage(MembershipCreateStatus status)
{
switch (status)
{
case MembershipCreateStatus.DuplicateUserName:
lblMessage.Text = LocalizedString.GetGlobalString("FBAPackWebPages", "DuplicateUserName");
break;
case MembershipCreateStatus.DuplicateEmail:
lblEmailMessage.Text = LocalizedString.GetGlobalString("FBAPackWebPages", "DuplicateEmail");
break;
case MembershipCreateStatus.InvalidPassword:
string message = "";
if (string.IsNullOrEmpty(Utils.BaseMembershipProvider().PasswordStrengthRegularExpression))
{
message = string.Format(LocalizedString.GetGlobalString("FBAPackWebPages", "InvalidPasswordChars"), Utils.BaseMembershipProvider().MinRequiredPasswordLength, Utils.BaseMembershipProvider().MinRequiredNonAlphanumericCharacters);
}
else
{
message = string.Format(LocalizedString.GetGlobalString("FBAPackWebPages", "InvalidPasswordCharsRegex"), Utils.BaseMembershipProvider().MinRequiredPasswordLength, Utils.BaseMembershipProvider().MinRequiredNonAlphanumericCharacters, Utils.BaseMembershipProvider().PasswordStrengthRegularExpression);
}
//LocalizedString.GetGlobalString("FBAPackWebPages", "InvalidPassword")
// TODO: use resource files
lblPasswordMessage.Text = message;
break;
case MembershipCreateStatus.InvalidEmail:
lblEmailMessage.Text = LocalizedString.GetGlobalString("FBAPackWebPages", "InvalidEmail");
break;
case MembershipCreateStatus.InvalidAnswer:
lblAnswerMessage.Text = LocalizedString.GetGlobalString("FBAPackWebPages", "InvalidAnswer");
break;
case MembershipCreateStatus.InvalidQuestion:
lblQuestionMessage.Text = LocalizedString.GetGlobalString("FBAPackWebPages", "InvalidQuestion");
break;
case MembershipCreateStatus.InvalidUserName:
lblMessage.Text = LocalizedString.GetGlobalString("FBAPackWebPages", "InvalidUserName");
break;
case MembershipCreateStatus.ProviderError:
lblMessage.Text = LocalizedString.GetGlobalString("FBAPackWebPages", "ProviderError");
break;
case MembershipCreateStatus.UserRejected:
lblMessage.Text = LocalizedString.GetGlobalString("FBAPackWebPages", "UserRejected");
break;
default:
lblMessage.Text = LocalizedString.GetGlobalString("FBAPackWebPages", "UnknownError");
break;
}
}
///
/// Adds a user to the SharePoint (in no particular group)
///
///
///
///
private void AddUserToSite(string login, string email, string fullname)
{
this.Web.AllUsers.Add(
login,
email,
fullname,
"");
}
}
}