using Microsoft.EntityFrameworkCore; using Ombi.Core.Authentication; using Ombi.Helpers; using Ombi.Store.Entities; using System.Security.Principal; using System.Threading.Tasks; namespace Ombi.Core.Helpers { public class CurrentUser : ICurrentUser { private readonly IPrincipal _principle; private readonly OmbiUserManager _userManager; private OmbiUser _user; public IIdentity Identity { get; set; } public CurrentUser(IPrincipal principle, OmbiUserManager userManager) { _principle = principle; _userManager = userManager; Identity = _principle?.Identity ?? null; } public void SetUser(OmbiUser user) { _user = user; } public string Username => Identity?.Name ?? _user?.UserName; public async Task GetUser() { if (!Username.HasValue() && _user == null) { return null; } if (_user != null) { return _user; } var username = Username.ToUpper(); return _user ??= await _userManager.Users.FirstOrDefaultAsync(x => x.NormalizedUserName == username); } } }