Пример #1
0
        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();
        }
Пример #2
0
 /// <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>()));
 }
Пример #3
0
 public void onItemFoundEvent(ISearchEvent evt)
 {
 }
Пример #4
0
 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));
        }
Пример #6
0
        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));
        }
Пример #7
0
        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);
        }