using Koogle.Domain.Interfaces; using Microsoft.AspNetCore.Http; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Koogle.Infrastrcuture.Services; public class CurrentUserService : ICurrentUserService { private readonly IHttpContextAccessor _httpContextAccessor; /// /// Erstellt eine neue Instanz des CurrentUserService. /// /// Der HTTP-Kontext-Accessor. public CurrentUserService(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } /// public int UserId { get { //var userIdClaim = _httpContextAccessor.HttpContext?.UserProfile?.FindFirst(ClaimTypes.NameIdentifier)?.Value // ?? _httpContextAccessor.HttpContext?.UserProfile?.FindFirst("sub")?.Value // ?? _httpContextAccessor.HttpContext?.UserProfile?.FindFirst("oid")?.Value; var userIdClaim = _httpContextAccessor.HttpContext?.User?.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier")?.Value; return 0; //if (string.IsNullOrEmpty(userIdClaim)) // return Guid.Empty; //// Versuche zuerst als Guid zu parsen (für interne UserProfile-IDs) //if (Guid.TryParse(userIdClaim, out var userId)) // return userId; //// Falls es eine Azure AD Object ID ist, generiere eine deterministische Guid daraus //return GenerateDeterministicGuid(userIdClaim); } } /// public bool IsAuthenticated => _httpContextAccessor.HttpContext?.User?.Identity?.IsAuthenticated ?? false; /// /// Generiert eine deterministische Guid aus einem String. /// private static Guid GenerateDeterministicGuid(string input) { using var md5 = System.Security.Cryptography.MD5.Create(); var hash = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(input)); return new Guid(hash); } }