From a3c5a5341dc02faa29b4d9c910f0dc59737f5a88 Mon Sep 17 00:00:00 2001 From: LD-Reborn Date: Sun, 12 Oct 2025 18:49:09 +0200 Subject: [PATCH] Implemented automated asset counter into asset creation and asset update, Fixed uid visible in owner attribute in Assets frontend --- src/Controllers/AssetsController.cs | 18 +++++++---- src/Models/AssetsCreateRequestModel.cs | 11 ------- src/Models/AssetsRequestModels.cs | 24 +++++++++++--- src/Services/LdapService.cs | 45 ++++++++++++++++++++++++++ src/Views/Home/Assets.cshtml | 17 +++------- 5 files changed, 82 insertions(+), 33 deletions(-) delete mode 100644 src/Models/AssetsCreateRequestModel.cs diff --git a/src/Controllers/AssetsController.cs b/src/Controllers/AssetsController.cs index adb7031..1b803e5 100644 --- a/src/Controllers/AssetsController.cs +++ b/src/Controllers/AssetsController.cs @@ -28,6 +28,10 @@ public class AssetsController : Controller { var assetList = await _ldap.ListDeviceAsync(Cn); result = new AssetsGetResponseModel(successful: true, assetModel: assetList); + if (result.AssetsModel is not null) + { + result.AssetsModel.Owner = result.AssetsModel?.Owner?.Replace("uid=", ""); + } } catch (Exception e) { @@ -45,6 +49,11 @@ public class AssetsController : Controller { var assetList = await _ldap.ListDeviceAsync(); result = new AssetsGetAllResponseModel(successful: true, assetsModel: assetList); + result.AssetsModel = result.AssetsModel?.Select(asset => + { + asset.Owner = asset.Owner?.Replace("uid=", ""); + return asset; + }); } catch (Exception e) { @@ -71,13 +80,10 @@ public class AssetsController : Controller { LdapAttributeSet attributeSet = [ - new LdapAttribute("objectClass", new[] {"top", "device", "extensibleObject"}), + new LdapAttribute("objectClass", ["top", "device", "extensibleObject"]), ]; - if (assetModel.Cn != null) - { - attributeSet.Add(new LdapAttribute("cn", assetModel.Cn)); - } + attributeSet.Add(new LdapAttribute("cn", await _ldap.GetAssetCounterAndIncrementAsync())); if (assetModel.SerialNumber != null) { attributeSet.Add(new LdapAttribute("serialNumber", assetModel.SerialNumber)); @@ -168,7 +174,7 @@ public class AssetsController : Controller } if (requestModel.Owner is not null) { - await _ldap.UpdateAsset(cn, "owner", requestModel.Owner); + await _ldap.UpdateAsset(cn, "owner", $"uid={requestModel.Owner}"); } if (requestModel.SerialNumber is not null) { diff --git a/src/Models/AssetsCreateRequestModel.cs b/src/Models/AssetsCreateRequestModel.cs deleted file mode 100644 index fff5224..0000000 --- a/src/Models/AssetsCreateRequestModel.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Berufsschule_HAM.Models; - -public class AssetsCreateRequestModel -{ - public required string Cn { get; set; } - public AssetDescription? Description { get; set; } = null; - public string? Location { get; set; } = null; - public string? Name { get; set; } = null; - public string? Owner { get; set; } = null; - public string? SerialNumber { get; set; } = null; -} \ No newline at end of file diff --git a/src/Models/AssetsRequestModels.cs b/src/Models/AssetsRequestModels.cs index 6c63102..abd1560 100644 --- a/src/Models/AssetsRequestModels.cs +++ b/src/Models/AssetsRequestModels.cs @@ -1,15 +1,31 @@ +using System.Text.Json.Serialization; using Microsoft.AspNetCore.Mvc; namespace Berufsschule_HAM.Models; -public class AssetsModifyRequestModel +public class AssetsCreateRequestModel { - public required string Cn { get; set; } - public string? NewCn { get; set; } = null; - [FromBody] public AssetDescription? Description { get; set; } = null; public string? Location { get; set; } = null; public string? Name { get; set; } = null; public string? Owner { get; set; } = null; public string? SerialNumber { get; set; } = null; +} + +public class AssetsModifyRequestModel +{ + [JsonPropertyName("Cn")] + public required string Cn { get; set; } + [JsonPropertyName("NewCn")] + public string? NewCn { get; set; } = null; + [JsonPropertyName("Description")] + public AssetDescription? Description { get; set; } = null; + [JsonPropertyName("Location")] + public string? Location { get; set; } = null; + [JsonPropertyName("Name")] + public string? Name { get; set; } = null; + [JsonPropertyName("Owner")] + public string? Owner { get; set; } = null; + [JsonPropertyName("SerialNumber")] + public string? SerialNumber { get; set; } = null; } \ No newline at end of file diff --git a/src/Services/LdapService.cs b/src/Services/LdapService.cs index d9dfaa5..28b1311 100644 --- a/src/Services/LdapService.cs +++ b/src/Services/LdapService.cs @@ -118,6 +118,51 @@ public partial class LdapService : IDisposable return true; } + public async Task GetAssetCounterAndIncrementAsync() + { + AssetsMetadataModel assetModel = await GetAssetCounterAsync(); + string returnValue = assetModel.CnCounter.ToString(); + assetModel.CnCounter++; + await UpdateAssetCounterAsync(assetModel); + return returnValue; + } + + public async Task GetAssetCounterAsync() + { + Dictionary entry = (await ListObjectBy(_opts.BaseDn, _opts.AssetsOu, ["description"])).First(); + try + { + string description = entry["description"]; + return JsonSerializer.Deserialize(description) ?? throw new Exception($"Unable to deserialize description: {description}"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Unable to retrieve asset counter due to exception: {ex.Message} - {ex.StackTrace}", [ex.Message, ex.StackTrace]); + throw; + } + } + + public async Task UpdateAssetCounterAsync(AssetsMetadataModel assetMetadataModel) + { + await ConnectAndBind(); + try + { + string dn = AssetsBaseDn; //PrependRDN($"", MigrationsBaseDn); + string targetText = JsonSerializer.Serialize(assetMetadataModel); + _logger.LogInformation("Setting the LDAP asset counter to {targetText} for {dn}", [targetText, dn]); + var modification = new LdapModification( + LdapModification.Replace, + new LdapAttribute("description", targetText) + ); + await _conn.ModifyAsync(dn, modification); + } + catch (Exception) + { + return false; + } + return true; + } + public async Task> ListUsersAsync(string[] attributes) { List returnValue = []; diff --git a/src/Views/Home/Assets.cshtml b/src/Views/Home/Assets.cshtml index 8dfc3ca..debcf0e 100644 --- a/src/Views/Home/Assets.cshtml +++ b/src/Views/Home/Assets.cshtml @@ -182,10 +182,6 @@