示例#1
0
        public static MembershipUser GetAccessingMembershipUser(int documentId)
        {
            var content = ApplicationContext.Current.Services.ContentService.GetById(documentId);

            if (content == null)
            {
                return(null);
            }

            var entry = ApplicationContext.Current.Services.PublicAccessService.GetEntryForContent(content);

            if (entry == null)
            {
                return(null);
            }

            //legacy would throw an exception here if it was not 'simple' and simple means based on a username
            if (entry.Rules.All(x => x.RuleType != Constants.Conventions.PublicAccess.MemberUsernameRuleType))
            {
                throw new Exception("Document isn't protected using Simple mechanism. Use GetAccessingMemberGroups instead");
            }

            var provider     = MembershipProviderExtensions.GetMembersMembershipProvider();
            var usernameRule = entry.Rules.First(x => x.RuleType == Constants.Conventions.PublicAccess.MemberUsernameRuleType);

            return(provider.GetUser(usernameRule.RuleValue, false));
        }
        private void BindRp()
        {
            var    provider = MembershipProviderExtensions.GetMembersMembershipProvider();
            string letter   = Request.QueryString["letter"];

            if (string.IsNullOrEmpty(letter) == false)
            {
                if (provider.IsUmbracoMembershipProvider())
                {
                    if (letter == "#")
                    {
                        rp_members.DataSource = cms.businesslogic.member.Member.getAllOtherMembers();
                    }
                    else
                    {
                        rp_members.DataSource = cms.businesslogic.member.Member.getMemberFromFirstLetter(letter.ToCharArray()[0]);
                    }
                }
                else
                {
                    rp_members.DataSource = provider.FindUsersByName(letter + "%");
                }
                rp_members.DataBind();
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            var provider = MembershipProviderExtensions.GetMembersMembershipProvider();

            if (provider.IsUmbracoMembershipProvider())
            {
                ButtonSearch.Text = ui.Text("search");
            }
        }
示例#4
0
 public static bool HasAccess(int documentId, object memberId)
 {
     return(ApplicationContext.Current.Services.PublicAccessService.HasAccess(
                documentId,
                memberId,
                ApplicationContext.Current.Services.ContentService,
                MembershipProviderExtensions.GetMembersMembershipProvider(),
                //TODO: This should really be targeting a specific provider by name!!
                Roles.Provider));
 }
示例#5
0
        public override bool PerformDelete()
        {
            var provider = MembershipProviderExtensions.GetMembersMembershipProvider();
            var u        = provider.GetUser(Alias, false);

            if (u == null)
            {
                return(false);
            }
            provider.DeleteUser(u.UserName, true);
            return(true);
        }
示例#6
0
        /// <summary>
        /// Validation to Check if Member with email Exists
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void EmailExistsCheck(object sender, ServerValidateEventArgs e)
        {
            var provider = MembershipProviderExtensions.GetMembersMembershipProvider();

            if (Email.Text != "" && Member.GetMemberFromEmail(Email.Text.ToLower()) != null && provider.RequiresUniqueEmail)
            {
                e.IsValid = false;
            }
            else
            {
                e.IsValid = true;
            }
        }
示例#7
0
        public override bool PerformSave()
        {
            var nameAndMail = Alias.Split("|".ToCharArray());
            var name        = nameAndMail[0];
            var email       = nameAndMail.Length > 0 ? nameAndMail[1] : "";
            var password    = nameAndMail.Length > 1 ? nameAndMail[2] : "";
            var loginName   = nameAndMail.Length > 2 ? nameAndMail[3] : "";

            var provider = MembershipProviderExtensions.GetMembersMembershipProvider();

            if (provider.IsUmbracoMembershipProvider() && TypeID != -1)
            {
                var dt             = new MemberType(TypeID);
                var castedProvider = (UmbracoMembershipProviderBase)provider;
                MembershipCreateStatus status;

                //First create with the membership provider
                //TODO: We are not supporting q/a - passing in empty here
                var created = castedProvider.CreateUser(dt.Alias,
                                                        loginName.Replace(" ", "").ToLower(), //dunno why we're doing this but that's how it has been so i'll leave it i guess
                                                        password, email, "", "", true, Guid.NewGuid(), out status);
                if (status != MembershipCreateStatus.Success)
                {
                    throw new Exception("Error creating Member: " + status);
                }

                //update the name
                var member = Member.GetMemberFromLoginName(created.UserName);
                member.Text = name;
                member.Save();

                var e = new NewMemberUIEventArgs();
                this.OnNewMember(e, password, member);

                _returnUrl = "members/editMember.aspx?id=" + member.Id.ToString(CultureInfo.InvariantCulture);
            }
            else
            {
                MembershipCreateStatus mc;
                provider.CreateUser(name, password, email, "empty", "empty", true, null, out mc);
                if (mc != MembershipCreateStatus.Success)
                {
                    throw new Exception("Error creating Member: " + mc);
                }
                _returnUrl = "members/editMember.aspx?id=" + HttpUtility.UrlEncode(name);
            }

            return(true);
        }
        protected override void CreateRootNode(ref XmlTreeNode rootNode)
        {
            var provider = MembershipProviderExtensions.GetMembersMembershipProvider();

            // only show member types if we're using umbraco members on the website
            if (provider.IsUmbracoMembershipProvider())
            {
                rootNode.NodeType = "init" + TreeAlias;
                rootNode.NodeID   = "init";
            }
            else
            {
                rootNode = null;
            }
        }
 /// <summary>
 /// Returns the currently configured membership scenario for members in umbraco
 /// </summary>
 /// <value></value>
 internal static MembershipScenario GetMembershipScenario(this IMemberService memberService)
 {
     if (_scenario.HasValue == false)
     {
         var provider = MembershipProviderExtensions.GetMembersMembershipProvider();
         if (provider.IsUmbracoMembershipProvider())
         {
             return(MembershipScenario.NativeUmbraco);
         }
         var memberType = Current.Services.MemberTypeService.Get(Constants.Conventions.MemberTypes.DefaultAlias);
         return(memberType != null
                    ? MembershipScenario.CustomProviderWithUmbracoLink
                    : MembershipScenario.StandaloneCustomProvider);
     }
     return(_scenario.Value);
 }
示例#10
0
        protected void Page_Load(object sender, System.EventArgs e)
        {
            var provider = MembershipProviderExtensions.GetMembersMembershipProvider();

            sbmt.Text = ui.Text("create");
            if (provider.IsUmbracoMembershipProvider())
            {
                nameLiteral.Text = ui.Text("name");
                memberChooser.Attributes.Add("style", "padding-top: 10px");
                foreach (var dt in MemberType.GetAll)
                {
                    ListItem li = new ListItem();
                    li.Text  = dt.Text;
                    li.Value = dt.Id.ToString();
                    nodeType.Items.Add(li);
                }
            }
            else
            {
                nameLiteral.Text      = ui.Text("login");
                memberChooser.Visible = false;
            }

            string[] pwRules =
            {
                provider.MinRequiredPasswordLength.ToString(CultureInfo.InvariantCulture),
                provider.MinRequiredNonAlphanumericCharacters.ToString(CultureInfo.InvariantCulture)
            };

            PasswordRules.Text = PasswordRules.Text = ui.Text(
                "errorHandling", "", pwRules, UmbracoEnsuredPage.CurrentUser);

            if (!IsPostBack)
            {
                passwordRequired.ErrorMessage   = ui.Text("errorHandling", "errorMandatoryWithoutTab", ui.Text("password"), BasePages.UmbracoEnsuredPage.CurrentUser);
                nameRequired.ErrorMessage       = ui.Text("errorHandling", "errorMandatoryWithoutTab", nameLiteral.Text, BasePages.UmbracoEnsuredPage.CurrentUser);
                emailRequired.ErrorMessage      = ui.Text("errorHandling", "errorMandatoryWithoutTab", "E-mail", BasePages.UmbracoEnsuredPage.CurrentUser);
                loginRequired.ErrorMessage      = ui.Text("errorHandling", "errorMandatoryWithoutTab", "Login Name", BasePages.UmbracoEnsuredPage.CurrentUser);
                loginExistsCheck.ErrorMessage   = ui.Text("errorHandling", "errorExistsWithoutTab", "Login Name", BasePages.UmbracoEnsuredPage.CurrentUser);
                emailExistsCheck.ErrorMessage   = ui.Text("errorHandling", "errorExistsWithoutTab", "E-mail", BasePages.UmbracoEnsuredPage.CurrentUser);
                memberTypeRequired.ErrorMessage = ui.Text("errorHandling", "errorMandatoryWithoutTab", "Member Type", BasePages.UmbracoEnsuredPage.CurrentUser);
                Password.Text =
                    Membership.GeneratePassword(provider.MinRequiredPasswordLength, provider.MinRequiredNonAlphanumericCharacters);
            }
        }
        void Member_New(Member sender, NewEventArgs e)
        {
            //This is a bit of a hack to ensure that the member is approved when created since many people will be using
            // this old api to create members on the front-end and they need to be approved - which is based on whether or not
            // the Umbraco membership provider is configured.
            var provider = MembershipProviderExtensions.GetMembersMembershipProvider() as UmbracoMembershipProvider;

            if (provider != null)
            {
                var approvedField = provider.ApprovedPropertyTypeAlias;
                var property      = sender.getProperty(approvedField);
                if (property != null)
                {
                    property.Value = 1;
                    sender.Save();
                }
            }
        }
        public void UnlockByKey(Guid key)
        {
            var membershipProvider = MembershipProviderExtensions.GetMembersMembershipProvider();
            var member             = membershipProvider.GetUser(key, false);

            // if they were locked but now they are trying to be unlocked
            if (member != null && member.IsLockedOut)
            {
                try
                {
                    var result = membershipProvider.UnlockUser(member.UserName);
                    if (result == false)
                    {
                        // it wasn't successful - but it won't really tell us why.
                        ModelState.AddModelError("", "Could not unlock the user");
                    }
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("", ex);
                }
            }
        }
        public void bindMember(object sender, RepeaterItemEventArgs e)
        {
            var provider = MembershipProviderExtensions.GetMembersMembershipProvider();

            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                if (provider.IsUmbracoMembershipProvider())
                {
                    cms.businesslogic.member.Member mem = (cms.businesslogic.member.Member)e.Item.DataItem;
                    Literal _name   = (Literal)e.Item.FindControl("lt_name");
                    Literal _email  = (Literal)e.Item.FindControl("lt_email");
                    Literal _login  = (Literal)e.Item.FindControl("lt_login");
                    Button  _button = (Button)e.Item.FindControl("bt_delete");

                    _name.Text  = "<a href='editMember.aspx?id=" + mem.Id.ToString() + "'>" + mem.Text + "</a>";
                    _login.Text = mem.LoginName;
                    _email.Text = mem.Email;

                    _button.CommandArgument = mem.Id.ToString();
                    _button.OnClientClick   = "return confirm(\"" + ui.Text("confirmdelete") + "'" + mem.Text + "' ?\")";
                    _button.Text            = ui.Text("delete");
                }
                else
                {
                    var     mem     = (MembershipUser)e.Item.DataItem;
                    Literal _name   = (Literal)e.Item.FindControl("lt_name");
                    Literal _email  = (Literal)e.Item.FindControl("lt_email");
                    Literal _login  = (Literal)e.Item.FindControl("lt_login");
                    Button  _button = (Button)e.Item.FindControl("bt_delete");

                    _name.Text      = "<a href='editMember.aspx?id=" + mem.UserName + "'>" + mem.UserName + "</a>";
                    _login.Text     = mem.UserName;
                    _email.Text     = mem.Email;
                    _button.Visible = false;
                }
            }
        }
