using System.Security.Claims; using Microsoft.AspNetCore.Http; using MyNewProjectName.Application.Interfaces; namespace MyNewProjectName.Infrastructure.Services; /// /// Implementation of ICurrentUserService /// Automatically extracts user information from HttpContext using IHttpContextAccessor /// This follows Clean Architecture principles - no dependency on concrete middleware /// public class CurrentUserService : ICurrentUserService { private readonly IHttpContextAccessor _httpContextAccessor; public CurrentUserService(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public string? UserId { get { var user = _httpContextAccessor.HttpContext?.User; if (user?.Identity?.IsAuthenticated != true) return null; return user.FindFirstValue(ClaimTypes.NameIdentifier) ?? user.FindFirstValue("sub") ?? user.FindFirstValue("userId"); } } public string? UserName { get { var user = _httpContextAccessor.HttpContext?.User; if (user?.Identity?.IsAuthenticated != true) return null; return user.FindFirstValue(ClaimTypes.Name) ?? user.FindFirstValue("name") ?? user.FindFirstValue("username"); } } public bool? IsAuthenticated { get { return _httpContextAccessor.HttpContext?.User?.Identity?.IsAuthenticated; } } public string? Role { get { var user = _httpContextAccessor.HttpContext?.User; if (user?.Identity?.IsAuthenticated != true) return null; return user.FindFirstValue(ClaimTypes.Role) ?? user.FindFirstValue("role"); } } }