public User EnsureUserEntity(ClaimsIdentity claimsIdentity) { string userKey = EducationSecurityIdentity.FindUserKey(claimsIdentity); User user = UserRepository.Items .Include(u => u.EulaAcceptances) .Include("PrivateHealthDataViewEvents.PhiValuesViewed") .Include("UserRoles.Role") .Include("UserRoles.Schools") .Include("UserRoles.Providers") .SingleOrDefault(u => u.UserKey.Equals(userKey)); if (user == null) { var email = claimsIdentity.FindFirst(ClaimTypes.Email) == null ? User.AnonymousEmailValue : claimsIdentity.FindFirst(ClaimTypes.Email).Value; if (email != User.AnonymousValue) { if (UserRepository.Items.Any(u => u.EmailAddress == email)) { email = User.AnonymousEmailValue; } } user = new User { DisplayName = claimsIdentity.FindFirst(ClaimTypes.Name) == null ? User.AnonymousValue : claimsIdentity.FindFirst(ClaimTypes.Name).Value, FirstName = User.AnonymousValue, LastName = User.AnonymousValue, EmailAddress = email, UserKey = userKey, Active = true }; UserRepository.Add(user); RepositoryContainer.Save(); } return(user); }
private static EducationSecurityPrincipal CreateEducationSecurityPrincipal(AuthorizationContext filterContext, System.Security.Claims.ClaimsPrincipal claimsPrincipal) { System.Security.Claims.ClaimsIdentity claimsIdentity = (System.Security.Claims.ClaimsIdentity)claimsPrincipal.Identity; IAccountManager manager = DependencyResolver.Current.GetService <IAccountManager>(); User userEntity = manager.EnsureUserEntity(claimsIdentity); EducationSecurityIdentity identity = new EducationSecurityIdentity(claimsIdentity, userEntity); EducationSecurityPrincipal principal = new EducationSecurityPrincipal(identity); if (_AuditOnMapCollection.Contains(userEntity.UserKey)) { _AuditOnMapCollection.Remove(userEntity.UserKey); manager.AuditLogin(principal); } if (!(filterContext.RequestContext.RouteData.Values["action"].ToString() == "Index" && filterContext.RequestContext.RouteData.Values["controller"].ToString() == "Agreement")) { manager.ValidateEulaAccepted(principal.Identity.User); } return(principal); }