예제 #1
0
        public async Task <int> Handle(SyncDepartmentsFromActiveDirectoryCommand request, CancellationToken cancellationToken)
        {
            using (DirectoryEntry entry = new DirectoryEntry("LDAP://" + Domain))
                using (DirectorySearcher search = new DirectorySearcher(entry))
                {
                    search.PageSize = 5000;
                    search.Filter   = "(&(objectClass=user)(objectCategory=person))";
                    SearchResult           result;
                    SearchResultCollection resultCol   = search.FindAll();
                    List <Department>      departments = new List <Department>();
                    if (resultCol != null)
                    {
                        for (int i = 0; i < resultCol.Count; i++)
                        {
                            result = resultCol[i];

                            var userAccountControl = ActiveDirectoryHelper.TryGetResult <int>(result, "userAccountControl");
                            var active             = userAccountControl == 512 ? true : false;
                            if (active)
                            {
                                string departmentName = ActiveDirectoryHelper.TryGetResult <string>(result, "department");
                                if (!string.IsNullOrEmpty(departmentName))
                                {
                                    if (!departments.Any(d => d.Name == departmentName))
                                    {
                                        departments.Add(new Department
                                        {
                                            Code      = departmentName,
                                            Name      = departmentName,
                                            CreatedBy = request.CreatedBy,
                                            CreatedOn = request.CreatedOn
                                        });
                                    }
                                }
                            }
                        }
                    }
                    _context.Departments.AddOrUpdate(department => new
                    {
                        department.Code,
                        department.Name
                    }, departments.ToArray());
                    return(await _context.SaveChangesAsync(cancellationToken));
                }
        }