Browse Source

Deleted users for ldap

pull/1/head
Kyle Spearrin 9 years ago
parent
commit
de0acb46ea
  1. 1
      src/Core/Models/Entry.cs
  2. 4
      src/Core/Models/ImportRequest.cs
  3. 2
      src/Core/Services/AzureDirectoryService.cs
  4. 113
      src/Core/Services/LdapDirectoryService.cs

1
src/Core/Models/Entry.cs

@ -25,5 +25,6 @@ namespace Bit.Core.Models @@ -25,5 +25,6 @@ namespace Bit.Core.Models
{
public string Email { get; set; }
public bool Disabled { get; set; }
public bool Deleted { get; set; }
}
}

4
src/Core/Models/ImportRequest.cs

@ -33,13 +33,13 @@ namespace Bit.Core.Models @@ -33,13 +33,13 @@ namespace Bit.Core.Models
public User(UserEntry entry)
{
Email = entry.Email;
Disabled = entry.Disabled;
Deleted = entry.Disabled || entry.Deleted;
ExternalId = entry.ExternalId;
}
public string ExternalId { get; set; }
public string Email { get; set; }
public bool Disabled { get; set; }
public bool Deleted { get; set; }
}
}

2
src/Core/Services/AzureDirectoryService.cs

@ -214,7 +214,7 @@ namespace Bit.Core.Services @@ -214,7 +214,7 @@ namespace Bit.Core.Services
object deleted;
if(user.AdditionalData.TryGetValue("@removed", out deleted) && deleted.ToString().Contains("changed"))
{
entry.Disabled = true;
entry.Deleted = true;
}
else if(!entry.Disabled && (entry?.Email?.Contains("#") ?? true))
{

113
src/Core/Services/LdapDirectoryService.cs

@ -201,58 +201,93 @@ namespace Bit.Core.Services @@ -201,58 +201,93 @@ namespace Bit.Core.Services
var users = new List<UserEntry>();
foreach(SearchResult item in result)
{
var user = new UserEntry
{
ReferenceId = new Uri(item.Path).Segments?.LastOrDefault()
};
if(user.ReferenceId == null)
var user = BuildUser(item, false);
if(user == null)
{
continue;
}
// External Id
if(item.Properties.Contains("objectGUID") && item.Properties["objectGUID"].Count > 0)
{
user.ExternalId = item.Properties["objectGUID"][0].ToString();
}
else
{
user.ExternalId = user.ReferenceId;
}
users.Add(user);
}
user.Disabled = EntryDisabled(item);
// Deleted users
if(SettingsService.Instance.Server.Type == DirectoryType.ActiveDirectory)
{
filter = string.Format("(&{0}(isDeleted=TRUE))",
filter != null ? string.Format("({0})", filter) : string.Empty);
// Email
if(SettingsService.Instance.Sync.EmailPrefixSuffix &&
item.Properties.Contains(SettingsService.Instance.Sync.UserEmailPrefixAttribute) &&
item.Properties[SettingsService.Instance.Sync.UserEmailPrefixAttribute].Count > 0 &&
!string.IsNullOrWhiteSpace(SettingsService.Instance.Sync.UserEmailSuffix))
{
user.Email = string.Concat(
item.Properties[SettingsService.Instance.Sync.UserEmailPrefixAttribute][0].ToString(),
SettingsService.Instance.Sync.UserEmailSuffix).ToLowerInvariant();
}
else if(item.Properties.Contains(SettingsService.Instance.Sync.UserEmailAttribute) &&
item.Properties[SettingsService.Instance.Sync.UserEmailAttribute].Count > 0)
searcher = new DirectorySearcher(entry, filter);
searcher.Tombstone = true;
result = searcher.FindAll();
foreach(SearchResult item in result)
{
user.Email = item.Properties[SettingsService.Instance.Sync.UserEmailAttribute][0]
.ToString()
.ToLowerInvariant();
}
else if(!user.Disabled)
{
continue;
}
var user = BuildUser(item, true);
if(user == null)
{
continue;
}
// Dates
user.CreationDate = item.Properties.ParseDateTime(SettingsService.Instance.Sync.CreationDateAttribute);
user.RevisionDate = item.Properties.ParseDateTime(SettingsService.Instance.Sync.RevisionDateAttribute);
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(),
Deleted = deleted
};
if(user.ReferenceId == null)
{
return null;
}
// External Id
if(item.Properties.Contains("objectGUID") && item.Properties["objectGUID"].Count > 0)
{
user.ExternalId = item.Properties["objectGUID"][0].ToString();
}
else
{
user.ExternalId = user.ReferenceId;
}
user.Disabled = EntryDisabled(item);
// Email
if(SettingsService.Instance.Sync.EmailPrefixSuffix &&
item.Properties.Contains(SettingsService.Instance.Sync.UserEmailPrefixAttribute) &&
item.Properties[SettingsService.Instance.Sync.UserEmailPrefixAttribute].Count > 0 &&
!string.IsNullOrWhiteSpace(SettingsService.Instance.Sync.UserEmailSuffix))
{
user.Email = string.Concat(
item.Properties[SettingsService.Instance.Sync.UserEmailPrefixAttribute][0].ToString(),
SettingsService.Instance.Sync.UserEmailSuffix).ToLowerInvariant();
}
else if(item.Properties.Contains(SettingsService.Instance.Sync.UserEmailAttribute) &&
item.Properties[SettingsService.Instance.Sync.UserEmailAttribute].Count > 0)
{
user.Email = item.Properties[SettingsService.Instance.Sync.UserEmailAttribute][0]
.ToString()
.ToLowerInvariant();
}
else if(!user.Disabled && !user.Deleted)
{
return null;
}
// Dates
user.CreationDate = item.Properties.ParseDateTime(SettingsService.Instance.Sync.CreationDateAttribute);
user.RevisionDate = item.Properties.ParseDateTime(SettingsService.Instance.Sync.RevisionDateAttribute);
return user;
}
private static bool EntryDisabled(SearchResult item)
{
if(!item.Properties.Contains("userAccountControl"))

Loading…
Cancel
Save