diff --git a/DigitalData.UserManager.API/Controllers/PlaceholderAuthController.cs b/DigitalData.UserManager.API/Controllers/PlaceholderAuthController.cs index a7be3fe..3fb875f 100644 --- a/DigitalData.UserManager.API/Controllers/PlaceholderAuthController.cs +++ b/DigitalData.UserManager.API/Controllers/PlaceholderAuthController.cs @@ -1,6 +1,11 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; using DigitalData.UserManager.Application.DTOs.Auth; +using DigitalData.UserManager.Application.Contracts; +using DigitalData.Core.DTO; +using Microsoft.Extensions.Localization; +using DigitalData.UserManager.Application; +using System.Security.Claims; namespace DigitalData.UserManager.API.Controllers; @@ -9,6 +14,17 @@ namespace DigitalData.UserManager.API.Controllers; [Tags("Auth")] public class PlaceholderAuthController : ControllerBase { + private readonly ILogger _logger; + private readonly IUserService _userService; + private readonly IStringLocalizer _localizer; + + public PlaceholderAuthController(ILogger logger, IUserService userService, IStringLocalizer localizer) + { + _logger = logger; + _userService = userService; + _localizer = localizer; + } + [Authorize] [HttpGet("check")] public IActionResult CheckAuthentication() => Ok(); @@ -19,7 +35,29 @@ public class PlaceholderAuthController : ControllerBase [Authorize] [HttpGet("user")] - public Task GetUserWithClaims() => throw new NotImplementedException(); + 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")]