diff --git a/src/Controllers/UsersController.cs b/src/Controllers/UsersController.cs index ac43bd4..630c41b 100644 --- a/src/Controllers/UsersController.cs +++ b/src/Controllers/UsersController.cs @@ -60,15 +60,19 @@ public class UsersController : Controller } } - [HttpGet("Create")] - public async Task Create(string cn, string sn, string? title, string? uid, string userPassword, string? description, string jpegPhoto) + [HttpPost("Create")] + public async Task Create([FromBody] UsersCreateRequestModel requestModel) { try { + string? jpegPhoto = requestModel.JpegPhoto; + string? title = requestModel.Title; + string userPassword = requestModel.UserPassword ?? ""; + UserDescription? description = requestModel.Description; jpegPhoto ??= Convert.ToBase64String(System.IO.File.ReadAllBytes("wwwroot/user_default.jpeg")); // TODO: cleanup - make this a config setting - uid ??= UsersHelper.CreateUsername(cn, sn); + string uid = UsersHelper.CreateUsername(requestModel.Cn ?? "", requestModel.Sn ?? ""); title ??= ""; - description ??= "{}"; + description ??= new() {Address = new(), BirthDate = "", Workplace = "", Groups = []}; if (!userPassword.StartsWith('{')) { byte[] passwordBytes = Encoding.UTF8.GetBytes(userPassword); @@ -79,26 +83,26 @@ public class UsersController : Controller LdapAttributeSet attributeSet = [ new LdapAttribute("objectClass", "inetOrgPerson"), - new LdapAttribute("cn", cn), - new LdapAttribute("sn", sn), + new LdapAttribute("cn", requestModel.Cn), + new LdapAttribute("sn", requestModel.Sn), new LdapAttribute("title", title), new LdapAttribute("uid", uid), new LdapAttribute("jpegPhoto", jpegPhoto), - new LdapAttribute("description", description), + new LdapAttribute("description", JsonSerializer.Serialize(description)), new LdapAttribute("userPassword", userPassword), ]; await _ldap.CreateUser(uid, attributeSet); - return true; + return new(){Success = true, Uid = uid}; } catch (Exception ex) { _logger.LogError("Unable to create user: {ex.Message} - {ex.StackTrace}", [ex.Message, ex.StackTrace]); - return false; + return new() {Success = false, Exception = ex.Message}; } } [HttpPost("Update")] - public async Task Update([FromBody] UsersModifyRequestModel requestModel) + public async Task Update([FromBody] UsersModifyRequestModel requestModel) { if (requestModel is null) { diff --git a/src/Models/UsersRequestModels.cs b/src/Models/UsersRequestModels.cs index 9b98e63..14361d7 100644 --- a/src/Models/UsersRequestModels.cs +++ b/src/Models/UsersRequestModels.cs @@ -13,12 +13,16 @@ public class UsersIndexRequestModel public bool UserPassword { get; set; } = true; } -public class UsersModifyRequestModel +public class UsersModifyRequestModel : UsersCreateRequestModel { [JsonPropertyName("Uid")] - public required string Uid { get; set; } + public required string Uid { get; set; } [JsonPropertyName("NewUid")] public string? NewUid { get; set; } = null; +} + +public class UsersCreateRequestModel +{ [JsonPropertyName("Cn")] public string? Cn { get; set; } = null; [JsonPropertyName("Sn")] diff --git a/src/Models/UsersResponseModels.cs b/src/Models/UsersResponseModels.cs index 0df701d..7e2a532 100644 --- a/src/Models/UsersResponseModels.cs +++ b/src/Models/UsersResponseModels.cs @@ -2,7 +2,7 @@ using System.Text.Json.Serialization; namespace Berufsschule_HAM.Models; -public class UsersUpdateRequestModel +public class UsersUpdateResponseModel { [JsonPropertyName("Success")] public required bool Success { get; set; } @@ -10,4 +10,15 @@ public class UsersUpdateRequestModel public string? Exception { get; set; } [JsonPropertyName("NewUid")] public string? NewUid { get; set; } +} + + +public class UsersCreateResponseModel +{ + [JsonPropertyName("Success")] + public required bool Success { get; set; } + [JsonPropertyName("Exception")] + public string? Exception { get; set; } + [JsonPropertyName("Uid")] + public string? Uid { get; set; } } \ No newline at end of file diff --git a/src/Views/Home/Users.cshtml b/src/Views/Home/Users.cshtml index 84e5392..c6aead0 100644 --- a/src/Views/Home/Users.cshtml +++ b/src/Views/Home/Users.cshtml @@ -15,7 +15,9 @@
- +
@@ -461,3 +463,188 @@ }); + + + + + + \ No newline at end of file