From cb354cd13ea09260e7740cf909fbdc5e61a81571 Mon Sep 17 00:00:00 2001 From: Gary Sharp Date: Thu, 10 Oct 2024 16:17:38 +1100 Subject: [PATCH] skip disabling computer account during decommissioning if another active device with the same name exists --- .../Devices/DeviceActionExtensions.cs | 19 ++++++++++++++----- .../Areas/API/Controllers/DeviceController.cs | 2 +- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Disco.Services/Devices/DeviceActionExtensions.cs b/Disco.Services/Devices/DeviceActionExtensions.cs index d26eb04c..387ed356 100644 --- a/Disco.Services/Devices/DeviceActionExtensions.cs +++ b/Disco.Services/Devices/DeviceActionExtensions.cs @@ -80,7 +80,7 @@ namespace Disco.Services return true; } - public static void OnDecommission(this Device d, DecommissionReasons Reason) + public static void OnDecommission(this Device d, DecommissionReasons Reason, DiscoDataContext database) { if (!d.CanDecommission()) throw new InvalidOperationException("Decommission of Device is Denied"); @@ -91,11 +91,20 @@ namespace Disco.Services // Disable AD Account if (ActiveDirectory.IsValidDomainAccountId(d.DeviceDomainId)) { - var adAccount = d.ActiveDirectoryAccount(); - if (adAccount != null && !adAccount.IsCriticalSystemObject) + // Don't disable if another active device with the same name exists + var duplicateNamedDevice = database.Devices + .Where(i => i.DeviceDomainId == d.DeviceDomainId && + i.SerialNumber != d.SerialNumber && + i.DecommissionedDate == null) + .Any(); + if (!duplicateNamedDevice) { - adAccount.DisableAccount(); - adAccount.SetDescription(d); + var adAccount = d.ActiveDirectoryAccount(); + if (adAccount != null && !adAccount.IsCriticalSystemObject) + { + adAccount.DisableAccount(); + adAccount.SetDescription(d); + } } } } diff --git a/Disco.Web/Areas/API/Controllers/DeviceController.cs b/Disco.Web/Areas/API/Controllers/DeviceController.cs index d4384840..aab1809f 100644 --- a/Disco.Web/Areas/API/Controllers/DeviceController.cs +++ b/Disco.Web/Areas/API/Controllers/DeviceController.cs @@ -358,7 +358,7 @@ namespace Disco.Web.Areas.API.Controllers { if (d.CanDecommission()) { - d.OnDecommission((DecommissionReasons)Reason); + d.OnDecommission((DecommissionReasons)Reason, Database); Database.SaveChanges(); if (redirect)