From 7670f2119e37068323d093bcf227014160933e47 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Mon, 24 Mar 2025 16:40:54 +0100 Subject: [PATCH] =?UTF-8?q?refactor(AuthController):=20Konvertiert=20in=20?= =?UTF-8?q?einen=20Platzhalter-Controller=20f=C3=BCr=20Swagger.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/AuthController.cs | 157 ------------------ .../Controllers/PlaceholderAuthController.cs | 27 +++ 2 files changed, 27 insertions(+), 157 deletions(-) delete mode 100644 DigitalData.UserManager.API/Controllers/AuthController.cs create mode 100644 DigitalData.UserManager.API/Controllers/PlaceholderAuthController.cs diff --git a/DigitalData.UserManager.API/Controllers/AuthController.cs b/DigitalData.UserManager.API/Controllers/AuthController.cs deleted file mode 100644 index 7a350ea..0000000 --- a/DigitalData.UserManager.API/Controllers/AuthController.cs +++ /dev/null @@ -1,157 +0,0 @@ -using Microsoft.AspNetCore.Authentication.Cookies; -using Microsoft.AspNetCore.Authentication; -using System.Security.Claims; -using Microsoft.AspNetCore.Mvc; -using DigitalData.UserManager.Application.Contracts; -using DigitalData.UserManager.Application.DTOs.User; -using Microsoft.AspNetCore.Authorization; -using DigitalData.UserManager.Application; -using DigitalData.UserManager.Application.DTOs.Auth; -using DigitalData.Core.Abstractions.Application; -using Microsoft.Extensions.Localization; -using DigitalData.Core.DTO; - -namespace DigitalData.UserManager.API.Controllers; - -[Route("api/[controller]")] -public class AuthController : ControllerBase -{ - private readonly IUserService _userService; - private readonly IGroupOfUserService _gouService; - private readonly IDirectorySearchService _dirSearchService; - private readonly IStringLocalizer _localizer; - private readonly ILogger _logger; - private readonly IConfiguration _config; - public AuthController(IUserService userService, IGroupOfUserService gouService, IDirectorySearchService directorySearchService, IStringLocalizer localizer, ILogger logger, IConfiguration configuration) - { - _userService = userService; - _gouService = gouService; - _dirSearchService = directorySearchService; - _localizer = localizer; - _logger = logger; - _config = configuration; - } - - [AllowAnonymous] - [HttpGet("check")] - public IActionResult CheckAuthentication() - { - try - { - return Ok(User.Identity?.IsAuthenticated ?? false); - } - catch(Exception ex) - { - _logger.LogError(ex, "{Message}", ex.Message); - return StatusCode(StatusCodes.Status500InternalServerError); - } - } - - [AllowAnonymous] - [HttpPost("login")] - public async Task Login([FromBody] LogInDto login) - { - try - { - bool isValid = _dirSearchService.ValidateCredentials(login.Username, login.Password); - - if (!isValid) - return Unauthorized(Result.Fail().Message(_localizer[Key.UserNotFound])); - - var allowedGroupName = _config.GetSection("AllowedGroupName").Get() - ?? throw new InvalidOperationException("Allowed group names configuration is missing."); - - var gouMsg = await _gouService.HasGroup(login.Username, allowedGroupName, caseSensitive: false); - if (!gouMsg.IsSuccess) - return Unauthorized(Result.Fail().Message(_localizer[Key.UnauthorizedUser])); - - //find the user - var uRes = await _userService.ReadByUsernameAsync(login.Username); - if (!uRes.IsSuccess || uRes.Data is null) - { - return Unauthorized(uRes); - } - - UserReadDto user = uRes.Data; - - // Create claims - var claims = new List - { - new (ClaimTypes.NameIdentifier, user.Id.ToString()), - new (ClaimTypes.Name, user.Username), - new (ClaimTypes.Surname, user.Name ?? ""), - new (ClaimTypes.GivenName, user.Prename ?? ""), - new (ClaimTypes.Email, user.Email ?? ""), - new (ClaimTypes.Role, "PM_USER") - }; - - // Create claimsIdentity - var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); - - // Create authProperties - var authProperties = new AuthenticationProperties - { - IsPersistent = true, - AllowRefresh = true, - ExpiresUtc = DateTime.UtcNow.AddMinutes(60) - }; - - // Sign in - await HttpContext.SignInAsync( - CookieAuthenticationDefaults.AuthenticationScheme, - new ClaimsPrincipal(claimsIdentity), - authProperties); - - _dirSearchService.SetSearchRootCache(user.Username, login.Password); - - return Ok(); - } - catch(Exception ex) - { - _logger.LogError(ex, "{Message}", ex.Message); - return StatusCode(StatusCodes.Status500InternalServerError); - } - } - - [Authorize] - [HttpGet("user")] - public async Task GetUserWithClaims() - { - try - { - // Extract the username from the Name claim. - string? username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name)?.Value; - - if (string.IsNullOrEmpty(username)) - return Unauthorized(); - - return await _userService.ReadByUsernameAsync(username) - .ThenAsync(Ok, IActionResult (m, n) => - { - _logger.LogNotice(n); - return NotFound(Result.Fail().Message(_localizer[Key.UserNotFound])); - }); - } - catch (Exception ex) - { - _logger.LogError(ex, "{Message}", ex.Message); - return StatusCode(StatusCodes.Status500InternalServerError); - } - } - - [Authorize] - [HttpPost("logout")] - public async Task Logout() - { - try - { - await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); - return Ok(); - } - catch(Exception ex) - { - _logger.LogError(ex, "{Message}", ex.Message); - return StatusCode(StatusCodes.Status500InternalServerError); - } - } -} \ No newline at end of file diff --git a/DigitalData.UserManager.API/Controllers/PlaceholderAuthController.cs b/DigitalData.UserManager.API/Controllers/PlaceholderAuthController.cs new file mode 100644 index 0000000..1ecf960 --- /dev/null +++ b/DigitalData.UserManager.API/Controllers/PlaceholderAuthController.cs @@ -0,0 +1,27 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Authorization; +using DigitalData.UserManager.Application.DTOs.Auth; + +namespace DigitalData.UserManager.API.Controllers; + +[Route("api/Auth")] +[ApiController] +[Tags("Auth")] +public class PlaceholderAuthController : ControllerBase +{ + [AllowAnonymous] + [HttpGet("check")] + public IActionResult CheckAuthentication() => throw new NotImplementedException(); + + [AllowAnonymous] + [HttpPost("login")] + public Task Login([FromBody] LogInDto login) => throw new NotImplementedException(); + + [Authorize] + [HttpGet("user")] + public Task GetUserWithClaims() => throw new NotImplementedException(); + + [Authorize] + [HttpPost("logout")] + public Task Logout() => throw new NotImplementedException(); +} \ No newline at end of file