public void onItemFoundEvent(ISearchEvent evt) { string id = evt.getItem(); foreach (User user in GlobalContext.getInstance().ExcludePeople) { if (user.Id.Equals(id)) { return; } } id = "http://vk.com/id" + id; string line = "<br><br><a href=\"" + id + "\">" + id + "</a>"; if (!_console.containsItem(line)) { _console.appendLineToConsole(line); } _countLab.Text = _consoleTb.Lines.Length.ToString(); }
/// <summary> /// Override this for search request support. /// </summary> /// <param name="context"></param> /// <param name="searchEvent"></param> /// <returns>List of search replies</returns> public virtual Task <List <SearchResultReply> > OnSearchRequest(ClientContext context, ISearchEvent searchEvent) { return(Task.FromResult(new List <SearchResultReply>())); }
public void onItemFoundEvent(ISearchEvent evt) { }
public SearchExpressionBuilder(ISearchEvent searchEvent) { _searchEvent = searchEvent; }
public override Task <List <SearchResultReply> > OnSearchRequest(ClientContext context, ISearchEvent searchEvent) { System.Console.WriteLine(System.Convert.ToBase64String(searchEvent.SearchRequest.RawPacket)); if (context.Rdn["cn"][0] == "OnlyBindUser") { return(Task.FromResult(new List <SearchResultReply>())); } int?limit = searchEvent.SearchRequest.SizeLimit; // Load the user database that queries will be executed against UserDatabase dbContainer = new UserDatabase(); IQueryable <UserDatabase.User> userDb = dbContainer.GetUserDatabase().AsQueryable(); var itemExpression = Expression.Parameter(typeof(UserDatabase.User)); SearchExpressionBuilder searchExpressionBuilder = new SearchExpressionBuilder(searchEvent); var conditions = searchExpressionBuilder.Build(searchEvent.SearchRequest.Filter, itemExpression); var queryLambda = Expression.Lambda <Func <UserDatabase.User, bool> >(conditions, itemExpression); var predicate = queryLambda.Compile(); var results = userDb.Where(predicate).ToList(); List <SearchResultReply> replies = new List <SearchResultReply>(); foreach (UserDatabase.User user in results) { List <SearchResultReply.Attribute> attributes = new List <SearchResultReply.Attribute>(); SearchResultReply reply = new SearchResultReply( user.Dn, attributes ); foreach (KeyValuePair <string, List <string> > attribute in user.Attributes) { SearchResultReply.Attribute attributeClass = new SearchResultReply.Attribute(attribute.Key, attribute.Value); attributes.Add(attributeClass); } replies.Add(reply); } return(Task.FromResult(replies)); }
public override Task <List <SearchResultReply> > OnSearchRequest(ClientContext context, ISearchEvent searchEvent) { Guid appId = new Guid(context.Rdn["dc"][0]); int?limit = searchEvent.SizeLimit; var itemExpression = Expression.Parameter(typeof(AppUser)); SearchExpressionBuilder searchExpressionBuilder = new SearchExpressionBuilder(); var conditions = searchExpressionBuilder.Build(searchEvent.Filter, itemExpression); var queryLambda = Expression.Lambda <Func <AppUser, bool> >(conditions, itemExpression); var predicate = queryLambda.Compile(); List <AppUser> results = new List <AppUser>(); using (var authDbContext = _authDbContextFactory.CreateDbContext()) { results = authDbContext.Users .AsNoTracking() .Include(u => u.Groups) .ThenInclude(g => g.AuthApps) .Where(queryLambda) .Where(u => u.Groups.Any(g => g.AuthApps.Any(a => a.Id == appId))) .AsSplitQuery() .ToList(); } List <SearchResultReply> replies = new List <SearchResultReply>(); foreach (AppUser user in results) { List <SearchResultReply.Attribute> attributes = new List <SearchResultReply.Attribute> { new SearchResultReply.Attribute("displayname", new List <string> { user.UserName }), new SearchResultReply.Attribute("email", new List <string> { user.Email }), new SearchResultReply.Attribute("objectclass", new List <string> { "inetOrgPerson" }), new SearchResultReply.Attribute("entryuuid", new List <string> { user.Id.ToString() }), }; SearchResultReply reply = new SearchResultReply( "cn=" + user.Id.ToString() + ",ou=People,dc=" + appId, attributes ); replies.Add(reply); } return(Task.FromResult(replies)); }
public override async Task <List <SearchResultReply> > OnSearchRequest(ClientContext context, ISearchEvent searchEvent) { SearchRequest searchRequest = new SearchRequest { RawPacket = Google.Protobuf.ByteString.CopyFrom(searchEvent.SearchRequest.RawPacket), UserIdentity = ExtractUserIdentity(context.Rdn), }; var response = await _ldapClient.ExecuteSearchRequestAsync(searchRequest); List <SearchResultReply> replies = new List <SearchResultReply>(); foreach (var result in response.Results) { List <SearchResultReply.Attribute> attributes = new List <SearchResultReply.Attribute>(); foreach (var attribute in result.Attributes) { SearchResultReply.Attribute ldapAttribute = new SearchResultReply.Attribute( attribute.Name, attribute.Value.ToList() ); attributes.Add(ldapAttribute); } SearchResultReply reply = new SearchResultReply(result.Rdn, attributes); replies.Add(reply); } return(replies); }