|
|
|
|
@ -200,15 +200,51 @@ namespace Bit.Core.Services
@@ -200,15 +200,51 @@ namespace Bit.Core.Services
|
|
|
|
|
|
|
|
|
|
var users = new List<UserEntry>(); |
|
|
|
|
foreach(SearchResult item in result) |
|
|
|
|
{ |
|
|
|
|
var user = BuildUser(item, false); |
|
|
|
|
if(user == null) |
|
|
|
|
{ |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
users.Add(user); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Deleted users |
|
|
|
|
if(SettingsService.Instance.Server.Type == DirectoryType.ActiveDirectory) |
|
|
|
|
{ |
|
|
|
|
filter = string.Format("(&{0}(isDeleted=TRUE))", |
|
|
|
|
filter != null ? string.Format("({0})", filter) : string.Empty); |
|
|
|
|
|
|
|
|
|
searcher = new DirectorySearcher(entry, filter); |
|
|
|
|
searcher.Tombstone = true; |
|
|
|
|
result = searcher.FindAll(); |
|
|
|
|
foreach(SearchResult item in result) |
|
|
|
|
{ |
|
|
|
|
var user = BuildUser(item, true); |
|
|
|
|
if(user == null) |
|
|
|
|
{ |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
users.Add(user); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return Task.FromResult(users); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static UserEntry BuildUser(SearchResult item, bool deleted) |
|
|
|
|
{ |
|
|
|
|
var user = new UserEntry |
|
|
|
|
{ |
|
|
|
|
ReferenceId = new Uri(item.Path).Segments?.LastOrDefault() |
|
|
|
|
ReferenceId = new Uri(item.Path).Segments?.LastOrDefault(), |
|
|
|
|
Deleted = deleted |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
if(user.ReferenceId == null) |
|
|
|
|
{ |
|
|
|
|
continue; |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// External Id |
|
|
|
|
@ -240,17 +276,16 @@ namespace Bit.Core.Services
@@ -240,17 +276,16 @@ namespace Bit.Core.Services
|
|
|
|
|
.ToString() |
|
|
|
|
.ToLowerInvariant(); |
|
|
|
|
} |
|
|
|
|
else if(!user.Disabled) |
|
|
|
|
else if(!user.Disabled && !user.Deleted) |
|
|
|
|
{ |
|
|
|
|
continue; |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Dates |
|
|
|
|
user.CreationDate = item.Properties.ParseDateTime(SettingsService.Instance.Sync.CreationDateAttribute); |
|
|
|
|
user.RevisionDate = item.Properties.ParseDateTime(SettingsService.Instance.Sync.RevisionDateAttribute); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return Task.FromResult(users); |
|
|
|
|
return user; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static bool EntryDisabled(SearchResult item) |
|
|
|
|
|