From 4dc0f00e5b2ebf970507c8e106e3f98ceb93e705 Mon Sep 17 00:00:00 2001 From: LD-Reborn Date: Sat, 11 Oct 2025 15:32:05 +0200 Subject: [PATCH] Implemented group creation button --- src/Controllers/GroupsController.cs | 27 ++-- src/Models/GroupsRequestModels.cs | 12 ++ src/Models/GroupsResponseModels.cs | 7 + src/Views/Home/Groups.cshtml | 191 +++++++++++++++++++++++----- 4 files changed, 196 insertions(+), 41 deletions(-) diff --git a/src/Controllers/GroupsController.cs b/src/Controllers/GroupsController.cs index 3adb40e..2be22b7 100644 --- a/src/Controllers/GroupsController.cs +++ b/src/Controllers/GroupsController.cs @@ -61,12 +61,20 @@ public class GroupsController : Controller }); } - [HttpGet("Create")] - public async Task Create(string cn, string gidNumber, GroupPermission[] permissions, string description) - { + [HttpPost("Create")] + public async Task Create([FromBody]GroupsCreateRequestModel model) + { + if (model is null) + { + return new GroupsCreateResponseModel( + successful: false, + exception: "Unable to create a group because the GroupsCreateRequestModel is null."); + } try { - description ??= JsonSerializer.Serialize(new GroupPermissions() {Permissions = []}); + List permissions = model.Permissions; + string gidNumber = "0"; // TODO implement counter + string cn = model.Cn; LdapAttributeSet attributeSet = [ @@ -76,19 +84,16 @@ public class GroupsController : Controller new LdapAttribute("gidNumber", gidNumber), new LdapAttribute( "description", - JsonSerializer.Serialize(new GroupPermissions() - { - Permissions = [.. permissions] - })) + JsonSerializer.Serialize(new GroupPermissions(){Permissions = permissions})) ]; await _ldap.CreateGroup(cn, attributeSet); - return true; + return new(true); } catch (Exception ex) { - _logger.LogError("Unable to create user: {ex.Message} - {ex.StackTrace}", [ex.Message, ex.StackTrace]); - return false; + _logger.LogError("Unable to create group: {ex.Message} - {ex.StackTrace}", [ex.Message, ex.StackTrace]); + return new(false, ex.Message); } } diff --git a/src/Models/GroupsRequestModels.cs b/src/Models/GroupsRequestModels.cs index 38a78f5..73ce67c 100644 --- a/src/Models/GroupsRequestModels.cs +++ b/src/Models/GroupsRequestModels.cs @@ -1,3 +1,5 @@ +using System.Text.Json.Serialization; + namespace Berufsschule_HAM.Models; public class GroupsIndexRequestModel @@ -7,6 +9,16 @@ public class GroupsIndexRequestModel public bool Permissions { get; set; } = true; } +public class GroupsCreateRequestModel +{ + [JsonPropertyName("Cn")] + public required string Cn { get; set; } + [JsonPropertyName("DisplayName")] + public required string DisplayName { get; set; } + [JsonPropertyName("Permissions")] + public required List Permissions { get; set; } +} + public class GroupsModifyRequestModel { public required string Cn { get; set; } diff --git a/src/Models/GroupsResponseModels.cs b/src/Models/GroupsResponseModels.cs index 252f7f2..3bfd446 100644 --- a/src/Models/GroupsResponseModels.cs +++ b/src/Models/GroupsResponseModels.cs @@ -1,4 +1,11 @@ namespace Berufsschule_HAM.Models; + +public class GroupsCreateResponseModel(bool successful, string exception = "None") +{ + public bool Success { get; set; } = successful; + public string? Exception { get; set; } = exception; +} + public class GroupsDeleteResponseModel(bool successful, string exception = "None") { public bool Success { get; set; } = successful; diff --git a/src/Views/Home/Groups.cshtml b/src/Views/Home/Groups.cshtml index 416b179..98b6897 100644 --- a/src/Views/Home/Groups.cshtml +++ b/src/Views/Home/Groups.cshtml @@ -13,7 +13,9 @@
- +
@@ -83,6 +85,33 @@ + + + + + +