diff --git a/Features/ADCompareService.cs b/Features/ADCompareService.cs deleted file mode 100644 index e86804a..0000000 --- a/Features/ADCompareService.cs +++ /dev/null @@ -1,119 +0,0 @@ -using Disco.Data.Repository; -using Disco.Models.Repository; -using Disco.Plugins.ADCompare.Models; -using Disco.Services.Interop.ActiveDirectory; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Disco.Plugins.ADCompare.Features -{ - public class ADCompareService - { - private readonly DiscoDataContext database; - - public ADCompareService(DiscoDataContext database) - { - this.database = database; - } - - /// - /// Compare all Disco users against their Active Directory accounts. - /// Returns a summary with per-user comparison results. - /// - public ComparisonSummary CompareAllUsers() - { - var summary = new ComparisonSummary(); - - // Load all users from Disco database - var discoUsers = database.Users.ToList(); - summary.TotalDiscoUsers = discoUsers.Count; - - foreach (var discoUser in discoUsers) - { - var result = CompareUser(discoUser); - summary.Results.Add(result); - } - - summary.UsersCompared = summary.Results.Count(r => r.UserFoundInAD); - summary.UsersNotFoundInAD = summary.Results.Count(r => !r.UserFoundInAD); - summary.UsersWithMismatches = summary.Results.Count(r => r.HasMismatches); - summary.UsersInSync = summary.Results.Count(r => r.UserFoundInAD && !r.HasMismatches && !r.ADAccountDisabled); - summary.ADAccountsDisabled = summary.Results.Count(r => r.ADAccountDisabled); - - return summary; - } - - /// - /// Compare a single Disco user against their AD account. - /// - public UserComparisonResult CompareUser(User discoUser) - { - var result = new UserComparisonResult - { - UserId = discoUser.UserId, - DisplayName = discoUser.DisplayName - }; - - try - { - // Look up the user in AD using their UserId (DOMAIN\username format) - var adUser = ActiveDirectory.RetrieveADUserAccount(discoUser.UserId); - - if (adUser == null) - { - result.UserFoundInAD = false; - return result; - } - - result.UserFoundInAD = true; - result.ADAccountDisabled = adUser.IsDisabled; - - // Compare core fields - CompareField(result, "Display Name", discoUser.DisplayName, adUser.DisplayName); - CompareField(result, "Surname", discoUser.Surname, adUser.Surname); - CompareField(result, "Given Name", discoUser.GivenName, adUser.GivenName); - CompareField(result, "Email Address", discoUser.EmailAddress, adUser.Email); - CompareField(result, "Phone Number", discoUser.PhoneNumber, adUser.Phone); - } - catch (Exception ex) - { - // If we can't look up the user in AD, mark as not found - result.UserFoundInAD = false; - result.Mismatches.Add(new FieldMismatch( - "AD Lookup Error", - discoUser.UserId, - ex.Message - )); - } - - return result; - } - - /// - /// Compare a single field between Disco and AD values. - /// Treats null and empty string as equivalent. - /// - private void CompareField(UserComparisonResult result, string fieldName, string discoValue, string adValue) - { - var normalisedDisco = NormaliseValue(discoValue); - var normalisedAD = NormaliseValue(adValue); - - if (!string.Equals(normalisedDisco, normalisedAD, StringComparison.OrdinalIgnoreCase)) - { - result.Mismatches.Add(new FieldMismatch(fieldName, discoValue ?? "(empty)", adValue ?? "(empty)")); - } - } - - /// - /// Normalise a value for comparison - treat null and whitespace as empty. - /// - private string NormaliseValue(string value) - { - if (string.IsNullOrWhiteSpace(value)) - return string.Empty; - - return value.Trim(); - } - } -}