using System.Net; using System.Net.Sockets; using BlueWest.Data.Application.Users; using BlueWest.Data.Auth.Context.Users; using BlueWest.Views.Models; using BlueWest.Views.Utils; using Duende.IdentityServer.Extensions; using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Mvc; namespace BlueWest.Views.Controllers; public class UserController : Controller { protected ILogger _logger; protected ApplicationUserManager _userManager; private List _footerMenu; public UserController(ApplicationUserManager userManager, ILogger logger) { _logger = logger; _userManager = userManager; _footerMenu = new List(); } public async Task OnEveryAction() { HandleGlobalization(); SetFooterMenuViewData(); await SetUserProfileViewData(); OnInitialization(); SetFooterMenuViewData(); } public virtual void OnInitialization() { } protected void SetFooterMenuViewData() { ViewData[FooterMenuViewDataId] = _footerMenu; } public void SetFooterMenu(List routeRecords) { _footerMenu = routeRecords; } 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); 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; } }