Last active
November 22, 2017 09:40
-
-
Save khurramkhang/08409560f9b04cb1520a1e6321220c18 to your computer and use it in GitHub Desktop.
App builder extensions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Web; | |
using EPiServer.Cms.UI.AspNetIdentity; | |
using EPiServer.Shell.Security; | |
using Microsoft.AspNet.Identity; | |
using Microsoft.AspNet.Identity.EntityFramework; | |
using Microsoft.AspNet.Identity.Owin; | |
using Microsoft.Owin; | |
using Microsoft.Owin.Security.DataProtection; | |
using Owin; | |
namespace MySite.Business.Identity | |
{ | |
public static class ApplicationBuilderExtensions | |
{ | |
public static IAppBuilder SetupAspNetIdentity<TUser>(this IAppBuilder app) where TUser : IdentityUser, IUIUser, new() | |
{ | |
var applicationOptions = new ApplicationOptions | |
{ | |
DataProtectionProvider = app.GetDataProtectionProvider() | |
}; | |
// Configure the db context, user manager and signin manager to use a single instance per request by using | |
// the default create delegates | |
app.CreatePerOwinContext<ApplicationOptions>(() => applicationOptions); | |
app.CreatePerOwinContext<ApplicationDbContext<TUser>>(ApplicationDbContext<TUser>.Create); | |
app.CreatePerOwinContext<ApplicationRoleManager<TUser>>(ApplicationRoleManager<TUser>.Create); | |
app.CreatePerOwinContext<ApplicationUserManager<TUser>>(CreateApplicationUserManager); | |
app.CreatePerOwinContext<ApplicationSignInManager<TUser>>(ApplicationSignInManager<TUser>.Create); | |
// Configure the application | |
app.CreatePerOwinContext<UIUserProvider>(ApplicationUserProvider<TUser>.Create); | |
app.CreatePerOwinContext<UIRoleProvider>(ApplicationRoleProvider<TUser>.Create); | |
app.CreatePerOwinContext<UIUserManager>(ApplicationUIUserManager<TUser>.Create); | |
app.CreatePerOwinContext<UISignInManager>(ApplicationUISignInManager<TUser>.Create); | |
// Saving the connection string in the case dbcontext be requested from none web context | |
ConnectionStringNameResolver.ConnectionStringNameFromOptions = applicationOptions.ConnectionStringName; | |
return app; | |
} | |
public static ApplicationUserManager<TUser> CreateApplicationUserManager<TUser>(IdentityFactoryOptions<ApplicationUserManager<TUser>> options, IOwinContext context) where TUser : IdentityUser, IUIUser, new() | |
{ | |
var manager = new ApplicationUserManager<TUser>(new UserStore<TUser>(context.Get<ApplicationDbContext<TUser>>())); | |
// Configure validation logic for usernames | |
manager.UserValidator = new UserValidator<TUser>(manager) | |
{ | |
AllowOnlyAlphanumericUserNames = false, | |
RequireUniqueEmail = true | |
}; | |
// Change Password hasher | |
//https://gist.github.com/khurramkhang/f279284f2aecbed80ac1bbafe046c945 | |
manager.PasswordHasher = new SqlPasswordHasher(); | |
// Configure validation logic for passwords | |
manager.PasswordValidator = new PasswordValidator | |
{ | |
RequiredLength = 6, | |
RequireNonLetterOrDigit = true, | |
RequireDigit = true, | |
RequireLowercase = true, | |
RequireUppercase = true | |
}; | |
// Configure user lockout defaults | |
manager.UserLockoutEnabledByDefault = true; | |
manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5); | |
manager.MaxFailedAccessAttemptsBeforeLockout = 5; | |
var provider = context.Get<ApplicationOptions>().DataProtectionProvider.Create("EPiServerAspNetIdentity"); | |
manager.UserTokenProvider = new DataProtectorTokenProvider<TUser>(provider); | |
return manager; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment