using System.Net; using System.Net.Sockets; using CodeLiturgy.Data.Application.Users; using CodeLiturgy.Data.Auth.Context.Users; using CodeLiturgy.Views.Models; using CodeLiturgy.Views.Utils; using Duende.IdentityServer.Extensions; using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Mvc; namespace CodeLiturgy.Views.Controllers; public class UserController : Controller { protected ILogger _logger; protected ApplicationUserManager _userManager; private List _footerMenu; private List _headerMenu; public UserController(ApplicationUserManager userManager, ILogger logger) { _logger = logger; _userManager = userManager; _footerMenu = new List(); _headerMenu = new List(); } public async Task OnEveryAction() { HandleGlobalization(); await SetUserProfileViewData(); OnInitialization(); SetFooterMenuViewData(); SetHeaderMenuViewData(); } public virtual void OnInitialization() { } protected void SetFooterMenuViewData() { ViewData[FooterMenuViewDataId] = _footerMenu; } protected void SetHeaderMenuViewData() { ViewData[HeaderMenuId] = _headerMenu; } public void SetFooterMenu(List urls) { _footerMenu = urls; } public void SetHeaderMenu(List urls) { _headerMenu = urls; } public async Task SetUserProfileViewData() { if (!ViewData.ContainsKey(UserViewDataId)) { ViewData[UserViewDataId] = await GetLoggedInUser(); } } public async Task GetLoggedInUser() { if (User.IsAuthenticated()) { ApplicationUser user = await _userManager.GetUserAsync(User); if (user != null) { return new ApplicationUserUnique(user); } } return null; } public IpInformation ExtractIpInformation(IPAddress ipAddress) { string ipAddressString = ""; IpType ipType = IpType.Unknown; if (ipAddress != null) { if (ipAddress.AddressFamily == AddressFamily.InterNetwork) { ipType = IpType.Ipv4; ipAddressString = ipAddress.MapToIPv4().ToString(); } if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6) { ipType = IpType.Ipv6; ipAddressString = ipAddress .MapToIPv6() .ToString(); } } return new IpInformation(ipType, ipAddressString); } public void HandleGlobalization() { var requestCultureFeature = HttpContext.Features.Get(); string currentCultureName = DefaultCultureName; if (requestCultureFeature != null) { currentCultureName = requestCultureFeature.RequestCulture.Culture.Name; } ViewData[LanguageViewStorage] = currentCultureName; IPAddress remoteIpAddress = Request.HttpContext.Connection.RemoteIpAddress; IpInformation ipInformation = ExtractIpInformation(Request.HttpContext.Connection.RemoteIpAddress); ViewData[IpViewStorage] = ipInformation; } }