2014-01-14 14:17:28 +11:00
using System ;
using System.Collections.Generic ;
using System.Linq ;
2014-03-18 17:08:21 +11:00
using System.Security.Principal ;
2014-01-14 14:17:28 +11:00
using System.Text ;
2014-03-18 17:08:21 +11:00
using System.Threading ;
2014-01-14 14:17:28 +11:00
using System.Threading.Tasks ;
2014-03-18 17:08:21 +11:00
using System.Web ;
using System.Web.Hosting ;
2014-01-14 14:17:28 +11:00
using System.Web.Security ;
2014-03-18 18:52:17 +11:00
using Umbraco.Core.Configuration ;
2014-01-14 14:17:28 +11:00
using Umbraco.Core.Security ;
namespace Umbraco.Core.Security
{
2015-02-09 17:37:21 +11:00
public static class MembershipProviderExtensions
2014-01-14 14:17:28 +11:00
{
2015-02-09 17:37:21 +11:00
internal static MembershipUserCollection FindUsersByName ( this MembershipProvider provider , string usernameToMatch )
2014-03-18 17:08:21 +11:00
{
int totalRecords = 0 ;
return provider . FindUsersByName ( usernameToMatch , 0 , int . MaxValue , out totalRecords ) ;
}
2015-02-09 17:37:21 +11:00
internal static MembershipUserCollection FindUsersByEmail ( this MembershipProvider provider , string emailToMatch )
2014-03-18 17:08:21 +11:00
{
int totalRecords = 0 ;
return provider . FindUsersByEmail ( emailToMatch , 0 , int . MaxValue , out totalRecords ) ;
}
2015-02-09 17:37:21 +11:00
internal static MembershipUser CreateUser ( this MembershipProvider provider , string username , string password , string email )
2014-03-18 17:08:21 +11:00
{
MembershipCreateStatus status ;
var user = provider . CreateUser ( username , password , email , null , null , true , null , out status ) ;
if ( user = = null )
throw new MembershipCreateUserException ( status ) ;
return user ;
}
/// <summary>
/// Method to get the Umbraco Members membership provider based on it's alias
/// </summary>
/// <returns></returns>
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 ] ;
}
2014-03-18 17:22:25 +11:00
/// <summary>
/// Method to get the Umbraco Users membership provider based on it's alias
/// </summary>
/// <returns></returns>
public static MembershipProvider GetUsersMembershipProvider ( )
{
2014-03-18 19:05:07 +11:00
if ( Membership . Providers [ UmbracoConfig . For . UmbracoSettings ( ) . Providers . DefaultBackOfficeUserProvider ] = = null )
2014-03-18 17:22:25 +11:00
{
2014-03-18 19:05:07 +11:00
throw new InvalidOperationException ( "No membership provider found with name " + UmbracoConfig . For . UmbracoSettings ( ) . Providers . DefaultBackOfficeUserProvider ) ;
2014-03-18 17:22:25 +11:00
}
2014-03-18 19:05:07 +11:00
return Membership . Providers [ UmbracoConfig . For . UmbracoSettings ( ) . Providers . DefaultBackOfficeUserProvider ] ;
2014-03-18 17:22:25 +11:00
}
2014-07-01 10:43:44 +10:00
/// <summary>
/// Returns the currently logged in MembershipUser and flags them as being online - use sparingly (i.e. login)
/// </summary>
/// <param name="membershipProvider"></param>
/// <returns></returns>
public static MembershipUser GetCurrentUserOnline ( this MembershipProvider membershipProvider )
2014-03-18 17:22:25 +11:00
{
var username = membershipProvider . GetCurrentUserName ( ) ;
2014-04-24 12:12:06 +10:00
return username . IsNullOrWhiteSpace ( )
? null
: membershipProvider . GetUser ( username , true ) ;
2014-03-18 17:22:25 +11:00
}
2014-07-01 10:43:44 +10:00
/// <summary>
/// Returns the currently logged in MembershipUser
/// </summary>
/// <param name="membershipProvider"></param>
/// <returns></returns>
2015-02-09 17:37:21 +11:00
internal static MembershipUser GetCurrentUser ( this MembershipProvider membershipProvider )
2014-07-01 10:43:44 +10:00
{
var username = membershipProvider . GetCurrentUserName ( ) ;
return username . IsNullOrWhiteSpace ( )
? null
: membershipProvider . GetUser ( username , false ) ;
}
2014-03-18 17:08:21 +11:00
/// <summary>
/// Just returns the current user's login name (just a wrapper).
/// </summary>
/// <param name="membershipProvider"></param>
/// <returns></returns>
2015-02-09 17:37:21 +11:00
internal static string GetCurrentUserName ( this MembershipProvider membershipProvider )
2014-03-18 17:08:21 +11:00
{
if ( HostingEnvironment . IsHosted )
{
HttpContext current = HttpContext . Current ;
2014-04-24 12:12:06 +10:00
if ( current ! = null & & current . User ! = null & & current . User . Identity ! = null )
2014-03-18 17:08:21 +11:00
return current . User . Identity . Name ;
}
IPrincipal currentPrincipal = Thread . CurrentPrincipal ;
if ( currentPrincipal = = null | | currentPrincipal . Identity = = null )
return string . Empty ;
else
return currentPrincipal . Identity . Name ;
}
2014-01-22 11:57:33 +11:00
/// <summary>
/// Returns true if the provider specified is a built-in Umbraco users provider
/// </summary>
/// <param name="membershipProvider"></param>
/// <returns></returns>
public static bool IsUmbracoUsersProvider ( this MembershipProvider membershipProvider )
{
return ( membershipProvider is IUsersMembershipProvider ) ;
}
2014-01-14 14:17:28 +11:00
/// <summary>
/// Returns true if the provider specified is a built-in Umbraco membership provider
/// </summary>
/// <param name="membershipProvider"></param>
/// <returns></returns>
public static bool IsUmbracoMembershipProvider ( this MembershipProvider membershipProvider )
{
return ( membershipProvider is UmbracoMembershipProviderBase ) ;
}
2014-01-23 11:41:01 +11:00
//TODO: Add role provider checks too
2014-01-14 16:21:00 +11:00
public static UmbracoMembershipProviderBase AsUmbracoMembershipProvider ( this MembershipProvider membershipProvider )
{
return ( UmbracoMembershipProviderBase ) membershipProvider ;
}
2014-01-14 14:17:28 +11:00
}
}