using System; using System.Collections.Generic; using System.Linq; using System.Security.Principal; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Web; using System.Web.Hosting; using System.Web.Security; using Umbraco.Core.Configuration; using Umbraco.Core.Security; namespace Umbraco.Core.Security { internal static class MembershipProviderExtensions { public static MembershipUserCollection FindUsersByName(this MembershipProvider provider, string usernameToMatch) { int totalRecords = 0; return provider.FindUsersByName(usernameToMatch, 0, int.MaxValue, out totalRecords); } public static MembershipUserCollection FindUsersByEmail(this MembershipProvider provider, string emailToMatch) { int totalRecords = 0; return provider.FindUsersByEmail(emailToMatch, 0, int.MaxValue, out totalRecords); } public static MembershipUser CreateUser(this MembershipProvider provider, string username, string password, string email) { MembershipCreateStatus status; var user = provider.CreateUser(username, password, email, null, null, true, null, out status); if (user == null) throw new MembershipCreateUserException(status); return user; } /// /// Method to get the Umbraco Members membership provider based on it's alias /// /// public static MembershipProvider GetMembersMembershipProvider() { if (Membership.Providers[Constants.Conventions.Member.UmbracoMemberProviderName] == null) { throw new InvalidOperationException("No membership provider found with name " + Constants.Conventions.Member.UmbracoMemberProviderName); } return Membership.Providers[Constants.Conventions.Member.UmbracoMemberProviderName]; } /// /// Method to get the Umbraco Users membership provider based on it's alias /// /// public static MembershipProvider GetUsersMembershipProvider() { if (Membership.Providers[UmbracoConfig.For.UmbracoSettings().Providers.DefaultBackOfficeUserProvider] == null) { throw new InvalidOperationException("No membership provider found with name " + UmbracoConfig.For.UmbracoSettings().Providers.DefaultBackOfficeUserProvider); } return Membership.Providers[UmbracoConfig.For.UmbracoSettings().Providers.DefaultBackOfficeUserProvider]; } /// /// Returns the currently logged in MembershipUser and flags them as being online - use sparingly (i.e. login) /// /// /// public static MembershipUser GetCurrentUserOnline(this MembershipProvider membershipProvider) { var username = membershipProvider.GetCurrentUserName(); return username.IsNullOrWhiteSpace() ? null : membershipProvider.GetUser(username, true); } /// /// Returns the currently logged in MembershipUser /// /// /// public static MembershipUser GetCurrentUser(this MembershipProvider membershipProvider) { var username = membershipProvider.GetCurrentUserName(); return username.IsNullOrWhiteSpace() ? null : membershipProvider.GetUser(username, false); } /// /// Just returns the current user's login name (just a wrapper). /// /// /// public static string GetCurrentUserName(this MembershipProvider membershipProvider) { if (HostingEnvironment.IsHosted) { HttpContext current = HttpContext.Current; if (current != null && current.User != null && current.User.Identity != null) return current.User.Identity.Name; } IPrincipal currentPrincipal = Thread.CurrentPrincipal; if (currentPrincipal == null || currentPrincipal.Identity == null) return string.Empty; else return currentPrincipal.Identity.Name; } /// /// Returns true if the provider specified is a built-in Umbraco users provider /// /// /// public static bool IsUmbracoUsersProvider(this MembershipProvider membershipProvider) { return (membershipProvider is IUsersMembershipProvider); } /// /// Returns true if the provider specified is a built-in Umbraco membership provider /// /// /// public static bool IsUmbracoMembershipProvider(this MembershipProvider membershipProvider) { return (membershipProvider is UmbracoMembershipProviderBase); } //TODO: Add role provider checks too public static UmbracoMembershipProviderBase AsUmbracoMembershipProvider(this MembershipProvider membershipProvider) { return (UmbracoMembershipProviderBase)membershipProvider; } } }