//Login admin - add interface for admins public SearchResults<ILogin> SearchLogins(OperationContext context, LoginSearch search) { var utcNow = context.App.TimeService.UtcNow; var session = context.OpenSession(); search = search.DefaultIfNull(take: 20, defaultOrderBy: "UserName"); var where = session.NewPredicate<ILogin>() .AndIfNotEmpty(search.TenantId, lg => lg.TenantId == search.TenantId.Value) .AndIfNotEmpty(search.UserName, lg => lg.UserName.StartsWith(search.UserName)) .AndIfNotEmpty(search.UserId, lg => lg.UserId == search.UserId) .AndIfNotEmpty(search.ExpiringBefore, lg => lg.Expires != null && lg.Expires < search.ExpiringBefore.Value) .AndIfNotEmpty(search.CreatedAfter, lg => lg.CreatedOn >= search.CreatedAfter.Value) .AndIfNotEmpty(search.CreatedBefore, lg => lg.CreatedOn <= search.CreatedBefore.Value) .AndIf(search.EnabledOnly, lg => (lg.Flags & LoginFlags.Disabled) == 0) .AndIf(search.SuspendedOnly, lg => (lg.Flags & LoginFlags.Suspended) == 0 && lg.SuspendedUntil > utcNow); if (!string.IsNullOrWhiteSpace(search.Email)) { var factorHash = Util.StableHash(search.Email.Trim().ToLowerInvariant()); var subQuery = session.EntitySet<ILoginExtraFactor>().Where(f => f.InfoHash == factorHash).Select(f => f.Login.Id); where = where.And(lg => subQuery.Contains(lg.Id)); }; var result = session.ExecuteSearch(where, search); if(LoginExtensions.CheckSuspensionEnded(result.Results, utcNow)) { } return result; }
//Login admin - add interface for admins public SearchResults <ILogin> SearchLogins(OperationContext context, LoginSearch search) { var utcNow = context.App.TimeService.UtcNow; var session = context.OpenSession(); search = search.DefaultIfNull(take: 20, defaultOrderBy: "UserName"); var where = session.NewPredicate <ILogin>() .AndIfNotEmpty(search.UserName, lg => lg.UserName.StartsWith(search.UserName)) .AndIfNotEmpty(search.UserId, lg => lg.UserId == search.UserId) .AndIfNotEmpty(search.ExpiringBefore, lg => lg.Expires != null && lg.Expires < search.ExpiringBefore.Value) .AndIfNotEmpty(search.CreatedAfter, lg => lg.CreatedOn >= search.CreatedAfter.Value) .AndIfNotEmpty(search.CreatedBefore, lg => lg.CreatedOn <= search.CreatedBefore.Value) .AndIf(search.EnabledOnly, lg => (lg.Flags & LoginFlags.Disabled) == 0) .AndIf(search.SuspendedOnly, lg => (lg.Flags & LoginFlags.Suspended) != 0); if (!string.IsNullOrWhiteSpace(search.Email)) { var subQuery = session.EntitySet <ILoginExtraFactor>().Where(f => f.FactorValue.StartsWith(search.Email)) .Select(f => f.Login.Id); where = where.And(lg => subQuery.Contains(lg.Id)); } ; var result = session.ExecuteSearch(where, search); return(result); }