From 12b1fc7d69ab632611993eac387a13995bafc0ab Mon Sep 17 00:00:00 2001 From: Dennis Beuchler Date: Fri, 31 Oct 2025 09:55:12 +0100 Subject: [PATCH] Removed AutoMapper from Moryx.Identity.AccessManagement --- .../Controllers/API/AuthController.cs | 22 +++--- .../Controllers/MVC/LoginController.cs | 9 +-- .../Controllers/MVC/UsersController.cs | 9 +-- .../Extensions/ServiceCollectionExtensions.cs | 17 ++--- .../Mappings/MappingProfile.cs | 36 ---------- .../Models/ModelConverter.cs | 68 +++++++++++++++++++ .../Moryx.Identity.AccessManagement.csproj | 34 +++++----- 7 files changed, 106 insertions(+), 89 deletions(-) delete mode 100644 src/Moryx.Identity.AccessManagement/Mappings/MappingProfile.cs create mode 100644 src/Moryx.Identity.AccessManagement/Models/ModelConverter.cs diff --git a/src/Moryx.Identity.AccessManagement/Controllers/API/AuthController.cs b/src/Moryx.Identity.AccessManagement/Controllers/API/AuthController.cs index f346f053b..eaffaa227 100644 --- a/src/Moryx.Identity.AccessManagement/Controllers/API/AuthController.cs +++ b/src/Moryx.Identity.AccessManagement/Controllers/API/AuthController.cs @@ -3,7 +3,6 @@ using System.Security.Claims; using System.Text.Json; -using AutoMapper; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; @@ -28,7 +27,6 @@ public class AuthController : ControllerBase private readonly MoryxRoleManager _roleManager; private readonly IPermissionManager _permissionManager; private readonly ITokenService _tokenService; - private readonly IMapper _mapper; private readonly IConfiguration _configuration; /// @@ -40,14 +38,12 @@ public class AuthController : ControllerBase /// The permission manager used by the AccessManagement /// A token service for handling the JWTs /// Configuration settings mainly for the cookies' domain - public AuthController(IMapper mapper, - MoryxUserManager userManager, + public AuthController(MoryxUserManager userManager, MoryxRoleManager roleManager, IPermissionManager permissionManager, ITokenService tokenService, IConfiguration configuration) { - _mapper = mapper; _userManager = userManager; _roleManager = roleManager; _permissionManager = permissionManager; @@ -75,7 +71,7 @@ public async Task SignUp(MoryxUserModel userModel) }); } - var user = _mapper.Map(userModel); + var user = ModelConverter.GetUserFromModel(userModel); var userCreateResult = await _userManager.CreateAsync(user, userModel.Password); if (userCreateResult.Succeeded) @@ -133,7 +129,7 @@ public async Task SignIn(UserLoginModel userLoginModel) var jwtToken = await _tokenService.GenerateToken(user); HttpContext.Response.Cookies.SetJwtCookie(jwtToken, user); - var userModel = _mapper.Map(user); + var userModel = ModelConverter.GetUserModelFromUser(user); return Ok(userModel); } @@ -182,8 +178,7 @@ public async Task SignIn(UserLoginModel userLoginModel) [Route("RefreshToken")] public async Task RefreshToken() { - - TokenRequest tokenRequest = new TokenRequest() + var tokenRequest = new TokenRequest { RefreshToken = Request.Cookies[MoryxIdentityDefaults.REFRESH_TOKEN_COOKIE_NAME], Token = Request.Cookies[MoryxIdentityDefaults.JWT_COOKIE_NAME] @@ -207,7 +202,7 @@ public async Task GetUser() if (user is null) return NotFound("User not found"); - var userModel = _mapper.Map(user); + var userModel = ModelConverter.GetUserModelFromUser(user); return Ok(userModel); } @@ -245,7 +240,7 @@ public async Task> GetUserPermissions([FromQuery] string /// /// Verifies whether the given token is valid /// - /// The token to be verified. + /// The token to be verified. [AllowAnonymous] [HttpPost("verifyToken")] public IActionResult VerifyToken([FromBody] string token) @@ -451,7 +446,7 @@ public async Task DeleteRole(string roleName) } /// - /// Returns a list of permissions available in the system. Includes all permissions that start with + /// Returns a list of permissions available in the system. Includes all permissions that start with /// the provided . /// /// A filter on the returned list. @@ -465,7 +460,7 @@ public IActionResult Permissions([FromQuery] string filter = "") var permissions = _permissionManager.Permissions .Include(p => p.Roles).ToArray() .Where(p => p.Name.StartsWith(filter)) - .Select(permission => _mapper.Map(permission)).ToArray(); + .Select(ModelConverter.GetPermissionModelFromPermission).ToArray(); return Ok(permissions); } @@ -536,4 +531,3 @@ private static bool IsSuperAdmin(string roleName) } } } - diff --git a/src/Moryx.Identity.AccessManagement/Controllers/MVC/LoginController.cs b/src/Moryx.Identity.AccessManagement/Controllers/MVC/LoginController.cs index 028efc14a..f96c91fc2 100644 --- a/src/Moryx.Identity.AccessManagement/Controllers/MVC/LoginController.cs +++ b/src/Moryx.Identity.AccessManagement/Controllers/MVC/LoginController.cs @@ -2,11 +2,8 @@ // Licensed under the Apache License, Version 2.0 #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member -using AutoMapper; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; -using Moryx.Identity.AccessManagement.Data; using Moryx.Identity.AccessManagement.Identity; using Moryx.Identity.AccessManagement.Models; @@ -16,16 +13,14 @@ public class LoginController : Controller { private readonly MoryxUserManager _userManager; private readonly ITokenService _tokenService; - private readonly IMapper _mapper; private readonly IConfiguration _configuration; private readonly IPasswordResetService _pwResetService; public LoginController(MoryxUserManager userManager, - ITokenService tokenService, IMapper mapper, IConfiguration configuration, IPasswordResetService passwordResetService) + ITokenService tokenService, IConfiguration configuration, IPasswordResetService passwordResetService) { _userManager = userManager; _tokenService = tokenService; - _mapper = mapper; _configuration = configuration; _pwResetService = passwordResetService; } @@ -80,7 +75,7 @@ public IActionResult Register() public async Task RegisterExecute(MoryxUserRegisterModel userModel) { - var user = _mapper.Map(userModel); + var user = ModelConverter.GetUserFromUserRegisterModel(userModel);; var userCreateResult = await _userManager.CreateAsync(user, userModel.Password); if (userCreateResult.Succeeded) diff --git a/src/Moryx.Identity.AccessManagement/Controllers/MVC/UsersController.cs b/src/Moryx.Identity.AccessManagement/Controllers/MVC/UsersController.cs index bdeda0337..7749f1c7d 100644 --- a/src/Moryx.Identity.AccessManagement/Controllers/MVC/UsersController.cs +++ b/src/Moryx.Identity.AccessManagement/Controllers/MVC/UsersController.cs @@ -2,28 +2,25 @@ // Licensed under the Apache License, Version 2.0 #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member -using AutoMapper; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; +using Moryx.Identity.AccessManagement.Data; using Moryx.Identity.AccessManagement.Identity; using Moryx.Identity.AccessManagement.Models; namespace Moryx.Identity.AccessManagement.Controllers { - [Authorize(Roles = Roles.SuperAdmin)] public class UsersController : Controller { - private readonly IMapper _mapper; private readonly MoryxUserManager _userManager; private readonly IConfiguration _configuration; private readonly IPasswordResetService _pwResetService; - public UsersController(IMapper mapper, MoryxUserManager userManager, IConfiguration configuration, IPasswordResetService passwordResetService) + public UsersController(MoryxUserManager userManager, IConfiguration configuration, IPasswordResetService passwordResetService) { - _mapper = mapper; _userManager = userManager; _configuration = configuration; _pwResetService = passwordResetService; @@ -38,7 +35,7 @@ public async Task Index() public async Task Edit(string userId) { var user = await _userManager.FindByIdAsync(userId); - var userModel = _mapper.Map(user); + var userModel = ModelConverter.GetUserUpdateModelFromUser(user); var pwReset = await _pwResetService.GetPasswordReset(userId); if (pwReset != null) userModel.PasswordResetToken = pwReset.ResetToken; diff --git a/src/Moryx.Identity.AccessManagement/Extensions/ServiceCollectionExtensions.cs b/src/Moryx.Identity.AccessManagement/Extensions/ServiceCollectionExtensions.cs index c957daa50..752f29c21 100644 --- a/src/Moryx.Identity.AccessManagement/Extensions/ServiceCollectionExtensions.cs +++ b/src/Moryx.Identity.AccessManagement/Extensions/ServiceCollectionExtensions.cs @@ -28,12 +28,12 @@ public static class ServiceCollectionExtensions /// The to add the services to. /// The section of the configuration containing the . /// The connection string for the PostgreSql database used by the MORYX AccessManagement. - /// Action providing CORS options used for a call to + /// Action providing CORS options used for a call to /// . /// - /// This method configures the to use the MORYX AccessManagement with a PostgreSql - /// database provider. - /// It combines MORYX identity specific service registrations with the effects of + /// This method configures the to use the MORYX AccessManagement with a PostgreSql + /// database provider. + /// It combines MORYX identity specific service registrations with the effects of /// /// /// using the , the and the , @@ -61,12 +61,12 @@ public static IServiceCollection AddMoryxAccessManagement(this IServiceCollectio /// The to add the services to. /// The section of the configuration containing the . /// A tp use a custom database provider. - /// Action providing CORS options used for a call to + /// Action providing CORS options used for a call to /// . /// /// This method configures the to use the MORYX AccessManagement with a custom - /// database provider. - /// It combines MORYX identity specific service registrations with the effects of + /// database provider. + /// It combines MORYX identity specific service registrations with the effects of /// /// /// using the , the and the , @@ -90,9 +90,6 @@ public static IServiceCollection AddMoryxAccessManagement(this IServiceCollectio services.AddSingleton(resolver => resolver.GetRequiredService>().Value); - // Register AutoMapper - services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); - // Register Identity services.AddDbContext(dbOptionsAction); diff --git a/src/Moryx.Identity.AccessManagement/Mappings/MappingProfile.cs b/src/Moryx.Identity.AccessManagement/Mappings/MappingProfile.cs deleted file mode 100644 index 2452a785b..000000000 --- a/src/Moryx.Identity.AccessManagement/Mappings/MappingProfile.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2025, Phoenix Contact GmbH & Co. KG -// Licensed under the Apache License, Version 2.0 - -using AutoMapper; -using Moryx.Identity.AccessManagement.Data; -using Moryx.Identity.AccessManagement.Models; - -namespace Moryx.Identity.AccessManagement.Mappings -{ - /// - public class MappingProfile : Profile - { - /// - /// Creates a new mapping profile for the MORYX AccessManagement - /// - public MappingProfile() - { - CreateMap(); - - CreateMap(); - - CreateMap(); - - CreateMap(); - - CreateMap(); - - CreateMap() - .ForMember( - p => p.Roles, - m => m.MapFrom(p => p.Roles.Select(r => r.Name).ToArray())); - - } - } -} - diff --git a/src/Moryx.Identity.AccessManagement/Models/ModelConverter.cs b/src/Moryx.Identity.AccessManagement/Models/ModelConverter.cs new file mode 100644 index 000000000..c03e5c537 --- /dev/null +++ b/src/Moryx.Identity.AccessManagement/Models/ModelConverter.cs @@ -0,0 +1,68 @@ +// Copyright (c) 2025, Phoenix Contact GmbH & Co. KG +// Licensed under the Apache License, Version 2.0 + +using Moryx.Identity.AccessManagement.Data; + +namespace Moryx.Identity.AccessManagement.Models; + +internal static class ModelConverter +{ + public static MoryxUserUpdateModel GetUserUpdateModelFromUser(MoryxUser user) + { + var model = new MoryxUserUpdateModel + { + UserName = user.UserName, + Email = user.Email, + FirstName = user.Firstname, + LastName = user.LastName + }; + + return model; + } + + public static MoryxUser GetUserFromUserRegisterModel(MoryxUserRegisterModel userModel) + { + var user = new MoryxUser + { + UserName = userModel.UserName, + Email = userModel.Email, + Firstname = userModel.FirstName, + LastName = userModel.LastName + }; + return user; + } + + public static MoryxUser GetUserFromModel(MoryxUserModel userModel) + { + var user = new MoryxUser + { + UserName = userModel.UserName, + Email = userModel.Email, + Firstname = userModel.FirstName, + LastName = userModel.LastName + }; + return user; + } + + public static MoryxUserModel GetUserModelFromUser(MoryxUser user) + { + var model = new MoryxUserModel + { + UserName = user.UserName, + Email = user.Email, + FirstName = user.Firstname, + LastName = user.LastName + }; + return model; + } + + public static PermissionModel GetPermissionModelFromPermission(Permission permission) + { + var model = new PermissionModel + { + Name = permission.Name, + Roles = permission.Roles.Select(r => r.Name).ToArray() + }; + return model; + } +} diff --git a/src/Moryx.Identity.AccessManagement/Moryx.Identity.AccessManagement.csproj b/src/Moryx.Identity.AccessManagement/Moryx.Identity.AccessManagement.csproj index 417cd54a8..6f492a105 100644 --- a/src/Moryx.Identity.AccessManagement/Moryx.Identity.AccessManagement.csproj +++ b/src/Moryx.Identity.AccessManagement/Moryx.Identity.AccessManagement.csproj @@ -1,23 +1,25 @@  - - net8.0 - true - true - MORYX Identity and Access Management (IAM) Module - true + + + net8.0 + true + true + MORYX Identity and Access Management (IAM) Module + true + - - - - - - - - + + + + + + + + - + - \ No newline at end of file +