示例#14
0
        protected void protect_Click(object sender, CommandEventArgs e)
        {
            if (string.IsNullOrEmpty(errorPagePicker.Value) || errorPagePicker.Value == "-1")
            {
                cv_errorPage.IsValid = false;
            }

            if (string.IsNullOrEmpty(loginPagePicker.Value) || loginPagePicker.Value == "-1")
            {
                cv_loginPage.IsValid = false;
            }

            //reset
            SimpleLoginNameValidator.IsValid = true;

            var provider = MembershipProviderExtensions.GetMembersMembershipProvider();

            if (Page.IsValid)
            {
                int pageId = int.Parse(helper.Request("nodeId"));

                if (e.CommandName == "simple")
                {
                    var memberLogin = simpleLogin.Visible ? simpleLogin.Text : SimpleLoginLabel.Text;

                    var member = provider.GetUser(memberLogin, false);
                    if (member == null)
                    {
                        var tempEmail = "u" + Guid.NewGuid().ToString("N") + "@example.com";

                        // this needs to work differently depending on umbraco members or external membership provider
                        if (provider.IsUmbracoMembershipProvider() == false)
                        {
                            member = provider.CreateUser(memberLogin, simplePassword.Text, tempEmail);
                        }
                        else
                        {
                            //if it's the umbraco membership provider, then we need to tell it what member type to create it with
                            if (MemberType.GetByAlias(Constants.Conventions.MemberTypes.SystemDefaultProtectType) == null)
                            {
                                MemberType.MakeNew(BusinessLogic.User.GetUser(0), Constants.Conventions.MemberTypes.SystemDefaultProtectType);
                            }
                            var castedProvider = provider.AsUmbracoMembershipProvider();
                            MembershipCreateStatus status;
                            member = castedProvider.CreateUser(Constants.Conventions.MemberTypes.SystemDefaultProtectType,
                                                               memberLogin, simplePassword.Text, tempEmail, null, null, true, null, out status);
                            if (status != MembershipCreateStatus.Success)
                            {
                                SimpleLoginNameValidator.IsValid      = false;
                                SimpleLoginNameValidator.ErrorMessage = "Could not create user: "******"Could not create user: "******"__umbracoRole_" + member.UserName;
                    if (Roles.RoleExists(simpleRoleName) == false)
                    {
                        Roles.CreateRole(simpleRoleName);
                    }
                    if (Roles.IsUserInRole(member.UserName, simpleRoleName) == false)
                    {
                        Roles.AddUserToRole(member.UserName, simpleRoleName);
                    }

                    Access.ProtectPage(true, pageId, int.Parse(loginPagePicker.Value), int.Parse(errorPagePicker.Value));
                    Access.AddMembershipRoleToDocument(pageId, simpleRoleName);
                    Access.AddMembershipUserToDocument(pageId, member.UserName);
                }
                else if (e.CommandName == "advanced")
                {
                    Access.ProtectPage(false, pageId, int.Parse(loginPagePicker.Value), int.Parse(errorPagePicker.Value));

                    foreach (ListItem li in _memberGroups.Items)
                    {
                        if (("," + _memberGroups.Value + ",").IndexOf("," + li.Value + ",", StringComparison.Ordinal) > -1)
                        {
                            Access.AddMembershipRoleToDocument(pageId, li.Value);
                        }
                        else
                        {
                            Access.RemoveMembershipRoleFromDocument(pageId, li.Value);
                        }
                    }
                }

                feedback.Text = ui.Text("publicAccess", "paIsProtected", new cms.businesslogic.CMSNode(pageId).Text) + "</p><p><a href='#' onclick='" + ClientTools.Scripts.CloseModalWindow() + "'>" + ui.Text("closeThisWindow") + "</a>";

                p_buttons.Visible     = false;
                pane_advanced.Visible = false;
                pane_simple.Visible   = false;
                var content = ApplicationContext.Current.Services.ContentService.GetById(pageId);
                //reloads the current node in the tree
                ClientTools.SyncTree(content.Path, true);
                //reloads the current node's children in the tree
                ClientTools.ReloadActionNode(false, true);
                feedback.type = global::umbraco.uicontrols.Feedback.feedbacktype.success;
            }
        }
示例#15
0
        /// <summary>
        /// Renders the specified tree item.
        /// </summary>
        /// <param name="Tree">The tree.</param>
        public override void Render(ref XmlDocument Tree)
        {
            var provider = MembershipProviderExtensions.GetMembersMembershipProvider();

            string letter            = "";
            string ContentItemParent = "";

            if (HttpContext.Current.Request.QueryString.ToString().IndexOf("letter") >= 0)
            {
                letter = HttpContext.Current.Request.QueryString.Get("letter");
            }
            if (HttpContext.Current.Request.QueryString.ToString().IndexOf("ContentItemParent") >= 0)
            {
                ContentItemParent = HttpContext.Current.Request.QueryString.Get("ContentItemParent");
            }
            // letter = ;

            XmlNode root = Tree.DocumentElement;

            if (letter != "")
            {
                if (ContentItemParent != "") // show contentitems owned by the specific member!
                {
                    CMSNode c      = new CMSNode(int.Parse(ContentItemParent));
                    var     childs = c.ChildrenOfAllObjectTypes;
                    foreach (CMSNode cn in childs)
                    {
                        XmlElement treeElement = Tree.CreateElement("tree");
                        treeElement.SetAttribute("menu", "D,L");
                        treeElement.SetAttribute("nodeID", cn.Id.ToString());
                        treeElement.SetAttribute("text", cn.Text);
                        // treeElement.SetAttribute("action", "javascript:openMember(" + m.Id.ToString() + ");");
                        treeElement.SetAttribute("action", "javascript:openContentItem(" + cn.Id + ");");
                        if (!cn.HasChildren)
                        {
                            treeElement.SetAttribute("src", "");
                        }
                        else
                        {
                            treeElement.SetAttribute("src",
                                                     "tree.aspx?letter=" + letter + "&app=" + m_app + "&treeType=" +
                                                     HttpContext.Current.Request.QueryString["treeType"] + "&ContentItemParent=" + cn.Id + "&rnd=" + Guid.NewGuid());
                        }
                        treeElement.SetAttribute("icon", "doc.gif");
                        treeElement.SetAttribute("openIcon", "doc.gif");
                        treeElement.SetAttribute("nodeType", "contentItem");
                        treeElement.SetAttribute("hasChildren", "true");
                        root.AppendChild(treeElement);
                    }
                }
                else // list all members with selected first character.
                {
                    //if letters equals Others show members that not starts with a through z
                    if (letter.Equals("Others"))
                    {
                        foreach (Member m in Member.getAllOtherMembers())
                        {
                            XmlElement treeElement = Tree.CreateElement("tree");

                            treeElement.SetAttribute("nodeID", m.LoginName);
                            treeElement.SetAttribute("text", m.Text);
                            treeElement.SetAttribute("action", "javascript:openMember('" + m.Id + "');");
                            treeElement.SetAttribute("menu", "D");
                            treeElement.SetAttribute("icon", string.IsNullOrEmpty(m.ContentType.IconUrl) ? "member.gif" : m.ContentType.IconUrl);
                            treeElement.SetAttribute("openIcon", string.IsNullOrEmpty(m.ContentType.IconUrl) ? "member.gif" : m.ContentType.IconUrl);
                            treeElement.SetAttribute("nodeType", "member");
                            treeElement.SetAttribute("hasChildren", "true");
                            root.AppendChild(treeElement);
                        }
                    }
                    else
                    {
                        if (provider.IsUmbracoMembershipProvider())
                        {
                            foreach (Member m in Member.getMemberFromFirstLetter(letter.ToCharArray()[0]))
                            {
                                XmlElement treeElement = Tree.CreateElement("tree");

                                treeElement.SetAttribute("nodeID", m.LoginName);
                                treeElement.SetAttribute("text", m.Text);
                                treeElement.SetAttribute("action", "javascript:openMember('" + m.Id + "');");
                                treeElement.SetAttribute("menu", "D");
                                treeElement.SetAttribute("icon", string.IsNullOrEmpty(m.ContentType.IconUrl) ? "member.gif" : m.ContentType.IconUrl);
                                treeElement.SetAttribute("openIcon", string.IsNullOrEmpty(m.ContentType.IconUrl) ? "member.gif" : m.ContentType.IconUrl);
                                treeElement.SetAttribute("nodeType", "member");
                                treeElement.SetAttribute("hasChildren", "true");
                                root.AppendChild(treeElement);
                            }
                        }
                        else
                        {
                            int total;
                            foreach (MembershipUser u in provider.FindUsersByName(letter + "%", 0, 9999, out total))
                            {
                                XmlElement treeElement = Tree.CreateElement("tree");

                                treeElement.SetAttribute("nodeID", u.UserName);
                                treeElement.SetAttribute("text", u.UserName);
                                treeElement.SetAttribute("action", "javascript:openMember('" + HttpContext.Current.Server.UrlEncode(u.UserName) + "');");
                                treeElement.SetAttribute("menu", "D");
                                treeElement.SetAttribute("icon", "member.gif");
                                treeElement.SetAttribute("openIcon", "member.gif");
                                treeElement.SetAttribute("nodeType", "member");
                                treeElement.SetAttribute("hasChildren", "true");
                                root.AppendChild(treeElement);
                            }
                        }
                    }
                }
            }
            else
            {
                for (int i = 97; i < 123; i++)
                {
                    XmlElement treeElement = Tree.CreateElement("tree");
                    treeElement.SetAttribute("menu", "");
                    treeElement.SetAttribute("nodeID", i.ToString());
                    treeElement.SetAttribute("text", ((char)i).ToString());
                    treeElement.SetAttribute("action", "javascript:viewMembers('" + ((char)i).ToString() + "');");

                    treeElement.SetAttribute("src", "");

                    treeElement.SetAttribute("icon", FolderIcon);
                    treeElement.SetAttribute("openIcon", FolderIcon);
                    treeElement.SetAttribute("nodeType", "member");
                    treeElement.SetAttribute("hasChildren", "true");

                    treeElement.SetAttribute("src",
                                             "tree.aspx?letter=" + ((char)i) + "&app=" + m_app + "&treeType=" +
                                             HttpContext.Current.Request.QueryString["treeType"] + "&rnd=" + Guid.NewGuid());


                    root.AppendChild(treeElement);
                }

                //Add folder named "Others", only supported by umbraco
                if (provider.IsUmbracoMembershipProvider())
                {
                    XmlElement treeElementOther = Tree.CreateElement("tree");
                    treeElementOther.SetAttribute("menu", "");
                    treeElementOther.SetAttribute("nodeID", "Others");
                    treeElementOther.SetAttribute("text", "Others");
                    treeElementOther.SetAttribute("action", "javascript:viewMembers('#');");
                    treeElementOther.SetAttribute("src", "");
                    treeElementOther.SetAttribute("icon", FolderIcon);
                    treeElementOther.SetAttribute("openIcon", FolderIcon);
                    treeElementOther.SetAttribute("nodeType", "member");
                    treeElementOther.SetAttribute("hasChildren", "true");

                    treeElementOther.SetAttribute("src", "tree.aspx?letter=Others&app=" + m_app + "&treeType=" +
                                                  HttpContext.Current.Request.QueryString["treeType"] + "&rnd=" +
                                                  Guid.NewGuid());

                    root.AppendChild(treeElementOther);
                }

                // Search
                XmlElement treeElementSearch = Tree.CreateElement("tree");
                treeElementSearch.SetAttribute("menu", "");
                treeElementSearch.SetAttribute("nodeID", "Search");
                treeElementSearch.SetAttribute("text", ui.Text("search"));
                treeElementSearch.SetAttribute("action", "javascript:searchMembers();");
                treeElementSearch.SetAttribute("src", "");
                treeElementSearch.SetAttribute("icon", FolderIcon);
                treeElementSearch.SetAttribute("openIcon", FolderIcon);
                treeElementSearch.SetAttribute("nodeType", "member");


                root.AppendChild(treeElementSearch);
            }
        }
        protected void ButtonSearch_Click(object sender, EventArgs e)
        {
            resultsPane.Visible = true;
            var provider = MembershipProviderExtensions.GetMembersMembershipProvider();

            if (provider.IsUmbracoMembershipProvider())
            {
                var query            = searchQuery.Text.ToLower();
                var internalSearcher = UmbracoContext.Current.InternalMemberSearchProvider;

                if (String.IsNullOrEmpty(query) == false)
                {
                    var criteria  = internalSearcher.CreateSearchCriteria("member", BooleanOperation.Or);
                    var fields    = new[] { "id", "__nodeName", "email" };
                    var term      = new[] { query.ToLower().Escape() };
                    var operation = criteria.GroupedOr(fields, term).Compile();

                    var results = internalSearcher.Search(operation)
                                  .Select(x => new MemberSearchResult
                    {
                        Id        = x["id"],
                        Name      = x["nodeName"],
                        Email     = x["email"],
                        LoginName = x["loginName"]
                    });
                    rp_members.DataSource = results;
                    rp_members.DataBind();
                }
                else
                {
                    resultsPane.Visible = false;
                }
            }
            else
            {
                IEnumerable <MemberSearchResult> results;
                if (searchQuery.Text.Contains("@"))
                {
                    results = from MembershipUser x in provider.FindUsersByEmail(searchQuery.Text)
                              select
                              new MemberSearchResult()
                    {
                        Id        = x.UserName,
                        Email     = x.Email,
                        LoginName = x.UserName,
                        Name      = x.UserName
                    };
                }
                else
                {
                    results = from MembershipUser x in provider.FindUsersByName(searchQuery.Text + "%")
                              select
                              new MemberSearchResult()
                    {
                        Id        = x.UserName,
                        Email     = x.Email,
                        LoginName = x.UserName,
                        Name      = x.UserName
                    };
                }

                rp_members.DataSource = results;
                rp_members.DataBind();
            }
        }