public OAuth2User GetUser(string identifier, string password) { OAuth2User entity = null; using (IEntityContext context = DependencyInjection.Get<IEntityContext>()) { using (IOAuth2UserRepository repository = DependencyInjection.Get<IOAuth2UserRepository>(InjectionParameter.Create("context", context))) { OAuth2Scope scope = null; QueryOver<OAuth2UserScope, OAuth2UserScope> subQuery = QueryOver.Of<OAuth2UserScope>() .Where(x => x.ValidFrom <= DateTime.UtcNow) .And(x => x.ValidUntil > DateTime.UtcNow) // Join with OAUTH2SCOPE, search for valid data. .JoinAlias(x => x.Scope, () => scope) .And(() => scope.ValidFrom <= DateTime.UtcNow) .And(() => scope.ValidUntil > DateTime.UtcNow) // Just keep the USER.ID to use in the query. .Select(t => t.User.ID); IQueryOver<OAuth2User, OAuth2User> query = repository.Query() .Fetch(x => x.UserScopes).Eager .Fetch(x => x.UserIdentities).Eager .Where(x => x.Identifier == identifier) .And(x => x.Password == password) .WithSubquery.WhereProperty(x => x.ID).In(subQuery) .TransformUsing(Transformers.DistinctRootEntity); entity = query.List().SingleOrDefault(); } context.Commit(); } return entity; }
public OAuth2UserIdentity SignUpUser(OAuth2UserIdentity entity) { using (IEntityContext context = DependencyInjection.Get<IEntityContext>()) { using (IOAuth2UserRepository repository = DependencyInjection.Get<IOAuth2UserRepository>(InjectionParameter.Create("context", context))) { IList<OAuth2Scope> scopes = repository.Context.Query<OAuth2Scope>() .Where(x => x.Code == "application.role.user.default") .List(); bool isValidIdentifier = this.IsValidEmail(entity.User.Identifier); if (isValidIdentifier) { OAuth2User user = new OAuth2User(); user.ID = Guid.NewGuid(); user.Identifier = entity.User.Identifier; user.Password = entity.User.Password; user.CreationTimestamp = DateTime.UtcNow; user.ValidFrom = DateTime.UtcNow; user.ValidUntil = new DateTime(DateTime.Parse("2100-01-01").Ticks, DateTimeKind.Utc); repository.Context.AddOrUpdate(user); Identity identity = new Identity(); identity.ID = Guid.NewGuid(); identity.FirstName = entity.Identity.FirstName; identity.Name = entity.Identity.Name; identity.Locale = entity.Identity.Locale; repository.Context.AddOrUpdate(identity); OAuth2UserScope userScope = new OAuth2UserScope(); userScope.ID = Guid.NewGuid(); userScope.Scope = scopes.Single(); userScope.User = user; userScope.CreationTimestamp = DateTime.UtcNow; userScope.ValidFrom = DateTime.UtcNow; userScope.ValidUntil = new DateTime(DateTime.Parse("2100-01-01").Ticks, DateTimeKind.Utc); repository.Context.AddOrUpdate(userScope); OAuth2UserIdentity userIdentity = new OAuth2UserIdentity(); userIdentity.ID = Guid.NewGuid(); userIdentity.User = user; userIdentity.Identity = identity; userIdentity.CreationTimestamp = DateTime.UtcNow; userIdentity.ValidFrom = DateTime.UtcNow; userIdentity.ValidUntil = new DateTime(DateTime.Parse("2100-01-01").Ticks, DateTimeKind.Utc); repository.Context.AddOrUpdate(userIdentity); } else { throw new Exception("Invalid e-mail address."); } } context.Commit(); } Domain.Entity.OAuth2UserIdentity _entity = this.GetUserIdentity(entity.User.Identifier); return _entity; }