diff --git a/insight.sln b/insight.sln index 57b9b5c..4cde53e 100644 --- a/insight.sln +++ b/insight.sln @@ -39,6 +39,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Insight.Remote.Shared", "sr EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Insight.Remote.Windows", "src\Remote\Insight.Remote.Windows\Insight.Remote.Windows.csproj", "{AF313B47-3079-407F-91D1-9989C1E1AF2A}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Insight.Infrastructure.Web", "src\Core\Insight.Infrastructure.Web\Insight.Infrastructure.Web.csproj", "{39B81A0D-A88C-44D3-9624-1A19C78A4310}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -85,6 +87,10 @@ Global {AF313B47-3079-407F-91D1-9989C1E1AF2A}.Debug|Any CPU.Build.0 = Debug|Any CPU {AF313B47-3079-407F-91D1-9989C1E1AF2A}.Release|Any CPU.ActiveCfg = Release|Any CPU {AF313B47-3079-407F-91D1-9989C1E1AF2A}.Release|Any CPU.Build.0 = Release|Any CPU + {39B81A0D-A88C-44D3-9624-1A19C78A4310}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {39B81A0D-A88C-44D3-9624-1A19C78A4310}.Debug|Any CPU.Build.0 = Debug|Any CPU + {39B81A0D-A88C-44D3-9624-1A19C78A4310}.Release|Any CPU.ActiveCfg = Release|Any CPU + {39B81A0D-A88C-44D3-9624-1A19C78A4310}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -100,6 +106,7 @@ Global {2A391CA2-F96B-4DB7-80AA-0668A5141640} = {140F73DD-29D3-4C44-809B-5B470880AA0D} {5C4697BD-BC97-484F-9DB1-CA87E2BEAA4B} = {D4D7BF4A-B2E3-470A-A14C-FC658FF7461D} {AF313B47-3079-407F-91D1-9989C1E1AF2A} = {D4D7BF4A-B2E3-470A-A14C-FC658FF7461D} + {39B81A0D-A88C-44D3-9624-1A19C78A4310} = {88B03853-2215-4E52-8986-0E76602E5F21} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {F376A326-7590-4E7E-AB9B-76CED8527AB0} diff --git a/src/Agent/Insight.Agent/Insight.Agent.csproj b/src/Agent/Insight.Agent/Insight.Agent.csproj index 52dabcf..2dc4de2 100644 --- a/src/Agent/Insight.Agent/Insight.Agent.csproj +++ b/src/Agent/Insight.Agent/Insight.Agent.csproj @@ -2,17 +2,24 @@ Exe - net7.0 + net8.0 + latest Insight.Agent Insight agent 2023.12.14.0 enable enable + none + + + + + - none + none @@ -20,14 +27,14 @@ - - - + + + - - - + + + diff --git a/src/Agent/Insight.Agent/Network/AgentSession.cs b/src/Agent/Insight.Agent/Network/AgentSession.cs index b13df10..8b23245 100644 --- a/src/Agent/Insight.Agent/Network/AgentSession.cs +++ b/src/Agent/Insight.Agent/Network/AgentSession.cs @@ -5,14 +5,10 @@ using Vaitr.Network; namespace Insight.Agent.Network; -public class AgentSession : TcpSession +public class AgentSession(IEnumerable> handlers, ISerializer serializer, ILogger logger) + : TcpSession(serializer, logger) { - private readonly IEnumerable> _handlers; - - public AgentSession(IEnumerable> handlers, ISerializer serializer, ILogger logger) : base(serializer, logger) - { - _handlers = handlers; - } + private readonly IEnumerable> _handlers = handlers; protected override ValueTask OnConnectedAsync(CancellationToken cancellationToken) { diff --git a/src/Agent/Insight.Agent/Network/Handlers/CustomHandler.cs b/src/Agent/Insight.Agent/Network/Handlers/CustomHandler.cs index 8330a6c..46e6a1a 100644 --- a/src/Agent/Insight.Agent/Network/Handlers/CustomHandler.cs +++ b/src/Agent/Insight.Agent/Network/Handlers/CustomHandler.cs @@ -2,20 +2,12 @@ using Insight.Domain.Interfaces; using Insight.Domain.Network; using Insight.Domain.Network.Agent.Messages; -using Microsoft.Extensions.Logging; namespace Insight.Agent.Network.Handlers; -public class CustomHandler : IMessageHandler +public class CustomHandler(ScriptService scriptService) : IMessageHandler { - private readonly ScriptService _scriptService; - private readonly ILogger _logger; - - public CustomHandler(ScriptService scriptService, ILogger logger) - { - _scriptService = scriptService; - _logger = logger; - } + private readonly ScriptService _scriptService = scriptService; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -29,6 +21,7 @@ public class CustomHandler : IMessageHandler private async ValueTask OnRequestAsync(AgentSession sender, Request request, CancellationToken cancellationToken) { + if (request.RequestData is null) return; var result = await _scriptService.QueryAsync(request.RequestData); await sender.SendAsync(new Response(request) diff --git a/src/Agent/Insight.Agent/Network/Handlers/DriveHandler.cs b/src/Agent/Insight.Agent/Network/Handlers/DriveHandler.cs index d18393c..75b7670 100644 --- a/src/Agent/Insight.Agent/Network/Handlers/DriveHandler.cs +++ b/src/Agent/Insight.Agent/Network/Handlers/DriveHandler.cs @@ -59,7 +59,7 @@ public class DriveHandler : IMessageHandler drive.InterfaceType = @object.GetValue(properties, "interfacetype")?.Trim(); drive.FirmwareRevision = @object.GetValue(properties, "firmwarerevision")?.Trim(); drive.PNPDeviceID = @object.GetValue(properties, "pnpdeviceid")?.Trim(); - drive.Volumes = new List(); + drive.Volumes = []; var diskpartition = @object.GetRelated("win32_diskpartition"); using (diskpartition) @@ -155,7 +155,7 @@ public class DriveHandler : IMessageHandler { using (collection2) { - foreach (ManagementObject @object2 in collection2) + foreach (ManagementObject @object2 in collection2.Cast()) { var properties2 = @object2.GetPropertyHashes(); diff --git a/src/Agent/Insight.Agent/Network/Handlers/InterfaceHandler.cs b/src/Agent/Insight.Agent/Network/Handlers/InterfaceHandler.cs index e5b5b1b..92402ca 100644 --- a/src/Agent/Insight.Agent/Network/Handlers/InterfaceHandler.cs +++ b/src/Agent/Insight.Agent/Network/Handlers/InterfaceHandler.cs @@ -19,7 +19,7 @@ public class InterfaceHandler : IMessageHandler case InventoryRequest: { var result = new Collection(); - result.AddRange(GetInterfaces()); + if (GetInterfaces() is List interfaces) result.AddRange(interfaces); await sender.SendAsync(result, cancellationToken); break; @@ -27,10 +27,10 @@ public class InterfaceHandler : IMessageHandler } } - private static List GetInterfaces() + private static List? GetInterfaces() { if (NetworkInterface.GetIsNetworkAvailable() is false) return null; - if (NetworkInterface.GetAllNetworkInterfaces().Any() is false) return null; + if (NetworkInterface.GetAllNetworkInterfaces().Length == 0) return null; var interfaces = new List(); @@ -99,7 +99,7 @@ public class InterfaceHandler : IMessageHandler using (collection) { - foreach (ManagementObject @object in collection) + foreach (ManagementObject @object in collection.Cast()) { var properties = @object.GetPropertyHashes(); @@ -185,7 +185,7 @@ public class InterfaceHandler : IMessageHandler { var addresses = new List(); - if (unicastCollection.Any() is false) return addresses; + if (unicastCollection.Count == 0) return addresses; foreach (var unicast in unicastCollection) { @@ -210,7 +210,7 @@ public class InterfaceHandler : IMessageHandler { var addresses = new List(); - if (addressCollection.Any() is false) return addresses; + if (addressCollection.Count == 0) return addresses; foreach (var address in addressCollection) { @@ -224,7 +224,7 @@ public class InterfaceHandler : IMessageHandler { var addresses = new List(); - if (addressCollection.Any() is false) return addresses; + if (addressCollection.Count == 0) return addresses; foreach (var address in addressCollection) { diff --git a/src/Agent/Insight.Agent/Network/Handlers/MainboardHandler.cs b/src/Agent/Insight.Agent/Network/Handlers/MainboardHandler.cs index 4869735..324a357 100644 --- a/src/Agent/Insight.Agent/Network/Handlers/MainboardHandler.cs +++ b/src/Agent/Insight.Agent/Network/Handlers/MainboardHandler.cs @@ -14,12 +14,12 @@ public class MainboardHandler : IMessageHandler switch (message) { case InventoryRequest: - await sender.SendAsync(GetMainboard(), cancellationToken); + if (GetMainboard() is Mainboard mainboard) await sender.SendAsync(mainboard, cancellationToken); break; } } - private static Mainboard GetMainboard() + private static Mainboard? GetMainboard() { using var searcher = new ManagementObjectSearcher { diff --git a/src/Agent/Insight.Agent/Network/Handlers/OperationSystemHandler.cs b/src/Agent/Insight.Agent/Network/Handlers/OperationSystemHandler.cs index ef15546..ed62a70 100644 --- a/src/Agent/Insight.Agent/Network/Handlers/OperationSystemHandler.cs +++ b/src/Agent/Insight.Agent/Network/Handlers/OperationSystemHandler.cs @@ -41,7 +41,7 @@ public class OperationSystemHandler : IMessageHandler using (collection) { - foreach (ManagementObject @object in collection) + foreach (ManagementObject @object in collection.Cast()) { var properties = @object.GetPropertyHashes(); @@ -51,7 +51,8 @@ public class OperationSystemHandler : IMessageHandler if (@object.TryGetValue(properties, "osarchitecture", out var architecture)) { - if (architecture is not null && architecture.ToLower().Contains("64")) os.Architecture = Architecture.X64; + if (architecture is not null && architecture.Contains("64", StringComparison.CurrentCultureIgnoreCase)) + os.Architecture = Architecture.X64; } else { diff --git a/src/Agent/Insight.Agent/Network/Handlers/ProxyHandler.cs b/src/Agent/Insight.Agent/Network/Handlers/ProxyHandler.cs index e837e98..22956b3 100644 --- a/src/Agent/Insight.Agent/Network/Handlers/ProxyHandler.cs +++ b/src/Agent/Insight.Agent/Network/Handlers/ProxyHandler.cs @@ -2,20 +2,12 @@ using Insight.Domain.Interfaces; using Insight.Domain.Network; using Insight.Domain.Network.Agent.Messages; -using Microsoft.Extensions.Logging; namespace Insight.Agent.Network.Handlers; -public class ProxyHandler : IMessageHandler +public class ProxyHandler(ScriptService scriptService) : IMessageHandler { - private readonly ScriptService _scriptService; - private readonly ILogger _logger; - - public ProxyHandler(ScriptService scriptService, ILogger logger) - { - _scriptService = scriptService; - _logger = logger; - } + private readonly ScriptService _scriptService = scriptService; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -29,6 +21,7 @@ public class ProxyHandler : IMessageHandler private async ValueTask OnProxyRequestAsync(AgentSession sender, Proxy proxyRequest, CancellationToken cancellationToken) { + if (proxyRequest.Message?.RequestData is null) return; var result = await _scriptService.QueryAsync(proxyRequest.Message.RequestData); await sender.SendAsync(new Proxy() diff --git a/src/Agent/Insight.Agent/Network/Handlers/ServiceHandler.cs b/src/Agent/Insight.Agent/Network/Handlers/ServiceHandler.cs index cfe9342..acb5755 100644 --- a/src/Agent/Insight.Agent/Network/Handlers/ServiceHandler.cs +++ b/src/Agent/Insight.Agent/Network/Handlers/ServiceHandler.cs @@ -30,7 +30,7 @@ public class ServiceHandler : IMessageHandler var services = new List(); var serviceControllers = ServiceController.GetServices()?.OrderBy(s => s.DisplayName)?.ToList(); - if (serviceControllers is null || serviceControllers.Any() is false) throw new InvalidOperationException("SERVICE Collection NULL"); + if (serviceControllers is null || serviceControllers.Count == 0) throw new InvalidOperationException("SERVICE Collection NULL"); foreach (var sc in serviceControllers) { @@ -102,7 +102,7 @@ public class ServiceHandler : IMessageHandler } } - if (services2.Any() is false) return services; + if (services2.Count == 0) return services; foreach (var svc in services) { @@ -117,6 +117,6 @@ public class ServiceHandler : IMessageHandler svc.Delay = map.Delay; } - return services.OrderBy(x => x.Name).ToList(); + return [.. services.OrderBy(x => x.Name)]; } } \ No newline at end of file diff --git a/src/Agent/Insight.Agent/Network/Handlers/SessionHandler.cs b/src/Agent/Insight.Agent/Network/Handlers/SessionHandler.cs index b393ae5..886a062 100644 --- a/src/Agent/Insight.Agent/Network/Handlers/SessionHandler.cs +++ b/src/Agent/Insight.Agent/Network/Handlers/SessionHandler.cs @@ -48,7 +48,7 @@ public class SessionHandler : IMessageHandler //public const int WTS_CURRENT_SESSION = -1; [DllImport("wtsapi32.dll")] - static extern int WTSEnumerateSessions( + private static extern int WTSEnumerateSessions( nint pServer, [MarshalAs(UnmanagedType.U4)] int iReserved, [MarshalAs(UnmanagedType.U4)] int iVersion, @@ -64,7 +64,7 @@ public class SessionHandler : IMessageHandler out uint iBytesReturned); [DllImport("wtsapi32.dll")] - static extern void WTSFreeMemory( + private static extern void WTSFreeMemory( nint pMemory); [StructLayout(LayoutKind.Sequential)] diff --git a/src/Agent/Insight.Agent/Network/Handlers/StoragePoolHandler.cs b/src/Agent/Insight.Agent/Network/Handlers/StoragePoolHandler.cs index 18bb8a1..7f71a64 100644 --- a/src/Agent/Insight.Agent/Network/Handlers/StoragePoolHandler.cs +++ b/src/Agent/Insight.Agent/Network/Handlers/StoragePoolHandler.cs @@ -89,121 +89,6 @@ public class StoragePoolHandler : IMessageHandler return pools; } - private static List GetPhysicalDisks() - { - using var searcher = new ManagementObjectSearcher - { - Scope = new ManagementScope(@"root\microsoft\windows\storage"), - Query = new ObjectQuery("select objectid, uniqueid, name, friendlyname from msft_physicaldisk") - }; - - if (searcher.TryGet(out var collection) is false) - { - searcher.Query = new ObjectQuery("select * from msft_physicaldisk"); - - if (searcher.TryGet(out collection) is false) throw new InvalidOperationException("WMI Collection NULL"); - } - - var disks = new List(); - - using (collection) - { - foreach (ManagementObject @object in collection.Cast()) - { - var disk = new PhysicalDisk(); - - var properties = @object.GetPropertyHashes(); - - disk.UniqueId = @object.GetValue(properties, "uniqueid")?.Trim(); - disk.FriendlyName = @object.GetValue(properties, "friendlyname")?.Trim(); - disk.Manufacturer = @object.GetValue(properties, "manufacturer")?.Trim(); - disk.Model = @object.GetValue(properties, "model")?.Trim(); - disk.MediaType = @object.GetValue(properties, "mediatype"); - disk.BusType = @object.GetValue(properties, "bustype"); - - if (@object.TryGetValue(properties, "operationalstatus", out var operationals) && operationals is not null) - { - disk.States = operationals.Select(p => (PhysicalDisk.OperationalState)p).ToList(); - } - - disk.Health = (PhysicalDisk.HealthState)@object.GetValue(properties, "healthstatus"); - - if (@object.TryGetValue(properties, "supportedusages", out var supportedusages) && supportedusages is not null) - { - disk.SupportedUsages = supportedusages.Select(p => (SupportedUsagesEnum)p).ToList(); - } - - disk.Usage = @object.GetValue(properties, "usage"); - disk.PhysicalLocation = @object.GetValue(properties, "physicallocation")?.Trim(); - disk.SerialNumber = @object.GetValue(properties, "serialnumber")?.Trim(); - disk.FirmwareVersion = @object.GetValue(properties, "firmwareversion")?.Trim(); - disk.Size = @object.GetValue(properties, "size"); - disk.AllocatedSize = @object.GetValue(properties, "allocatedsize"); - disk.LogicalSectorSize = @object.GetValue(properties, "logicalsectorsize"); - disk.PhysicalSectorSize = @object.GetValue(properties, "physicalsectorsize"); - disk.VirtualDiskFootprint = @object.GetValue(properties, "virtualdiskfootprint"); - - disks.Add(disk); - } - } - - return disks; - } - - private static List GetVirtualDisks() - { - using var searcher = new ManagementObjectSearcher - { - Scope = new ManagementScope(@"root\microsoft\windows\storage"), - Query = new ObjectQuery("select objectid, uniqueid, name, friendlyname, access, provisioningtype, physicaldiskredundancy, resiliencysettingname, isdeduplicationenabled, issnapshot, operationalstatus, healthstatus, size, allocatedsize, footprintonpool, readcachesize, writecachesize from msft_virtualdisk") - }; - - if (searcher.TryGet(out var collection) is false) - { - searcher.Query = new ObjectQuery("select * from msft_virtualdisk"); - - if (searcher.TryGet(out collection) is false) throw new InvalidOperationException("WMI Collection NULL"); - } - - var disks = new List(); - - using (collection) - { - foreach (ManagementObject @object in collection.Cast()) - { - var disk = new VirtualDisk(); - - var properties = @object.GetPropertyHashes(); - - disk.UniqueId = @object.GetValue(properties, "uniqueid")?.Trim(); - disk.Name = @object.GetValue(properties, "name")?.Trim(); - disk.FriendlyName = @object.GetValue(properties, "friendlyname")?.Trim(); - disk.AccessType = (AccessTypeEnum)@object.GetValue(properties, "access"); - disk.ProvisioningType = (ProvisioningTypeEnum)@object.GetValue(properties, "provisioningtype"); - disk.PhysicalDiskRedundancy = @object.GetValue(properties, "physicaldiskredundancy"); - disk.ResiliencySettingName = @object.GetValue(properties, "resiliencysettingname")?.Trim(); - disk.Deduplication = @object.GetValue(properties, "isdeduplicationenabled"); - disk.IsSnapshot = @object.GetValue(properties, "issnapshot"); - - if (@object.TryGetValue(properties, "operationalstatus", out var operationals) && operationals is not null) - { - disk.States = operationals.Select(p => (VirtualDisk.OperationalState)p).ToList(); - } - - disk.Health = (VirtualDisk.HealthState)@object.GetValue(properties, "healthstatus"); - disk.Size = @object.GetValue(properties, "size"); - disk.AllocatedSize = @object.GetValue(properties, "allocatedsize"); - disk.FootprintOnPool = @object.GetValue(properties, "footprintonpool"); - disk.ReadCacheSize = @object.GetValue(properties, "readcachesize"); - disk.WriteCacheSize = @object.GetValue(properties, "writecachesize"); - - disks.Add(disk); - } - } - - return disks; - } - private static List QueryPhysicalDisksByStoragePool(string storagePoolObjectId) { using var searcher = new ManagementObjectSearcher @@ -218,7 +103,7 @@ public class StoragePoolHandler : IMessageHandler using (collection) { - foreach (ManagementObject @object in collection) + foreach (ManagementObject @object in collection.Cast()) { var disk = new PhysicalDisk(); @@ -275,7 +160,7 @@ public class StoragePoolHandler : IMessageHandler using (collection) { - foreach (ManagementObject @object in collection) + foreach (ManagementObject @object in collection.Cast()) { var disk = new VirtualDisk(); diff --git a/src/Agent/Insight.Agent/Network/Handlers/SystemInfoHandler.cs b/src/Agent/Insight.Agent/Network/Handlers/SystemInfoHandler.cs index 49269d7..0a7e7d4 100644 --- a/src/Agent/Insight.Agent/Network/Handlers/SystemInfoHandler.cs +++ b/src/Agent/Insight.Agent/Network/Handlers/SystemInfoHandler.cs @@ -87,7 +87,6 @@ public class SystemInfoHandler : IMessageHandler private static string GetWindowsProductKeyFromDigitalProductId(byte[] digitalProductId, DigitalProductIdVersion digitalProductIdVersion) { - var productKey = digitalProductIdVersion == DigitalProductIdVersion.Windows8AndUp ? DecodeProductKeyWin8AndUp(digitalProductId) : DecodeProductKey(digitalProductId); @@ -124,7 +123,7 @@ public class SystemInfoHandler : IMessageHandler var digitMapIndex = 0; for (var j = decodeStringLength - 1; j >= 0; j--) { - var byteValue = digitMapIndex << 8 | (byte)hexPid[j]; + var byteValue = digitMapIndex << 8 | (byte)hexPid[j]!; hexPid[j] = (byte)(byteValue / 24); digitMapIndex = byteValue % 24; decodedChars[i] = digits[digitMapIndex]; @@ -148,17 +147,17 @@ public class SystemInfoHandler : IMessageHandler var current = 0; for (var j = 14; j >= 0; j--) { - current = current * 256; + current *= 256; current = digitalProductId[j + keyOffset] + current; digitalProductId[j + keyOffset] = (byte)(current / 24); - current = current % 24; + current %= 24; last = current; } key = digits[current] + key; } var keypart1 = key.Substring(1, last); - var keypart2 = key.Substring(last + 1, key.Length - (last + 1)); + var keypart2 = key[(last + 1)..]; key = keypart1 + "N" + keypart2; for (var i = 5; i < key.Length; i += 6) diff --git a/src/Agent/Insight.Agent/Network/Handlers/UpdateHandler.cs b/src/Agent/Insight.Agent/Network/Handlers/UpdateHandler.cs index 80454a2..1679d7e 100644 --- a/src/Agent/Insight.Agent/Network/Handlers/UpdateHandler.cs +++ b/src/Agent/Insight.Agent/Network/Handlers/UpdateHandler.cs @@ -10,7 +10,7 @@ using UpdateCollection = Insight.Domain.Network.Agent.Messages.UpdateCollection; namespace Insight.Agent.Network.Handlers; [SupportedOSPlatform("windows")] -public class UpdateHandler : IMessageHandler +public partial class UpdateHandler : IMessageHandler { public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -60,7 +60,7 @@ public class UpdateHandler : IMessageHandler try { - var rx = new Regex(@"KB(\d+)"); + var rx = KnowledgeBaseRegex(); update.Hotfix = rx.Match(wupdate.Title).Value; } catch (Exception) @@ -125,4 +125,7 @@ public class UpdateHandler : IMessageHandler return updates; } + + [GeneratedRegex(@"KB(\d+)")] + private static partial Regex KnowledgeBaseRegex(); } \ No newline at end of file diff --git a/src/Agent/Insight.Agent/Network/Handlers/UserHandler.cs b/src/Agent/Insight.Agent/Network/Handlers/UserHandler.cs index 76b5602..e681b8e 100644 --- a/src/Agent/Insight.Agent/Network/Handlers/UserHandler.cs +++ b/src/Agent/Insight.Agent/Network/Handlers/UserHandler.cs @@ -32,7 +32,7 @@ public class UserHandler : IMessageHandler foreach (var u in users) { - u.Groups = new List(); + u.Groups = []; foreach (var ug in usergrouping.Where(ug => ug.UserDomain == u.Domain && ug.UserName == u.Name)) { @@ -67,7 +67,7 @@ public class UserHandler : IMessageHandler using (collection) { - foreach (ManagementObject @object in collection) + foreach (ManagementObject @object in collection.Cast()) { var group = new Group(); @@ -83,7 +83,7 @@ public class UserHandler : IMessageHandler } } - return groups.OrderBy(x => x.Name)?.ToList(); + return [.. groups.OrderBy(x => x.Name)]; } private static List QueryUsers() @@ -105,7 +105,7 @@ public class UserHandler : IMessageHandler using (collection) { - foreach (ManagementObject @object in collection) + foreach (ManagementObject @object in collection.Cast()) { var user = new User(); @@ -150,7 +150,7 @@ public class UserHandler : IMessageHandler using (collection) { - foreach (ManagementObject @object in collection) + foreach (ManagementObject @object in collection.Cast()) { var usergroup = new UserGroupMap(); diff --git a/src/Agent/Insight.Agent/Network/Handlers/VirtualMaschineHandler.cs b/src/Agent/Insight.Agent/Network/Handlers/VirtualMaschineHandler.cs index f8c843f..793ae19 100644 --- a/src/Agent/Insight.Agent/Network/Handlers/VirtualMaschineHandler.cs +++ b/src/Agent/Insight.Agent/Network/Handlers/VirtualMaschineHandler.cs @@ -341,7 +341,7 @@ public class VirtualMaschineHandler : IMessageHandler { conf.ParentId = parentGuid.ToString(); - parentConfig.Childs ??= new List(); + parentConfig.Childs ??= []; parentConfig.Childs.Add(conf); } else diff --git a/src/Agent/Insight.Agent/Program.cs b/src/Agent/Insight.Agent/Program.cs index 807ac7a..3b07be9 100644 --- a/src/Agent/Insight.Agent/Program.cs +++ b/src/Agent/Insight.Agent/Program.cs @@ -9,6 +9,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using System.Runtime.Versioning; using Vaitr.Network; using Vaitr.Network.Hosting; @@ -66,29 +67,13 @@ internal class Program options.UseSerializer>(); }); - services.AddSingleton, CustomHandler>(); - services.AddSingleton, ProxyHandler>(); services.AddSingleton, AuthenticationHandler>(); - services.AddSingleton, DriveHandler>(); - services.AddSingleton, InterfaceHandler>(); - services.AddSingleton, MainboardHandler>(); - services.AddSingleton, MemoryHandler>(); - services.AddSingleton, OperationSystemHandler>(); - services.AddSingleton, PrinterHandler>(); - services.AddSingleton, ProcessorHandler>(); - services.AddSingleton, ServiceHandler>(); - services.AddSingleton, SessionHandler>(); - services.AddSingleton, SoftwareHandler>(); - services.AddSingleton, StoragePoolHandler>(); - services.AddSingleton, SystemInfoHandler>(); - services.AddSingleton, UpdateHandler>(); - services.AddSingleton, UserHandler>(); - services.AddSingleton, VideocardHandler>(); - services.AddSingleton, VirtualMaschineHandler>(); - + services.AddSingleton, ProxyHandler>(); + services.AddSingleton, CustomHandler>(); + + if (OperatingSystem.IsWindows()) ServiceCollectionExtensions.InjectWindowsHandler(services); // GLOBAL DEPENDENCIES - //services.AddSingleton(); services.AddTransient(provider => new HttpClient(new HttpClientHandler { ClientCertificateOptions = ClientCertificateOption.Manual, @@ -99,4 +84,30 @@ internal class Program var host = builder.Build(); await host.RunAsync().ConfigureAwait(false); } +} + +internal static class ServiceCollectionExtensions +{ + [SupportedOSPlatform("windows")] + internal static IServiceCollection InjectWindowsHandler(this IServiceCollection services) + { + services.AddSingleton, DriveHandler>(); + services.AddSingleton, InterfaceHandler>(); + services.AddSingleton, MainboardHandler>(); + services.AddSingleton, MemoryHandler>(); + services.AddSingleton, OperationSystemHandler>(); + services.AddSingleton, PrinterHandler>(); + services.AddSingleton, ProcessorHandler>(); + services.AddSingleton, ServiceHandler>(); + services.AddSingleton, SessionHandler>(); + services.AddSingleton, SoftwareHandler>(); + services.AddSingleton, StoragePoolHandler>(); + services.AddSingleton, SystemInfoHandler>(); + services.AddSingleton, UpdateHandler>(); + services.AddSingleton, UserHandler>(); + services.AddSingleton, VideocardHandler>(); + services.AddSingleton, VirtualMaschineHandler>(); + + return services; + } } \ No newline at end of file diff --git a/src/Agent/Insight.Agent/Services/CollectorService.cs b/src/Agent/Insight.Agent/Services/CollectorService.cs index 03ac923..2058aeb 100644 --- a/src/Agent/Insight.Agent/Services/CollectorService.cs +++ b/src/Agent/Insight.Agent/Services/CollectorService.cs @@ -5,12 +5,7 @@ using System.Runtime.Versioning; namespace Insight.Agent.Services; [SupportedOSPlatform("linux")] -public partial class CollectorService +public partial class CollectorService(ILogger? logger = null) { - public ILogger Logger { get; } - - public CollectorService(ILogger? logger = null) - { - Logger = logger ?? NullLogger.Instance; - } + public ILogger Logger { get; } = logger ?? NullLogger.Instance; } \ No newline at end of file diff --git a/src/Agent/Insight.Agent/Services/Configurator.cs b/src/Agent/Insight.Agent/Services/Configurator.cs index 3dbfa76..44fbace 100644 --- a/src/Agent/Insight.Agent/Services/Configurator.cs +++ b/src/Agent/Insight.Agent/Services/Configurator.cs @@ -4,12 +4,14 @@ namespace Insight.Agent.Services; public static class Configurator { + private static readonly JsonSerializerOptions _serializerOptions = new() { PropertyNameCaseInsensitive = true, WriteIndented = true }; + public static async ValueTask ReadAsync(string file, CancellationToken cancellationToken = default) where TConfig : class { var json = await File.ReadAllTextAsync(file, cancellationToken); - if (JsonSerializer.Deserialize(json, new JsonSerializerOptions { PropertyNameCaseInsensitive = true, WriteIndented = true }) is not TConfig config) + if (JsonSerializer.Deserialize(json, _serializerOptions) is not TConfig config) { throw new InvalidDataException($"Failed to deserialize ({file})"); } @@ -31,7 +33,7 @@ public static class Configurator { var json = await File.ReadAllTextAsync(file, cancellationToken); - if (JsonSerializer.Deserialize>(json, new JsonSerializerOptions { PropertyNameCaseInsensitive = true, WriteIndented = true }) is not IDictionary config) + if (JsonSerializer.Deserialize>(json, _serializerOptions) is not IDictionary config) { throw new InvalidDataException($"Failed to deserialize ({file})"); } @@ -89,7 +91,7 @@ public static class Configurator private static async ValueTask WriteToFileAsync(TData data, string file, CancellationToken cancellationToken) { - var json = JsonSerializer.Serialize(data, new JsonSerializerOptions { WriteIndented = true }); + var json = JsonSerializer.Serialize(data, _serializerOptions); await File.WriteAllTextAsync(file, json, cancellationToken); } diff --git a/src/Agent/Insight.Agent/Services/EventService.cs b/src/Agent/Insight.Agent/Services/EventService.cs index b2520a9..e14d8da 100644 --- a/src/Agent/Insight.Agent/Services/EventService.cs +++ b/src/Agent/Insight.Agent/Services/EventService.cs @@ -163,7 +163,7 @@ internal class EventService : BackgroundService }; } - _queue.Writer.WriteAsync(@event, default); + _ = _queue.Writer.WriteAsync(@event, default); } catch (Exception) { } // app crash } diff --git a/src/Agent/Insight.Agent/Services/ScriptService.cs b/src/Agent/Insight.Agent/Services/ScriptService.cs index 32e4eda..f77c3c4 100644 --- a/src/Agent/Insight.Agent/Services/ScriptService.cs +++ b/src/Agent/Insight.Agent/Services/ScriptService.cs @@ -4,17 +4,14 @@ using System.Management.Automation.Runspaces; namespace Insight.Agent.Services; -public class ScriptService +public class ScriptService(ILogger logger) { - private readonly ILogger _logger; - - public ScriptService(ILogger logger) - { - _logger = logger; - } + private readonly ILogger _logger = logger; public async Task QueryAsync(string query) { + _logger.LogDebug("QueryAsync ({query})", query); + var result = new QueryResult(); var errors = new List(); diff --git a/src/Agent/Insight.Agent/Services/UpdateService.cs b/src/Agent/Insight.Agent/Services/UpdateService.cs index f879069..18df6fe 100644 --- a/src/Agent/Insight.Agent/Services/UpdateService.cs +++ b/src/Agent/Insight.Agent/Services/UpdateService.cs @@ -12,19 +12,12 @@ using System.Text.Json; namespace Insight.Agent.Services; -internal class UpdateService : BackgroundService +internal class UpdateService(HttpClient httpClient, IConfiguration configuration, ILogger logger) : BackgroundService { - private readonly Uri _uri; + private readonly Uri _uri = configuration.GetValue("api") ?? throw new Exception($"api value not set (appsettings)"); - private readonly HttpClient _httpClient; - private readonly ILogger _logger; - - public UpdateService(HttpClient httpClient, IConfiguration configuration, ILogger logger) - { - _httpClient = httpClient; - _uri = configuration.GetValue("api") ?? throw new Exception($"api value not set (appsettings)"); - _logger = logger; - } + private readonly HttpClient _httpClient = httpClient; + private readonly ILogger _logger = logger; protected override async Task ExecuteAsync(CancellationToken cancellationToken) { @@ -42,7 +35,7 @@ internal class UpdateService : BackgroundService _logger.LogInformation("Update Result: {result}", result?.Success); if (result?.UpdateErrors is not null) { - _logger.LogError("Update Errors: {errors}", string.Concat(result?.UpdateErrors)); + _logger.LogError("Update Errors: {errors}", string.Concat(result.UpdateErrors)); } } catch (OperationCanceledException) { } @@ -198,7 +191,7 @@ internal class UpdateService : BackgroundService await File.WriteAllBytesAsync(updateFile.FullName, await update.Content.ReadAsByteArrayAsync(cancellationToken), cancellationToken); // extract update archive from temp to app dir (overwrite) - ZipFile.ExtractToDirectory(updateFile.FullName, bin.Directory?.FullName, true); + ZipFile.ExtractToDirectory(updateFile.FullName, bin.Directory!.FullName, true); // delete temp folder if (temp.Exists) temp.Delete(true); @@ -229,7 +222,7 @@ internal class UpdateService : BackgroundService var matched = System.Diagnostics.Process.GetProcessesByName(bin.FullName); - if (matched is null || matched.Any() is false) return false; + if (matched is null || matched.Length == 0) return false; if (matched.Any(p => p.MainModule is not null && @@ -262,7 +255,7 @@ internal class UpdateService : BackgroundService var matched = System.Diagnostics.Process.GetProcessesByName(bin.FullName); - if (matched is null || matched.Any() is false) return true; + if (matched is null || matched.Length == 0) return true; foreach (var procsInfo in matched.Where(p => p.MainModule is not null && @@ -312,7 +305,7 @@ internal class UpdateService : BackgroundService await File.WriteAllBytesAsync(updateFile.FullName, await update.Content.ReadAsByteArrayAsync(cancellationToken), cancellationToken); // extract update archive from temp to app dir (overwrite) - ZipFile.ExtractToDirectory(updateFile.FullName, bin.Directory?.FullName, true); + ZipFile.ExtractToDirectory(updateFile.FullName, bin.Directory!.FullName, true); // delete temp folder if (temp.Exists) temp.Delete(true); @@ -353,7 +346,7 @@ internal class UpdateService : BackgroundService public bool ApiAvailable { get; set; } = false; public bool UpdateAvailable { get; set; } = false; public bool Success { get; set; } = false; - public List ApiErrors { get; } = new(); - public List UpdateErrors { get; } = new(); + public List ApiErrors { get; } = []; + public List UpdateErrors { get; } = []; } } \ No newline at end of file diff --git a/src/Agent/Insight.Agent/Services/_Collector/_Os.cs b/src/Agent/Insight.Agent/Services/_Collector/_Os.cs index 34db513..b74254d 100644 --- a/src/Agent/Insight.Agent/Services/_Collector/_Os.cs +++ b/src/Agent/Insight.Agent/Services/_Collector/_Os.cs @@ -21,10 +21,9 @@ public partial class CollectorService output = stream.ReadToEnd(); // clean output - var clean = Regex - .Replace(output + var clean = CleanRegex().Replace(output .Trim() - .Replace("\t", " "), @"[ ]{2,}", " "); + .Replace("\t", " "), " "); var elements = clean.Split(Array.Empty(), StringSplitOptions.RemoveEmptyEntries); @@ -36,13 +35,12 @@ public partial class CollectorService // linebreak list conversion var lines = new List(output - .Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries)) + .Split(separator, StringSplitOptions.RemoveEmptyEntries)) .Select(l => { - return Regex - .Replace(l + return CleanRegex().Replace(l .Trim() - .Replace("\t", " "), @"[ ]{2,}", " "); + .Replace("\t", " "), " "); }) .ToList(); @@ -62,13 +60,12 @@ public partial class CollectorService // linebreak list conversion lines = new List(output - .Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries)) + .Split(separator, StringSplitOptions.RemoveEmptyEntries)) .Select(l => { - return Regex - .Replace(l + return CleanRegex().Replace(l .Trim() - .Replace("\t", " "), @"[ ]{2,}", " "); + .Replace("\t", " "), " "); }) .ToList(); @@ -102,4 +99,9 @@ public partial class CollectorService return os; } + + private static readonly string[] separator = ["\n", "\r\n"]; + + [GeneratedRegex(@"[ ]{2,}")] + private static partial Regex CleanRegex(); } \ No newline at end of file diff --git a/src/Agent/Insight.Agent/Services/_Collector/_Session.cs b/src/Agent/Insight.Agent/Services/_Collector/_Session.cs index fd42981..a393ee1 100644 --- a/src/Agent/Insight.Agent/Services/_Collector/_Session.cs +++ b/src/Agent/Insight.Agent/Services/_Collector/_Session.cs @@ -17,11 +17,11 @@ public partial class CollectorService var output = "w".Bash(); // linebreak list conversion - var lines = output.Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + var lines = output.Split(separatorArray, StringSplitOptions.RemoveEmptyEntries).ToList(); lines = lines.Select(l => { - return Regex.Replace(l.Trim().Replace("\t", " "), @"[ ]{2,}", " "); + return CleanOutputRegex().Replace(l.Trim().Replace("\t", " "), " "); }).ToList(); // cleaning @@ -46,4 +46,9 @@ public partial class CollectorService return sessions; } + + private static readonly string[] separatorArray = ["\n", "\r\n"]; + + [GeneratedRegex(@"[ ]{2,}")] + private static partial Regex CleanOutputRegex(); } \ No newline at end of file diff --git a/src/Api/Insight.Api/Controllers/AccountController.cs b/src/Api/Insight.Api/Controllers/AccountController.cs index 3510438..4d80252 100644 --- a/src/Api/Insight.Api/Controllers/AccountController.cs +++ b/src/Api/Insight.Api/Controllers/AccountController.cs @@ -1,31 +1,29 @@ using Insight.Api.Models; +using Insight.Infrastructure.Entities; using Insight.Infrastructure.Models; using Insight.Infrastructure.Services; +using Insight.Infrastructure.Web; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using MongoDB.Driver; namespace Insight.Api.Controllers; [ApiController, Route("api/accounts")] -public class AccountController : ControllerBase +public class AccountController(IdentityService identityService, IServiceScopeFactory scopeFactory) : ControllerBase { - private readonly IdentityService _identityService; - private readonly AccountService _accountService; - private readonly ILogger _logger; - - public AccountController(IdentityService identityService, AccountService accountService, ILogger logger) - { - _identityService = identityService; - _accountService = accountService; - _logger = logger; - } + private readonly IdentityService _identityService = identityService; + private readonly IServiceScopeFactory _scopeFactory = scopeFactory; [HttpGet, Authorize] public async Task Get([FromQuery] PagedDataRequest request, CancellationToken cancellationToken) { + using var scope = _scopeFactory.CreateScope(); + var collection = scope.ServiceProvider.GetRequiredService().User(); + try { - var result = await _accountService.GetAsync( + var result = await collection.GetPagedAsync( offset: request.Offset, limit: request.Limit, request: Request, diff --git a/src/Api/Insight.Api/Controllers/AgentController.cs b/src/Api/Insight.Api/Controllers/AgentController.cs index 0a1e5b9..c1d10cc 100644 --- a/src/Api/Insight.Api/Controllers/AgentController.cs +++ b/src/Api/Insight.Api/Controllers/AgentController.cs @@ -1,28 +1,26 @@ -using Insight.Infrastructure.Models; -using Insight.Infrastructure.Services; +using Insight.Infrastructure.Entities; +using Insight.Infrastructure.Models; +using Insight.Infrastructure.Web; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using MongoDB.Driver; namespace Insight.Api.Controllers; [ApiController, Route("api/agents")] -public class AgentController : ControllerBase +public class AgentController(IServiceScopeFactory scopeFactory) : ControllerBase { - private readonly AgentService _agentService; - private readonly ILogger _logger; - - public AgentController(AgentService agentService, ILogger logger) - { - _agentService = agentService; - _logger = logger; - } + private readonly IServiceScopeFactory _scopeFactory = scopeFactory; [HttpGet, Authorize] public async Task Get([FromQuery] PagedDataRequest request, CancellationToken cancellationToken) { + using var scope = _scopeFactory.CreateScope(); + var collection = scope.ServiceProvider.GetRequiredService().Agent(); + try { - var result = await _agentService.GetAsync( + var result = await collection.GetPagedAsync( offset: request.Offset, limit: request.Limit, request: Request, diff --git a/src/Api/Insight.Api/Controllers/CustomerController.cs b/src/Api/Insight.Api/Controllers/CustomerController.cs index 4aedc19..ddc94a2 100644 --- a/src/Api/Insight.Api/Controllers/CustomerController.cs +++ b/src/Api/Insight.Api/Controllers/CustomerController.cs @@ -1,28 +1,26 @@ -using Insight.Infrastructure.Models; -using Insight.Infrastructure.Services; +using Insight.Infrastructure.Entities; +using Insight.Infrastructure.Models; +using Insight.Infrastructure.Web; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using MongoDB.Driver; namespace Insight.Api.Controllers; [ApiController, Route("api/customers")] -public class CustomerController : ControllerBase +public class CustomerController(IServiceScopeFactory scopeFactory) : ControllerBase { - private readonly CustomerService _customerService; - private readonly ILogger _logger; - - public CustomerController(CustomerService customerService, ILogger logger) - { - _customerService = customerService; - _logger = logger; - } + private readonly IServiceScopeFactory _scopeFactory = scopeFactory; [HttpGet, Authorize] public async Task Get([FromQuery] PagedDataRequest request, CancellationToken cancellationToken) { + using var scope = _scopeFactory.CreateScope(); + var collection = scope.ServiceProvider.GetRequiredService().Customer(); + try { - var result = await _customerService.GetAsync( + var result = await collection.GetPagedAsync( offset: request.Offset, limit: request.Limit, request: Request, diff --git a/src/Api/Insight.Api/Controllers/HostController.cs b/src/Api/Insight.Api/Controllers/HostController.cs index d8eb5c5..ccd9fea 100644 --- a/src/Api/Insight.Api/Controllers/HostController.cs +++ b/src/Api/Insight.Api/Controllers/HostController.cs @@ -1,28 +1,26 @@ -using Insight.Infrastructure.Models; -using Insight.Infrastructure.Services; +using Insight.Infrastructure.Entities; +using Insight.Infrastructure.Models; +using Insight.Infrastructure.Web; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using MongoDB.Driver; namespace Insight.Api.Controllers; [ApiController, Route("api/hosts")] -public class HostController : ControllerBase +public class HostController(IServiceScopeFactory scopeFactory) : ControllerBase { - private readonly HostService _hostService; - private readonly ILogger _logger; - - public HostController(HostService hostService, ILogger logger) - { - _hostService = hostService; - _logger = logger; - } + private readonly IServiceScopeFactory _scopeFactory = scopeFactory; [HttpGet, Authorize] public async Task Get([FromQuery] PagedDataRequest request, CancellationToken cancellationToken) { + using var scope = _scopeFactory.CreateScope(); + var collection = scope.ServiceProvider.GetRequiredService().Host(); + try { - var result = await _hostService.GetAsync( + var result = await collection.GetPagedAsync( offset: request.Offset, limit: request.Limit, request: Request, diff --git a/src/Api/Insight.Api/Controllers/InventoryController.cs b/src/Api/Insight.Api/Controllers/InventoryController.cs index 4327843..14e0e23 100644 --- a/src/Api/Insight.Api/Controllers/InventoryController.cs +++ b/src/Api/Insight.Api/Controllers/InventoryController.cs @@ -1,6 +1,6 @@ using Insight.Infrastructure.Entities; using Insight.Infrastructure.Models; -using Insight.Infrastructure.Services; +using Insight.Infrastructure.Web; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using MongoDB.Bson; @@ -11,20 +11,16 @@ using System.Text.RegularExpressions; namespace Insight.Api.Controllers; [ApiController, Route("api/inventory")] -public class InventoryController : ControllerBase +public class InventoryController(IServiceScopeFactory scopeFactory) : ControllerBase { - private readonly InventoryService _inventoryService; - private readonly ILogger _logger; - - public InventoryController(InventoryService inventoryService, ILogger logger) - { - _inventoryService = inventoryService; - _logger = logger; - } + private readonly IServiceScopeFactory _scopeFactory = scopeFactory; [HttpGet, Authorize] public async Task Get([FromQuery] HostApplicationEntity request, [FromQuery] PagedDataRequest meta, CancellationToken cancellationToken) { + using var scope = _scopeFactory.CreateScope(); + var collection = scope.ServiceProvider.GetRequiredService().HostApplication(); + try { var filter = Builders.Filter.Empty; @@ -38,7 +34,7 @@ public class InventoryController : ControllerBase if (request.Name is not null) filter &= Builders.Filter.Regex(p => p.Name, new BsonRegularExpression(new Regex(request.Name, RegexOptions.IgnoreCase))); - var result = await _inventoryService.GetAsync( + var result = await collection.GetPagedAsync( filter: filter, offset: meta.Offset, limit: meta.Limit, diff --git a/src/Api/Insight.Api/Controllers/SetupController.cs b/src/Api/Insight.Api/Controllers/SetupController.cs index 831a922..fe03166 100644 --- a/src/Api/Insight.Api/Controllers/SetupController.cs +++ b/src/Api/Insight.Api/Controllers/SetupController.cs @@ -3,14 +3,9 @@ namespace Insight.Server.Controllers; [ApiController, Route("api/setup")] -public class SetupController : ControllerBase +public class SetupController(ILogger logger) : ControllerBase { - private readonly ILogger _logger; - - public SetupController(ILogger logger) - { - _logger = logger; - } + private readonly ILogger _logger = logger; [HttpGet("windows")] public async Task GetAsync(CancellationToken cancellationToken) diff --git a/src/Api/Insight.Api/Controllers/TokenController.cs b/src/Api/Insight.Api/Controllers/TokenController.cs index 9c36083..12825b1 100644 --- a/src/Api/Insight.Api/Controllers/TokenController.cs +++ b/src/Api/Insight.Api/Controllers/TokenController.cs @@ -6,14 +6,9 @@ using Microsoft.AspNetCore.Mvc; namespace Insight.Api.Controllers; [ApiController, Route("api/token", Order = 0)] -public class TokenController : ControllerBase +public class TokenController(TokenService tokenService) : ControllerBase { - private readonly TokenService _tokenService; - - public TokenController(TokenService tokenService) - { - _tokenService = tokenService; - } + private readonly TokenService _tokenService = tokenService; /// /// Access Token Request @@ -21,6 +16,9 @@ public class TokenController : ControllerBase [HttpPost, AllowAnonymous] public async Task Authentication([FromBody] TokenRequest request) { + if (request.Username is null) return BadRequest("username is null"); + if (request.Password is null) return BadRequest("password is null"); + try { var result = await _tokenService.GetAsync(request.Username, request.Password, request.Code, HttpContext.Connection.RemoteIpAddress).ConfigureAwait(false); diff --git a/src/Api/Insight.Api/Controllers/UpdateController.cs b/src/Api/Insight.Api/Controllers/UpdateController.cs index 173a636..712f2fa 100644 --- a/src/Api/Insight.Api/Controllers/UpdateController.cs +++ b/src/Api/Insight.Api/Controllers/UpdateController.cs @@ -5,14 +5,9 @@ using Microsoft.AspNetCore.Mvc; namespace Insight.Server.Controllers; [ApiController, Route("api/update")] -public class UpdateController : ControllerBase +public class UpdateController(ILogger logger) : ControllerBase { - private readonly ILogger _logger; - - public UpdateController(ILogger logger) - { - _logger = logger; - } + private readonly ILogger _logger = logger; [HttpGet("updater/windows")] public IActionResult UpdaterWindows() @@ -35,7 +30,7 @@ public class UpdateController : ControllerBase var versions = updateDir.GetFiles("*.zip", SearchOption.TopDirectoryOnly); - if (versions is null || versions.Any() is false) return NotFound(); + if (versions is null || versions.Length == 0) return NotFound(); var latest = versions.OrderBy(x => x.Name).FirstOrDefault(); @@ -73,7 +68,7 @@ public class UpdateController : ControllerBase var versions = updateDir.GetFiles("*.zip", SearchOption.TopDirectoryOnly); - if (versions is null || versions.Any() is false) return NotFound(); + if (versions is null || versions.Length == 0) return NotFound(); var latest = versions.OrderBy(x => x.Name).FirstOrDefault(); diff --git a/src/Api/Insight.Api/Extensions/ServiceExtensions.cs b/src/Api/Insight.Api/Extensions/ServiceExtensions.cs index afd32de..51342ce 100644 --- a/src/Api/Insight.Api/Extensions/ServiceExtensions.cs +++ b/src/Api/Insight.Api/Extensions/ServiceExtensions.cs @@ -6,7 +6,7 @@ namespace Insight.Api.Hosting; public static class ServiceExtensions { - internal static IServiceCollection AddSwaggerServices(this IServiceCollection services, IConfiguration configuration) + internal static IServiceCollection AddSwaggerServices(this IServiceCollection services) { services.AddEndpointsApiExplorer(); services.AddSwaggerGen(options => diff --git a/src/Api/Insight.Api/Insight.Api.csproj b/src/Api/Insight.Api/Insight.Api.csproj index 2d4f1d9..e67d2bf 100644 --- a/src/Api/Insight.Api/Insight.Api.csproj +++ b/src/Api/Insight.Api/Insight.Api.csproj @@ -1,43 +1,36 @@  - - - net7.0 - Insight - api - 2023.12.14.0 - Insight.Api - enable - enable - 4ae1d3bf-869e-4963-8a19-35634507d3b3 - - false - false - - - True - $(NoWarn);1591 - - - - none - - - - none - + True + $(NoWarn);1591 + none + - - - - - - + + + + + + - + + - - + + \ No newline at end of file diff --git a/src/Api/Insight.Api/Program.cs b/src/Api/Insight.Api/Program.cs index 8e2b778..d9dea66 100644 --- a/src/Api/Insight.Api/Program.cs +++ b/src/Api/Insight.Api/Program.cs @@ -40,12 +40,12 @@ internal class Program builder.Services.AddAuthorization(); // WEBSERVICES - builder.Services.AddProxyServices(builder.Configuration); - builder.Services.AddRoutingServices(builder.Configuration); + builder.Services.AddProxyServices(); + builder.Services.AddRoutingServices(); builder.Services.AddControllers(); // SWAGGER - builder.Services.AddSwaggerServices(builder.Configuration); + builder.Services.AddSwaggerServices(); //builder.Services.AddControllers(); //builder.Services.AddEndpointsApiExplorer(); diff --git a/src/Core/Insight.Domain/Constants/Configuration.cs b/src/Core/Insight.Domain/Constants/Configuration.cs index 812b469..0e79218 100644 --- a/src/Core/Insight.Domain/Constants/Configuration.cs +++ b/src/Core/Insight.Domain/Constants/Configuration.cs @@ -1,4 +1,5 @@ -using System.Net; +using System.Diagnostics; +using System.Net; using System.Reflection; namespace Insight.Domain.Constants; @@ -7,6 +8,14 @@ public static class Configuration { public static string Hostname => Dns.GetHostEntry("localhost").HostName; public static Version Version => Assembly.GetEntryAssembly()?.GetName().Version ?? throw new ArgumentNullException("Version"); - public static DirectoryInfo? AppDirectory => string.IsNullOrWhiteSpace(Environment.ProcessPath) ? null : new DirectoryInfo(Environment.ProcessPath).Parent; + public static DirectoryInfo? AppDirectory => AppDirectoryHelper(); public static string DefaultConfig => Path.Combine(AppDirectory?.FullName ?? string.Empty, "config.json"); + + private static DirectoryInfo? AppDirectoryHelper() + { + using var proc = Process.GetCurrentProcess(); + + if (proc?.MainModule?.FileName is null) throw new InvalidOperationException("MainModule not found"); + return new DirectoryInfo(proc.MainModule.FileName).Parent; + } } \ No newline at end of file diff --git a/src/Core/Insight.Domain/Enums/CategoryEnum.cs b/src/Core/Insight.Domain/Enums/CategoryEnum.cs index 739b5fd..847e096 100644 --- a/src/Core/Insight.Domain/Enums/CategoryEnum.cs +++ b/src/Core/Insight.Domain/Enums/CategoryEnum.cs @@ -2,6 +2,7 @@ public enum CategoryEnum { + None = 0, Network = 1, System = 2, Application = 3, diff --git a/src/Core/Insight.Domain/Insight.Domain.csproj b/src/Core/Insight.Domain/Insight.Domain.csproj index 88c6256..31bc155 100644 --- a/src/Core/Insight.Domain/Insight.Domain.csproj +++ b/src/Core/Insight.Domain/Insight.Domain.csproj @@ -1,25 +1,25 @@  - net7.0 - true + net8.0 + latest + enable enable Insight.Domain Insight - 2023.12.14.0 + 2023.12.15.0 + none + + + + + 9193 - - + + + - - - none - - - - none - \ No newline at end of file diff --git a/src/Core/Insight.Domain/Models/Result.cs b/src/Core/Insight.Domain/Models/Result.cs index 85f6934..5e07353 100644 --- a/src/Core/Insight.Domain/Models/Result.cs +++ b/src/Core/Insight.Domain/Models/Result.cs @@ -1,5 +1,4 @@ using MessagePack; -using System.Diagnostics.CodeAnalysis; using System.Runtime.Serialization; using System.Text.Json.Serialization; @@ -31,17 +30,17 @@ public class Result } [IgnoreDataMember] - public Exception? Exception { get; init; } + public Exception? Exception { get; set; } [IgnoreDataMember] - [MemberNotNullWhen(true, nameof(Exception))] + //[MemberNotNullWhen(true, nameof(Exception))] public bool HadException => Exception is not null; [DataMember] - public bool IsSuccess { get; init; } + public bool IsSuccess { get; set; } [DataMember] - public string Reason { get; init; } = string.Empty; + public string Reason { get; set; } = string.Empty; public static Result Fail(string reason) @@ -130,19 +129,19 @@ public class Result } [IgnoreDataMember] - public Exception? Exception { get; init; } + public Exception? Exception { get; set; } [IgnoreDataMember] - [MemberNotNullWhen(true, nameof(Exception))] + //[MemberNotNullWhen(true, nameof(Exception))] public bool HadException => Exception is not null; [DataMember] - [MemberNotNullWhen(true, nameof(Value))] - public bool IsSuccess { get; init; } + //[MemberNotNullWhen(true, nameof(Value))] + public bool IsSuccess { get; set; } [DataMember] - public string Reason { get; init; } = string.Empty; + public string Reason { get; set; } = string.Empty; [DataMember] - public T? Value { get; init; } + public T? Value { get; set; } } diff --git a/src/Core/Insight.Domain/Models/Token.cs b/src/Core/Insight.Domain/Models/Token.cs index 44718f3..280373d 100644 --- a/src/Core/Insight.Domain/Models/Token.cs +++ b/src/Core/Insight.Domain/Models/Token.cs @@ -27,28 +27,17 @@ public class TokenResponse public string? RefreshToken { get; set; } } -public class TokenRevokeRequest +public class TokenRevokeRequest(string token, string? reason) { [JsonPropertyName("token"), Required] - public string? Token { get; set; } + public string? Token { get; set; } = token; [JsonPropertyName("reason")] - public string? Reason { get; set; } - - public TokenRevokeRequest(string token, string? reason) - { - Token = token; - Reason = reason; - } + public string? Reason { get; set; } = reason; } -public class TokenRefreshRequest +public class TokenRefreshRequest(string token) { [JsonPropertyName("token"), Required] - public string? Token { get; set; } - - public TokenRefreshRequest(string token) - { - Token = token; - } + public string? Token { get; set; } = token; } \ No newline at end of file diff --git a/src/Core/Insight.Domain/Network/Agent/Messages/Interface.cs b/src/Core/Insight.Domain/Network/Agent/Messages/Interface.cs index 3c985b6..241d7da 100644 --- a/src/Core/Insight.Domain/Network/Agent/Messages/Interface.cs +++ b/src/Core/Insight.Domain/Network/Agent/Messages/Interface.cs @@ -182,6 +182,6 @@ public partial class IPAddress2 : IMessage IsIPv6Multicast = address.IsIPv6Multicast; IsIPv6SiteLocal = address.IsIPv6SiteLocal; IsIPv6Teredo = address.IsIPv6Teredo; - IsIPv6UniqueLocal = address.IsIPv6UniqueLocal; + //IsIPv6UniqueLocal = address.IsIPv6UniqueLocal; } } \ No newline at end of file diff --git a/src/Core/Insight.Domain/Network/IMessage.cs b/src/Core/Insight.Domain/Network/IMessage.cs index 39da489..35421e8 100644 --- a/src/Core/Insight.Domain/Network/IMessage.cs +++ b/src/Core/Insight.Domain/Network/IMessage.cs @@ -6,10 +6,6 @@ namespace Insight.Domain.Network; [MemoryPackUnion(0, typeof(Agent.Messages.AuthenticationRequest))] [MemoryPackUnion(1, typeof(Agent.Messages.AuthenticationResponse))] [MemoryPackUnion(2, typeof(Agent.Messages.InventoryRequest))] -//[MemoryPackUnion(3, typeof(Agent.Messages.ConsoleQueryRequest))] -//[MemoryPackUnion(4, typeof(Agent.Messages.ConsoleQueryResponse))] -//[MemoryPackUnion(5, typeof(Proxy))] -//[MemoryPackUnion(6, typeof(Proxy))] [MemoryPackUnion(7, typeof(Agent.Messages.Event))] [MemoryPackUnion(8, typeof(Agent.Messages.Trap))] [MemoryPackUnion(9, typeof(Agent.Messages.Mainboard))] diff --git a/src/Core/Insight.Infrastructure/Extensions/HttpRequestExtensions.cs b/src/Core/Insight.Infrastructure.Web/Extensions/HttpRequestExtensions.cs similarity index 96% rename from src/Core/Insight.Infrastructure/Extensions/HttpRequestExtensions.cs rename to src/Core/Insight.Infrastructure.Web/Extensions/HttpRequestExtensions.cs index 7d6ca72..a18fca6 100644 --- a/src/Core/Insight.Infrastructure/Extensions/HttpRequestExtensions.cs +++ b/src/Core/Insight.Infrastructure.Web/Extensions/HttpRequestExtensions.cs @@ -4,7 +4,7 @@ using Microsoft.AspNetCore.Http.Extensions; namespace Insight.Infrastructure; -public static class HttpRequestExtensions +public static partial class HttpRequestExtensions { public static void AddPagination(this HttpRequest request, PagedList pagelist) { diff --git a/src/Core/Insight.Infrastructure.Web/Extensions/HttpResponseExtensions.cs b/src/Core/Insight.Infrastructure.Web/Extensions/HttpResponseExtensions.cs new file mode 100644 index 0000000..b449964 --- /dev/null +++ b/src/Core/Insight.Infrastructure.Web/Extensions/HttpResponseExtensions.cs @@ -0,0 +1,18 @@ +using Insight.Infrastructure.Models; +using Microsoft.AspNetCore.Http; +using System.Text.Json; + +namespace Insight.Infrastructure; + +public static partial class HttpResponseExtensions +{ + private static readonly JsonSerializerOptions _options = new() + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase + }; + + public static void AddPagination(this HttpResponse response, PagedList pagelist) + { + response.Headers.Append("X-Pagination", JsonSerializer.Serialize(pagelist.Meta as PagedHeaderData, _options)); + } +} \ No newline at end of file diff --git a/src/Core/Insight.Infrastructure.Web/Extensions/MongoCollectionExtensions.cs b/src/Core/Insight.Infrastructure.Web/Extensions/MongoCollectionExtensions.cs new file mode 100644 index 0000000..ba9c355 --- /dev/null +++ b/src/Core/Insight.Infrastructure.Web/Extensions/MongoCollectionExtensions.cs @@ -0,0 +1,44 @@ +using Insight.Infrastructure.Models; +using Microsoft.AspNetCore.Http; +using MongoDB.Bson; +using MongoDB.Driver; + +namespace Insight.Infrastructure.Web; + +public static class MongoCollectionExtensions +{ + public static async Task> GetPagedAsync( + this IMongoCollection collection, + HttpRequest request, + HttpResponse response, + FilterDefinition? filter = null, + SortDefinition? sort = null, + int offset = 0, + int limit = 10, + CancellationToken cancellationToken = default) + { + var result = await Infrastructure.MongoCollectionExtensions.GetPagedAsync(collection, filter, sort, offset, limit, cancellationToken).ConfigureAwait(false); + + request?.AddPagination(result); + response?.AddPagination(result); + + return result; + } + + public static async Task> GetPagedAsync( + this IMongoCollection collection, + HttpRequest request, + HttpResponse response, + IAggregateFluent query, + int offset = 0, + int limit = 10, + CancellationToken cancellationToken = default) + { + var result = await Infrastructure.MongoCollectionExtensions.GetPagedAsync(collection, query, offset, limit, cancellationToken).ConfigureAwait(false); + + request?.AddPagination(result); + response?.AddPagination(result); + + return result; + } +} \ No newline at end of file diff --git a/src/Core/Insight.Infrastructure.Web/Extensions/ServiceExtensions.cs b/src/Core/Insight.Infrastructure.Web/Extensions/ServiceExtensions.cs new file mode 100644 index 0000000..ad9100b --- /dev/null +++ b/src/Core/Insight.Infrastructure.Web/Extensions/ServiceExtensions.cs @@ -0,0 +1,229 @@ +using AspNetCore.Identity.MongoDbCore.Extensions; +using AspNetCore.Identity.MongoDbCore.Infrastructure; +using Insight.Infrastructure.Entities; +using Insight.Infrastructure.Services; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.HttpOverrides; +using Microsoft.AspNetCore.Identity; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Primitives; +using Microsoft.IdentityModel.Tokens; +using Microsoft.Net.Http.Headers; +using MongoDB.Bson; +using System.Text; + +namespace Insight.Infrastructure; + +public static partial class ServiceExtensions +{ + public static IServiceCollection AddTokenServices(this IServiceCollection services, IConfiguration configuration) + { + var options = new Models.TokenOptions( + key: configuration.GetValue(Appsettings.JwtKey) ?? throw new Exception($"{Appsettings.JwtKey} value not set (appsettings)"), + expires: configuration.GetValue(Appsettings.JwtExp) ?? throw new Exception($"{Appsettings.JwtExp} value not set (appsettings)"), + audience: configuration.GetValue(Appsettings.JwtAudience) ?? throw new Exception($"{Appsettings.JwtAudience} value not set (appsettings)"), + issuer: configuration.GetValue(Appsettings.JwtIssuer) ?? throw new Exception($"{Appsettings.JwtIssuer} value not set (appsettings)")); + + services.AddSingleton(options); + services.AddTransient(); + + return services; + } + + public static IServiceCollection AddProxyServices(this IServiceCollection services) + { + // add before routing + services.Configure(options => + { + options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; + }); + + return services; + } + + public static IServiceCollection AddRoutingServices(this IServiceCollection services) + { + // add after proxy + services.AddRouting(options => + { + options.LowercaseUrls = true; + }); + + return services; + } + + public static IServiceCollection AddIdentityServices(this IServiceCollection services, IConfiguration configuration) + { + var connectionString = configuration.GetValue(Appsettings.Database) ?? throw new Exception($"{Appsettings.Database} value not set (appsettings)"); + + services.AddIdentity(options => + { + + }) + .AddMongoDbStores(connectionString, Settings.Database) + .AddDefaultTokenProviders() + .AddSignInManager(); + + return services; + } + + public static IServiceCollection AddCustomAuthentication(this IServiceCollection services, IConfiguration configuration) + { + // REWRITE TO COOKIE ONLY FOR WEB + + services.AddAuthentication(options => + { + options.DefaultScheme = "Custom"; + options.DefaultChallengeScheme = "Custom"; + }) + .AddCookie("Cookies", options => + { + //options.Cookie.Domain = "insight.webmatic.de"; + options.Cookie.Name = "insight"; + options.LoginPath = "/account/login"; + options.LogoutPath = "/account/logout"; + options.ExpireTimeSpan = TimeSpan.FromHours(1); + options.SlidingExpiration = true; + + options.Events.OnRedirectToLogin = options => + { + if (options.Request.Path.StartsWithSegments("/api") && options.Response.StatusCode == 200) + options.Response.StatusCode = 401; + else + options.Response.Redirect(options.RedirectUri); + + return Task.CompletedTask; + }; + }) + .AddJwtBearer("Bearer", options => + { + options.RequireHttpsMetadata = false; + options.SaveToken = true; + + options.TokenValidationParameters.ValidateActor = false; + + options.TokenValidationParameters.ValidAudience = configuration.GetSection("Jwt:Audience").Value; + options.TokenValidationParameters.ValidateAudience = true; + + options.TokenValidationParameters.ValidIssuer = configuration.GetSection("Jwt:Issuer").Value; + options.TokenValidationParameters.ValidateIssuer = true; + + options.TokenValidationParameters.IssuerSigningKey = new SymmetricSecurityKey( + Encoding.UTF8.GetBytes(configuration.GetSection("Jwt:Key").Value ?? throw new Exception("Configuration for [Jwt:Key] not found")) + ); + + options.TokenValidationParameters.ValidateIssuerSigningKey = true; + options.TokenValidationParameters.ValidateLifetime = true; + }) + .AddPolicyScheme("Custom", "Custom", options => + { + options.ForwardDefaultSelector = context => + { + if (context.Request.Headers[HeaderNames.Authorization] is StringValues auth && auth.ToString().StartsWith("Bearer ")) + return "Bearer"; + else + return "Cookies"; + }; + }); + + return services; + } + + public static IServiceCollection AddBearerAuthentication(this IServiceCollection services, IConfiguration configuration) + { + services.AddAuthentication(options => + { + options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; + options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; + options.DefaultSignInScheme = JwtBearerDefaults.AuthenticationScheme; + }) + .AddJwtBearer(options => + { + options.RequireHttpsMetadata = false; + options.SaveToken = true; + + options.TokenValidationParameters.ValidateActor = false; + + options.TokenValidationParameters.ValidAudience = configuration.GetValue(Appsettings.JwtAudience) ?? throw new Exception($"{Appsettings.JwtAudience} value not set (appsettings)"); + options.TokenValidationParameters.ValidateAudience = true; + + options.TokenValidationParameters.ValidIssuer = configuration.GetValue(Appsettings.JwtIssuer) ?? throw new Exception($"{Appsettings.JwtIssuer} value not set (appsettings)"); + options.TokenValidationParameters.ValidateIssuer = true; + + options.TokenValidationParameters.IssuerSigningKey = new SymmetricSecurityKey( + Encoding.UTF8.GetBytes(configuration.GetValue(Appsettings.JwtKey) ?? throw new Exception($"{Appsettings.JwtKey} value not set (appsettings)")) + ); + + options.TokenValidationParameters.ValidateIssuerSigningKey = true; + options.TokenValidationParameters.ValidateLifetime = true; + }); + + return services; + } + + //private static IServiceCollection AddIdentityServices2(this IServiceCollection services, IConfiguration configuration) + //{ + // var identityOptions = new MongoDbIdentityConfiguration + // { + // MongoDbSettings = new MongoDbSettings + // { + // ConnectionString = configuration.GetSection("ConnectionStrings:Mongo").Value, + // DatabaseName = "insight" + // }, + // IdentityOptionsAction = options => + // { + // options.User.RequireUniqueEmail = true; + // options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@.-_"; + + // options.Password.RequireDigit = false; + // options.Password.RequiredLength = 8; + // options.Password.RequireNonAlphanumeric = false; + // options.Password.RequireUppercase = false; + // options.Password.RequireLowercase = false; + + // options.SignIn.RequireConfirmedAccount = false; + // options.SignIn.RequireConfirmedEmail = false; + // options.SignIn.RequireConfirmedPhoneNumber = false; + + // options.Lockout.MaxFailedAccessAttempts = 5; + // options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5); + // } + // }; + + // services.ConfigureMongoDbIdentity(identityOptions) + // .AddDefaultTokenProviders() + // .AddSignInManager(); + + // return services; + //} + + //private static IServiceCollection AddIdentityAuthentication(this IServiceCollection services, IConfiguration configuration) + //{ + // services.AddAuthentication(options => + // { + // options.DefaultAuthenticateScheme = + // }); + // cookieBuilder.ApplicationCookie = builder.AddApplicationCookie(); + // cookieBuilder.ExternalCookie = builder.AddExternalCookie(); + // cookieBuilder.TwoFactorRememberMeCookie = builder.AddTwoFactorRememberMeCookie(); + // cookieBuilder.TwoFactorUserIdCookie = builder.AddTwoFactorUserIdCookie(); + // .AddCookie(options => + // { + // options. + // }; + // .AddIdentityCookies(); + // .AddCookie(options => + // { + // // Specify where to redirect un-authenticated users + // options.LoginPath = "/account/login"; + + // // Specify the name of the auth cookie. + // // ASP.NET picks a dumb name by default. + // options.Cookie.Name = "insight"; + // }); + + // return services; + //} +} \ No newline at end of file diff --git a/src/Core/Insight.Infrastructure.Web/Insight.Infrastructure.Web.csproj b/src/Core/Insight.Infrastructure.Web/Insight.Infrastructure.Web.csproj new file mode 100644 index 0000000..bc64ae5 --- /dev/null +++ b/src/Core/Insight.Infrastructure.Web/Insight.Infrastructure.Web.csproj @@ -0,0 +1,25 @@ + + + + net8.0 + latest + enable + enable + Insight.Infrastructure.Web + Insight + 2023.12.15.0 + none + + + + + + + + + + + + + + diff --git a/src/Core/Insight.Infrastructure.Web/Models/TokenOptions.cs b/src/Core/Insight.Infrastructure.Web/Models/TokenOptions.cs new file mode 100644 index 0000000..e6d6623 --- /dev/null +++ b/src/Core/Insight.Infrastructure.Web/Models/TokenOptions.cs @@ -0,0 +1,9 @@ +namespace Insight.Infrastructure.Models; + +public class TokenOptions(string key, int expires, Uri? audience = null, Uri? issuer = null) +{ + public string Key { get; set; } = key; + public int Expires { get; set; } = expires; + public Uri? Audience { get; set; } = audience; + public Uri? Issuer { get; set; } = issuer; +} \ No newline at end of file diff --git a/src/Core/Insight.Infrastructure/Services/TokenService.cs b/src/Core/Insight.Infrastructure.Web/Services/TokenService.cs similarity index 86% rename from src/Core/Insight.Infrastructure/Services/TokenService.cs rename to src/Core/Insight.Infrastructure.Web/Services/TokenService.cs index f9cf6e7..9018b10 100644 --- a/src/Core/Insight.Infrastructure/Services/TokenService.cs +++ b/src/Core/Insight.Infrastructure.Web/Services/TokenService.cs @@ -10,24 +10,17 @@ using System.Text; namespace Insight.Infrastructure.Services; -public class TokenService +public class TokenService(TokenOptions options, IdentityService identityService, IMongoDatabase database) { - private readonly TokenOptions _options; - private readonly IdentityService _identityService; - private readonly IMongoDatabase _database; - - public TokenService(TokenOptions options, IdentityService identityService, IMongoDatabase database) - { - _options = options; - _identityService = identityService; - _database = database; - } + private readonly TokenOptions _options = options; + private readonly IdentityService _identityService = identityService; + private readonly IMongoDatabase _database = database; public async Task GetAsync(string email, string password, string? code = null, IPAddress? ipa = null) { var user = await _identityService.LoginAsync(email, password, code).ConfigureAwait(false); - var accessToken = await CreateAccessTokenAsync(user, ipa).ConfigureAwait(false); + var accessToken = await CreateAccessTokenAsync(user).ConfigureAwait(false); var refreshToken = await CreateRefreshTokenAsync(user, ipa).ConfigureAwait(false); return new TokenResponse @@ -42,7 +35,7 @@ public class TokenService { if (string.IsNullOrWhiteSpace(refreshToken)) throw new ArgumentNullException(nameof(refreshToken)); - var user = await _database.User().Find(p => p.RefreshTokens.Any(t => t.Token == refreshToken)).FirstOrDefaultAsync(); + var user = await _database.User().Find(p => p.RefreshTokens != null && p.RefreshTokens.Any(t => t.Token == refreshToken)).FirstOrDefaultAsync(); if (user is null || user.RefreshTokens is null) throw new InvalidDataException("Invalid Refresh Token"); var token = user.RefreshTokens.First(p => p.Token == refreshToken); @@ -73,7 +66,7 @@ public class TokenService var newRefreshToken = await CreateRefreshTokenAsync(user, ipa).ConfigureAwait(false); // create access token - var accessToken = await CreateAccessTokenAsync(user, ipa).ConfigureAwait(false); + var accessToken = await CreateAccessTokenAsync(user).ConfigureAwait(false); return new TokenResponse { @@ -87,7 +80,7 @@ public class TokenService { if (string.IsNullOrWhiteSpace(refreshToken)) throw new ArgumentNullException(nameof(refreshToken)); - var user = await _database.User().Find(p => p.RefreshTokens.Any(t => t.Token == refreshToken)).FirstOrDefaultAsync(); + var user = await _database.User().Find(p => p.RefreshTokens != null && p.RefreshTokens.Any(t => t.Token == refreshToken)).FirstOrDefaultAsync(); if (user is null || user.RefreshTokens is null) throw new InvalidDataException("Invalid Refresh Token"); var token = user.RefreshTokens.First(p => p.Token == refreshToken); @@ -102,7 +95,7 @@ public class TokenService token.ReasonRevoked = reason; } - private async Task<(string, int)> CreateAccessTokenAsync(InsightUser user, IPAddress? ipa = null) + private async Task<(string, int)> CreateAccessTokenAsync(InsightUser user) { var claims = await _identityService.GetClaimsAsync(user).ConfigureAwait(false); diff --git a/src/Core/Insight.Infrastructure/Extensions/HttpResponseExtensions.cs b/src/Core/Insight.Infrastructure/Extensions/HttpResponseExtensions.cs deleted file mode 100644 index cf4d828..0000000 --- a/src/Core/Insight.Infrastructure/Extensions/HttpResponseExtensions.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Insight.Infrastructure.Models; -using Microsoft.AspNetCore.Http; -using System.Text.Json; - -namespace Insight.Infrastructure; - -public static class HttpResponseExtensions -{ - public static void AddPagination(this HttpResponse response, PagedList pagelist) - { - response.Headers.Add("X-Pagination", JsonSerializer.Serialize(pagelist.Meta as PagedHeaderData, new JsonSerializerOptions - { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase - })); - } -} \ No newline at end of file diff --git a/src/Core/Insight.Infrastructure/Extensions/MongoCollectionExtensions.cs b/src/Core/Insight.Infrastructure/Extensions/MongoCollectionExtensions.cs index 3fa382b..b1ee91c 100644 --- a/src/Core/Insight.Infrastructure/Extensions/MongoCollectionExtensions.cs +++ b/src/Core/Insight.Infrastructure/Extensions/MongoCollectionExtensions.cs @@ -1,12 +1,11 @@ using Insight.Infrastructure.Models; -using Microsoft.AspNetCore.Http; using MongoDB.Bson; using MongoDB.Bson.Serialization; using MongoDB.Driver; namespace Insight.Infrastructure; -public static class MongoCollectionExtensions +public static partial class MongoCollectionExtensions { private const int _maximumLimit = 100; @@ -30,24 +29,6 @@ public static class MongoCollectionExtensions return new PagedList(data, offset, limit, total); } - public static async Task> GetPagedAsync( - this IMongoCollection collection, - HttpRequest request, - HttpResponse response, - FilterDefinition? filter = null, - SortDefinition? sort = null, - int offset = 0, - int limit = 10, - CancellationToken cancellationToken = default) - { - var result = await GetPagedAsync(collection, filter, sort, offset, limit, cancellationToken).ConfigureAwait(false); - - request?.AddPagination(result); - response?.AddPagination(result); - - return result; - } - public static async Task> GetPagedAsync( this IMongoCollection collection, IAggregateFluent query, @@ -62,21 +43,4 @@ public static class MongoCollectionExtensions return new PagedList(data.Select(x => BsonSerializer.Deserialize(x)), offset, limit, total); } - - public static async Task> GetPagedAsync( - this IMongoCollection collection, - HttpRequest request, - HttpResponse response, - IAggregateFluent query, - int offset = 0, - int limit = 10, - CancellationToken cancellationToken = default) - { - var result = await GetPagedAsync(collection, query, offset, limit, cancellationToken).ConfigureAwait(false); - - request?.AddPagination(result); - response?.AddPagination(result); - - return result; - } } \ No newline at end of file diff --git a/src/Core/Insight.Infrastructure/Extensions/ServiceExtensions.cs b/src/Core/Insight.Infrastructure/Extensions/ServiceExtensions.cs index f46cf99..5f62c94 100644 --- a/src/Core/Insight.Infrastructure/Extensions/ServiceExtensions.cs +++ b/src/Core/Insight.Infrastructure/Extensions/ServiceExtensions.cs @@ -1,24 +1,13 @@ -using AspNetCore.Identity.MongoDbCore.Extensions; -using AspNetCore.Identity.MongoDbCore.Infrastructure; -using Insight.Infrastructure.Entities; -using Insight.Infrastructure.Services; -using Microsoft.AspNetCore.Authentication.JwtBearer; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.HttpOverrides; -using Microsoft.AspNetCore.Identity; +using Insight.Infrastructure.Services; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; -using Microsoft.IdentityModel.Tokens; -using Microsoft.Net.Http.Headers; -using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Core.Configuration; -using System.Text; namespace Insight.Infrastructure; -public static class ServiceExtensions +public static partial class ServiceExtensions { public static IServiceCollection AddDatabase(this IServiceCollection services, IConfiguration configuration, ILoggerFactory? loggerFactory = null) { @@ -42,221 +31,6 @@ public static class ServiceExtensions { services.AddTransient(); services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - return services; - } - - public static IServiceCollection AddIdentityServices(this IServiceCollection services, IConfiguration configuration) - { - var connectionString = configuration.GetValue(Appsettings.Database) ?? throw new Exception($"{Appsettings.Database} value not set (appsettings)"); - - services.AddIdentity(options => - { - - }) - .AddMongoDbStores(connectionString, Settings.Database) - .AddDefaultTokenProviders() - .AddSignInManager(); - - return services; - } - - public static IServiceCollection AddTokenServices(this IServiceCollection services, IConfiguration configuration) - { - var options = new Models.TokenOptions( - key: configuration.GetValue(Appsettings.JwtKey) ?? throw new Exception($"{Appsettings.JwtKey} value not set (appsettings)"), - expires: configuration.GetValue(Appsettings.JwtExp) ?? throw new Exception($"{Appsettings.JwtExp} value not set (appsettings)"), - audience: configuration.GetValue(Appsettings.JwtAudience) ?? throw new Exception($"{Appsettings.JwtAudience} value not set (appsettings)"), - issuer: configuration.GetValue(Appsettings.JwtIssuer) ?? throw new Exception($"{Appsettings.JwtIssuer} value not set (appsettings)")); - - services.AddSingleton(options); - services.AddTransient(); - - return services; - } - - public static IServiceCollection AddCustomAuthentication(this IServiceCollection services, IConfiguration configuration) - { - // REWRITE TO COOKIE ONLY FOR WEB - - services.AddAuthentication(options => - { - options.DefaultScheme = "Custom"; - options.DefaultChallengeScheme = "Custom"; - }) - .AddCookie("Cookies", options => - { - //options.Cookie.Domain = "insight.webmatic.de"; - options.Cookie.Name = "insight"; - options.LoginPath = "/account/login"; - options.LogoutPath = "/account/logout"; - options.ExpireTimeSpan = TimeSpan.FromHours(1); - options.SlidingExpiration = true; - - options.Events.OnRedirectToLogin = options => - { - if (options.Request.Path.StartsWithSegments("/api") && options.Response.StatusCode == 200) - options.Response.StatusCode = 401; - else - options.Response.Redirect(options.RedirectUri); - - return Task.CompletedTask; - }; - }) - .AddJwtBearer("Bearer", options => - { - options.RequireHttpsMetadata = false; - options.SaveToken = true; - - options.TokenValidationParameters.ValidateActor = false; - - options.TokenValidationParameters.ValidAudience = configuration.GetSection("Jwt:Audience").Value; - options.TokenValidationParameters.ValidateAudience = true; - - options.TokenValidationParameters.ValidIssuer = configuration.GetSection("Jwt:Issuer").Value; - options.TokenValidationParameters.ValidateIssuer = true; - - options.TokenValidationParameters.IssuerSigningKey = new SymmetricSecurityKey( - Encoding.UTF8.GetBytes(configuration.GetSection("Jwt:Key").Value ?? throw new ArgumentNullException(nameof(TokenValidationParameters), "Jwt:Key")) - ); - - options.TokenValidationParameters.ValidateIssuerSigningKey = true; - options.TokenValidationParameters.ValidateLifetime = true; - }) - .AddPolicyScheme("Custom", "Custom", options => - { - options.ForwardDefaultSelector = context => - { - string authorization = context.Request.Headers[HeaderNames.Authorization]; - - if (!string.IsNullOrEmpty(authorization) && authorization.StartsWith("Bearer ")) return "Bearer"; - - return "Cookies"; - }; - }); - - return services; - } - - public static IServiceCollection AddBearerAuthentication(this IServiceCollection services, IConfiguration configuration) - { - services.AddAuthentication(options => - { - options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; - options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; - options.DefaultSignInScheme = JwtBearerDefaults.AuthenticationScheme; - }) - .AddJwtBearer(options => - { - options.RequireHttpsMetadata = false; - options.SaveToken = true; - - options.TokenValidationParameters.ValidateActor = false; - - options.TokenValidationParameters.ValidAudience = configuration.GetValue(Appsettings.JwtAudience) ?? throw new Exception($"{Appsettings.JwtAudience} value not set (appsettings)"); - options.TokenValidationParameters.ValidateAudience = true; - - options.TokenValidationParameters.ValidIssuer = configuration.GetValue(Appsettings.JwtIssuer) ?? throw new Exception($"{Appsettings.JwtIssuer} value not set (appsettings)"); - options.TokenValidationParameters.ValidateIssuer = true; - - options.TokenValidationParameters.IssuerSigningKey = new SymmetricSecurityKey( - Encoding.UTF8.GetBytes(configuration.GetValue(Appsettings.JwtKey) ?? throw new Exception($"{Appsettings.JwtKey} value not set (appsettings)")) - ); - - options.TokenValidationParameters.ValidateIssuerSigningKey = true; - options.TokenValidationParameters.ValidateLifetime = true; - }); - - return services; - } - - public static IServiceCollection AddProxyServices(this IServiceCollection services, IConfiguration configuration) - { - // add before routing - services.Configure(options => - { - options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; - }); - - return services; - } - - public static IServiceCollection AddRoutingServices(this IServiceCollection services, IConfiguration configuration) - { - // add after proxy - services.AddRouting(options => - { - options.LowercaseUrls = true; - }); - - return services; - } - - private static IServiceCollection AddIdentityServices2(this IServiceCollection services, IConfiguration configuration) - { - var identityOptions = new MongoDbIdentityConfiguration - { - MongoDbSettings = new MongoDbSettings - { - ConnectionString = configuration.GetSection("ConnectionStrings:Mongo").Value, - DatabaseName = "insight" - }, - IdentityOptionsAction = options => - { - options.User.RequireUniqueEmail = true; - options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@.-_"; - - options.Password.RequireDigit = false; - options.Password.RequiredLength = 8; - options.Password.RequireNonAlphanumeric = false; - options.Password.RequireUppercase = false; - options.Password.RequireLowercase = false; - - options.SignIn.RequireConfirmedAccount = false; - options.SignIn.RequireConfirmedEmail = false; - options.SignIn.RequireConfirmedPhoneNumber = false; - - options.Lockout.MaxFailedAccessAttempts = 5; - options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5); - } - }; - - services.ConfigureMongoDbIdentity(identityOptions) - .AddDefaultTokenProviders() - .AddSignInManager(); - - return services; - } - - private static IServiceCollection AddIdentityAuthentication(this IServiceCollection services, IConfiguration configuration) - { - services.AddAuthentication(options => - { - //options.DefaultAuthenticateScheme = - }); - //cookieBuilder.ApplicationCookie = builder.AddApplicationCookie(); - //cookieBuilder.ExternalCookie = builder.AddExternalCookie(); - //cookieBuilder.TwoFactorRememberMeCookie = builder.AddTwoFactorRememberMeCookie(); - //cookieBuilder.TwoFactorUserIdCookie = builder.AddTwoFactorUserIdCookie(); - //.AddCookie(options => - //{ - // options. - //}; - //.AddIdentityCookies(); - //.AddCookie(options => - //{ - // // Specify where to redirect un-authenticated users - // options.LoginPath = "/account/login"; - - // // Specify the name of the auth cookie. - // // ASP.NET picks a dumb name by default. - // options.Cookie.Name = "insight"; - //}); - return services; } } \ No newline at end of file diff --git a/src/Core/Insight.Infrastructure/Insight.Infrastructure.csproj b/src/Core/Insight.Infrastructure/Insight.Infrastructure.csproj index 0b326b6..79e2a5e 100644 --- a/src/Core/Insight.Infrastructure/Insight.Infrastructure.csproj +++ b/src/Core/Insight.Infrastructure/Insight.Infrastructure.csproj @@ -1,28 +1,21 @@  - net7.0 + net8.0 + latest + enable + enable Insight.Infrastructure Insight - 2023.12.14.0 - true - enable - - - - none - - - - none + 2023.12.15.0 + none - - + - - + + diff --git a/src/Core/Insight.Infrastructure/Models/TokenOptions.cs b/src/Core/Insight.Infrastructure/Models/TokenOptions.cs deleted file mode 100644 index fb4f6c7..0000000 --- a/src/Core/Insight.Infrastructure/Models/TokenOptions.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace Insight.Infrastructure.Models; - -public class TokenOptions -{ - public string Key { get; set; } - public int Expires { get; set; } - public Uri? Audience { get; set; } - public Uri? Issuer { get; set; } - - public TokenOptions(string key, int expires, Uri? audience = null, Uri? issuer = null) - { - Key = key; - Expires = expires; - Audience = audience; - Issuer = issuer; - } -} \ No newline at end of file diff --git a/src/Core/Insight.Infrastructure/Services/AccountService.cs b/src/Core/Insight.Infrastructure/Services/AccountService.cs deleted file mode 100644 index e70a503..0000000 --- a/src/Core/Insight.Infrastructure/Services/AccountService.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Insight.Infrastructure.Entities; -using Insight.Infrastructure.Models; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Logging; -using MongoDB.Driver; - -namespace Insight.Infrastructure.Services; - -public class AccountService -{ - private readonly IMongoDatabase _database; - private readonly ILogger _logger; - - public AccountService(IMongoDatabase database, ILogger logger) - { - _database = database; - _logger = logger; - } - - public Task> GetAsync( - FilterDefinition? filter = null, - SortDefinition? sort = null, - int offset = 0, - int limit = 10, - CancellationToken cancellationToken = default) => _database.User().GetPagedAsync(filter, sort, offset, limit, cancellationToken); - - public Task> GetAsync( - HttpRequest request, - HttpResponse response, - FilterDefinition? filter = null, - SortDefinition? sort = null, - int offset = 0, - int limit = 10, - CancellationToken cancellationToken = default) => _database.User().GetPagedAsync(request, response, filter, sort, offset, limit, cancellationToken); -} \ No newline at end of file diff --git a/src/Core/Insight.Infrastructure/Services/AgentService.cs b/src/Core/Insight.Infrastructure/Services/AgentService.cs deleted file mode 100644 index f5704e3..0000000 --- a/src/Core/Insight.Infrastructure/Services/AgentService.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Insight.Infrastructure.Entities; -using Insight.Infrastructure.Models; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Logging; -using MongoDB.Driver; - -namespace Insight.Infrastructure.Services; - -public class AgentService -{ - private readonly IMongoDatabase _database; - private readonly ILogger _logger; - - public AgentService(IMongoDatabase database, ILogger logger) - { - _database = database; - _logger = logger; - } - - public Task> GetAsync( - FilterDefinition? filter = null, - SortDefinition? sort = null, - int offset = 0, - int limit = 10, - CancellationToken cancellationToken = default) => _database.Agent().GetPagedAsync(filter, sort, offset, limit, cancellationToken); - - public Task> GetAsync( - HttpRequest request, - HttpResponse response, - FilterDefinition? filter = null, - SortDefinition? sort = null, - int offset = 0, - int limit = 10, - CancellationToken cancellationToken = default) => _database.Agent().GetPagedAsync(request, response, filter, sort, offset, limit, cancellationToken); -} \ No newline at end of file diff --git a/src/Core/Insight.Infrastructure/Services/AuthenticatorService.cs b/src/Core/Insight.Infrastructure/Services/AuthenticatorService.cs index cd08c32..13a40b6 100644 --- a/src/Core/Insight.Infrastructure/Services/AuthenticatorService.cs +++ b/src/Core/Insight.Infrastructure/Services/AuthenticatorService.cs @@ -7,16 +7,9 @@ using System.Text.Encodings.Web; namespace Insight.Infrastructure.Services; -public class AuthenticatorService +public class AuthenticatorService(UserManager userManager) { - private readonly IMongoDatabase _database; - private readonly UserManager _userManager; - - public AuthenticatorService(IMongoDatabase database, UserManager userManager) - { - _database = database; - _userManager = userManager; - } + private readonly UserManager _userManager = userManager; public async Task GetStatusAsync(InsightUser user) { @@ -79,7 +72,7 @@ public class AuthenticatorService return await _userManager.GenerateNewTwoFactorRecoveryCodesAsync(user, count).ConfigureAwait(false); } - public string GenerateQrCode(string email, string unformattedKey) + public static string GenerateQrCode(string email, string unformattedKey) { var encoder = UrlEncoder.Default; diff --git a/src/Core/Insight.Infrastructure/Services/CustomerService.cs b/src/Core/Insight.Infrastructure/Services/CustomerService.cs deleted file mode 100644 index fd22db3..0000000 --- a/src/Core/Insight.Infrastructure/Services/CustomerService.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Insight.Infrastructure.Entities; -using Insight.Infrastructure.Models; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Logging; -using MongoDB.Driver; - -namespace Insight.Infrastructure.Services; - -public class CustomerService -{ - private readonly IMongoDatabase _database; - private readonly ILogger _logger; - - public CustomerService(IMongoDatabase database, ILogger logger) - { - _database = database; - _logger = logger; - } - - public Task> GetAsync( - FilterDefinition? filter = null, - SortDefinition? sort = null, - int offset = 0, - int limit = 10, - CancellationToken cancellationToken = default) => _database.Customer().GetPagedAsync(filter, sort, offset, limit, cancellationToken); - - public Task> GetAsync( - HttpRequest request, - HttpResponse response, - FilterDefinition? filter = null, - SortDefinition? sort = null, - int offset = 0, - int limit = 10, - CancellationToken cancellationToken = default) => _database.Customer().GetPagedAsync(request, response, filter, sort, offset, limit, cancellationToken); -} \ No newline at end of file diff --git a/src/Core/Insight.Infrastructure/Services/HostService.cs b/src/Core/Insight.Infrastructure/Services/HostService.cs deleted file mode 100644 index 756e21e..0000000 --- a/src/Core/Insight.Infrastructure/Services/HostService.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Insight.Infrastructure.Entities; -using Insight.Infrastructure.Models; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Logging; -using MongoDB.Driver; - -namespace Insight.Infrastructure.Services; - -public class HostService -{ - private readonly IMongoDatabase _database; - private readonly ILogger _logger; - - public HostService(IMongoDatabase database, ILogger logger) - { - _database = database; - _logger = logger; - } - - public Task> GetAsync( - FilterDefinition? filter = null, - SortDefinition? sort = null, - int offset = 0, - int limit = 10, - CancellationToken cancellationToken = default) => _database.Host().GetPagedAsync(filter, sort, offset, limit, cancellationToken); - - public Task> GetAsync( - HttpRequest request, - HttpResponse response, - FilterDefinition? filter = null, - SortDefinition? sort = null, - int offset = 0, - int limit = 10, - CancellationToken cancellationToken = default) => _database.Host().GetPagedAsync(request, response, filter, sort, offset, limit, cancellationToken); -} \ No newline at end of file diff --git a/src/Core/Insight.Infrastructure/Services/IdentityService.cs b/src/Core/Insight.Infrastructure/Services/IdentityService.cs index cc266b5..90d935a 100644 --- a/src/Core/Insight.Infrastructure/Services/IdentityService.cs +++ b/src/Core/Insight.Infrastructure/Services/IdentityService.cs @@ -5,18 +5,10 @@ using System.Security.Claims; namespace Insight.Infrastructure.Services; -public class IdentityService +public class IdentityService(UserManager userManager, RoleManager roleManager) { - private readonly UserManager _userManager; - private readonly RoleManager _roleManager; - private readonly ILogger _logger; - - public IdentityService(UserManager userManager, RoleManager roleManager, ILogger logger) - { - _userManager = userManager; - _roleManager = roleManager; - _logger = logger; - } + private readonly UserManager _userManager = userManager; + private readonly RoleManager _roleManager = roleManager; public async Task SeedAsync() { diff --git a/src/Core/Insight.Infrastructure/Services/InventoryService.cs b/src/Core/Insight.Infrastructure/Services/InventoryService.cs deleted file mode 100644 index fd0235d..0000000 --- a/src/Core/Insight.Infrastructure/Services/InventoryService.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Insight.Infrastructure.Entities; -using Insight.Infrastructure.Models; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Logging; -using MongoDB.Driver; - -namespace Insight.Infrastructure.Services; - -public class InventoryService -{ - private readonly IMongoDatabase _database; - private readonly ILogger _logger; - - public InventoryService(IMongoDatabase database, ILogger logger) - { - _database = database; - _logger = logger; - } - - public Task> GetAsync( - FilterDefinition? filter = null, - SortDefinition? sort = null, - int offset = 0, - int limit = 10, - CancellationToken cancellationToken = default) => _database.HostApplication().GetPagedAsync(filter, sort, offset, limit, cancellationToken); - - public Task> GetAsync( - HttpRequest request, - HttpResponse response, - FilterDefinition? filter = null, - SortDefinition? sort = null, - int offset = 0, - int limit = 10, - CancellationToken cancellationToken = default) => _database.HostApplication().GetPagedAsync(request, response, filter, sort, offset, limit, cancellationToken); -} \ No newline at end of file diff --git a/src/Remote/Insight.Remote.Shared/Insight.Remote.Shared.csproj b/src/Remote/Insight.Remote.Shared/Insight.Remote.Shared.csproj index e36fbc0..3a81496 100644 --- a/src/Remote/Insight.Remote.Shared/Insight.Remote.Shared.csproj +++ b/src/Remote/Insight.Remote.Shared/Insight.Remote.Shared.csproj @@ -1,20 +1,22 @@  - net7.0 + net8.0 + latest Insight.Remote.Shared Insight Insight.Remote.Shared - 2023.12.14.0 + 2023.12.15.0 enable enable True True + none - + diff --git a/src/Remote/Insight.Remote.Shared/Models/CursorInfo.cs b/src/Remote/Insight.Remote.Shared/Models/CursorInfo.cs index 9a63e5e..4f63772 100644 --- a/src/Remote/Insight.Remote.Shared/Models/CursorInfo.cs +++ b/src/Remote/Insight.Remote.Shared/Models/CursorInfo.cs @@ -2,16 +2,9 @@ namespace Insight.Remote.Shared.Models; -public class CursorInfo +public class CursorInfo(byte[] imageBytes, Point hotspot, string cssOverride = "") { - public byte[] ImageBytes { get; set; } - public Point HotSpot { get; set; } - public string CssOverride { get; set; } - - public CursorInfo(byte[] imageBytes, Point hotspot, string cssOverride = "") - { - ImageBytes = imageBytes; - HotSpot = hotspot; - CssOverride = cssOverride; - } + public byte[] ImageBytes { get; set; } = imageBytes; + public Point HotSpot { get; set; } = hotspot; + public string CssOverride { get; set; } = cssOverride; } \ No newline at end of file diff --git a/src/Remote/Insight.Remote.Shared/Models/SentFrame.cs b/src/Remote/Insight.Remote.Shared/Models/SentFrame.cs index fdfe88f..fd4c12d 100644 --- a/src/Remote/Insight.Remote.Shared/Models/SentFrame.cs +++ b/src/Remote/Insight.Remote.Shared/Models/SentFrame.cs @@ -1,13 +1,7 @@ namespace Insight.Remote.Shared.Models; -public readonly struct SentFrame +public readonly struct SentFrame(int frameSize, DateTimeOffset timestamp) { - public SentFrame(int frameSize, DateTimeOffset timestamp) - { - FrameSize = frameSize; - Timestamp = timestamp; - } - - public DateTimeOffset Timestamp { get; } - public int FrameSize { get; } + public DateTimeOffset Timestamp { get; } = timestamp; + public int FrameSize { get; } = frameSize; } diff --git a/src/Remote/Insight.Remote.Shared/Native/Windows/SECUR32.cs b/src/Remote/Insight.Remote.Shared/Native/Windows/SECUR32.cs index e96f0dc..aad373d 100644 --- a/src/Remote/Insight.Remote.Shared/Native/Windows/SECUR32.cs +++ b/src/Remote/Insight.Remote.Shared/Native/Windows/SECUR32.cs @@ -235,7 +235,7 @@ public static class SECUR32 MaxTokenInfoClass } [StructLayout(LayoutKind.Sequential)] - public struct QUOTA_LIMITS + public readonly struct QUOTA_LIMITS { readonly UInt32 PagedPoolLimit; readonly UInt32 NonPagedPoolLimit; diff --git a/src/Remote/Insight.Remote.Shared/Network/Handlers/RemoteHandler.cs b/src/Remote/Insight.Remote.Shared/Network/Handlers/RemoteHandler.cs index dd59d99..1b078d7 100644 --- a/src/Remote/Insight.Remote.Shared/Network/Handlers/RemoteHandler.cs +++ b/src/Remote/Insight.Remote.Shared/Network/Handlers/RemoteHandler.cs @@ -9,18 +9,11 @@ using Vaitr.Bus; namespace Insight.Remote.Shared.Network.Handlers; -public class RemoteHandler : IMessageHandler +public class RemoteHandler(Bus bus, Streamer streamer, ILogger logger) : IMessageHandler { - private readonly Bus _bus; - private readonly Streamer _streamer; - private readonly ILogger _logger; - - public RemoteHandler(Bus bus, Streamer streamer, ILogger logger) - { - _bus = bus; - _streamer = streamer; - _logger = logger; - } + private readonly Bus _bus = bus; + private readonly Streamer _streamer = streamer; + private readonly ILogger _logger = logger; public async ValueTask HandleAsync(RemoteSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -48,16 +41,18 @@ public class RemoteHandler : IMessageHandler private async Task OnSessionResponse(RemoteSession session, RemoteSessionResponse sessionResponse, CancellationToken cancellationToken) { - _logger.LogInformation($"Remote {session.Id} => SessionResponse"); + if (session.Id is not string sessionId) return; + + _logger.LogInformation("Remote {session} => SessionResponse", sessionId); session.Id = sessionResponse.SessionId; - await _bus.PublishAsync(new IdentityChanged(session.Id)); + await _bus.PublishAsync(new IdentityChanged(sessionId), cancellationToken); } private async Task OnCastRequest(RemoteSession session, CastRequest castRequest, CancellationToken cancellationToken) { - _logger.LogInformation($"Remote {session.Id} => CastRequest"); + _logger.LogInformation("Remote {session.Id} => CastRequest", session.Id); //if (request.RequesterName is null || request.ConnectionId is null) return; @@ -105,7 +100,7 @@ public class RemoteHandler : IMessageHandler } catch (Exception ex) { - _logger.LogError(ex.Message); + _logger.LogError("{exception}", ex.Message); } //DesktopStream? viewer = _viewerPool.Values.FirstOrDefault(p => p.ConnectionId == request.ConnectionId); @@ -121,7 +116,7 @@ public class RemoteHandler : IMessageHandler private async Task OnCastAbort(RemoteSession session, CastAbort castAbort, CancellationToken cancellationToken) { - _logger.LogInformation($"Remote {session.Id} => CastAbort"); + _logger.LogInformation("Remote {session} => CastAbort", session.Id); await _streamer.CancelAsync(castAbort, cancellationToken); } @@ -148,7 +143,7 @@ public class RemoteHandler : IMessageHandler } catch (Exception ex) { - _logger.LogError(ex.ToString()); + _logger.LogError("{exception}", ex.ToString()); } } } \ No newline at end of file diff --git a/src/Remote/Insight.Remote.Shared/Network/RemoteSession.cs b/src/Remote/Insight.Remote.Shared/Network/RemoteSession.cs index 181ac6c..024369d 100644 --- a/src/Remote/Insight.Remote.Shared/Network/RemoteSession.cs +++ b/src/Remote/Insight.Remote.Shared/Network/RemoteSession.cs @@ -4,26 +4,23 @@ using Insight.Domain.Network; using Insight.Domain.Network.Remote.Messages; using Insight.Remote.Shared.Messages; using Microsoft.Extensions.Logging; -using System.ServiceProcess; using Vaitr.Bus; using Vaitr.Network; namespace Insight.Remote.Shared.Network; -public class RemoteSession : TcpSession +public class RemoteSession( + Bus bus, + IEnumerable> handlers, + ISerializer serializer, + ILogger logger) : TcpSession(serializer, logger) { public string? Id { get; set; } public string? AccessKey { get; set; } public RemoteControlMode Mode { get; } = RunningAsService() ? RemoteControlMode.Unattended : RemoteControlMode.Attended; - private readonly Bus _bus; - private readonly IEnumerable> _handlers; - - public RemoteSession(Bus bus, IEnumerable> handlers, ISerializer serializer, ILogger logger) : base(serializer, logger) - { - _bus = bus; - _handlers = handlers; - } + private readonly Bus _bus = bus; + private readonly IEnumerable> _handlers = handlers; protected override async ValueTask OnConnectedAsync(CancellationToken cancellationToken) { @@ -45,9 +42,10 @@ public class RemoteSession : TcpSession await _bus.PublishAsync(new ConnectionStateChanged(ConnectionState.Disconnected)); } - protected override async ValueTask OnSentAsync(IPacketContext context, CancellationToken cancellationToken) + protected override ValueTask OnSentAsync(IPacketContext context, CancellationToken cancellationToken) { //await base.OnSentAsync(context, cancellationToken); + return default; } protected override async ValueTask OnReceivedAsync(IPacketContext context, CancellationToken cancellationToken) @@ -67,12 +65,14 @@ public class RemoteSession : TcpSession } } - protected override async ValueTask OnHeartbeatAsync(CancellationToken cancellationToken) + protected override ValueTask OnHeartbeatAsync(CancellationToken cancellationToken) { _logger.LogInformation("Remote ({ep?}) Heartbeat", RemoteEndPoint); + + return default; } - private async ValueTask OnWindowsSessionSwitchedAsync(WindowsSessionSwitched message, CancellationToken cancellationToken) + private ValueTask OnWindowsSessionSwitchedAsync(WindowsSessionSwitched message, CancellationToken cancellationToken) { try { @@ -80,23 +80,24 @@ public class RemoteSession : TcpSession } catch (Exception ex) { - _logger.LogError(ex.Message); + _logger.LogError("{exception}", ex.Message); } + + return default; } - private async ValueTask OnWindowsSessionEndingAsync(WindowsSessionEnding message, CancellationToken cancellationToken) + private static ValueTask OnWindowsSessionEndingAsync(WindowsSessionEnding message, CancellationToken cancellationToken) { //await DisconnectViewersAsync(); + return default; } private static bool RunningAsService() { - return false; - - if (OperatingSystem.IsWindows()) - { - return ServiceController.GetServices().Any(serviceController => serviceController.ServiceName.Equals("remotecontrol")); - } + //if (OperatingSystem.IsWindows()) + //{ + // return ServiceController.GetServices().Any(serviceController => serviceController.ServiceName.Equals("remotecontrol")); + //} return false; } diff --git a/src/Remote/Insight.Remote.Shared/Services/Runtime.cs b/src/Remote/Insight.Remote.Shared/Services/Runtime.cs index 5715875..2022385 100644 --- a/src/Remote/Insight.Remote.Shared/Services/Runtime.cs +++ b/src/Remote/Insight.Remote.Shared/Services/Runtime.cs @@ -10,7 +10,7 @@ public class Runtime : IHostedService private readonly CancellationTokenSource _cts = new(); private Task? _desktopTask; - private Thread? _uiThread; + private readonly Thread? _uiThread; private readonly IDesktopApp _desktopApp; private readonly IDispatcher _dispatcher; @@ -31,20 +31,21 @@ public class Runtime : IHostedService _lifetime.ApplicationStopping.Register(_cts.Cancel); } - public async Task StartAsync(CancellationToken cancellationToken) + public Task StartAsync(CancellationToken cancellationToken) { // init app (os specific providers) _desktopTask = _desktopApp.InitAsync(RemoteControlMode.Attended, _cts.Token); - // init dispatcher - if (false) // if mode is attended (interactive) - { - // init ui thread - _uiThread = await _dispatcher.RunAsync(_cts.Token); - } + // init ui dispatcher / if mode is attended (interactive) + //if (true) + //{ + // _uiThread = await _dispatcher.RunAsync(_cts.Token); + //} // todo // report unattended accesskey to api ($"https://localhost:7024?mode=Unattended&sessionId={appState.SessionId}&accessKey={appState.AccessKey}") + + return Task.CompletedTask; } public async Task StopAsync(CancellationToken cancellationToken) diff --git a/src/Remote/Insight.Remote.Shared/Services/Streamer.cs b/src/Remote/Insight.Remote.Shared/Services/Streamer.cs index 0f218a2..1c8821f 100644 --- a/src/Remote/Insight.Remote.Shared/Services/Streamer.cs +++ b/src/Remote/Insight.Remote.Shared/Services/Streamer.cs @@ -14,7 +14,16 @@ using Vaitr.Network; namespace Insight.Remote.Shared.Services; -public class Streamer : IDisposable +public class Streamer( + Bus bus, + ISessionPool remotePool, + IFileProvider fileProvider, + IClipboardProvider clipboardProvider, + IAudioProvider audioProvider, + IInputProvider inputProvider, + ICursorProvider cursorProvider, + IScreenProvider screenProvider, + ILogger logger) : IDisposable { public int ImageQuality { get; set; } = 50; public bool HasControl { get; set; } = true; @@ -34,37 +43,15 @@ public class Streamer : IDisposable private readonly ConcurrentQueue _fpsQueue = new(); private readonly ConcurrentQueue _sentFrames = new(); - private readonly Bus _bus; - private readonly ISessionPool _remotePool; - private readonly IFileProvider _fileProvider; - private readonly IClipboardProvider _clipboardProvider; - private readonly IAudioProvider _audioProvider; - private readonly IInputProvider _inputProvider; - private readonly ICursorProvider _cursorProvider; - private readonly IScreenProvider _screenProvider; - private readonly ILogger _logger; - - public Streamer( - Bus bus, - ISessionPool remotePool, - IFileProvider fileProvider, - IClipboardProvider clipboardProvider, - IAudioProvider audioProvider, - IInputProvider inputProvider, - ICursorProvider cursorProvider, - IScreenProvider screenProvider, - ILogger logger) - { - _bus = bus; - _remotePool = remotePool; - _fileProvider = fileProvider; - _clipboardProvider = clipboardProvider; - _audioProvider = audioProvider; - _inputProvider = inputProvider; - _cursorProvider = cursorProvider; - _screenProvider = screenProvider; - _logger = logger; - } + private readonly Bus _bus = bus; + private readonly ISessionPool _remotePool = remotePool; + private readonly IFileProvider _fileProvider = fileProvider; + private readonly IClipboardProvider _clipboardProvider = clipboardProvider; + private readonly IAudioProvider _audioProvider = audioProvider; + private readonly IInputProvider _inputProvider = inputProvider; + private readonly ICursorProvider _cursorProvider = cursorProvider; + private readonly IScreenProvider _screenProvider = screenProvider; + private readonly ILogger _logger = logger; public async Task InitAsync(CastRequest request, CancellationToken cancellationToken) { @@ -108,7 +95,7 @@ public class Streamer : IDisposable catch (OperationCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.Message); + _logger.LogError("{exception}", ex.Message); } finally { @@ -260,7 +247,7 @@ public class Streamer : IDisposable { var cursor = await _cursorProvider.GetAsync(cancellationToken); if (cursor is null || cursor == cacheCursor) continue; - + cursor.Id = remoteSession.Id; await remoteSession.SendAsync(cursor, cancellationToken); @@ -268,7 +255,7 @@ public class Streamer : IDisposable } catch (Exception ex) { - + _logger.LogError("{exception}", ex.Message); } finally { @@ -331,15 +318,20 @@ public class Streamer : IDisposable // } //} - public async Task CancelAsync(CastAbort castAbort, CancellationToken cancellationToken) + public Task CancelAsync(CastAbort castAbort, CancellationToken cancellationToken) { _cts?.Cancel(); + return Task.CompletedTask; } - public async Task FrameReceivedAsync(CastScreenReceived screenDataReceived, CancellationToken cancellationToken) + public Task FrameReceivedAsync(CastScreenReceived screenDataReceived, CancellationToken cancellationToken) { + if (screenDataReceived.Timestamp is null) return Task.CompletedTask; + _lastFrameReceived = screenDataReceived.Timestamp.Value.ToLocalTime(); _framesSentSinceLastReceipt = 0; + + return Task.CompletedTask; } public async Task CursorReceivedAsync(CastCursorReceived cursorCallbackData, CancellationToken cancellationToken) diff --git a/src/Remote/Insight.Remote.Windows/Insight.Remote.Windows.csproj b/src/Remote/Insight.Remote.Windows/Insight.Remote.Windows.csproj index 3ec6630..96a02c5 100644 --- a/src/Remote/Insight.Remote.Windows/Insight.Remote.Windows.csproj +++ b/src/Remote/Insight.Remote.Windows/Insight.Remote.Windows.csproj @@ -2,7 +2,8 @@ Exe - net7.0-windows + net8.0-windows + latest true true Remote Control @@ -12,10 +13,11 @@ enable enable True + none - + diff --git a/src/Remote/Insight.Remote.Windows/Models/DirectXOutput.cs b/src/Remote/Insight.Remote.Windows/Models/DirectXOutput.cs index ccec816..d38ac8a 100644 --- a/src/Remote/Insight.Remote.Windows/Models/DirectXOutput.cs +++ b/src/Remote/Insight.Remote.Windows/Models/DirectXOutput.cs @@ -4,28 +4,18 @@ using SharpDX.DXGI; namespace Insight.Remote.Windows.Models; -public class DirectXOutput : IDisposable +public class DirectXOutput(Adapter1 adapter, + SharpDX.Direct3D11.Device device, + OutputDuplication outputDuplication, + Texture2D texture2D, + DisplayModeRotation rotation) : IDisposable { - public DirectXOutput(Adapter1 adapter, - SharpDX.Direct3D11.Device device, - OutputDuplication outputDuplication, - Texture2D texture2D, - DisplayModeRotation rotation) - { - Adapter = adapter; - Device = device; - OutputDuplication = outputDuplication; - Texture2D = texture2D; - Rotation = rotation; - Bounds = new Rectangle(0, 0, texture2D.Description.Width, texture2D.Description.Height); - } - - public Adapter1 Adapter { get; } - public Rectangle Bounds { get; set; } - public SharpDX.Direct3D11.Device Device { get; } - public OutputDuplication OutputDuplication { get; } - public DisplayModeRotation Rotation { get; } - public Texture2D Texture2D { get; } + public Adapter1 Adapter { get; } = adapter; + public Rectangle Bounds { get; set; } = new Rectangle(0, 0, texture2D.Description.Width, texture2D.Description.Height); + public SharpDX.Direct3D11.Device Device { get; } = device; + public OutputDuplication OutputDuplication { get; } = outputDuplication; + public DisplayModeRotation Rotation { get; } = rotation; + public Texture2D Texture2D { get; } = texture2D; public void Dispose() { diff --git a/src/Remote/Insight.Remote.Windows/Services/WinApp.cs b/src/Remote/Insight.Remote.Windows/Services/WinApp.cs index 2fd5ac8..ff592c9 100644 --- a/src/Remote/Insight.Remote.Windows/Services/WinApp.cs +++ b/src/Remote/Insight.Remote.Windows/Services/WinApp.cs @@ -9,44 +9,33 @@ using Microsoft.Extensions.Logging; using Microsoft.Win32; using System.Collections.Concurrent; using System.Diagnostics; -using System.Windows; +using System.Runtime.Versioning; using Vaitr.Bus; namespace Insight.Remote.Windows.Services; -internal class WinApp : IDesktopApp +[SupportedOSPlatform("windows")] +internal class WinApp( + IInputProvider inputProvider, + ICursorProvider cursorProvider, + IAudioProvider audioProvider, + IClipboardProvider clipboardProvider, + IDispatcher dispatcher, + MainViewModel mainViewModel, + Bus bus, + ILogger logger) : IDesktopApp { private MainWindow? _mainWindow; private bool _disposed; - private readonly IInputProvider _inputProvider; - private readonly ICursorProvider _cursorProvider; - private readonly IAudioProvider _audioProvider; - private readonly IClipboardProvider _clipboardProvider; - private readonly IDispatcher _dispatcher; - private readonly MainViewModel _maiViewModel; - private readonly Bus _bus; - private readonly ILogger _logger; - - public WinApp( - IInputProvider inputProvider, - ICursorProvider cursorProvider, - IAudioProvider audioProvider, - IClipboardProvider clipboardProvider, - IDispatcher dispatcher, - MainViewModel mainViewModel, - Bus bus, - ILogger logger) - { - _inputProvider = inputProvider; - _cursorProvider = cursorProvider; - _audioProvider = audioProvider; - _clipboardProvider = clipboardProvider; - _dispatcher = dispatcher; - _maiViewModel = mainViewModel; - _bus = bus; - _logger = logger; - } + private readonly IInputProvider _inputProvider = inputProvider; + private readonly ICursorProvider _cursorProvider = cursorProvider; + private readonly IAudioProvider _audioProvider = audioProvider; + private readonly IClipboardProvider _clipboardProvider = clipboardProvider; + private readonly IDispatcher _dispatcher = dispatcher; + private readonly MainViewModel _maiViewModel = mainViewModel; + private readonly Bus _bus = bus; + private readonly ILogger _logger = logger; public async Task InitAsync(RemoteControlMode mode, CancellationToken cancellationToken) { @@ -100,7 +89,7 @@ internal class WinApp : IDesktopApp catch (TaskCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.Message); + _logger.LogError("{exception}", ex.Message); } } } @@ -143,7 +132,7 @@ internal class WinApp : IDesktopApp catch (TaskCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.Message); + _logger.LogError("{exception}", ex.Message); } } @@ -153,26 +142,21 @@ internal class WinApp : IDesktopApp private async ValueTask OnCastRequestAsync(CastRequest request, CancellationToken cancellationToken) { - if (true) // test - { - await _bus.PublishAsync(new CastRequestDemand(request, true), cancellationToken); - return; - } + // test (bypass) + //if (request.Mode != RemoteControlMode.Unattended) + //{ + // var result = await _dispatcher.InvokeAsync(() => + // { + // return System.Windows.MessageBox.Show($"Accept connection request from {request.RequesterName}?", "Connection Request", + // MessageBoxButton.YesNo, + // MessageBoxImage.Question); + // }, cancellationToken); - if (request.Mode != RemoteControlMode.Unattended) - { - var result = await _dispatcher.InvokeAsync(() => - { - return System.Windows.MessageBox.Show($"Accept connection request from {request.RequesterName}?", "Connection Request", - MessageBoxButton.YesNo, - MessageBoxImage.Question); - }, cancellationToken); - - switch (result) - { - case MessageBoxResult.No: await _bus.PublishAsync(new CastRequestDemand(request, false), cancellationToken); return; - } - } + // switch (result) + // { + // case MessageBoxResult.No: await _bus.PublishAsync(new CastRequestDemand(request, false), cancellationToken); return; + // } + //} await _bus.PublishAsync(new CastRequestDemand(request, true), cancellationToken); } diff --git a/src/Remote/Insight.Remote.Windows/Services/WinAudioProvider.cs b/src/Remote/Insight.Remote.Windows/Services/WinAudioProvider.cs index e5f2079..3b3f13e 100644 --- a/src/Remote/Insight.Remote.Windows/Services/WinAudioProvider.cs +++ b/src/Remote/Insight.Remote.Windows/Services/WinAudioProvider.cs @@ -7,19 +7,13 @@ using Vaitr.Bus; namespace Insight.Remote.Windows.Services; -internal class WinAudioProvider : IAudioProvider +internal class WinAudioProvider(Bus bus, ILogger logger) : IAudioProvider { private WasapiLoopbackCapture? _capturer; private WaveFormat? _targetFormat; - private readonly Bus _bus; - private readonly ILogger _logger; - - public WinAudioProvider(Bus bus, ILogger logger) - { - _bus = bus; - _logger = logger; - } + private readonly Bus _bus = bus; + private readonly ILogger _logger = logger; public async Task InitAsync(CancellationToken cancellationToken) { diff --git a/src/Remote/Insight.Remote.Windows/Services/WinClipboardProvider.cs b/src/Remote/Insight.Remote.Windows/Services/WinClipboardProvider.cs index e212e47..58991cc 100644 --- a/src/Remote/Insight.Remote.Windows/Services/WinClipboardProvider.cs +++ b/src/Remote/Insight.Remote.Windows/Services/WinClipboardProvider.cs @@ -8,18 +8,12 @@ using Clipboard = System.Windows.Clipboard; namespace Insight.Remote.Windows.Services; -internal class WinClipboardProvider : IClipboardProvider +internal class WinClipboardProvider(Bus bus, ILogger logger) : IClipboardProvider { private readonly ConcurrentQueue _setQueue = new(); - private readonly Bus _bus; - private readonly ILogger _logger; - - public WinClipboardProvider(Bus bus, ILogger logger) - { - _bus = bus; - _logger = logger; - } + private readonly Bus _bus = bus; + private readonly ILogger _logger = logger; public async Task InitAsync(CancellationToken cancellationToken) { @@ -79,7 +73,7 @@ internal class WinClipboardProvider : IClipboardProvider catch (TaskCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.Message); + _logger.LogError("{exception}", ex.Message); } } } diff --git a/src/Remote/Insight.Remote.Windows/Services/WinCursorProvider.cs b/src/Remote/Insight.Remote.Windows/Services/WinCursorProvider.cs index 047dae2..57ac63a 100644 --- a/src/Remote/Insight.Remote.Windows/Services/WinCursorProvider.cs +++ b/src/Remote/Insight.Remote.Windows/Services/WinCursorProvider.cs @@ -8,20 +8,15 @@ using System.Runtime.InteropServices; namespace Insight.Remote.Windows.Services; -internal class WinCursorProvider : ICursorProvider +internal class WinCursorProvider(ILogger logger) : ICursorProvider { private readonly SemaphoreSlim _semaphore = new(1, 1); - private readonly ILogger _logger; + private readonly ILogger _logger = logger; private User32.CursorInfo _cursor = new(); private CastCursor _lastCursor = new(); private nint _lastHandle = 0; - private byte[] _lastIconBytes = Array.Empty(); - - public WinCursorProvider(ILogger logger) - { - _logger = logger; - } + private byte[] _lastIconBytes = []; public async Task GetAsync(CancellationToken cancellationToken) { @@ -73,7 +68,7 @@ internal class WinCursorProvider : ICursorProvider } catch (Exception ex) { - _logger.LogError(ex.Message); + _logger.LogError("{exception}", ex.Message); return null; } finally @@ -92,10 +87,10 @@ internal class WinCursorProvider : ICursorProvider User32.SetCursorPos(x, y); } - catch (TaskCanceledException) { } + catch (OperationCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.Message); + _logger.LogError("{exception}", ex.Message); } finally { @@ -107,6 +102,6 @@ internal class WinCursorProvider : ICursorProvider { X = 0, Y = 0, - Icon = Array.Empty() + Icon = [] }; } \ No newline at end of file diff --git a/src/Remote/Insight.Remote.Windows/Services/WinDispatcher.cs b/src/Remote/Insight.Remote.Windows/Services/WinDispatcher.cs index 58a2f29..cf37691 100644 --- a/src/Remote/Insight.Remote.Windows/Services/WinDispatcher.cs +++ b/src/Remote/Insight.Remote.Windows/Services/WinDispatcher.cs @@ -6,20 +6,14 @@ using Application = System.Windows.Application; namespace Insight.Remote.Windows.Services; -internal class WinDispatcher : IDispatcher +internal class WinDispatcher(IHostApplicationLifetime lifetime, ILogger logger) : IDispatcher { private Application? _app; private readonly ManualResetEvent _appSignal = new(false); - private readonly IHostApplicationLifetime _lifetime; - private readonly ILogger _logger; - - public WinDispatcher(IHostApplicationLifetime lifetime, ILogger logger) - { - _lifetime = lifetime; - _logger = logger; - } + private readonly IHostApplicationLifetime _lifetime = lifetime; + private readonly ILogger _logger = logger; public async Task RunAsync(CancellationToken cancellationToken) { @@ -56,7 +50,7 @@ internal class WinDispatcher : IDispatcher catch (TaskCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.Message); + _logger.LogError("{exception}", ex.Message); } } diff --git a/src/Remote/Insight.Remote.Windows/Services/WinFileProvider.cs b/src/Remote/Insight.Remote.Windows/Services/WinFileProvider.cs index 7c0f5a2..a5bf732 100644 --- a/src/Remote/Insight.Remote.Windows/Services/WinFileProvider.cs +++ b/src/Remote/Insight.Remote.Windows/Services/WinFileProvider.cs @@ -5,6 +5,7 @@ using Microsoft.Extensions.Logging; using System.Collections.Concurrent; using System.Diagnostics; using System.IO; +using System.Runtime.Versioning; using System.Security.AccessControl; using System.Security.Principal; using System.Windows; @@ -12,17 +13,13 @@ using MessageBoxOptions = System.Windows.MessageBoxOptions; namespace Insight.Remote.Windows.Services; -internal class WinFileProvider : IFileProvider +[SupportedOSPlatform("windows")] +internal class WinFileProvider(ILogger logger) : IFileProvider { private static MessageBoxResult? _result; private static readonly ConcurrentDictionary _partialTransfers = new(); private static readonly SemaphoreSlim _writeLock = new(1, 1); - private readonly ILogger _logger; - - public WinFileProvider(ILogger logger) - { - _logger = logger; - } + private readonly ILogger _logger = logger; public string GetBaseDirectory() { @@ -89,7 +86,7 @@ internal class WinFileProvider : IFileProvider } } - public async Task UploadFile(FileUpload fileUpload, Streamer viewer, Action progressUpdateCallback, CancellationToken cancelToken) + public Task UploadFile(FileUpload fileUpload, Streamer viewer, Action progressUpdateCallback, CancellationToken cancelToken) { try { @@ -99,9 +96,11 @@ internal class WinFileProvider : IFileProvider { _logger.LogError(ex, "Error while uploading file."); } + + return Task.CompletedTask; } - private void SetFileOrFolderPermissions(string path) + private static void SetFileOrFolderPermissions(string path) { FileSystemSecurity ds; diff --git a/src/Remote/Insight.Remote.Windows/Services/WinInputProvider.cs b/src/Remote/Insight.Remote.Windows/Services/WinInputProvider.cs index ac325c9..69dedd4 100644 --- a/src/Remote/Insight.Remote.Windows/Services/WinInputProvider.cs +++ b/src/Remote/Insight.Remote.Windows/Services/WinInputProvider.cs @@ -6,20 +6,14 @@ using System.Threading.Channels; namespace Insight.Remote.Windows.Services; -internal class WinInputProvider : IInputProvider +internal class WinInputProvider(IScreenProvider screenProvider, ILogger logger) : IInputProvider { private volatile bool _inputBlocked; private readonly Channel _inputs = Channel.CreateUnbounded(new UnboundedChannelOptions { AllowSynchronousContinuations = false }); - private readonly IScreenProvider _screenProvider; - private readonly ILogger _logger; - - public WinInputProvider(IScreenProvider screenProvider, ILogger logger) - { - _screenProvider = screenProvider; - _logger = logger; - } + private readonly IScreenProvider _screenProvider = screenProvider; + private readonly ILogger _logger = logger; public async Task InitAsync(CancellationToken cancellationToken) { @@ -31,10 +25,10 @@ internal class WinInputProvider : IInputProvider await Task.Delay(1000, cancellationToken); } } - catch (TaskCanceledException) { } + catch (OperationCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.ToString()); + _logger.LogError("{exception}", ex.ToString()); } } @@ -68,7 +62,7 @@ internal class WinInputProvider : IInputProvider catch (OperationCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.Message); + _logger.LogError("{exception}", ex.Message); } } @@ -83,10 +77,10 @@ internal class WinInputProvider : IInputProvider { await semaphore.WaitAsync(cancellationToken); } - catch (TaskCanceledException) { } + catch (OperationCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.ToString()); + _logger.LogError("{exception}", ex.ToString()); } } @@ -110,13 +104,13 @@ internal class WinInputProvider : IInputProvider }; var input = new User32.INPUT() { type = User32.InputType.KEYBOARD, U = union }; - _ = User32.SendInput(1, new User32.INPUT[] { input }, User32.INPUT.Size); + _ = User32.SendInput(1, [input], User32.INPUT.Size); }, cancellationToken); } - catch (TaskCanceledException) { } + catch (OperationCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.ToString()); + _logger.LogError("{exception}", ex.ToString()); } } @@ -140,13 +134,13 @@ internal class WinInputProvider : IInputProvider } }; var input = new User32.INPUT() { type = User32.InputType.KEYBOARD, U = union }; - _ = User32.SendInput(1, new User32.INPUT[] { input }, User32.INPUT.Size); + _ = User32.SendInput(1, [input], User32.INPUT.Size); }, cancellationToken); } - catch (TaskCanceledException) { } + catch (OperationCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.ToString()); + _logger.LogError("{exception}", ex.ToString()); } } @@ -209,13 +203,13 @@ internal class WinInputProvider : IInputProvider var normalizedY = xyPercent.Item2 * 65535D; var union = new User32.InputUnion() { mi = new User32.MOUSEINPUT() { dwFlags = User32.MOUSEEVENTF.ABSOLUTE | mouseEvent | User32.MOUSEEVENTF.VIRTUALDESK, dx = (int)normalizedX, dy = (int)normalizedY, time = 0, mouseData = 0, dwExtraInfo = User32.GetMessageExtraInfo() } }; var input = new User32.INPUT() { type = User32.InputType.MOUSE, U = union }; - _ = User32.SendInput(1, new User32.INPUT[] { input }, User32.INPUT.Size); + _ = User32.SendInput(1, [input], User32.INPUT.Size); }, cancellationToken); } - catch (TaskCanceledException) { } + catch (OperationCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.ToString()); + _logger.LogError("{exception}", ex.ToString()); } } @@ -231,13 +225,13 @@ internal class WinInputProvider : IInputProvider var normalizedY = xyPercent.Item2 * 65535D; var union = new User32.InputUnion() { mi = new User32.MOUSEINPUT() { dwFlags = User32.MOUSEEVENTF.ABSOLUTE | User32.MOUSEEVENTF.MOVE | User32.MOUSEEVENTF.VIRTUALDESK, dx = (int)normalizedX, dy = (int)normalizedY, time = 0, mouseData = 0, dwExtraInfo = User32.GetMessageExtraInfo() } }; var input = new User32.INPUT() { type = User32.InputType.MOUSE, U = union }; - _ = User32.SendInput(1, new User32.INPUT[] { input }, User32.INPUT.Size); + _ = User32.SendInput(1, [input], User32.INPUT.Size); }, cancellationToken); } - catch (TaskCanceledException) { } + catch (OperationCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.ToString()); + _logger.LogError("{exception}", ex.ToString()); } } @@ -257,13 +251,13 @@ internal class WinInputProvider : IInputProvider } var union = new User32.InputUnion() { mi = new User32.MOUSEINPUT() { dwFlags = User32.MOUSEEVENTF.WHEEL, dx = 0, dy = 0, time = 0, mouseData = deltaY, dwExtraInfo = User32.GetMessageExtraInfo() } }; var input = new User32.INPUT() { type = User32.InputType.MOUSE, U = union }; - _ = User32.SendInput(1, new User32.INPUT[] { input }, User32.INPUT.Size); + _ = User32.SendInput(1, [input], User32.INPUT.Size); }, cancellationToken); } - catch (TaskCanceledException) { } + catch (OperationCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.ToString()); + _logger.LogError("{exception}", ex.ToString()); } } @@ -276,10 +270,10 @@ internal class WinInputProvider : IInputProvider SendKeys.SendWait(transferText); }, cancellationToken); } - catch (TaskCanceledException) { } + catch (OperationCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.ToString()); + _logger.LogError("{exception}", ex.ToString()); } } @@ -308,7 +302,7 @@ internal class WinInputProvider : IInputProvider } }; var input = new User32.INPUT() { type = User32.InputType.KEYBOARD, U = union }; - _ = User32.SendInput(1, new User32.INPUT[] { input }, User32.INPUT.Size); + _ = User32.SendInput(1, [input], User32.INPUT.Size); } } catch { } @@ -318,7 +312,7 @@ internal class WinInputProvider : IInputProvider catch (TaskCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.ToString()); + _logger.LogError("{exception}", ex.ToString()); } } @@ -337,7 +331,7 @@ internal class WinInputProvider : IInputProvider catch (TaskCanceledException) { } catch (Exception ex) { - _logger.LogError(ex.ToString()); + _logger.LogError("{exception}", ex.ToString()); } } diff --git a/src/Remote/Insight.Remote.Windows/Services/WinScreenCapturer.cs b/src/Remote/Insight.Remote.Windows/Services/WinScreenCapturer.cs index 33cd979..1d5ee21 100644 --- a/src/Remote/Insight.Remote.Windows/Services/WinScreenCapturer.cs +++ b/src/Remote/Insight.Remote.Windows/Services/WinScreenCapturer.cs @@ -37,11 +37,13 @@ using SkiaSharp.Views.Desktop; using System.Diagnostics.CodeAnalysis; using System.Drawing.Imaging; using System.Runtime.InteropServices; +using System.Runtime.Versioning; using Vaitr.Bus; using Result = RemoteControl.Shared.Result; namespace Insight.Remote.Windows.Services; +[SupportedOSPlatform("windows")] internal class WinScreenCapturer : IScreenProvider { public event EventHandler? ScreenChanged; @@ -72,8 +74,8 @@ internal class WinScreenCapturer : IScreenProvider private bool _initialized; private readonly SemaphoreSlim _semaphore = new(1, 1); - private readonly Dictionary _bitBltScreens = new(); - private readonly Dictionary _directxScreens = new(); + private readonly Dictionary _bitBltScreens = []; + private readonly Dictionary _directxScreens = []; private readonly Bus _bus; private readonly ILogger _logger; @@ -86,7 +88,7 @@ internal class WinScreenCapturer : IScreenProvider SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged; } - public async Task InitAsync(CancellationToken cancellationToken) + public Task InitAsync(CancellationToken cancellationToken) { Win32Interop.SwitchToInputDesktop(); @@ -94,6 +96,8 @@ internal class WinScreenCapturer : IScreenProvider InitDirectX(); _initialized = true; + + return Task.CompletedTask; } public void SetSelectedScreen(string displayName) diff --git a/src/Remote/Insight.Remote.Windows/ViewModels/MainViewModel.cs b/src/Remote/Insight.Remote.Windows/ViewModels/MainViewModel.cs index 4badc14..8f9c07d 100644 --- a/src/Remote/Insight.Remote.Windows/ViewModels/MainViewModel.cs +++ b/src/Remote/Insight.Remote.Windows/ViewModels/MainViewModel.cs @@ -2,9 +2,7 @@ using Insight.Remote.Shared.Messages; using Insight.Remote.Shared.Native.Windows; using Insight.Remote.Shared.Reactive; -using Insight.Remote.Shared.Services; using Microsoft.Extensions.Logging; -using System.Collections.ObjectModel; using System.Diagnostics; using System.Security.Principal; using Vaitr.Bus; @@ -28,7 +26,7 @@ public class MainViewModel : ViewModelBase private string? _lastId; - private readonly List _subscriptions = new(); + private readonly List _subscriptions = []; private readonly Bus _bus; private readonly IDispatcher _dispatcher; @@ -152,6 +150,6 @@ public class FakeMainViewModel : ViewModelBase public RelayCommand ElevateToAdminCommand { get; } = new(() => { }); public RelayCommand ElevateToServiceCommand { get; } = new(() => { }); - public bool IsAdministrator => false; + public static bool IsAdministrator => false; public string StatusMessage { get; set; } = "test"; } \ No newline at end of file diff --git a/src/Remote/Insight.Remote.Windows/Views/MainWindow.xaml.cs b/src/Remote/Insight.Remote.Windows/Views/MainWindow.xaml.cs index f60aec3..838b819 100644 --- a/src/Remote/Insight.Remote.Windows/Views/MainWindow.xaml.cs +++ b/src/Remote/Insight.Remote.Windows/Views/MainWindow.xaml.cs @@ -25,7 +25,7 @@ public partial class MainWindow : Window private void Window_Loaded(object sender, RoutedEventArgs e) { if (DesignerProperties.GetIsInDesignMode(this)) return; - if (DataContext is not MainViewModel vm) return; + if (DataContext is not MainViewModel) return; } private void Window_Closing(object sender, CancelEventArgs e) diff --git a/src/Server/Insight.Server/Extensions/Async.cs b/src/Server/Insight.Server/Extensions/Async.cs index ed2cd7e..225b569 100644 --- a/src/Server/Insight.Server/Extensions/Async.cs +++ b/src/Server/Insight.Server/Extensions/Async.cs @@ -8,7 +8,7 @@ public static class Async this IAsyncEnumerable source, Func body, int maxDegreeOfParallelism = DataflowBlockOptions.Unbounded, - TaskScheduler scheduler = null) + TaskScheduler? scheduler = null) { var options = new ExecutionDataflowBlockOptions { @@ -31,7 +31,7 @@ public static class Async this IEnumerable source, Func body, int maxDegreeOfParallelism = DataflowBlockOptions.Unbounded, - TaskScheduler scheduler = null) + TaskScheduler? scheduler = null) { var options = new ExecutionDataflowBlockOptions { diff --git a/src/Server/Insight.Server/Insight.Server.csproj b/src/Server/Insight.Server/Insight.Server.csproj index 8d4b992..92d5d5e 100644 --- a/src/Server/Insight.Server/Insight.Server.csproj +++ b/src/Server/Insight.Server/Insight.Server.csproj @@ -2,13 +2,15 @@ Exe - net7.0 + net8.0 + latest Insight server 2023.12.14.0 Insight.Server enable enable + none @@ -38,8 +40,8 @@ - - + + diff --git a/src/Server/Insight.Server/Network/Agent/AgentSession.cs b/src/Server/Insight.Server/Network/Agent/AgentSession.cs index e97f48e..29ac2cf 100644 --- a/src/Server/Insight.Server/Network/Agent/AgentSession.cs +++ b/src/Server/Insight.Server/Network/Agent/AgentSession.cs @@ -7,18 +7,16 @@ using Vaitr.Network; namespace Insight.Server.Network.Agent; -public class AgentSession : TcpSession +public class AgentSession( + AgentHandler agentHandler, + IEnumerable> handlers, + ISerializer serializer, + ILogger logger) : TcpSession(serializer, logger) { public string? Id { get; set; } - private readonly AgentHandler _agentHandler; - private readonly IEnumerable> _handlers; - - public AgentSession(AgentHandler agentHandler, IEnumerable> handlers, ISerializer serializer, ILogger logger) : base(serializer, logger) - { - _agentHandler = agentHandler; - _handlers = handlers; - } + private readonly AgentHandler _agentHandler = agentHandler; + private readonly IEnumerable> _handlers = handlers; protected override async ValueTask OnConnectedAsync(CancellationToken cancellationToken) { diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/AgentHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/AgentHandler.cs index d99d2df..73ab7d9 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/AgentHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/AgentHandler.cs @@ -8,16 +8,10 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class AgentHandler : IMessageHandler +public class AgentHandler(IMongoDatabase database, ILogger logger) : IMessageHandler { - private readonly IMongoDatabase _database; - private readonly ILogger _logger; - - public AgentHandler(IMongoDatabase database, ILogger logger) - { - _database = database; - _logger = logger; - } + private readonly IMongoDatabase _database = database; + private readonly ILogger _logger = logger; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/CustomHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/CustomHandler.cs index 885b94c..14e1e87 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/CustomHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/CustomHandler.cs @@ -5,14 +5,9 @@ using Microsoft.Extensions.Logging; namespace Insight.Server.Network.Agent.Handlers; -public class CustomHandler : IMessageHandler +public class CustomHandler(ILogger logger) : IMessageHandler { - private readonly ILogger _logger; - - public CustomHandler(ILogger logger) - { - _logger = logger; - } + private readonly ILogger _logger = logger; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -24,8 +19,9 @@ public class CustomHandler : IMessageHandler } } - private async ValueTask OnResponseAsync(AgentSession sender, Response response, CancellationToken cancellationToken) + private ValueTask OnResponseAsync(AgentSession sender, Response response, CancellationToken cancellationToken) { - _logger.LogWarning($"Response: {response.ResponseData}"); + _logger.LogWarning("Response: {response}", response.ResponseData); + return default; } } \ No newline at end of file diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/DriveHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/DriveHandler.cs index bc1323d..2fe86a6 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/DriveHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/DriveHandler.cs @@ -7,14 +7,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class DriveHandler : IMessageHandler +public class DriveHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public DriveHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -39,7 +34,7 @@ public class DriveHandler : IMessageHandler var driveBulk = new List>(); - if (drives is not null && drives.Any()) + if (drives is not null && drives.Count != 0) { foreach (var drive in drives) { @@ -83,16 +78,16 @@ public class DriveHandler : IMessageHandler var volumeBulk = new List>(); - if (drives is not null && drives.Any()) + if (drives is not null && drives.Count != 0) { foreach (var drive in drives) { var driveId = await _database.HostDrive() .Find(p => p.Host == hostEntity.Id && p.Index == drive.Index) .Project(p => p.Id) - .FirstOrDefaultAsync(); + .FirstOrDefaultAsync(cancellationToken: default); - if (drive.Volumes is not null && drive.Volumes.Any()) + if (drive.Volumes is not null && drive.Volumes.Count != 0) { foreach (var volume in drive.Volumes) { diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/EventHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/EventHandler.cs index ed4bdec..ee6080c 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/EventHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/EventHandler.cs @@ -3,22 +3,14 @@ using Insight.Domain.Interfaces; using Insight.Domain.Network; using Insight.Domain.Network.Agent.Messages; using Insight.Infrastructure.Entities; -using Microsoft.Extensions.Logging; using MongoDB.Driver; using static Insight.Domain.Network.Agent.Messages.Event; namespace Insight.Server.Network.Agent.Handlers; -public class EventHandler : IMessageHandler +public class EventHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - private readonly ILogger _logger; - - public EventHandler(IMongoDatabase database, ILogger logger) - { - _database = database; - _logger = logger; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -75,13 +67,13 @@ public class EventHandler : IMessageHandler _ => null }; - CategoryEnum? category = @event.Category.ToLower() switch + CategoryEnum? category = @event.Category?.ToLower() switch { "network" => CategoryEnum.Network, "application" => CategoryEnum.Application, "security" => CategoryEnum.Security, "system" => CategoryEnum.System, - _ => null + _ => CategoryEnum.None }; var date = DateTime.Now; @@ -114,55 +106,59 @@ public class EventHandler : IMessageHandler _ => null }; - CategoryEnum? category = null; - switch (@event.Category) + var category = CategoryEnum.None; + + if (@event.Category is not null) { - case var _ when @event.Category.Contains("network", StringComparison.InvariantCultureIgnoreCase): - category = CategoryEnum.Network; - break; + switch (@event.Category) + { + case var _ when @event.Category.Contains("network", StringComparison.InvariantCultureIgnoreCase): + category = CategoryEnum.Network; + break; - case var _ when @event.Category.Contains("application", StringComparison.InvariantCultureIgnoreCase): - category = CategoryEnum.Application; - break; + case var _ when @event.Category.Contains("application", StringComparison.InvariantCultureIgnoreCase): + category = CategoryEnum.Application; + break; - case var _ when @event.Category.Contains("security", StringComparison.InvariantCultureIgnoreCase): - category = CategoryEnum.Security; - break; + case var _ when @event.Category.Contains("security", StringComparison.InvariantCultureIgnoreCase): + category = CategoryEnum.Security; + break; - case var _ when @event.Category.Contains("system", StringComparison.InvariantCultureIgnoreCase): - category = CategoryEnum.System; - break; + case var _ when @event.Category.Contains("system", StringComparison.InvariantCultureIgnoreCase): + category = CategoryEnum.System; + break; - case var _ when @event.Category.Contains("printservice", StringComparison.InvariantCultureIgnoreCase): - category = CategoryEnum.Printer; - break; + case var _ when @event.Category.Contains("printservice", StringComparison.InvariantCultureIgnoreCase): + category = CategoryEnum.Printer; + break; - case var _ when @event.Category.Contains("taskscheduler", StringComparison.InvariantCultureIgnoreCase): - category = CategoryEnum.Task; - break; + case var _ when @event.Category.Contains("taskscheduler", StringComparison.InvariantCultureIgnoreCase): + category = CategoryEnum.Task; + break; - case var _ when @event.Category.Contains("terminalservices", StringComparison.InvariantCultureIgnoreCase): - category = CategoryEnum.RDP; - break; + case var _ when @event.Category.Contains("terminalservices", StringComparison.InvariantCultureIgnoreCase): + category = CategoryEnum.RDP; + break; - case var _ when @event.Category.Contains("smbclient", StringComparison.InvariantCultureIgnoreCase): - category = CategoryEnum.Network; - break; + case var _ when @event.Category.Contains("smbclient", StringComparison.InvariantCultureIgnoreCase): + category = CategoryEnum.Network; + break; - case var _ when @event.Category.Contains("smbserver", StringComparison.InvariantCultureIgnoreCase): - category = CategoryEnum.Network; - break; + case var _ when @event.Category.Contains("smbserver", StringComparison.InvariantCultureIgnoreCase): + category = CategoryEnum.Network; + break; - case var _ when @event.Category.Contains("storagespaces", StringComparison.InvariantCultureIgnoreCase): - category = CategoryEnum.System; - break; + case var _ when @event.Category.Contains("storagespaces", StringComparison.InvariantCultureIgnoreCase): + category = CategoryEnum.System; + break; - case var _ when @event.Category.Contains("diagnostics", StringComparison.InvariantCultureIgnoreCase): - category = CategoryEnum.System; - break; + case var _ when @event.Category.Contains("diagnostics", StringComparison.InvariantCultureIgnoreCase): + category = CategoryEnum.System; + break; - default: - break; + default: + break; + } } var date = DateTime.Now; @@ -175,7 +171,7 @@ public class EventHandler : IMessageHandler EventId = @event.EventId.ToString(), Status = status.ToString(), Source = @event.Source, - Category = category?.ToString(), + Category = category.ToString(), Message = @event.Message }; @@ -183,7 +179,7 @@ public class EventHandler : IMessageHandler return log; } - private bool FilterEventId(Event @event) + private static bool FilterEventId(Event @event) { var filter = new List { @@ -234,10 +230,8 @@ public class EventHandler : IMessageHandler return false; } - private bool FilterMonitoringHostLog(HostLogEntity hostLog) + private static bool FilterMonitoringHostLog(HostLogEntity hostLog) { - //_logger.LogDebug($"try filter event: {hostLog.Category}.{hostLog.Source}.{hostLog.Status}"); - if (Enum.TryParse(hostLog.Status, out StatusType status) is false) return true; if (hostLog.Category == CategoryEnum.System.ToString()) diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/InterfaceHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/InterfaceHandler.cs index 70f4579..c986aad 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/InterfaceHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/InterfaceHandler.cs @@ -7,14 +7,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class InterfaceHandler : IMessageHandler +public class InterfaceHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public InterfaceHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -39,7 +34,7 @@ public class InterfaceHandler : IMessageHandler // interfaces - if (interfaces is not null && interfaces.Any()) + if (interfaces is not null && interfaces.Count != 0) { var interfaceBulk = new List>(); @@ -95,7 +90,7 @@ public class InterfaceHandler : IMessageHandler // addresses - if (interfaces is not null && interfaces.Any()) + if (interfaces is not null && interfaces.Count != 0) { var addressBulk = new List>(); @@ -104,9 +99,9 @@ public class InterfaceHandler : IMessageHandler var interfaceId = await _database.HostInterface() .Find(p => p.Host == hostEntity.Id && p.Index == @interface.Index) .Project(p => p.Id) - .FirstOrDefaultAsync(); + .FirstOrDefaultAsync(cancellationToken: default); - if (@interface.Addresses is not null && @interface.Addresses.Any()) + if (@interface.Addresses is not null && @interface.Addresses.Count != 0) { foreach (var address in @interface.Addresses) { @@ -146,7 +141,7 @@ public class InterfaceHandler : IMessageHandler // gateways - if (interfaces is not null && interfaces.Any()) + if (interfaces is not null && interfaces.Count != 0) { var gatewayBulk = new List>(); @@ -155,9 +150,9 @@ public class InterfaceHandler : IMessageHandler var interfaceId = await _database.HostInterface() .Find(p => p.Host == hostEntity.Id && p.Index == @interface.Index) .Project(p => p.Id) - .FirstOrDefaultAsync(); + .FirstOrDefaultAsync(cancellationToken: default); - if (@interface.Gateways is not null && @interface.Gateways.Any()) + if (@interface.Gateways is not null && @interface.Gateways.Count != 0) { foreach (var gateway in @interface.Gateways) { @@ -195,7 +190,7 @@ public class InterfaceHandler : IMessageHandler // nameservers - if (interfaces is not null && interfaces.Any()) + if (interfaces is not null && interfaces.Count != 0) { var nameserverBulk = new List>(); @@ -204,9 +199,9 @@ public class InterfaceHandler : IMessageHandler var interfaceId = await _database.HostInterface() .Find(p => p.Host == hostEntity.Id && p.Index == @interface.Index) .Project(p => p.Id) - .FirstOrDefaultAsync(); + .FirstOrDefaultAsync(cancellationToken: default); - if (@interface.Dns is not null && @interface.Dns.Any()) + if (@interface.Dns is not null && @interface.Dns.Count != 0) { foreach (var nameserver in @interface.Dns) { @@ -244,7 +239,7 @@ public class InterfaceHandler : IMessageHandler // routes - if (interfaces is not null && interfaces.Any()) + if (interfaces is not null && interfaces.Count != 0) { var routeBulk = new List>(); @@ -253,9 +248,9 @@ public class InterfaceHandler : IMessageHandler var interfaceId = await _database.HostInterface() .Find(p => p.Host == hostEntity.Id && p.Index == @interface.Index) .Project(p => p.Id) - .FirstOrDefaultAsync(); + .FirstOrDefaultAsync(cancellationToken: default); - if (@interface.Routes is not null && @interface.Routes.Any()) + if (@interface.Routes is not null && @interface.Routes.Count != 0) { foreach (var route in @interface.Routes) { diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/MainboardHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/MainboardHandler.cs index fcbc2b0..95811a8 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/MainboardHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/MainboardHandler.cs @@ -6,14 +6,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers { - public class MainboardHandler : IMessageHandler + public class MainboardHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public MainboardHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/MemoryHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/MemoryHandler.cs index b6f1b33..97e1ae5 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/MemoryHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/MemoryHandler.cs @@ -7,14 +7,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class MemoryHandler : IMessageHandler +public class MemoryHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public MemoryHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -39,7 +34,7 @@ public class MemoryHandler : IMessageHandler var bulk = new List>(); - if (memory is not null && memory.Any()) + if (memory is not null && memory.Count != 0) { foreach (var mem in memory) { diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/OperationSystemHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/OperationSystemHandler.cs index eb8b7af..3fb0d47 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/OperationSystemHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/OperationSystemHandler.cs @@ -6,14 +6,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class OperationSystemHandler : IMessageHandler +public class OperationSystemHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public OperationSystemHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/PrinterHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/PrinterHandler.cs index 83a53cd..e57f0c0 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/PrinterHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/PrinterHandler.cs @@ -7,14 +7,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class PrinterHandler : IMessageHandler +public class PrinterHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public PrinterHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -39,7 +34,7 @@ public class PrinterHandler : IMessageHandler var bulk = new List>(); - if (printers is not null && printers.Any()) + if (printers is not null && printers.Count != 0) { foreach (var printer in printers) { diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/ProcessorHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/ProcessorHandler.cs index 67b3ffb..d11ed9c 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/ProcessorHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/ProcessorHandler.cs @@ -7,14 +7,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class ProcessorHandler : IMessageHandler +public class ProcessorHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public ProcessorHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -39,7 +34,7 @@ public class ProcessorHandler : IMessageHandler var bulk = new List>(); - if (processors is not null && processors.Any()) + if (processors is not null && processors.Count != 0) { foreach (var processor in processors) { diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/ServiceHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/ServiceHandler.cs index 9df3799..be6d45a 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/ServiceHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/ServiceHandler.cs @@ -7,14 +7,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class ServiceHandler : IMessageHandler +public class ServiceHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public ServiceHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -39,7 +34,7 @@ public class ServiceHandler : IMessageHandler var bulk = new List>(); - if (services is not null && services.Any()) + if (services is not null && services.Count != 0) { foreach (var service in services) { diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/SessionHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/SessionHandler.cs index 0dfb293..b1ecdc6 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/SessionHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/SessionHandler.cs @@ -7,14 +7,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class SessionHandler : IMessageHandler +public class SessionHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public SessionHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -39,7 +34,7 @@ public class SessionHandler : IMessageHandler var bulk = new List>(); - if (sessions is not null && sessions.Any()) + if (sessions is not null && sessions.Count != 0) { foreach (var sess in sessions) { diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/SoftwareHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/SoftwareHandler.cs index f236ae6..acb7d0e 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/SoftwareHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/SoftwareHandler.cs @@ -7,14 +7,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class SoftwareHandler : IMessageHandler +public class SoftwareHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public SoftwareHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -39,7 +34,7 @@ public class SoftwareHandler : IMessageHandler var bulk = new List>(); - if (applications is not null && applications.Any()) + if (applications is not null && applications.Count != 0) { foreach (var app in applications) { diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/StoragePoolHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/StoragePoolHandler.cs index 712897f..c443248 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/StoragePoolHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/StoragePoolHandler.cs @@ -7,14 +7,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class StoragePoolHandler : IMessageHandler +public class StoragePoolHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public StoragePoolHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -39,7 +34,7 @@ public class StoragePoolHandler : IMessageHandler // storagepools - if (storagePools is not null && storagePools.Any()) + if (storagePools is not null && storagePools.Count != 0) { var storagepoolBulk = new List>(); @@ -55,12 +50,10 @@ public class StoragePoolHandler : IMessageHandler if (storagePool.States is not null) { - states = new List(); + states = []; foreach (var state in storagePool.States) - { states.Add(state.ToString()); - } } var storagePoolUpdate = Builders.Update @@ -98,7 +91,7 @@ public class StoragePoolHandler : IMessageHandler // physicaldisks - if (storagePools is not null && storagePools.Any()) + if (storagePools is not null && storagePools.Count != 0) { var physicalDiskBulk = new List>(); @@ -107,9 +100,9 @@ public class StoragePoolHandler : IMessageHandler var storagePoolId = await _database.HostStoragePool() .Find(p => p.Host == hostEntity.Id && p.UniqueId == storagePool.UniqueId) .Project(p => p.Id) - .FirstOrDefaultAsync(); + .FirstOrDefaultAsync(cancellationToken: default); - if (storagePool.PhysicalDisks is not null && storagePool.PhysicalDisks.Any()) + if (storagePool.PhysicalDisks is not null && storagePool.PhysicalDisks.Count != 0) { foreach (var physicalDisk in storagePool.PhysicalDisks) { @@ -124,12 +117,10 @@ public class StoragePoolHandler : IMessageHandler if (physicalDisk.States is not null) { - states = new List(); + states = []; foreach (var state in physicalDisk.States) - { states.Add(state.ToString()); - } } var physicalDiskUpdate = Builders.Update @@ -177,20 +168,20 @@ public class StoragePoolHandler : IMessageHandler // virtual disks - if (storagePools is not null && storagePools.Any()) + if (storagePools is not null && storagePools.Count != 0) { var virtualDiskBulk = new List>(); foreach (var storagePool in storagePools) { - if (storagePool.VirtualDisks is not null && storagePool.VirtualDisks.Any()) + if (storagePool.VirtualDisks is not null && storagePool.VirtualDisks.Count != 0) { foreach (var virtualDisk in storagePool.VirtualDisks) { var storagePoolId = await _database.HostStoragePool() .Find(p => p.Host == hostEntity.Id && p.UniqueId == storagePool.UniqueId) .Project(p => p.Id) - .FirstOrDefaultAsync(); + .FirstOrDefaultAsync(cancellationToken: default); var virtualDiskFilter = Builders.Filter.And(new List> { @@ -203,12 +194,10 @@ public class StoragePoolHandler : IMessageHandler if (virtualDisk.States is not null) { - states = new List(); + states = []; foreach (var state in virtualDisk.States) - { states.Add(state.ToString()); - } } var virtualDiskUpdate = Builders.Update diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/SystemInfoHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/SystemInfoHandler.cs index 3f11402..58a2e09 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/SystemInfoHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/SystemInfoHandler.cs @@ -6,14 +6,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class SystemInfoHandler : IMessageHandler +public class SystemInfoHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public SystemInfoHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -27,22 +22,24 @@ public class SystemInfoHandler : IMessageHandler private async ValueTask OnSystemInfoAsync(AgentSession session, SystemInfo? system, CancellationToken cancellationToken) { - var agentEntity = await _database.Agent().Find(Builders.Filter.Eq(p => p.Id, session.Id)).FirstOrDefaultAsync(cancellationToken); + var agentEntity = await _database.Agent().Find(Builders.Filter.Eq(p => p.Id, session?.Id)).FirstOrDefaultAsync(cancellationToken); if (agentEntity is null) return; - var hostEntity = await _database.Host().Find(Builders.Filter.Eq(p => p.Agent, agentEntity.Id)).FirstOrDefaultAsync(cancellationToken); + var hostEntity = await _database.Host().Find(Builders.Filter.Eq(p => p.Agent, agentEntity?.Id)).FirstOrDefaultAsync(cancellationToken); if (hostEntity is null) return; var date = DateTime.Now; + if (hostEntity.Id is null) return; + await _database.HostSystem().UpdateOneAsync(p => p.Host == hostEntity.Id, Builders.Update .SetOnInsert(p => p.Insert, date) .SetOnInsert(p => p.Host, hostEntity.Id) .Set(p => p.Update, date) - .Set(p => p.BootUpTime, system.LastBootUpTime) - .Set(p => p.LocalTime, system.LocalDateTime) - .Set(p => p.Processes, system.Processes) - .Set(p => p.License, system.License), new UpdateOptions + .Set(p => p.BootUpTime, system?.LastBootUpTime) + .Set(p => p.LocalTime, system?.LocalDateTime) + .Set(p => p.Processes, system?.Processes) + .Set(p => p.License, system?.License), new UpdateOptions { IsUpsert = true }, cancellationToken); diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/TrapHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/TrapHandler.cs index de0aeae..c1c2bba 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/TrapHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/TrapHandler.cs @@ -11,14 +11,9 @@ using static Insight.Server.Models.MonitorMessage; namespace Insight.Server.Network.Agent.Handlers; -public class TrapHandler : IMessageHandler +public partial class TrapHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public TrapHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -85,7 +80,8 @@ public class TrapHandler : IMessageHandler { monitoring = null; - if (packet is null || packet.Data is null || packet.Data.Any() is false) return false; + if (packet is null || packet.Data is null || packet.Data.Count == 0) + return false; monitoring = new MonitorMessage { @@ -96,9 +92,7 @@ public class TrapHandler : IMessageHandler }; if (Enum.TryParse(packet.Community, true, out var application)) - { monitoring.Application = application; - } StatusEnum? status; string? task; @@ -131,9 +125,12 @@ public class TrapHandler : IMessageHandler return true; } - private static bool ParseAcronis(List> data, out StatusEnum? status, out string? task, out string? message) + [GeneratedRegex(@"\s+")] + private static partial Regex AcronisRegex(); + + private static bool ParseAcronis(List> data, out StatusEnum? status, out string? task, out string? message) { - status = data[0].Value.ToLower() switch + status = data[0].Value?.ToLower() switch { "erfolgreich" => StatusEnum.Information, "success" => StatusEnum.Information, @@ -149,49 +146,32 @@ public class TrapHandler : IMessageHandler task = null; message = null; - var parsed = false; + var trim = data[1].Value?.Split(':', StringSplitOptions.None); + if (trim is null || trim.Length == 0) return false; - try - { - var trim = data[1].Value.Split(new string[] { ":" }, StringSplitOptions.None); - task = trim[1].Split(new string[] { "'" }, StringSplitOptions.None)[1].Split("'")[0].Trim(); - message = trim[1].Split(new string[] { "' " }, StringSplitOptions.None)[1].Trim(); + task = trim[1].Split("'", StringSplitOptions.None)[1].Split("'")[0].Trim(); + message = trim[1].Split("' ", StringSplitOptions.None)[1].Trim(); + if (message is not null) return true; - parsed = true; - } - catch (Exception) - { - // skipped for base64 parse - } + if (data[1].Value is not string val) return false; - if (parsed) return true; + var content = AcronisRegex().Replace(val, ""); + var bytes = Enumerable.Range(0, content.Length) + .Where(x => x % 2 == 0) + .Select(x => Convert.ToByte(content.Substring(x, 2), 16)) + .ToArray(); - try - { - var content = Regex.Replace(data[1].Value, @"\s+", ""); - var bytes = Enumerable.Range(0, content.Length) - .Where(x => x % 2 == 0) - .Select(x => Convert.ToByte(content.Substring(x, 2), 16)) - .ToArray(); + content = Encoding.UTF8.GetString(bytes); - content = Encoding.UTF8.GetString(bytes); + trim = content.Split(':', StringSplitOptions.None); + if (trim is null || trim.Length == 0) return false; - var trim = content.Split(new string[] { ":" }, StringSplitOptions.None); - task = trim[1].Split(new string[] { "'" }, StringSplitOptions.None)[1].Split("'")[0].Trim(); - message = trim[1].Split(new string[] { "' " }, StringSplitOptions.None)[1].Trim(); - - parsed = true; - } - catch (Exception ex) - { - //_logger.LogError("{ex}", ex); - } - - if (parsed) return true; - return false; + task = trim[1].Split("'", StringSplitOptions.None)[1].Split("'")[0].Trim(); + message = trim[1].Split("' ", StringSplitOptions.None)[1].Trim(); + return message is not null; } - private static bool ParseVeeam(List> data, out StatusEnum? status, out string? task, out string? message) + private static bool ParseVeeam(List> data, out StatusEnum? status, out string? task, out string? message) { status = null; task = null; @@ -203,13 +183,13 @@ public class TrapHandler : IMessageHandler { var summary = false; - if (Guid.TryParse(data[0].Value, out _)) + if (Guid.TryParse(data[0].Value, out _)) summary = true; - if (data[1].Value.ToLower() == "backup configuration job") + if (data[1].Value?.ToLower() == "backup configuration job") return false; - status = (summary ? data[2].Value.ToLower() : data[3].Value.ToLower()) switch + status = (summary ? data[2].Value?.ToLower() : data[3].Value?.ToLower()) switch { "success" => StatusEnum.Information, "warning" => StatusEnum.Warning, @@ -230,7 +210,7 @@ public class TrapHandler : IMessageHandler return false; } - private static bool ParseQnap(List> data, out StatusEnum? status, out string? task, out string? message) + private static bool ParseQnap(List> data, out StatusEnum? status, out string? task, out string? message) { status = StatusEnum.Information; task = null; @@ -265,21 +245,15 @@ public class TrapHandler : IMessageHandler }; foreach (var key in keywords) - { if (Regex.IsMatch(string.Concat(data).ToLowerInvariant(), $@"\b{key.Key}\b")) - { status = key.Value; - } - } foreach (var kv in data) - { message += kv.Value; - } parsed = true; } - catch (Exception ex) + catch (Exception) { //_logger.LogError("{ex}", ex); } diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/UpdateHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/UpdateHandler.cs index 7f90eca..9185b26 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/UpdateHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/UpdateHandler.cs @@ -7,14 +7,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class UpdateHandler : IMessageHandler +public class UpdateHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public UpdateHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -41,7 +36,7 @@ public class UpdateHandler : IMessageHandler if (updates is not null) { - if (updates.Installed is not null && updates.Installed.Any()) + if (updates.Installed is not null && updates.Installed.Count != 0) { foreach (var update in updates.Installed) { @@ -72,7 +67,7 @@ public class UpdateHandler : IMessageHandler } } - if (updates.Pending is not null && updates.Pending.Any()) + if (updates.Pending is not null && updates.Pending.Count != 0) { foreach (var update in updates.Pending) { diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/UserHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/UserHandler.cs index 824117f..5051971 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/UserHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/UserHandler.cs @@ -7,14 +7,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class UserHandler : IMessageHandler +public class UserHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public UserHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -39,7 +34,7 @@ public class UserHandler : IMessageHandler // users - if (users is not null && users.Any()) + if (users is not null && users.Count != 0) { var userBulk = new List>(); @@ -88,11 +83,11 @@ public class UserHandler : IMessageHandler // groups - if (users is not null && users.Any()) + if (users is not null && users.Count != 0) { var groupBulk = new List>(); - var distinctGroups = users.SelectMany(p => p.Groups) + var distinctGroups = users.SelectMany(p => p.Groups ?? []) .GroupBy(p => new { p?.Domain, p?.Name }) .Select(p => p.First()); @@ -133,8 +128,7 @@ public class UserHandler : IMessageHandler } // relations - - if (users is not null && users.Any()) + if (users is not null && users.Count != 0) { var relationBulk = new List>(); @@ -143,16 +137,16 @@ public class UserHandler : IMessageHandler var userId = await _database.HostSystemUser() .Find(p => p.Host == hostEntity.Id && p.Domain == user.Domain && p.Name == user.Name) .Project(p => p.Id) - .FirstOrDefaultAsync(); + .FirstOrDefaultAsync(cancellationToken: default); - if (user.Groups is not null && user.Groups.Any()) + if (user.Groups is not null && user.Groups.Count != 0) { foreach (var group in user.Groups) { var groupId = await _database.HostSystemGroup() .Find(p => p.Host == hostEntity.Id && p.Domain == group.Domain && p.Name == group.Name) .Project(p => p.Id) - .FirstOrDefaultAsync(); + .FirstOrDefaultAsync(cancellationToken: default); var relationFilter = Builders.Filter.And(new List> { diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/VideocardHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/VideocardHandler.cs index ca0fba9..b8316b5 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/VideocardHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/VideocardHandler.cs @@ -7,14 +7,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class VideocardHandler : IMessageHandler +public class VideocardHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public VideocardHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -39,7 +34,7 @@ public class VideocardHandler : IMessageHandler var bulk = new List>(); - if (videocards is not null && videocards.Any()) + if (videocards is not null && videocards.Count != 0) { foreach (var videocard in videocards) { diff --git a/src/Server/Insight.Server/Network/Agent/Handlers/VirtualMaschineHandler.cs b/src/Server/Insight.Server/Network/Agent/Handlers/VirtualMaschineHandler.cs index 6737b81..cc7b30b 100644 --- a/src/Server/Insight.Server/Network/Agent/Handlers/VirtualMaschineHandler.cs +++ b/src/Server/Insight.Server/Network/Agent/Handlers/VirtualMaschineHandler.cs @@ -7,14 +7,9 @@ using MongoDB.Driver; namespace Insight.Server.Network.Agent.Handlers; -public class VirtualMaschineHandler : IMessageHandler +public class VirtualMaschineHandler(IMongoDatabase database) : IMessageHandler { - private readonly IMongoDatabase _database; - - public VirtualMaschineHandler(IMongoDatabase database) - { - _database = database; - } + private readonly IMongoDatabase _database = database; public async ValueTask HandleAsync(AgentSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -38,7 +33,7 @@ public class VirtualMaschineHandler : IMessageHandler var date = DateTime.Now; // virtual maschines - if (virtualMaschines is not null && virtualMaschines.Any()) + if (virtualMaschines is not null && virtualMaschines.Count != 0) { var virtualMaschineBulk = new List>(); @@ -96,7 +91,7 @@ public class VirtualMaschineHandler : IMessageHandler // virtual maschine configurations - if (virtualMaschines is not null && virtualMaschines.Any()) + if (virtualMaschines is not null && virtualMaschines.Count != 0) { var configurationBulk = new List>(); @@ -105,9 +100,9 @@ public class VirtualMaschineHandler : IMessageHandler var virtualMaschineId = await _database.HostHypervisorVirtualMaschine() .Find(p => p.Host == hostEntity.Id && p.UniqueId == virtualmaschine.Id.ToString()) .Project(p => p.Id) - .FirstOrDefaultAsync(); + .FirstOrDefaultAsync(cancellationToken: default); - if (virtualmaschine.Configurations is not null && virtualmaschine.Configurations.Any()) + if (virtualmaschine.Configurations is not null && virtualmaschine.Configurations.Count != 0) { foreach (var config in virtualmaschine.Configurations) { @@ -120,7 +115,11 @@ public class VirtualMaschineHandler : IMessageHandler // custom "notes" concat string notes = string.Empty; - if (config?.Notes is not null) foreach (var n in config.Notes) notes += n; + + if (config?.Notes is not null) + foreach (var n in config.Notes) notes += n; + + if (config?.Id is null) continue; var configUpdate = Builders.Update .SetOnInsert(p => p.Insert, date) diff --git a/src/Server/Insight.Server/Network/Remote/Handlers/RemoteHandler.cs b/src/Server/Insight.Server/Network/Remote/Handlers/RemoteHandler.cs index a09c4bf..9e96aa7 100644 --- a/src/Server/Insight.Server/Network/Remote/Handlers/RemoteHandler.cs +++ b/src/Server/Insight.Server/Network/Remote/Handlers/RemoteHandler.cs @@ -7,18 +7,11 @@ using Vaitr.Network; namespace Insight.Server.Network.Remote.Handlers; -public class RemoteHandler : IMessageHandler +public class RemoteHandler(Bus bus, ISessionPool remotePool, ILogger logger) : IMessageHandler { - private readonly Bus _bus; - private readonly ISessionPool _remotePool; - private readonly ILogger _logger; - - public RemoteHandler(Bus bus, ISessionPool remotePool, ILogger logger) - { - _bus = bus; - _remotePool = remotePool; - _logger = logger; - } + private readonly Bus _bus = bus; + private readonly ISessionPool _remotePool = remotePool; + private readonly ILogger _logger = logger; public async ValueTask HandleAsync(RemoteSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -54,7 +47,7 @@ public class RemoteHandler : IMessageHandler private async Task OnSessionRequest(RemoteSession session, RemoteSessionRequest sessionRequest, CancellationToken cancellationToken) { - _logger.LogInformation($"Remote {session.Id} => SessionRequest"); + _logger.LogInformation("Remote {session} => SessionRequest", session.Id); session.Mode = sessionRequest.Mode; @@ -97,14 +90,14 @@ public class RemoteHandler : IMessageHandler private async Task OnClipboardData(RemoteSession session, CastClipboardReceived clipboardChanged, CancellationToken cancellationToken) { - _logger.LogInformation($"Remote {session.Id} => ClipboardData"); + _logger.LogInformation("Remote {session} => ClipboardData", session.Id); await _bus.PublishAsync(clipboardChanged, cancellationToken); } private async Task OnAudioData(RemoteSession session, CastAudio audioSample, CancellationToken cancellationToken) { - _logger.LogInformation($"Remote {session.Id} => AudioData"); + _logger.LogInformation("Remote {session} => AudioData", session.Id); await _bus.PublishAsync(audioSample, cancellationToken); } diff --git a/src/Server/Insight.Server/Network/Remote/RemoteSession.cs b/src/Server/Insight.Server/Network/Remote/RemoteSession.cs index 19d6a66..1da69a2 100644 --- a/src/Server/Insight.Server/Network/Remote/RemoteSession.cs +++ b/src/Server/Insight.Server/Network/Remote/RemoteSession.cs @@ -3,31 +3,21 @@ using Insight.Domain.Interfaces; using Insight.Domain.Network; using Insight.Server.Network.Web; using Microsoft.Extensions.Logging; -using Vaitr.Bus; using Vaitr.Network; namespace Insight.Server.Network.Remote; -public class RemoteSession : TcpSession +public class RemoteSession( + ISessionPool webPool, + IEnumerable> handlers, + ISerializer serializer, + ILogger logger) : TcpSession(serializer, logger) { - public string Id { get; } + public string Id { get; } = GenerateRandomId(); public RemoteControlMode Mode { get; set; } - private readonly Bus _bus; - private readonly ISessionPool _webPool; - private readonly IEnumerable> _handlers; - - public RemoteSession( - ISessionPool webPool, - IEnumerable> handlers, - ISerializer serializer, - ILogger logger) : base(serializer, logger) - { - Id = GenerateRandomId(); - - _webPool = webPool; - _handlers = handlers; - } + private readonly ISessionPool _webPool = webPool; + private readonly IEnumerable> _handlers = handlers; public async ValueTask ProxyAsync(TMessage message, CancellationToken cancellationToken) where TMessage : IMessage @@ -42,16 +32,16 @@ public class RemoteSession : TcpSession }, cancellationToken); } - protected override async ValueTask OnConnectedAsync(CancellationToken cancellationToken) + protected override ValueTask OnConnectedAsync(CancellationToken cancellationToken) { _logger.LogInformation("Remote ({ep?}) connected", RemoteEndPoint); - - if (_webPool.FirstOrDefault().Value is not WebSession webSession) return; + return default; } - protected override async ValueTask OnDisconnectedAsync(CancellationToken cancellationToken) + protected override ValueTask OnDisconnectedAsync(CancellationToken cancellationToken) { _logger.LogInformation("Remote ({ep?}) disconnected", RemoteEndPoint); + return default; } protected override async ValueTask OnSentAsync(IPacketContext context, CancellationToken cancellationToken) @@ -76,9 +66,10 @@ public class RemoteSession : TcpSession } } - protected override async ValueTask OnHeartbeatAsync(CancellationToken cancellationToken) + protected override ValueTask OnHeartbeatAsync(CancellationToken cancellationToken) { _logger.LogInformation("Remote ({ep?}) Heartbeat", RemoteEndPoint); + return default; } private static string GenerateRandomId() diff --git a/src/Server/Insight.Server/Network/Shared/ProxyHandler.cs b/src/Server/Insight.Server/Network/Shared/ProxyHandler.cs index 1d305bb..0a003b3 100644 --- a/src/Server/Insight.Server/Network/Shared/ProxyHandler.cs +++ b/src/Server/Insight.Server/Network/Shared/ProxyHandler.cs @@ -10,24 +10,16 @@ using Vaitr.Network; namespace Insight.Server.Network.Globals; -public class ProxyHandler : IMessageHandler, IMessageHandler +public class ProxyHandler( + ISessionPool agentPool, + ISessionPool webPool, + IMongoDatabase database, + ILogger logger) : IMessageHandler, IMessageHandler { - private readonly ISessionPool _agentPool; - private readonly ISessionPool _webPool; - private readonly IMongoDatabase _database; - private readonly ILogger _logger; - - public ProxyHandler( - ISessionPool agentPool, - ISessionPool webPool, - IMongoDatabase database, - ILogger logger) - { - _agentPool = agentPool; - _webPool = webPool; - _database = database; - _logger = logger; - } + private readonly ISessionPool _agentPool = agentPool; + private readonly ISessionPool _webPool = webPool; + private readonly IMongoDatabase _database = database; + private readonly ILogger _logger = logger; public async ValueTask HandleAsync(WebSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { diff --git a/src/Server/Insight.Server/Network/Web/WebSession.cs b/src/Server/Insight.Server/Network/Web/WebSession.cs index 9625bb0..7603f96 100644 --- a/src/Server/Insight.Server/Network/Web/WebSession.cs +++ b/src/Server/Insight.Server/Network/Web/WebSession.cs @@ -5,25 +5,22 @@ using Vaitr.Network; namespace Insight.Server.Network.Web; -public class WebSession : TcpSession +public class WebSession(IEnumerable> handlers, ISerializer serializer, ILogger logger) : TcpSession(serializer, logger) { public string? Id { get; set; } - private readonly IEnumerable> _handlers; + private readonly IEnumerable> _handlers = handlers; - public WebSession(IEnumerable> handlers, ISerializer serializer, ILogger logger) : base(serializer, logger) - { - _handlers = handlers; - } - - protected override async ValueTask OnConnectedAsync(CancellationToken cancellationToken) + protected override ValueTask OnConnectedAsync(CancellationToken cancellationToken) { _logger.LogInformation("Web ({ep?}) connected", RemoteEndPoint); + return default; } - protected override async ValueTask OnDisconnectedAsync(CancellationToken cancellationToken) + protected override ValueTask OnDisconnectedAsync(CancellationToken cancellationToken) { _logger.LogInformation("Web ({ep?}) disconnected", RemoteEndPoint); + return default; } protected override async ValueTask OnSentAsync(IPacketContext context, CancellationToken cancellationToken) @@ -48,8 +45,9 @@ public class WebSession : TcpSession } } - protected override async ValueTask OnHeartbeatAsync(CancellationToken cancellationToken) + protected override ValueTask OnHeartbeatAsync(CancellationToken cancellationToken) { _logger.LogInformation("Web ({ep?}) Heartbeat", RemoteEndPoint); + return default; } } \ No newline at end of file diff --git a/src/Server/Insight.Server/Program.cs b/src/Server/Insight.Server/Program.cs index fc2a392..beac666 100644 --- a/src/Server/Insight.Server/Program.cs +++ b/src/Server/Insight.Server/Program.cs @@ -120,7 +120,7 @@ internal static class ServiceExtensions services.AddSingleton, UserHandler>(); services.AddSingleton, VideocardHandler>(); services.AddSingleton, VirtualMaschineHandler>(); - + return services; } diff --git a/src/Server/Insight.Server/Services/DispatchService.cs b/src/Server/Insight.Server/Services/DispatchService.cs index 23b7a25..7473821 100644 --- a/src/Server/Insight.Server/Services/DispatchService.cs +++ b/src/Server/Insight.Server/Services/DispatchService.cs @@ -8,20 +8,12 @@ using MongoDB.Driver; namespace Insight.Server.Services; -internal class DispatchService : BackgroundService +internal class DispatchService(HttpClient httpClient, IMongoDatabase database, IConfiguration configuration, ILogger logger) : BackgroundService { - private readonly HttpClient _httpClient; - private readonly IMongoDatabase _database; - private readonly IConfiguration _configuration; - private readonly ILogger _logger; - - public DispatchService(HttpClient httpClient, IMongoDatabase database, IConfiguration configuration, ILogger logger) - { - _httpClient = httpClient; - _database = database; - _configuration = configuration; - _logger = logger; - } + private readonly HttpClient _httpClient = httpClient; + private readonly IMongoDatabase _database = database; + private readonly IConfiguration _configuration = configuration; + private readonly ILogger _logger = logger; protected override async Task ExecuteAsync(CancellationToken cancellationToken) { @@ -52,7 +44,7 @@ internal class DispatchService : BackgroundService .Limit(10) .ToListAsync(cancellationToken); - if (pendings is null || pendings.Any() is false) return; + if (pendings is null || pendings.Count == 0) return; foreach (var entity in pendings) { @@ -68,20 +60,19 @@ internal class DispatchService : BackgroundService } catch (Exception ex) { - _logger.LogError(ex.Message); - _logger.LogTrace(ex.StackTrace); + _logger.LogError("{exception}", ex.Message); } finally { // webmatic safety offset - await Task.Delay(TimeSpan.FromSeconds(1), default); + await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken: default); } } } private async ValueTask SendAsync(HostLogMonitoringEntity monitoring, CancellationToken cancellationToken) { - _logger.LogTrace($"SendAsync ({monitoring})"); + _logger.LogTrace("SendAsync ({monitoring})", monitoring); var monitoringApi = Monitoring.LogUri; var monitoringContent = new List>(); diff --git a/src/Server/Insight.Server/Services/JobService.cs b/src/Server/Insight.Server/Services/JobService.cs index 1619007..e9a45ce 100644 --- a/src/Server/Insight.Server/Services/JobService.cs +++ b/src/Server/Insight.Server/Services/JobService.cs @@ -1,5 +1,4 @@ -using Amazon.Runtime.Internal; -using Insight.Domain.Network; +using Insight.Domain.Network; using Insight.Domain.Network.Agent.Messages; using Insight.Infrastructure.Entities; using Insight.Server.Extensions; @@ -11,18 +10,11 @@ using Vaitr.Network; namespace Insight.Server.Services; -internal class JobService : BackgroundService +internal class JobService(ISessionPool agentPool, IMongoDatabase database, ILogger logger) : BackgroundService { - private readonly ISessionPool _agentPool; - private readonly IMongoDatabase _database; - private readonly ILogger _logger; - - public JobService(ISessionPool agentPool, IMongoDatabase database, ILogger logger) - { - _agentPool = agentPool; - _database = database; - _logger = logger; - } + private readonly ISessionPool _agentPool = agentPool; + private readonly IMongoDatabase _database = database; + private readonly ILogger _logger = logger; protected override async Task ExecuteAsync(CancellationToken cancellationToken) { @@ -90,7 +82,7 @@ internal class JobService : BackgroundService } } - + } private async ValueTask> GetAssignedAgentsAsync(CancellationToken cancellationToken) diff --git a/src/Setup/Insight.Setup.Windows/Constants/Deploy.cs b/src/Setup/Insight.Setup.Windows/Constants/Deploy.cs index 5240b5e..d1dffe1 100644 --- a/src/Setup/Insight.Setup.Windows/Constants/Deploy.cs +++ b/src/Setup/Insight.Setup.Windows/Constants/Deploy.cs @@ -6,18 +6,18 @@ public static class Deploy { public static class Core { - public const string Version = "7.0.2"; - public const string Download = "https://download.visualstudio.microsoft.com/download/pr/df7da01f-1f17-4728-92b7-778e9607da8f/7c18246830f8c78591f02f25aa368dcf/dotnet-runtime-7.0.2-win-x64.exe"; + public const string Version = "8.0.0"; + public const string Download = "https://download.visualstudio.microsoft.com/download/pr/7f4d5cbc-4449-4ea5-9578-c467821f251f/b9b19f89d0642bf78f4b612c6a741637/dotnet-runtime-8.0.0-win-x64.exe"; - public static DirectoryInfo Directory => new DirectoryInfo($@"{Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)}/dotnet/shared/Microsoft.NETCore.App"); + public static DirectoryInfo Directory => new($@"{Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)}/dotnet/shared/Microsoft.NETCore.App"); } public static class Asp { - public const string Version = "7.0.2"; - public const string Download = "https://download.visualstudio.microsoft.com/download/pr/3ecad4f7-1342-4688-ae4a-38908c61f4a2/391a9010acad2e312e3d1e766bedfac7/aspnetcore-runtime-7.0.2-win-x64.exe"; + public const string Version = "8.0.0"; + public const string Download = "https://download.visualstudio.microsoft.com/download/pr/89d3660b-d344-47c5-a1cd-d8343a3f3779/9f55af82923dab7e3dce912f5c5b9d60/aspnetcore-runtime-8.0.0-win-x64.exe"; - public static DirectoryInfo Directory => new DirectoryInfo($@"{Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)}/dotnet/shared/Microsoft.AspNetCore.App"); + public static DirectoryInfo Directory => new($@"{Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)}/dotnet/shared/Microsoft.AspNetCore.App"); } } diff --git a/src/Setup/Insight.Setup.Windows/Insight.Setup.Windows.csproj b/src/Setup/Insight.Setup.Windows/Insight.Setup.Windows.csproj index 377172e..3a2de0e 100644 --- a/src/Setup/Insight.Setup.Windows/Insight.Setup.Windows.csproj +++ b/src/Setup/Insight.Setup.Windows/Insight.Setup.Windows.csproj @@ -2,13 +2,15 @@ Exe - net7.0 + net8.0 + latest true enable setup Insight.Setup Insight 2023.12.14.0 + none @@ -33,8 +35,8 @@ - - + + diff --git a/src/Setup/Insight.Setup.Windows/Services/Deployment.cs b/src/Setup/Insight.Setup.Windows/Services/Deployment.cs index cfddfa9..cf4306d 100644 --- a/src/Setup/Insight.Setup.Windows/Services/Deployment.cs +++ b/src/Setup/Insight.Setup.Windows/Services/Deployment.cs @@ -139,7 +139,7 @@ public static class Deployment await File.WriteAllBytesAsync(updateFile.FullName, await update.Content.ReadAsByteArrayAsync(cancellationToken), cancellationToken); // extract update archive from temp to app dir (overwrite) - ZipFile.ExtractToDirectory(updateFile.FullName, bin.Directory?.FullName, true); + ZipFile.ExtractToDirectory(updateFile.FullName, bin.Directory!.FullName, true); // delete temp folder if (temp.Exists) temp.Delete(true); @@ -238,7 +238,7 @@ public static class Deployment await File.WriteAllBytesAsync(updateFile.FullName, await update.Content.ReadAsByteArrayAsync(cancellationToken), cancellationToken); // extract update archive from temp to app dir (overwrite) - ZipFile.ExtractToDirectory(updateFile.FullName, bin.Directory?.FullName, true); + ZipFile.ExtractToDirectory(updateFile.FullName, bin.Directory!.FullName, true); // delete temp folder if (temp.Exists) temp.Delete(true); @@ -324,7 +324,7 @@ public static class Deployment var matched = System.Diagnostics.Process.GetProcessesByName(bin.FullName); - if (matched is null || matched.Any() is false) return false; + if (matched is null || matched.Length == 0) return false; if (matched.Any(p => p.MainModule is not null && @@ -357,7 +357,7 @@ public static class Deployment var matched = System.Diagnostics.Process.GetProcessesByName(bin.FullName); - if (matched is null || matched.Any() is false) return true; + if (matched is null || matched.Length == 0) return true; foreach (var procsInfo in matched.Where(p => p.MainModule is not null && @@ -407,7 +407,7 @@ public static class Deployment await File.WriteAllBytesAsync(updateFile.FullName, await update.Content.ReadAsByteArrayAsync(cancellationToken), cancellationToken); // extract update archive from temp to app dir (overwrite) - ZipFile.ExtractToDirectory(updateFile.FullName, bin.Directory?.FullName, true); + ZipFile.ExtractToDirectory(updateFile.FullName, bin.Directory!.FullName, true); // delete temp folder if (temp.Exists) temp.Delete(true); @@ -448,8 +448,8 @@ public static class Deployment public bool ApiAvailable { get; set; } = false; public bool Success { get; set; } = false; - public List ApiErrors { get; } = new(); - public List Errors { get; } = new(); + public List ApiErrors { get; } = []; + public List Errors { get; } = []; } public class UpdateResult @@ -462,8 +462,8 @@ public static class Deployment public bool ApiAvailable { get; set; } = false; public bool UpdateAvailable { get; set; } = false; public bool Success { get; set; } = false; - public List ApiErrors { get; } = new(); - public List UpdateErrors { get; } = new(); + public List ApiErrors { get; } = []; + public List UpdateErrors { get; } = []; } public class UninstallResult @@ -471,6 +471,6 @@ public static class Deployment public string? ServiceName { get; set; } public bool Success { get; set; } = false; - public List Errors { get; } = new(); + public List Errors { get; } = []; } } \ No newline at end of file diff --git a/src/Setup/Insight.Setup.Windows/Services/SetupService.cs b/src/Setup/Insight.Setup.Windows/Services/SetupService.cs index 547bec9..0d5bec5 100644 --- a/src/Setup/Insight.Setup.Windows/Services/SetupService.cs +++ b/src/Setup/Insight.Setup.Windows/Services/SetupService.cs @@ -8,21 +8,17 @@ using System.Runtime.Versioning; namespace Insight.Setup.Services; [SupportedOSPlatform("windows")] -internal class SetupService : BackgroundService +internal class SetupService( + HttpClient httpClient, + IHostApplicationLifetime lifetime, + IConfiguration configuration, + ILogger logger) : BackgroundService { - private readonly Uri _uri; + private readonly Uri _uri = configuration.GetValue("api") ?? new Uri("https://insight.webmatic.de/api"); - private readonly HttpClient _httpClient; - private readonly IHostApplicationLifetime _lifetime; - private readonly ILogger _logger; - - public SetupService(HttpClient httpClient, IHostApplicationLifetime lifetime, IConfiguration configuration, ILogger logger) - { - _httpClient = httpClient; - _lifetime = lifetime; - _uri = configuration.GetValue("api") ?? new Uri("https://insight.webmatic.de/api"); //throw new Exception($"api value not set (appsettings)"); - _logger = logger; - } + private readonly HttpClient _httpClient = httpClient; + private readonly IHostApplicationLifetime _lifetime = lifetime; + private readonly ILogger _logger = logger; protected override async Task ExecuteAsync(CancellationToken cancellationToken) { diff --git a/src/Updater/Insight.Updater/Insight.Updater.csproj b/src/Updater/Insight.Updater/Insight.Updater.csproj index c4d2f53..222459b 100644 --- a/src/Updater/Insight.Updater/Insight.Updater.csproj +++ b/src/Updater/Insight.Updater/Insight.Updater.csproj @@ -2,13 +2,15 @@ Exe - net7.0 + net8.0 + latest Insight Insight.Updater updater 2023.12.14.0 enable enable + none @@ -39,10 +41,10 @@ - - + + - + diff --git a/src/Updater/Insight.Updater/Services/UpdateService.cs b/src/Updater/Insight.Updater/Services/UpdateService.cs index c2935b7..402314e 100644 --- a/src/Updater/Insight.Updater/Services/UpdateService.cs +++ b/src/Updater/Insight.Updater/Services/UpdateService.cs @@ -12,19 +12,15 @@ using System.Text.Json; namespace Insight.Updater.Services; -public class UpdateService : BackgroundService +public class UpdateService( + HttpClient httpClient, + IConfiguration configuration, + ILogger logger) : BackgroundService { - private readonly Uri _uri; + private readonly Uri _uri = configuration.GetValue("api") ?? throw new Exception($"api value not set (appsettings)"); - private readonly HttpClient _httpClient; - private readonly ILogger _logger; - - public UpdateService(HttpClient httpClient, IConfiguration configuration, ILogger logger) - { - _httpClient = httpClient; - _uri = configuration.GetValue("api") ?? throw new Exception($"api value not set (appsettings)"); - _logger = logger; - } + private readonly HttpClient _httpClient = httpClient; + private readonly ILogger _logger = logger; protected override async Task ExecuteAsync(CancellationToken cancellationToken) { @@ -40,9 +36,10 @@ public class UpdateService : BackgroundService if (OperatingSystem.IsLinux()) result = await LinuxUpdateAsync(cancellationToken); _logger.LogInformation("Update Result: {result}", result?.Success); + if (result?.UpdateErrors is not null) { - _logger.LogError("Update Errors: {errors}", string.Concat(result?.UpdateErrors)); + _logger.LogError("Update Errors: {errors}", string.Concat(result.UpdateErrors)); } } catch (OperationCanceledException) { } @@ -198,7 +195,7 @@ public class UpdateService : BackgroundService await File.WriteAllBytesAsync(updateFile.FullName, await update.Content.ReadAsByteArrayAsync(cancellationToken), cancellationToken); // extract update archive from temp to app dir (overwrite) - ZipFile.ExtractToDirectory(updateFile.FullName, bin.Directory?.FullName, true); + ZipFile.ExtractToDirectory(updateFile.FullName, bin.Directory!.FullName, true); // delete temp folder if (temp.Exists) temp.Delete(true); @@ -229,7 +226,7 @@ public class UpdateService : BackgroundService var matched = System.Diagnostics.Process.GetProcessesByName(bin.FullName); - if (matched is null || matched.Any() is false) return false; + if (matched is null || matched.Length == 0) return false; if (matched.Any(p => p.MainModule is not null && @@ -262,7 +259,7 @@ public class UpdateService : BackgroundService var matched = System.Diagnostics.Process.GetProcessesByName(bin.FullName); - if (matched is null || matched.Any() is false) return true; + if (matched is null || matched.Length == 0) return true; foreach (var procsInfo in matched.Where(p => p.MainModule is not null && @@ -312,7 +309,7 @@ public class UpdateService : BackgroundService await File.WriteAllBytesAsync(updateFile.FullName, await update.Content.ReadAsByteArrayAsync(cancellationToken), cancellationToken); // extract update archive from temp to app dir (overwrite) - ZipFile.ExtractToDirectory(updateFile.FullName, bin.Directory?.FullName, true); + ZipFile.ExtractToDirectory(updateFile.FullName, bin.Directory!.FullName, true); // delete temp folder if (temp.Exists) temp.Delete(true); @@ -353,7 +350,7 @@ public class UpdateService : BackgroundService public bool ApiAvailable { get; set; } = false; public bool UpdateAvailable { get; set; } = false; public bool Success { get; set; } = false; - public List ApiErrors { get; } = new(); - public List UpdateErrors { get; } = new(); + public List ApiErrors { get; } = []; + public List UpdateErrors { get; } = []; } } \ No newline at end of file diff --git a/src/Web/Insight.Web/Components/Dialogs/ChatDialog.razor b/src/Web/Insight.Web/Components/Dialogs/ChatDialog.razor index b974ab4..f8a0d44 100644 --- a/src/Web/Insight.Web/Components/Dialogs/ChatDialog.razor +++ b/src/Web/Insight.Web/Components/Dialogs/ChatDialog.razor @@ -85,28 +85,31 @@ { var sender = ChatService.Users.Keys.FirstOrDefault(p => p.Uid == message.SenderId); - -
-
- - - @sender?.Username?.ToUpper().FirstOrDefault() - - + @if (sender is not null) + { + +
+
+ + + @sender?.Username?.ToUpper().FirstOrDefault() + + +
+
+ + @sender?.Username + + + @message.CreatedDate.ToString("dd MMM yyyy - hh:mm tt") + + + @message.Message + +
-
- - @sender?.Username - - - @message.CreatedDate.ToString("dd MMM yyyy - hh:mm tt") - - - @message.Message - -
-
- + + } } } diff --git a/src/Web/Insight.Web/Components/Dialogs/ChatDialog.razor.cs b/src/Web/Insight.Web/Components/Dialogs/ChatDialog.razor.cs index c336369..498e740 100644 --- a/src/Web/Insight.Web/Components/Dialogs/ChatDialog.razor.cs +++ b/src/Web/Insight.Web/Components/Dialogs/ChatDialog.razor.cs @@ -50,14 +50,16 @@ public partial class ChatDialog : IDisposable private string? _currentMessage; private bool _disposed; - private readonly List _subscriptions = new(); + private readonly List _subscriptions = []; - protected override async Task OnInitializedAsync() + protected override Task OnInitializedAsync() { _subscriptions.Add(Bus.SubscribeAsync(UserConnected, p => p.User.Uid != SessionHandler.State.Uid)); _subscriptions.Add(Bus.SubscribeAsync(UserDisconnected, p => p.User.Uid != SessionHandler.State.Uid)); _subscriptions.Add(Bus.SubscribeAsync(RefreshAsync, null)); _subscriptions.Add(Bus.SubscribeAsync(MessageReceived, p => p.Message.SenderId != SessionHandler.State.Uid)); + + return Task.CompletedTask; } protected override async Task OnAfterRenderAsync(bool firstRender) @@ -82,6 +84,8 @@ public partial class ChatDialog : IDisposable private async Task GetSessionAsync(ChatUser user) { + if (_currentUser is null) return; + var members = new List() { _currentUser, user }; var session = await ChatService.AddOrGetSession(members); @@ -93,7 +97,7 @@ public partial class ChatDialog : IDisposable private async Task SendAsync() { - if (_currentSession is null || string.IsNullOrWhiteSpace(_currentMessage)) return; + if (_currentSession is null || _currentUser is null || string.IsNullOrWhiteSpace(_currentMessage)) return; await _currentSession.SendMessage(_currentUser, _currentMessage, default); _currentMessage = string.Empty; @@ -118,11 +122,11 @@ public partial class ChatDialog : IDisposable options.VisibleStateDuration = 10000; }); - _ = JSRuntime.InvokeAsync("PlayAudio", "chat_user_online"); + await JSRuntime.InvokeAsync("PlayAudio", "chat_user_online"); } catch (Exception ex) { - Logger.LogError(ex.Message); + Logger.LogError("{exception}", ex.Message); } } @@ -141,17 +145,17 @@ public partial class ChatDialog : IDisposable options.VisibleStateDuration = 10000; }); - _ = JSRuntime.InvokeAsync("PlayAudio", "chat_user_online"); + await JSRuntime.InvokeAsync("PlayAudio", "chat_user_online"); } catch (Exception ex) { - Logger.LogError(ex.Message); + Logger.LogError("{exception}", ex.Message); } } private async ValueTask RefreshAsync(ChatRefresh model, CancellationToken cancellationToken) { - _ = InvokeAsync(StateHasChanged); + await InvokeAsync(StateHasChanged); } private async ValueTask MessageReceived(ChatMessageReceived model, CancellationToken cancellationToken) @@ -175,14 +179,14 @@ public partial class ChatDialog : IDisposable if (_content != Content.Chat) { - _ = JSRuntime.InvokeAsync("PlayAudio", "chat_message"); + await JSRuntime.InvokeAsync("PlayAudio", "chat_message"); } - _ = InvokeAsync(StateHasChanged); + await InvokeAsync(StateHasChanged); } catch (Exception ex) { - Logger.LogError(ex.ToString()); + Logger.LogError("{exception}", ex.ToString()); } } diff --git a/src/Web/Insight.Web/Components/Layouts/MainLayout.razor b/src/Web/Insight.Web/Components/Layouts/MainLayout.razor index ea2781f..2c42384 100644 --- a/src/Web/Insight.Web/Components/Layouts/MainLayout.razor +++ b/src/Web/Insight.Web/Components/Layouts/MainLayout.razor @@ -28,10 +28,7 @@ - @if (_darkModeSwitch is false) - { - - } + @@ -50,17 +47,17 @@ @code{ - public IReadOnlyDictionary? RouteValues { get; set; } + public IReadOnlyDictionary? RouteValues { get; set; } private MudTheme _currentTheme = Themes.Default(); private DrawerProvider? _drawer; private bool _darkMode; - private bool _darkModeSwitch; private bool _disposed; - + protected override void OnParametersSet() { - RouteValues = (Body?.Target as RouteView)?.RouteData.RouteValues; + if (Body?.Target as RouteView is RouteView routeView) + RouteValues = routeView.RouteData.RouteValues; base.OnParametersSet(); } @@ -94,6 +91,8 @@ using var scope = ServiceScopeFactory.CreateScope(); var userManager = scope.ServiceProvider.GetRequiredService>(); + if (state.User.Identity?.Name is null) return; + if (await userManager.FindByNameAsync(state.User.Identity.Name) is not InsightUser user) return; var userPrefs = await Database.UserPreference() @@ -124,6 +123,8 @@ using var scope = ServiceScopeFactory.CreateScope(); var userManager = scope.ServiceProvider.GetRequiredService>(); + if (state.User.Identity?.Name is null) return; + if (await userManager.FindByNameAsync(state.User.Identity.Name) is not InsightUser user) return; var date = DateTime.Now; diff --git a/src/Web/Insight.Web/Components/Navbars/Account.razor b/src/Web/Insight.Web/Components/Navbars/Account.razor index 92fca5e..8180f02 100644 --- a/src/Web/Insight.Web/Components/Navbars/Account.razor +++ b/src/Web/Insight.Web/Components/Navbars/Account.razor @@ -10,7 +10,6 @@ @code{ [CascadingParameter] public IReadOnlyDictionary? RouteValues { get; set; } - private string _title = "Account"; private bool _disposed; public void Dispose() @@ -21,8 +20,7 @@ private void Dispose(bool disposing) { - if (_disposed is false) return; - if (disposing is false) return; + if (_disposed || disposing is false) return; try { diff --git a/src/Web/Insight.Web/Constants/Navigation.cs b/src/Web/Insight.Web/Constants/Navigation.cs index 3fcdfd6..9bea8c5 100644 --- a/src/Web/Insight.Web/Constants/Navigation.cs +++ b/src/Web/Insight.Web/Constants/Navigation.cs @@ -1,6 +1,4 @@ -using static Insight.Web.Constants.Navigation.Monitoring; - -namespace Insight.Web.Constants; +namespace Insight.Web.Constants; public static class Navigation { diff --git a/src/Web/Insight.Web/Constants/Themes.cs b/src/Web/Insight.Web/Constants/Themes.cs index b90d391..666b4cb 100644 --- a/src/Web/Insight.Web/Constants/Themes.cs +++ b/src/Web/Insight.Web/Constants/Themes.cs @@ -85,7 +85,7 @@ public static class Themes FontWeight = 400, LineHeight = 1.43, LetterSpacing = "normal", - FontFamily = new string[] { "Public Sans", "Roboto", "Arial", "sans-serif" } + FontFamily = ["Public Sans", "Roboto", "Arial", "sans-serif"] }, H1 = new H1 { diff --git a/src/Web/Insight.Web/Extensions/NavigationManagerExtensions.cs b/src/Web/Insight.Web/Extensions/NavigationManagerExtensions.cs index 651f893..4c61a23 100644 --- a/src/Web/Insight.Web/Extensions/NavigationManagerExtensions.cs +++ b/src/Web/Insight.Web/Extensions/NavigationManagerExtensions.cs @@ -10,7 +10,7 @@ public static class NavigationManagerExtensions public static Dictionary GetQueryString(this NavigationManager navigationManager) { var uri = navigationManager.ToAbsoluteUri(navigationManager.Uri); - if (uri is null) return new Dictionary(); + if (uri is null) return []; return QueryHelpers.ParseQuery(uri.Query); } @@ -19,9 +19,9 @@ public static class NavigationManagerExtensions { var queryString = GetQueryString(navigationManager); - if (queryString.ContainsKey(key)) + if (queryString.TryGetValue(key, out StringValues keyValues)) { - if (queryString[key] == value) return; + if (keyValues == value) return; queryString[key] = value; } else @@ -49,11 +49,10 @@ public static class NavigationManagerExtensions url = RemoveQueryStringByKey(url, key); } - var query = new Dictionary(); + var query = new Dictionary(); + foreach (var keys in queryString.Where(x => string.IsNullOrWhiteSpace(x.Value) is false)) - { - query.Add(keys.Key, keys.Value.ToString()); - } + query.Add(keys.Key, keys.Value); return QueryHelpers.AddQueryString(url, query); } diff --git a/src/Web/Insight.Web/Insight.Web.csproj b/src/Web/Insight.Web/Insight.Web.csproj index b5226cd..b1cacbb 100644 --- a/src/Web/Insight.Web/Insight.Web.csproj +++ b/src/Web/Insight.Web/Insight.Web.csproj @@ -1,7 +1,8 @@  - net7.0 + net8.0 + latest Insight web 2023.12.14.0 @@ -10,30 +11,34 @@ enable false false + none - none + none + BL0007 - none + none + BL0007 - - + + - + + diff --git a/src/Web/Insight.Web/Middleware/IdentityMiddleware.cs b/src/Web/Insight.Web/Middleware/IdentityMiddleware.cs index 68c9e01..f2d3f14 100644 --- a/src/Web/Insight.Web/Middleware/IdentityMiddleware.cs +++ b/src/Web/Insight.Web/Middleware/IdentityMiddleware.cs @@ -8,72 +8,66 @@ using System.Collections.Concurrent; namespace Insight.Web.Middleware; -public class IdentityMiddleware +public class IdentityMiddleware(RequestDelegate next, ILogger logger) { public static IDictionary Logins { get; private set; } = new ConcurrentDictionary(); public static IDictionary Passwords { get; private set; } = new ConcurrentDictionary(); - private RequestDelegate Next { get; } - private ILogger Logger { get; } - - public IdentityMiddleware(RequestDelegate next, ILogger logger) - { - Next = next; - Logger = logger; - } + private RequestDelegate Next { get; } = next; + private ILogger Logger { get; } = logger; public async Task Invoke(HttpContext context, IServiceProvider serviceProvider) { try { - // skip blazor / internal requests - if (context.Request.Path.Value.StartsWith("/_blazor")) return; - if (context.Request.Path.Value.StartsWith("/_framework")) return; - if (context.Request.Path.Value.StartsWith("/_content")) return; - if (context.Request.Path.Value.StartsWith("/css")) return; - if (context.Request.Path.Value.StartsWith("/fonts")) return; - if (context.Request.Path.Value.StartsWith("/media")) return; - if (context.Request.Path.Value.StartsWith("/js")) return; - if (context.Request.Path.Value.StartsWith("/favicon")) return; - - //Logger.LogWarning($"{context.Request.Path}"); - - // skip hub request (test) - if (context.Request.Path.Value.StartsWith("/hub")) return; - - - // ignore 2fa login request - if (context.Request.Path.Value.StartsWith($"/{Navigation.Account.LoginTFA}")) return; - - // ignore login request - if (context.Request.Path.Value.StartsWith($"/{Navigation.Account.Login}")) return; - - // 2fa signin request - if (context.Request.Path.Value.StartsWith($"/{Navigation.Account.SignInTFA}")) + if (context.Request.Path.Value is not null) { - await OnSignInTFAAsync(context, serviceProvider).ConfigureAwait(false); - return; - } + // skip blazor / internal requests + if (context.Request.Path.Value.StartsWith("/_blazor")) return; + if (context.Request.Path.Value.StartsWith("/_framework")) return; + if (context.Request.Path.Value.StartsWith("/_content")) return; + if (context.Request.Path.Value.StartsWith("/css")) return; + if (context.Request.Path.Value.StartsWith("/fonts")) return; + if (context.Request.Path.Value.StartsWith("/media")) return; + if (context.Request.Path.Value.StartsWith("/js")) return; + if (context.Request.Path.Value.StartsWith("/favicon")) return; - // signin request - if (context.Request.Path.Value.StartsWith($"/{Navigation.Account.SignIn}")) - { - await OnSignInAsync(context, serviceProvider).ConfigureAwait(false); - return; - } + // skip hub request (test) + if (context.Request.Path.Value.StartsWith("/hub")) return; - // logout request - if (context.Request.Path.Value.StartsWith($"/{Navigation.Account.Logout}")) - { - await OnLogoutAsync(context, serviceProvider).ConfigureAwait(false); - return; - } + // ignore 2fa login request + if (context.Request.Path.Value.StartsWith($"/{Navigation.Account.LoginTFA}")) return; - //password change request - if (context.Request.Path.Value.StartsWith($"/{Navigation.Account.ChangePassword}")) - { - await OnChangePasswordAsync(context, serviceProvider).ConfigureAwait(false); - return; + // ignore login request + if (context.Request.Path.Value.StartsWith($"/{Navigation.Account.Login}")) return; + + // 2fa signin request + if (context.Request.Path.Value.StartsWith($"/{Navigation.Account.SignInTFA}")) + { + await OnSignInTFAAsync(context, serviceProvider).ConfigureAwait(false); + return; + } + + // signin request + if (context.Request.Path.Value.StartsWith($"/{Navigation.Account.SignIn}")) + { + await OnSignInAsync(context, serviceProvider).ConfigureAwait(false); + return; + } + + // logout request + if (context.Request.Path.Value.StartsWith($"/{Navigation.Account.Logout}")) + { + await OnLogoutAsync(context, serviceProvider).ConfigureAwait(false); + return; + } + + //password change request + if (context.Request.Path.Value.StartsWith($"/{Navigation.Account.ChangePassword}")) + { + await OnChangePasswordAsync(context, serviceProvider).ConfigureAwait(false); + return; + } } await OnCatchRoute(context, serviceProvider).ConfigureAwait(false); @@ -87,7 +81,7 @@ public class IdentityMiddleware private async ValueTask OnSignInAsync(HttpContext context, IServiceProvider serviceProvider) { if (context.Request.Query.ContainsKey("key") is false) return; - var key = Guid.Parse(context.Request.Query["key"]); + if (Guid.TryParse(context.Request.Query["key"], out var key) is false) return; try { @@ -96,21 +90,21 @@ public class IdentityMiddleware var userManager = scope.ServiceProvider.GetRequiredService>(); var signInManager = scope.ServiceProvider.GetRequiredService>(); - if (await userManager.FindByEmailAsync(Logins[key].Email) is not InsightUser user) + if (await userManager.FindByEmailAsync(Logins[key].Email ?? string.Empty) is not InsightUser user) { - context.Response.Redirect($"/{Navigation.Account.LoginHref(Logins[key].Redirect)}"); + context.Response.Redirect($"/{Navigation.Account.LoginHref(Logins[key].Redirect ?? string.Empty)}"); return; } - if (await userManager.CheckPasswordAsync(user, Logins[key].Password) is false) + if (Logins[key].Password is not string password || await userManager.CheckPasswordAsync(user, password) is false) { - context.Response.Redirect($"/{Navigation.Account.LoginHref(Logins[key].Redirect)}"); + context.Response.Redirect($"/{Navigation.Account.LoginHref(Logins[key].Redirect ?? string.Empty)}"); return; } if (await userManager.GetTwoFactorEnabledAsync(user)) { - var result = await signInManager.PasswordSignInAsync(user.UserName, Logins[key].Password, Logins[key].RememberMe, lockoutOnFailure: false).ConfigureAwait(false); + var result = await signInManager.PasswordSignInAsync(user.UserName ?? string.Empty, Logins[key].Password ?? string.Empty, Logins[key].RememberMe, lockoutOnFailure: false).ConfigureAwait(false); context.Response.Redirect($"/{Navigation.Account.LoginTFAHref(key)}"); return; } @@ -146,7 +140,7 @@ public class IdentityMiddleware } catch (Exception ex) { - Logger.LogError(ex.ToString()); + Logger.LogError("{exception}", ex.ToString()); } finally { @@ -156,11 +150,10 @@ public class IdentityMiddleware private async ValueTask OnSignInTFAAsync(HttpContext context, IServiceProvider serviceProvider) { - Logger.LogInformation($"OnSignInTFAAsync ({context.Request.Path})"); + Logger.LogInformation("OnSignInTFAAsync ({context})", context.Request.Path); if (context.Request.Query.ContainsKey("key") is false) return; - - var key = Guid.Parse(context.Request.Query["key"]); + if (Guid.TryParse(context.Request.Query["key"], out var key) is false) return; try { @@ -169,9 +162,13 @@ public class IdentityMiddleware var userManager = scope.ServiceProvider.GetRequiredService>(); var signInManager = scope.ServiceProvider.GetRequiredService>(); - var user = await userManager.FindByEmailAsync(Logins[key].Email).ConfigureAwait(false); + if (Logins[key].Email is not string email) return; - var authenticatorCode = Logins[key].TwoFactorToken.Replace(" ", string.Empty).Replace("-", string.Empty); + var user = await userManager.FindByEmailAsync(email).ConfigureAwait(false); + if (user is null) return; + + var authenticatorCode = Logins[key].TwoFactorToken?.Replace(" ", string.Empty).Replace("-", string.Empty); + if (authenticatorCode is null) return; var valid = await userManager.VerifyTwoFactorTokenAsync(user, userManager.Options.Tokens.AuthenticatorTokenProvider, authenticatorCode).ConfigureAwait(false); if (valid is false) @@ -208,12 +205,12 @@ public class IdentityMiddleware } else { - context.Response.Redirect($"/{Navigation.Account.LoginHref(Logins[key].Redirect)}"); + context.Response.Redirect($"/{Navigation.Account.LoginHref(Logins[key].Redirect ?? string.Empty)}"); } } catch (Exception ex) { - Logger.LogError(ex.ToString()); + Logger.LogError("{exception}", ex.ToString()); } finally { @@ -223,7 +220,7 @@ public class IdentityMiddleware private async ValueTask OnLogoutAsync(HttpContext context, IServiceProvider serviceProvider) { - Logger.LogInformation($"OnLogoutAsync ({context.Request.Path})"); + Logger.LogInformation("OnLogoutAsync ({context})", context.Request.Path); using var scope = serviceProvider.CreateScope(); var signInManager = scope.ServiceProvider.GetRequiredService>(); @@ -232,24 +229,23 @@ public class IdentityMiddleware context.Response.Redirect($"/"); } - private async ValueTask OnDisconnectAsync(HttpContext context, IServiceProvider serviceProvider) - { - Logger.LogInformation($"OnDisconnectAsync ({context.Request.Path})"); + //private async ValueTask OnDisconnectAsync(HttpContext context, IServiceProvider serviceProvider) + //{ + // Logger.LogInformation($"OnDisconnectAsync ({context.Request.Path})"); - using var scope = serviceProvider.CreateScope(); - var signInManager = scope.ServiceProvider.GetRequiredService>(); - await signInManager.SignOutAsync().ConfigureAwait(false); + // using var scope = serviceProvider.CreateScope(); + // var signInManager = scope.ServiceProvider.GetRequiredService>(); + // await signInManager.SignOutAsync().ConfigureAwait(false); - context.Abort(); - } + // context.Abort(); + //} private async ValueTask OnChangePasswordAsync(HttpContext context, IServiceProvider serviceProvider) { - Logger.LogInformation($"OnChangePasswordAsync ({context.Request.Path})"); + Logger.LogInformation("OnChangePasswordAsync ({context})", context.Request.Path); if (context.Request.Query.ContainsKey("key") is false) return; - - var key = Guid.Parse(context.Request.Query["key"]); + if (Guid.TryParse(context.Request.Query["key"], out var key) is false) return; try { @@ -257,11 +253,14 @@ public class IdentityMiddleware var userManager = scope.ServiceProvider.GetRequiredService>(); var user = await userManager.GetUserAsync(context.User).ConfigureAwait(false); - var result = await userManager.ChangePasswordAsync(user, Passwords[key]?.OldPassword, Passwords[key]?.NewPassword).ConfigureAwait(false); + if (user is null) return; + + if (Passwords[key]?.OldPassword is string pwOld && Passwords[key]?.NewPassword is string pwNew) + _ = await userManager.ChangePasswordAsync(user, pwOld, pwNew).ConfigureAwait(false); } catch (Exception ex) { - Logger.LogError(ex.ToString()); + Logger.LogError("{exception}", ex.ToString()); } finally { @@ -282,10 +281,9 @@ public class IdentityMiddleware Logger.LogCritical("non auth - redirect"); var returnPath = context.Request.Path.Value ?? string.Empty; - if (returnPath.StartsWith("/")) - { - returnPath = returnPath.Substring(1); - } + + if (returnPath.StartsWith('/')) + returnPath = returnPath[1..]; context.Response.Redirect($"/{Navigation.Account.LoginHref(returnPath)}"); diff --git a/src/Web/Insight.Web/Models/ChatSession.cs b/src/Web/Insight.Web/Models/ChatSession.cs index 9c2fdc3..dfaa71d 100644 --- a/src/Web/Insight.Web/Models/ChatSession.cs +++ b/src/Web/Insight.Web/Models/ChatSession.cs @@ -3,19 +3,16 @@ using System.Collections.Concurrent; namespace Insight.Web.Models; -public class ChatSession +public class ChatSession( + IEnumerable members, + Func onMessageSent) { public ObjectId Id { get; } = ObjectId.GenerateNewId(); - public IEnumerable Members { get; } - public ConcurrentBag Messages { get; } = new(); + public IEnumerable Members { get; } = members; + public ConcurrentBag Messages { get; } = []; - private readonly Func OnMessageSent; - - public ChatSession(IEnumerable members, Func onMessageSent) - { - Members = members; - OnMessageSent = onMessageSent; - } + private readonly Func OnMessageSent = onMessageSent; public async Task SendMessage(ChatUser sender, string message, CancellationToken cancellationToken) { diff --git a/src/Web/Insight.Web/Models/ChatUser.cs b/src/Web/Insight.Web/Models/ChatUser.cs index 35c9713..9799690 100644 --- a/src/Web/Insight.Web/Models/ChatUser.cs +++ b/src/Web/Insight.Web/Models/ChatUser.cs @@ -2,19 +2,14 @@ namespace Insight.Web.Models; -public class ChatUser +public class ChatUser(ObjectId uid) { - public ObjectId Uid { get; set; } + public ObjectId Uid { get; set; } = uid; public bool Online { get; set; } public string? Username { get; set; } public string? Email { get; set; } public byte[]? Avatar { get; set; } - public ChatUser(ObjectId uid) - { - Uid = uid; - } - public override bool Equals(object? obj) { if (obj == null || GetType() != obj.GetType()) return false; diff --git a/src/Web/Insight.Web/Network/Broker/Handlers/AgentHandler.cs b/src/Web/Insight.Web/Network/Broker/Handlers/AgentHandler.cs index 454202a..9071353 100644 --- a/src/Web/Insight.Web/Network/Broker/Handlers/AgentHandler.cs +++ b/src/Web/Insight.Web/Network/Broker/Handlers/AgentHandler.cs @@ -5,14 +5,9 @@ using Vaitr.Bus; namespace Insight.Web.Network.Broker.Handlers; -public class AgentHandler : IMessageHandler +public class AgentHandler(Bus bus) : IMessageHandler { - private readonly Bus _bus; - - public AgentHandler(Bus bus) - { - _bus = bus; - } + private readonly Bus _bus = bus; public async ValueTask HandleAsync(WebSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { diff --git a/src/Web/Insight.Web/Network/Broker/WebSession.cs b/src/Web/Insight.Web/Network/Broker/WebSession.cs index 07c6351..db743ac 100644 --- a/src/Web/Insight.Web/Network/Broker/WebSession.cs +++ b/src/Web/Insight.Web/Network/Broker/WebSession.cs @@ -4,14 +4,12 @@ using Vaitr.Network; namespace Insight.Web.Network.Broker; -public class WebSession : TcpSession +public class WebSession( + IEnumerable> handlers, + ISerializer serializer, + ILogger logger) : TcpSession(serializer, logger) { - private readonly IEnumerable> _handlers; - - public WebSession(IEnumerable> handlers, ISerializer serializer, ILogger logger) : base(serializer, logger) - { - _handlers = handlers; - } + private readonly IEnumerable> _handlers = handlers; protected override ValueTask OnConnectedAsync(CancellationToken cancellationToken) { diff --git a/src/Web/Insight.Web/Network/Remote/Handlers/RemoteHandler.cs b/src/Web/Insight.Web/Network/Remote/Handlers/RemoteHandler.cs index 3cee8d5..71d57a0 100644 --- a/src/Web/Insight.Web/Network/Remote/Handlers/RemoteHandler.cs +++ b/src/Web/Insight.Web/Network/Remote/Handlers/RemoteHandler.cs @@ -2,22 +2,15 @@ using Insight.Domain.Network; using Insight.Domain.Network.Remote.Messages; using Vaitr.Bus; -using Vaitr.Network; namespace Insight.Web.Network.Remote.Handlers; -public class RemoteHandler : IMessageHandler +public class RemoteHandler( + Bus bus, + ILogger logger) : IMessageHandler { - private readonly Bus _bus; - private readonly ISessionPool _remotePool; - private readonly ILogger _logger; - - public RemoteHandler(Bus bus, ISessionPool remotePool, ILogger logger) - { - _bus = bus; - _remotePool = remotePool; - _logger = logger; - } + private readonly Bus _bus = bus; + private readonly ILogger _logger = logger; public async ValueTask HandleAsync(RemoteSession sender, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage { @@ -53,7 +46,7 @@ public class RemoteHandler : IMessageHandler private async Task OnSessionRequest(RemoteSession session, RemoteSessionRequest sessionRequest, CancellationToken cancellationToken) { - _logger.LogInformation($"Remote {session.Id} => SessionRequest"); + _logger.LogInformation("Remote {session} => SessionRequest", session.Id); session.Mode = sessionRequest.Mode; @@ -65,7 +58,7 @@ public class RemoteHandler : IMessageHandler private async Task OnCastRequestResponse(RemoteSession session, CastRequestResponse castRequestResponse, CancellationToken cancellationToken) { - _logger.LogInformation($"Remote {castRequestResponse.Id} => CastRequestResponse"); + _logger.LogInformation("Remote {id} => CastRequestResponse", castRequestResponse.Id); await _bus.PublishAsync(castRequestResponse, cancellationToken); } @@ -81,7 +74,7 @@ public class RemoteHandler : IMessageHandler { //_logger.LogInformation($"Remote {screenData.Id} => ScreenData"); - await _bus.PublishAsync(screenData, cancellationToken); + await _bus.PublishAsync(screenData, cancellationToken); } private async Task OnCursorData(RemoteSession session, CastCursor cursorChanged, CancellationToken cancellationToken) @@ -93,14 +86,14 @@ public class RemoteHandler : IMessageHandler private async Task OnClipboardData(RemoteSession session, CastClipboardReceived clipboardChanged, CancellationToken cancellationToken) { - _logger.LogInformation($"Remote {session.Id} => ClipboardData"); + _logger.LogInformation("Remote {session} => ClipboardData", session.Id); await _bus.PublishAsync(clipboardChanged, cancellationToken); } private async Task OnAudioData(RemoteSession session, CastAudio audioSample, CancellationToken cancellationToken) { - _logger.LogInformation($"Remote {session.Id} => AudioData"); + _logger.LogInformation("Remote {session} => AudioData", session.Id); await _bus.PublishAsync(audioSample, cancellationToken); } diff --git a/src/Web/Insight.Web/Network/Remote/RemoteSession.cs b/src/Web/Insight.Web/Network/Remote/RemoteSession.cs index 6878e20..c9360e6 100644 --- a/src/Web/Insight.Web/Network/Remote/RemoteSession.cs +++ b/src/Web/Insight.Web/Network/Remote/RemoteSession.cs @@ -8,32 +8,22 @@ using static Insight.Web.Messages.RemoteMessages; namespace Insight.Web.Network.Remote; -public class RemoteSession : TcpSession +public class RemoteSession( + Bus bus, + IEnumerable> handlers, + ISerializer serializer, + ILogger logger) : TcpSession(serializer, logger) { - public string Id { get; } + public string Id { get; } = GenerateRandomId(); public RemoteControlMode Mode { get; set; } - private readonly Bus _bus; - private readonly IEnumerable> _handlers; - - public RemoteSession( - Bus bus, - IEnumerable> handlers, - ISerializer serializer, - ILogger logger) : base(serializer, logger) - { - Id = GenerateRandomId(); - - _bus = bus; - _handlers = handlers; - } + private readonly Bus _bus = bus; + private readonly IEnumerable> _handlers = handlers; protected override async ValueTask OnConnectedAsync(CancellationToken cancellationToken) { _logger.LogInformation("Remote ({ep?}) connected", RemoteEndPoint); - //return; - await _bus.PublishAsync(new RemoteDisconnected(this), default); } @@ -44,9 +34,10 @@ public class RemoteSession : TcpSession await _bus.PublishAsync(new RemoteDisconnected(this), default); } - protected override async ValueTask OnSentAsync(IPacketContext context, CancellationToken cancellationToken) + protected override ValueTask OnSentAsync(IPacketContext context, CancellationToken cancellationToken) { //await base.OnSentAsync(context, cancellationToken); + return default; } protected override async ValueTask OnReceivedAsync(IPacketContext context, CancellationToken cancellationToken) @@ -66,9 +57,10 @@ public class RemoteSession : TcpSession } } - protected override async ValueTask OnHeartbeatAsync(CancellationToken cancellationToken) + protected override ValueTask OnHeartbeatAsync(CancellationToken cancellationToken) { _logger.LogInformation("Remote ({ep?}) Heartbeat", RemoteEndPoint); + return default; } public async Task ScreenDataAckAsync(CastScreen screenData, CancellationToken cancellationToken) diff --git a/src/Web/Insight.Web/Pages/Account/Login.razor.cs b/src/Web/Insight.Web/Pages/Account/Login.razor.cs index f6a9bb2..3af234a 100644 --- a/src/Web/Insight.Web/Pages/Account/Login.razor.cs +++ b/src/Web/Insight.Web/Pages/Account/Login.razor.cs @@ -62,15 +62,14 @@ public partial class Login return; } - try - { - IdentityMiddleware.Logins[Key.Value].TwoFactorToken = code; - NavigationManager.NavigateTo(Navigation.Account.SignInTFAHref(Key.Value), true); - } - catch (Exception ex) + if (Key is null || IdentityMiddleware.Logins[Key.Value] is not LoginModel model) { Notification.Error(Snackbar, "Invalid Security Token"); - NavigationManager.NavigateTo(Navigation.Account.LoginHref(null), false); + NavigationManager.NavigateTo(Navigation.Account.LoginHref(string.Empty), false); + return; } + + IdentityMiddleware.Logins[Key.Value].TwoFactorToken = code; + NavigationManager.NavigateTo(Navigation.Account.SignInTFAHref(Key.Value), true); } } \ No newline at end of file diff --git a/src/Web/Insight.Web/Pages/Account/LoginTFA.razor b/src/Web/Insight.Web/Pages/Account/LoginTFA.razor deleted file mode 100644 index b0de9e7..0000000 --- a/src/Web/Insight.Web/Pages/Account/LoginTFA.razor +++ /dev/null @@ -1,32 +0,0 @@ -@inherits ComponentBase - - - -@if (true) -{ - return; -} - - - -
-
- - - - - - - Login - - - -
-
-
-
- -@code{ - private string? _code; -} \ No newline at end of file diff --git a/src/Web/Insight.Web/Pages/Account/LoginTFA.razor.cs b/src/Web/Insight.Web/Pages/Account/LoginTFA.razor.cs deleted file mode 100644 index c9df2e0..0000000 --- a/src/Web/Insight.Web/Pages/Account/LoginTFA.razor.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Insight.Web.Constants; -using Insight.Web.Middleware; -using Microsoft.AspNetCore.Components; -using MudBlazor; - -namespace Insight.Web.Pages.Account; - -//[Route(Navigation.Account.LoginTFA)] -public partial class LoginTFA -{ - [Parameter] public Guid Key { get; set; } - - [Inject] private NavigationManager NavigationManager { get; init; } = default!; - [Inject] private ISnackbar Snackbar { get; init; } = default!; - - private readonly string _title = "Login|Insight"; - - private void Submit(string? code) - { - if (string.IsNullOrWhiteSpace(code)) - { - Notification.Information(Snackbar, "Enter Authenticator Code"); - return; - } - - IdentityMiddleware.Logins[Key].TwoFactorToken = code; - NavigationManager.NavigateTo(Navigation.Account.SignInTFAHref(Key), true); - } -} \ No newline at end of file diff --git a/src/Web/Insight.Web/Pages/Account/Profile.razor.cs b/src/Web/Insight.Web/Pages/Account/Profile.razor.cs index 779882e..365187a 100644 --- a/src/Web/Insight.Web/Pages/Account/Profile.razor.cs +++ b/src/Web/Insight.Web/Pages/Account/Profile.razor.cs @@ -16,12 +16,12 @@ public partial class Profile [Inject] private AuthenticationStateProvider AuthenticationStateProvider { get; init; } = default!; private readonly string _title = "Profile|Insight"; - private readonly List _breadcrumbs = new() - { + private readonly List _breadcrumbs = + [ new BreadcrumbItem("Home", href: Navigation.Home), new BreadcrumbItem("Account", href: Navigation.Account.Profile), new BreadcrumbItem("Profile", href: "#", true) - }; + ]; protected override async Task OnInitializedAsync() { diff --git a/src/Web/Insight.Web/Pages/Index.razor.cs b/src/Web/Insight.Web/Pages/Index.razor.cs index c113f7c..b64192c 100644 --- a/src/Web/Insight.Web/Pages/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Index.razor.cs @@ -13,10 +13,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; private readonly string _title = "Home|Insight"; - private readonly List _breadcrumbs = new() - { + private readonly List _breadcrumbs = + [ new BreadcrumbItem("Home", href: "#", true), - }; + ]; private async Task LoadDataAsync() { diff --git a/src/Web/Insight.Web/Pages/Internal/Sessions.razor.cs b/src/Web/Insight.Web/Pages/Internal/Sessions.razor.cs index 465b79b..c83d2f5 100644 --- a/src/Web/Insight.Web/Pages/Internal/Sessions.razor.cs +++ b/src/Web/Insight.Web/Pages/Internal/Sessions.razor.cs @@ -10,5 +10,4 @@ public partial class Sessions [Inject] private SessionPool SessionPool { get; init; } = default!; [Inject] private SessionHandler SessionHandler { get; init; } = default!; [Inject] private IHttpContextAccessor HttpContextAccessor { get; init; } = default!; - [Inject] private ILogger Logger { get; init; } = default!; } \ No newline at end of file diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Hosts.razor b/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Hosts.razor index d38f522..aa32d2a 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Hosts.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -52,7 +52,7 @@ @{ - var color = context?.Status?.ToLower() switch + var color = context.Status?.ToLower() switch { "ok" => Color.Success, _ => Color.Error diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Hosts.razor.cs index f5c9bb7..919f9b1 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Hosts.razor.cs @@ -23,16 +23,16 @@ public partial class Hosts [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Drives", href: Navigation.Inventory.Hardware.Drives.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Drives", href: Navigation.Inventory.Hardware.Drives.Index)); if (string.IsNullOrWhiteSpace(DriveName)) { @@ -40,9 +40,9 @@ public partial class Hosts NavigationManager.NavigateTo(Navigation.Inventory.Hardware.Drives.Index); } - Title = $"Inventory » Drives » {DriveName} » Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(DriveName, href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); + _title = $"Inventory » Drives » {DriveName} » Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(DriveName ?? "undefined", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -51,9 +51,9 @@ public partial class Hosts { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("firmware", regex) | @@ -63,7 +63,7 @@ public partial class Hosts var query = Database.HostDrive() .Aggregate() - .Match(Builders.Filter.Regex(p => p.Name, new BsonRegularExpression(new Regex(DriveName.Escape(), RegexOptions.IgnoreCase)))) + .Match(Builders.Filter.Regex(p => p.Name, new BsonRegularExpression(new Regex(DriveName?.Escape() ?? string.Empty, RegexOptions.IgnoreCase)))) .Lookup("host", "_host", "_id", "hosts") .Match(new BsonDocument("hosts", new BsonDocument { diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Index.razor index 7227b42..37d1a26 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Index.razor.cs index a3125c8..4489c39 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Drives/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Drives|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Drives", href: "#", true)); + _title = $"Inventory » Drives|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Drives", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Company, regex) | Builders.Filter.Regex(x => x.Name, regex); } diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Hosts.razor b/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Hosts.razor index eb59b81..427cb1d 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Hosts.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Hosts.razor.cs index 76c5458..701ee46 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Hosts.razor.cs @@ -23,16 +23,16 @@ public partial class Hosts [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Mainboards", href: Navigation.Inventory.Hardware.Mainboards.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Mainboards", href: Navigation.Inventory.Hardware.Mainboards.Index)); if (string.IsNullOrWhiteSpace(MainboardName)) { @@ -41,9 +41,9 @@ public partial class Hosts return; } - Title = $"Inventory » Mainboards » {MainboardName} » Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(MainboardName, href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); + _title = $"Inventory » Mainboards » {MainboardName} » Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(MainboardName, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -52,9 +52,9 @@ public partial class Hosts { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("version", regex); @@ -62,7 +62,7 @@ public partial class Hosts var query = Database.HostMainboard() .Aggregate() - .Match(Builders.Filter.Regex(p => p.Name, new BsonRegularExpression(new Regex(MainboardName.Escape(), RegexOptions.IgnoreCase)))) + .Match(Builders.Filter.Regex(p => p.Name, new BsonRegularExpression(new Regex(MainboardName?.Escape() ?? string.Empty, RegexOptions.IgnoreCase)))) .Lookup("host", "_host", "_id", "hosts") .Match(new BsonDocument("hosts", new BsonDocument { diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Index.razor index 689adbe..77b2cd6 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Index.razor.cs index db7a9b6..faf9250 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Mainboards/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Mainboards|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Mainboards", href: "#", true)); + _title = $"Inventory » Mainboards|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Mainboards", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Bios, regex) | Builders.Filter.Regex(x => x.Name, regex); } diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Hosts.razor b/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Hosts.razor index 6a0e4d6..b111164 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Hosts.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Hosts.razor.cs index 944a4b2..c6a9ba6 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Hosts.razor.cs @@ -23,16 +23,16 @@ public partial class Hosts [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Memory", href: Navigation.Inventory.Hardware.Memory.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Memory", href: Navigation.Inventory.Hardware.Memory.Index)); if (string.IsNullOrWhiteSpace(MemoryName)) { @@ -41,9 +41,9 @@ public partial class Hosts return; } - Title = $"Inventory » Memory » {MemoryName} » Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(MemoryName, href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); + _title = $"Inventory » Memory » {MemoryName} » Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(MemoryName, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -52,9 +52,9 @@ public partial class Hosts { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("location", regex) | @@ -63,7 +63,7 @@ public partial class Hosts var query = Database.HostMemory() .Aggregate() - .Match(Builders.Filter.Regex(p => p.Name, new BsonRegularExpression(new Regex(MemoryName.Escape(), RegexOptions.IgnoreCase)))) + .Match(Builders.Filter.Regex(p => p.Name, new BsonRegularExpression(new Regex(MemoryName?.Escape() ?? string.Empty, RegexOptions.IgnoreCase)))) .Lookup("host", "_host", "_id", "hosts") .Match(new BsonDocument("hosts", new BsonDocument { diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Index.razor index 4caf99e..ff2a603 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Index.razor.cs index bb7eb16..27eb157 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Memory/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Memory|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Memory", href: "#", true)); + _title = $"Inventory » Memory|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Memory", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Company, regex) | Builders.Filter.Regex(x => x.Name, regex); } diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Hosts.razor b/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Hosts.razor index 32c99d8..298ae9e 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Hosts.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Hosts.razor.cs index 80c4d52..067da6e 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Hosts.razor.cs @@ -23,16 +23,16 @@ public partial class Hosts [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Processors", href: Navigation.Inventory.Hardware.Processors.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Processors", href: Navigation.Inventory.Hardware.Processors.Index)); if (string.IsNullOrWhiteSpace(ProcessorName)) { @@ -41,9 +41,9 @@ public partial class Hosts return; } - Title = $"Inventory » Processors » {ProcessorName} » Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(ProcessorName, href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); + _title = $"Inventory » Processors » {ProcessorName} » Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(ProcessorName, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -52,9 +52,9 @@ public partial class Hosts { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("version", regex) | @@ -63,7 +63,7 @@ public partial class Hosts var query = Database.HostProcessor() .Aggregate() - .Match(Builders.Filter.Regex(p => p.Name, new BsonRegularExpression(new Regex(ProcessorName.Escape(), RegexOptions.IgnoreCase)))) + .Match(Builders.Filter.Regex(p => p.Name, new BsonRegularExpression(new Regex(ProcessorName?.Escape() ?? string.Empty, RegexOptions.IgnoreCase)))) .Lookup("host", "_host", "_id", "hosts") .Match(new BsonDocument("hosts", new BsonDocument { diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Index.razor index 16cb1fc..0db9352 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Index.razor.cs index 2428819..bbc590c 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Processors/Index.razor.cs @@ -18,17 +18,17 @@ namespace Insight.Web.Pages.Inventory.Hardware.Processors [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Processors|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Processors", href: "#", true)); + _title = $"Inventory » Processors|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Processors", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ namespace Insight.Web.Pages.Inventory.Hardware.Processors { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Company, regex) | Builders.Filter.Regex(x => x.Name, regex); } diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Hosts.razor b/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Hosts.razor index 59f4b7a..4e883ba 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Hosts.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Hosts.razor.cs index 8d780f0..b273268 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Hosts.razor.cs @@ -23,16 +23,16 @@ namespace Insight.Web.Pages.Inventory.Hardware.Videocards [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Videocards", href: Navigation.Inventory.Hardware.Videocards.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Videocards", href: Navigation.Inventory.Hardware.Videocards.Index)); if (string.IsNullOrWhiteSpace(VideocardName)) { @@ -41,9 +41,9 @@ namespace Insight.Web.Pages.Inventory.Hardware.Videocards return; } - Title = $"Inventory » Videocards » {VideocardName} » Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(VideocardName, href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); + _title = $"Inventory » Videocards » {VideocardName} » Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(VideocardName, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -52,9 +52,9 @@ namespace Insight.Web.Pages.Inventory.Hardware.Videocards { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("driver", regex) | @@ -63,7 +63,7 @@ namespace Insight.Web.Pages.Inventory.Hardware.Videocards var query = Database.HostVideocard() .Aggregate() - .Match(Builders.Filter.Regex(p => p.Name, new BsonRegularExpression(new Regex(VideocardName.Escape(), RegexOptions.IgnoreCase)))) + .Match(Builders.Filter.Regex(p => p.Name, new BsonRegularExpression(new Regex(VideocardName?.Escape() ?? string.Empty, RegexOptions.IgnoreCase)))) .Lookup("host", "_host", "_id", "hosts") .Match(new BsonDocument("hosts", new BsonDocument { diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Index.razor index 4756385..faff0d2 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Index.razor.cs index dc3f8b5..b52e804 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Hardware/Videocards/Index.razor.cs @@ -18,17 +18,17 @@ namespace Insight.Web.Pages.Inventory.Hardware.Videocards [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Videocards|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Videocards", href: "#", true)); + _title = $"Inventory » Videocards|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Videocards", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ namespace Insight.Web.Pages.Inventory.Hardware.Videocards { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Company, regex) | Builders.Filter.Regex(x => x.Name, regex); } diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Hosts.razor b/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Hosts.razor index fc6b1ba..094e672 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Hosts.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -40,7 +40,7 @@ - + @context?.Interface?.Name diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Hosts.razor.cs index 78fe365..5542cc2 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Hosts.razor.cs @@ -23,18 +23,18 @@ public partial class Hosts [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { Address = Address?.UriEscape(true); - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Addresses", href: Navigation.Inventory.Network.Addresses.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Addresses", href: Navigation.Inventory.Network.Addresses.Index)); if (string.IsNullOrWhiteSpace(Address)) { @@ -43,9 +43,9 @@ public partial class Hosts return; } - Title = $"Inventory » Address » {Address} » Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(Address, href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); + _title = $"Inventory » Address » {Address} » Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(Address, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -54,9 +54,9 @@ public partial class Hosts { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("interface", regex) | diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Index.razor index b8d50b1..c8b6072 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Index.razor @@ -2,10 +2,10 @@ @using Insight.Web.Extensions
diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Index.razor.cs index eb2a6e2..a7da314 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Addresses/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Addresses|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Addresses", href: "#", true)); + _title = $"Inventory » Addresses|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Addresses", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Address, regex); } diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Hosts.razor b/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Hosts.razor index b1b887c..5ce4540 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Hosts.razor @@ -2,10 +2,10 @@
@@ -36,7 +36,7 @@ - + @context?.Interface?.Name diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Hosts.razor.cs index 97d5c8e..65c03cc 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Hosts.razor.cs @@ -23,18 +23,18 @@ namespace Insight.Web.Pages.Inventory.Network.Gateways [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { GatewayAddress = GatewayAddress?.UriEscape(true); - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Gateways", href: Navigation.Inventory.Network.Gateways.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Gateways", href: Navigation.Inventory.Network.Gateways.Index)); if (string.IsNullOrWhiteSpace(GatewayAddress)) { @@ -43,9 +43,9 @@ namespace Insight.Web.Pages.Inventory.Network.Gateways return; } - Title = $"Inventory » Gateway » {GatewayAddress} » Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(GatewayAddress, href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); + _title = $"Inventory » Gateway » {GatewayAddress} » Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(GatewayAddress, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -54,9 +54,9 @@ namespace Insight.Web.Pages.Inventory.Network.Gateways { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("interface", regex); diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Index.razor index 6f47b76..7d78733 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Index.razor @@ -2,10 +2,10 @@ @using Insight.Web.Extensions
diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Index.razor.cs index 279110c..6674762 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Gateways/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Gateways|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Gateways", href: "#", true)); + _title = $"Inventory » Gateways|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Gateways", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Address, regex); } diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Interfaces/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Network/Interfaces/Index.razor index 81e06e3..d04fb95 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Interfaces/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Interfaces/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Interfaces/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Network/Interfaces/Index.razor.cs index e798c94..1392492 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Interfaces/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Interfaces/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Interfaces|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Interfaces", href: "#", true)); + _title = $"Inventory » Interfaces|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Interfaces", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var search = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); search &= Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("name", regex) | diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Hosts.razor b/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Hosts.razor index 6ae7dcc..6b88a0e 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Hosts.razor @@ -2,10 +2,10 @@ @using Insight.Web.Extensions
@@ -36,7 +36,7 @@ - + @context?.Interface?.Name diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Hosts.razor.cs index f72b171..3e8a1fb 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Hosts.razor.cs @@ -23,18 +23,18 @@ public partial class Hosts [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { NameserverAddress = NameserverAddress?.UriEscape(true); - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Nameservers", href: Navigation.Inventory.Network.Nameservers.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Nameservers", href: Navigation.Inventory.Network.Nameservers.Index)); if (string.IsNullOrWhiteSpace(NameserverAddress)) { @@ -43,9 +43,9 @@ public partial class Hosts return; } - Title = $"Inventory » Nameserver » {NameserverAddress} » Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(NameserverAddress, href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); + _title = $"Inventory » Nameserver » {NameserverAddress} » Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(NameserverAddress, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -54,9 +54,9 @@ public partial class Hosts { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("interface", regex); diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Index.razor index a21e2b5..048334b 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Index.razor @@ -2,10 +2,10 @@ @using Insight.Web.Extensions
diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Index.razor.cs index ec3e608..1d23cbe 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Nameservers/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Nameservers|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Nameservers", href: "#", true)); + _title = $"Inventory » Nameservers|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Nameservers", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Address, regex); } diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Hosts.razor b/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Hosts.razor index 5368780..38d7ac0 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Hosts.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -50,7 +50,7 @@ - + @context?.Interface?.Name diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Hosts.razor.cs index ad440b2..f2cd9ca 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Hosts.razor.cs @@ -23,18 +23,18 @@ public partial class Hosts [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { RouteAddress = RouteAddress?.UriEscape(true); - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Routes", href: Navigation.Inventory.Network.Routes.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Routes", href: Navigation.Inventory.Network.Routes.Index)); if (string.IsNullOrWhiteSpace(RouteAddress)) { @@ -43,9 +43,9 @@ public partial class Hosts return; } - Title = $"Inventory » Route » {RouteAddress} » Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(RouteAddress, href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); + _title = $"Inventory » Route » {RouteAddress} » Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(RouteAddress, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -54,9 +54,9 @@ public partial class Hosts { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("interface", regex); diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Index.razor index 29b4d46..ca39c3f 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Index.razor @@ -2,10 +2,10 @@ @using Insight.Web.Extensions
diff --git a/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Index.razor.cs index b9f1a11..9cb40dd 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Network/Routes/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Routes|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Routes", href: "#", true)); + _title = $"Inventory » Routes|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Routes", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Destination, regex); } diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Hosts.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Hosts.razor index d56d200..631b336 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Hosts.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Hosts.razor.cs index e9321a0..1cf55d3 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Hosts.razor.cs @@ -23,18 +23,18 @@ public partial class Hosts [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { GroupName = GroupName?.UriEscape(true); - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Groups", href: Navigation.Inventory.Systems.Groups.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Groups", href: Navigation.Inventory.Systems.Groups.Index)); if (string.IsNullOrWhiteSpace(GroupName)) { @@ -43,9 +43,9 @@ public partial class Hosts return; } - Title = $"Inventory » Group » {GroupName} » Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(GroupName, href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); + _title = $"Inventory » Group » {GroupName} » Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(GroupName, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -54,9 +54,9 @@ public partial class Hosts { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("domain", regex) | diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Index.razor index f6ce8fe..e53821b 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Index.razor @@ -2,10 +2,10 @@ @using Insight.Web.Extensions
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Index.razor.cs index 64cd2ee..1eafca8 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Groups/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Groups|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Groups", href: "#", true)); + _title = $"Inventory » Groups|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Groups", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex); } diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Guests.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Guests.razor index e0da9fa..3c015d7 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Guests.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Guests.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Guests.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Guests.razor.cs index 955178d..38665d3 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Guests.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Guests.razor.cs @@ -22,18 +22,18 @@ public partial class Guests [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { OsName = OsName.UriEscape(true); - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("OS", href: Navigation.Inventory.Systems.Os.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("OS", href: Navigation.Inventory.Systems.Os.Index)); if (string.IsNullOrWhiteSpace(OsName)) { @@ -42,9 +42,9 @@ public partial class Guests return; } - Title = $"Inventory » OS » {OsName} » Guests|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(OsName, href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Guests", href: "#", true)); + _title = $"Inventory » OS » {OsName} » Guests|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(OsName, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Guests", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -53,9 +53,9 @@ public partial class Guests { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("name", regex); diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Hosts.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Hosts.razor index d5ee67b..495b7ca 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Hosts.razor @@ -1,9 +1,9 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Hosts.razor.cs index ae40eb5..a6273fe 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Hosts.razor.cs @@ -23,11 +23,10 @@ public partial class Hosts [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private readonly List _breadcrumbs = new(); - - private string Title { get; set; } = Global.Name; - private TableContainer? Container { get; set; } - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { @@ -44,7 +43,7 @@ public partial class Hosts return; } - Title = $"Inventory » OS » {OsName} » Hosts|Insight"; + _title = $"Inventory » OS » {OsName} » Hosts|Insight"; _breadcrumbs.Add(new BreadcrumbItem(OsName, href: "#", true)); _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); @@ -56,9 +55,9 @@ public partial class Hosts { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("version", regex); diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Index.razor index 4833ada..ca9e9cf 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Index.razor @@ -2,10 +2,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Index.razor.cs index e39bbd5..6808117 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Os/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » OS|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("OS", href: "#", true)); + _title = $"Inventory » OS|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("OS", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("name", regex); } diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Printers/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Printers/Index.razor index c34160e..8062a82 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Printers/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Printers/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Printers/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Printers/Index.razor.cs index 1211784..579a190 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Printers/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Printers/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Printers|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Printers", href: "#", true)); + _title = $"Inventory » Printers|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Printers", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var search = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); search &= Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("name", regex) | diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Hosts.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Hosts.razor index a5c6684..c0741fc 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Hosts.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Hosts.razor.cs index 1e89877..1ed0ed0 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Hosts.razor.cs @@ -23,18 +23,18 @@ public partial class Hosts [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { ServiceName = ServiceName?.UriEscape(true); - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Services", href: Navigation.Inventory.Systems.Services.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Services", href: Navigation.Inventory.Systems.Services.Index)); if (string.IsNullOrWhiteSpace(ServiceName)) { @@ -43,9 +43,9 @@ public partial class Hosts return; } - Title = $"Inventory » Service » {ServiceName} » Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(ServiceName, href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); + _title = $"Inventory » Service » {ServiceName} » Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(ServiceName, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -54,9 +54,9 @@ public partial class Hosts { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("processid", regex) | diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Index.razor index 8b6ee2a..46a86a5 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Index.razor @@ -2,10 +2,10 @@ @using Insight.Web.Extensions
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Index.razor.cs index f286b16..be1cc69 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Services/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Services|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Services", href: "#", true)); + _title = $"Inventory » Services|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Services", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Company, regex) | Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.DisplayName, regex); diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Sessions/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Sessions/Index.razor index abeb97d..00f5f17 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Sessions/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Sessions/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Sessions/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Sessions/Index.razor.cs index fc32682..61de0e0 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Sessions/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Sessions/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Sessions|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Sessions", href: "#", true)); + _title = $"Inventory » Sessions|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Sessions", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var search = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); search &= Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("user", regex) | diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Hosts.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Hosts.razor index 988efc3..954b4d7 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Hosts.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Hosts.razor.cs index 62e23b7..5bcb4b0 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Hosts.razor.cs @@ -23,18 +23,18 @@ public partial class Hosts [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { SoftwareName = SoftwareName?.UriEscape(true); - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Software", href: Navigation.Inventory.Systems.Software.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Software", href: Navigation.Inventory.Systems.Software.Index)); if (string.IsNullOrWhiteSpace(SoftwareName)) { @@ -43,9 +43,9 @@ public partial class Hosts return; } - Title = $"Inventory » Software » {SoftwareName} » Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(SoftwareName, href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); + _title = $"Inventory » Software » {SoftwareName} » Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(SoftwareName, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -54,9 +54,9 @@ public partial class Hosts { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("architecture", regex) | diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Index.razor index 311a5af..495863f 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Index.razor @@ -2,10 +2,10 @@ @using Insight.Web.Extensions
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Index.razor.cs index 95e1fb0..79deeea 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Software/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Software|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Software", href: "#", true)); + _title = $"Inventory » Software|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Software", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Company, regex) | Builders.Filter.Regex(x => x.Name, regex); } diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/StoragePools/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/StoragePools/Index.razor index 6c1104c..944123c 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/StoragePools/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/StoragePools/Index.razor @@ -2,10 +2,10 @@ @inherits ComponentBase
@@ -87,11 +87,14 @@ } - @string.Concat(@context?.States) + @if (context.States is not null) + { + @string.Concat(@context.States) + } @{ - var color = Enum.Parse(context?.Health, true) switch + var color = Enum.Parse(context.Health ?? string.Empty, true) switch { HealthState.Healthy => Color.Success, HealthState.Warning => Color.Warning, diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/StoragePools/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/StoragePools/Index.razor.cs index fffa459..a482a63 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/StoragePools/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/StoragePools/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Storage Pools|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: "#", true)); + _title = $"Inventory » Storage Pools|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var search = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); search &= Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("name", regex) | diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Hosts.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Hosts.razor index 25fb42d..c6352f0 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Hosts.razor @@ -2,10 +2,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Hosts.razor.cs index 1b6c22f..cdc5a49 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Hosts.razor.cs @@ -23,18 +23,18 @@ public partial class Hosts [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { UpdateName = UpdateName.UriEscape(true); - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Update", href: Navigation.Inventory.Systems.Updates.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Update", href: Navigation.Inventory.Systems.Updates.Index)); if (string.IsNullOrWhiteSpace(UpdateName)) { @@ -43,9 +43,9 @@ public partial class Hosts return; } - Title = $"Inventory » Update » {UpdateName} » Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(UpdateName, href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); + _title = $"Inventory » Update » {UpdateName} » Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(UpdateName, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -54,9 +54,9 @@ public partial class Hosts { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("pending", regex) | diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Index.razor index 987537e..df81f23 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Index.razor @@ -2,10 +2,10 @@ @using Insight.Web.Extensions
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Index.razor.cs index bf74bac..ee215b1 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Updates/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Updates|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Updates", href: "#", true)); + _title = $"Inventory » Updates|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Updates", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.Date, regex); } diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Hosts.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Hosts.razor index 89d74e9..d664bd1 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Hosts.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Hosts.razor.cs index 3f2c12c..e179243 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Hosts.razor.cs @@ -23,18 +23,18 @@ public partial class Hosts [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { UserName = UserName?.UriEscape(true); - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Users", href: Navigation.Inventory.Systems.Users.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Users", href: Navigation.Inventory.Systems.Users.Index)); if (string.IsNullOrWhiteSpace(UserName)) { @@ -43,9 +43,9 @@ public partial class Hosts return; } - Title = $"Inventory » Users » {UserName} » Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(UserName, href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); + _title = $"Inventory » Users » {UserName} » Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(UserName, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -54,9 +54,9 @@ public partial class Hosts { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("domain", regex) | diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Index.razor index d4b8445..ddf1113 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Index.razor.cs index 4615ff9..cbe5273 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Users/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Users|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Users", href: "#", true)); + _title = $"Inventory » Users|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Users", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex); } diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/VirtualMaschines/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/VirtualMaschines/Index.razor index e774650..b4ae5ee 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/VirtualMaschines/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/VirtualMaschines/Index.razor @@ -2,10 +2,10 @@ @inherits ComponentBase
@@ -82,14 +82,14 @@ @{ - var color = Enum.Parse(context?.Enabled, true) switch + var color = Enum.Parse(context.Enabled ?? string.Empty, true) switch { EnabledEnum.Aktiviert => Color.Success, EnabledEnum.Deaktiviert => Color.Error, _ => Color.Inherit }; - var text = Enum.Parse(context?.Enabled, true) switch + var text = Enum.Parse(context.Enabled ?? string.Empty, true) switch { EnabledEnum.Aktiviert => "Running", EnabledEnum.Deaktiviert => "Stopped", @@ -103,7 +103,7 @@ @{ - var color = Enum.Parse(context?.Health, true) switch + var color = Enum.Parse(context.Health ?? string.Empty, true) switch { HealthStatusEnum.OK => Color.Success, HealthStatusEnum.Hauptfehler => Color.Warning, diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/VirtualMaschines/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/VirtualMaschines/Index.razor.cs index 879ec7b..56f216d 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/VirtualMaschines/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/VirtualMaschines/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Virtual Maschines|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Virtual Maschines", href: "#", true)); + _title = $"Inventory » Virtual Maschines|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Virtual Maschines", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var search = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); search &= Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("name", regex) | diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Volumes/Index.razor b/src/Web/Insight.Web/Pages/Inventory/Systems/Volumes/Index.razor index ae2fcaa..7212292 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Volumes/Index.razor +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Volumes/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Inventory/Systems/Volumes/Index.razor.cs b/src/Web/Insight.Web/Pages/Inventory/Systems/Volumes/Index.razor.cs index e97ed78..2d63e3a 100644 --- a/src/Web/Insight.Web/Pages/Inventory/Systems/Volumes/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Inventory/Systems/Volumes/Index.razor.cs @@ -18,17 +18,17 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Inventory » Volumes|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); - Breadcrumbs.Add(new BreadcrumbItem("Volumes", href: "#", true)); + _title = $"Inventory » Volumes|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Inventory", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Volumes", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -37,9 +37,9 @@ public partial class Index { var search = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); search &= Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("name", regex) | diff --git a/src/Web/Insight.Web/Pages/Management/Accounts/AccountCreateDialog.razor.cs b/src/Web/Insight.Web/Pages/Management/Accounts/AccountCreateDialog.razor.cs index a455825..2625c40 100644 --- a/src/Web/Insight.Web/Pages/Management/Accounts/AccountCreateDialog.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Accounts/AccountCreateDialog.razor.cs @@ -41,6 +41,8 @@ public partial class AccountCreateDialog return; } + if (_model.Email is null || _model.Password is null) return; + var result = await IdentityService.CreateUserAsync(_model.Email, _model.Password); if (result.Succeeded is false) diff --git a/src/Web/Insight.Web/Pages/Management/Accounts/AccountEditDialog.razor.cs b/src/Web/Insight.Web/Pages/Management/Accounts/AccountEditDialog.razor.cs index f49152e..44a21b1 100644 --- a/src/Web/Insight.Web/Pages/Management/Accounts/AccountEditDialog.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Accounts/AccountEditDialog.razor.cs @@ -46,9 +46,9 @@ public partial class AccountEditDialog .Eq(p => p.Id, _model.Id), Builders .Update .Set(p => p.Email, _model.Email) - .Set(p => p.NormalizedEmail, _model.Email.ToUpperInvariant()) + .Set(p => p.NormalizedEmail, _model.Email?.ToUpperInvariant()) .Set(p => p.UserName, _model.Email) - .Set(p => p.NormalizedUserName, _model.Email.ToUpperInvariant()), + .Set(p => p.NormalizedUserName, _model.Email?.ToUpperInvariant()), cancellationToken: default); Notification.Success(Snackbar); diff --git a/src/Web/Insight.Web/Pages/Management/Accounts/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Accounts/Details.razor.cs index b511ba2..d955bb9 100644 --- a/src/Web/Insight.Web/Pages/Management/Accounts/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Accounts/Details.razor.cs @@ -17,7 +17,7 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; private string _title = Global.Name; - private readonly List _breadcrumbs = new(); + private readonly List _breadcrumbs = []; private readonly DetailsModel _model = new(); private async Task LoadDataAsync() @@ -54,7 +54,7 @@ public partial class Details _model.Roles = user.Roles; _title = $"Accounts » {user.UserName}|Insight"; - _breadcrumbs.Add(new BreadcrumbItem(user.UserName, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem(user.UserName ?? "undefined", href: "#", true)); await InvokeAsync(StateHasChanged); } diff --git a/src/Web/Insight.Web/Pages/Management/Accounts/Index.razor b/src/Web/Insight.Web/Pages/Management/Accounts/Index.razor index dc49207..e176a0f 100644 --- a/src/Web/Insight.Web/Pages/Management/Accounts/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Accounts/Index.razor @@ -7,7 +7,7 @@ Title="@_title" Breadcrumbs="@_breadcrumbs" Data="LoadDataAsync" - OnAdd="()=>_createDialog?.ToggleAsync()"> + OnAdd="()=>_createDialog!.ToggleAsync()">
diff --git a/src/Web/Insight.Web/Pages/Management/Accounts/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Accounts/Index.razor.cs index 9f027c5..322bc50 100644 --- a/src/Web/Insight.Web/Pages/Management/Accounts/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Accounts/Index.razor.cs @@ -1,4 +1,5 @@ -using Insight.Infrastructure.Entities; +using Insight.Infrastructure; +using Insight.Infrastructure.Entities; using Insight.Infrastructure.Services; using Insight.Web.Components.Containers; using Insight.Web.Constants; @@ -15,18 +16,18 @@ namespace Insight.Web.Pages.Management.Accounts; public partial class Index { [Inject] private IdentityService IdentityService { get; init; } = default!; - [Inject] private AccountService AccountService { get; init; } = default!; + [Inject] private IServiceScopeFactory ScopeFactory { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; private TableContainer? _container; private string? _search; private readonly string _title = "Accounts|Insight"; - private readonly List _breadcrumbs = new() - { + private readonly List _breadcrumbs = + [ new BreadcrumbItem(nameof(Navigation.Home), href: Navigation.Home), new BreadcrumbItem(nameof(Navigation.Management.Accounts), href: Navigation.Management.Accounts.Index, disabled: true) - }; + ]; private async Task> LoadDataAsync(TableState state) { @@ -61,7 +62,10 @@ public partial class Index _ => Builders.Sort.Ascending(p => p.Email) }; - var result = await AccountService.GetAsync(filter, sort, state.Page * state.PageSize, state.PageSize).ConfigureAwait(false); + using var scope = ScopeFactory.CreateScope(); + var collection = scope.ServiceProvider.GetRequiredService().User(); + + var result = await collection.GetPagedAsync(filter, sort, state.Page * state.PageSize, state.PageSize).ConfigureAwait(false); return new TableData() { diff --git a/src/Web/Insight.Web/Pages/Management/Agents/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Agents/Details.razor.cs index 0600f04..1c47964 100644 --- a/src/Web/Insight.Web/Pages/Management/Agents/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Agents/Details.razor.cs @@ -19,7 +19,7 @@ public partial class Details private BaseContainer? _container; private string _title = Global.Name; - private readonly List _breadcrumbs = new(); + private readonly List _breadcrumbs = []; private AgentEntity? _agent; private long? _logs; @@ -55,7 +55,7 @@ public partial class Details } _title = $"Agent » {_agent.Hostname}|Insight"; - _breadcrumbs.Add(new BreadcrumbItem(_agent.Hostname, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem(_agent.Hostname ?? "undefined", href: "#", true)); StateHasChanged(); diff --git a/src/Web/Insight.Web/Pages/Management/Agents/HostAssign.razor b/src/Web/Insight.Web/Pages/Management/Agents/HostAssign.razor index 7914e2f..09e7eb0 100644 --- a/src/Web/Insight.Web/Pages/Management/Agents/HostAssign.razor +++ b/src/Web/Insight.Web/Pages/Management/Agents/HostAssign.razor @@ -2,12 +2,12 @@ @inherits ComponentBase + OnAdd="()=>_createDialog!.ToggleAsync()">
@@ -25,14 +25,14 @@
- + @context?.Name @if (context?.Customers is not null && context.Customers.Any()) { - + @context?.Customers?.FirstOrDefault()?.Name } diff --git a/src/Web/Insight.Web/Pages/Management/Agents/HostAssign.razor.cs b/src/Web/Insight.Web/Pages/Management/Agents/HostAssign.razor.cs index 4cc0678..e171e7e 100644 --- a/src/Web/Insight.Web/Pages/Management/Agents/HostAssign.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Agents/HostAssign.razor.cs @@ -19,10 +19,10 @@ public partial class HostAssign [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class HostAssign return; } - Title = $"Agent » {agent.Hostname} » Assign Host|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Agents", href: Navigation.Management.Agents.Index)); - Breadcrumbs.Add(new BreadcrumbItem(agent.Hostname, href: Navigation.Management.Agents.DetailsHref(AgentId))); - Breadcrumbs.Add(new BreadcrumbItem("Assign", href: "#", true)); + _title = $"Agent » {agent.Hostname} » Assign Host|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Agents", href: Navigation.Management.Agents.Index)); + _breadcrumbs.Add(new BreadcrumbItem(agent.Hostname ?? "undefined", href: Navigation.Management.Agents.DetailsHref(AgentId))); + _breadcrumbs.Add(new BreadcrumbItem("Assign", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,11 +59,11 @@ public partial class HostAssign { var filter = Builders.Filter.Eq(p => p.Agent, null); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex) | - Builders.Filter.Regex(x => x.Customers.First().Name, regex); + Builders.Filter.Regex(x => x.Customers!.First().Name, regex); } var query = Database.Host() @@ -74,13 +74,13 @@ public partial class HostAssign { SortDirection.Ascending => state.SortLabel switch { - "Customer" => Builders.Sort.Ascending(p => p.Customers.First().Name), + "Customer" => Builders.Sort.Ascending(p => p.Customers!.First().Name), "Name" => Builders.Sort.Ascending(p => p.Name), _ => null }, SortDirection.Descending => state.SortLabel switch { - "Customer" => Builders.Sort.Descending(p => p.Customers.First().Name), + "Customer" => Builders.Sort.Descending(p => p.Customers!.First().Name), "Name" => Builders.Sort.Descending(p => p.Name), _ => null }, @@ -127,7 +127,7 @@ public partial class HostAssign private async Task OnRefreshAsync() { - if (Container is null) return; - await Container.RefreshAsync().ConfigureAwait(false); + if (_container is null) return; + await _container.RefreshAsync().ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/Web/Insight.Web/Pages/Management/Agents/Index.razor b/src/Web/Insight.Web/Pages/Management/Agents/Index.razor index 8737306..3850bd0 100644 --- a/src/Web/Insight.Web/Pages/Management/Agents/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Agents/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase @@ -37,7 +37,7 @@
- + @context?.Serial @@ -48,7 +48,7 @@ @context?.Version - + diff --git a/src/Web/Insight.Web/Pages/Management/Agents/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Agents/Index.razor.cs index ff43f78..f579b4a 100644 --- a/src/Web/Insight.Web/Pages/Management/Agents/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Agents/Index.razor.cs @@ -18,18 +18,16 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } - - private ViewModel? Model { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = "Agents|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Agents", href: Navigation.Management.Agents.Index, true)); + _title = "Agents|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Agents", href: Navigation.Management.Agents.Index, true)); } private async Task> LoadDataAsync(TableState state) @@ -45,9 +43,9 @@ public partial class Index var search = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); search &= Builders.Filter.Regex("serial", regex) | Builders.Filter.Regex("hostname", regex) | Builders.Filter.Regex("version", regex); @@ -133,8 +131,8 @@ public partial class Index private async Task OnRefreshAsync() { - if (Container is null) return; - await Container.RefreshAsync().ConfigureAwait(false); + if (_container is null) return; + await _container.RefreshAsync().ConfigureAwait(false); } private bool _filter; @@ -174,9 +172,9 @@ public partial class Index { _filterUnassignedHost = value; - if (Container is not null) + if (_container is not null) { - _ = Container.RefreshAsync(); + _ = _container.RefreshAsync(); } if (value) diff --git a/src/Web/Insight.Web/Pages/Management/Agents/Logs.razor b/src/Web/Insight.Web/Pages/Management/Agents/Logs.razor index 100d771..db65b47 100644 --- a/src/Web/Insight.Web/Pages/Management/Agents/Logs.razor +++ b/src/Web/Insight.Web/Pages/Management/Agents/Logs.razor @@ -2,10 +2,10 @@ @using Insight.Domain.Enums; diff --git a/src/Web/Insight.Web/Pages/Management/Agents/Logs.razor.cs b/src/Web/Insight.Web/Pages/Management/Agents/Logs.razor.cs index d18c72c..4d7eb5c 100644 --- a/src/Web/Insight.Web/Pages/Management/Agents/Logs.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Agents/Logs.razor.cs @@ -20,10 +20,10 @@ public partial class Logs [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -34,8 +34,8 @@ public partial class Logs return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Agents", href: Navigation.Management.Agents.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Agents", href: Navigation.Management.Agents.Index)); var agent = await Database.Agent() .Aggregate() @@ -50,10 +50,10 @@ public partial class Logs return; } - Title = $"Agent » {agent.Hostname}|Insight"; + _title = $"Agent » {agent.Hostname}|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(agent?.Hostname, href: Navigation.Management.Agents.DetailsHref(AgentId))); - Breadcrumbs.Add(new BreadcrumbItem("Logs", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem(agent?.Hostname ?? string.Empty, href: Navigation.Management.Agents.DetailsHref(AgentId))); + _breadcrumbs.Add(new BreadcrumbItem("Logs", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -62,9 +62,9 @@ public partial class Logs { var filter = Builders.Filter.Eq(x => x.Agent, AgentId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Category, regex) | Builders.Filter.Regex(x => x.Status, regex) | Builders.Filter.Regex(x => x.Message, regex); @@ -164,9 +164,9 @@ public partial class Logs { _filterDate = value; - if (Container is not null) + if (_container is not null) { - _ = Container.RefreshAsync(); + _ = _container.RefreshAsync(); } if (value is not null) @@ -190,9 +190,9 @@ public partial class Logs { _filterCategory = value; - if (Container is not null) + if (_container is not null) { - _ = Container.RefreshAsync(); + _ = _container.RefreshAsync(); } if (value is not null) @@ -216,9 +216,9 @@ public partial class Logs { _filterStatus = value; - if (Container is not null) + if (_container is not null) { - _ = Container.RefreshAsync(); + _ = _container.RefreshAsync(); } if (value is not null) diff --git a/src/Web/Insight.Web/Pages/Management/Customers/Details.razor b/src/Web/Insight.Web/Pages/Management/Customers/Details.razor index e08800a..171406f 100644 --- a/src/Web/Insight.Web/Pages/Management/Customers/Details.razor +++ b/src/Web/Insight.Web/Pages/Management/Customers/Details.razor @@ -1,18 +1,18 @@ @inherits ComponentBase - + - @if (Customer is not null) + @if (_customer is not null) { - + - + - + } diff --git a/src/Web/Insight.Web/Pages/Management/Customers/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Customers/Details.razor.cs index 56973ef..6716162 100644 --- a/src/Web/Insight.Web/Pages/Management/Customers/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Customers/Details.razor.cs @@ -16,14 +16,14 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private CustomerEntity? Customer { get; set; } + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private CustomerEntity? _customer; private async Task LoadDataAsync() { - Breadcrumbs.Clear(); - Customer = null; + _breadcrumbs.Clear(); + _customer = null; if (string.IsNullOrWhiteSpace(CustomerId) || ObjectId.TryParse(CustomerId, out var customerId) is false) { @@ -32,26 +32,26 @@ public partial class Details return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Customers", href: Navigation.Management.Customers.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Customers", href: Navigation.Management.Customers.Index)); StateHasChanged(); - Customer = await Database.Customer() + _customer = await Database.Customer() .Aggregate() .Match(Builders.Filter.Eq(p => p.Id, CustomerId)) .Lookup(Database.Host(), p => p.Id, p => p.Customer, p => p.Hosts) .FirstOrDefaultAsync(default); - if (Customer is null) + if (_customer is null) { Notification.Error(Snackbar, "Not Found"); NavigationManager.NavigateTo(Navigation.Management.Customers.Index); return; } - Title = $"Customer » {Customer.Name}|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(Customer.Name, href: "#", true)); + _title = $"Customer » {_customer.Name}|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(_customer.Name ?? "undefined", href: "#", true)); StateHasChanged(); } diff --git a/src/Web/Insight.Web/Pages/Management/Customers/Hosts.razor b/src/Web/Insight.Web/Pages/Management/Customers/Hosts.razor index 258422f..cf3ca4e 100644 --- a/src/Web/Insight.Web/Pages/Management/Customers/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Management/Customers/Hosts.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -35,9 +35,9 @@ @{ - if (string.IsNullOrWhiteSpace(context.Agent) is false && context.Agents is not null && context.Agents.Any()) + if (string.IsNullOrWhiteSpace(context.Agent) is false && context.Agents is not null && context.Agents.Count != 0) { - + @context?.Agents.First()?.Serial } @@ -57,8 +57,8 @@ - - + + diff --git a/src/Web/Insight.Web/Pages/Management/Customers/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Management/Customers/Hosts.razor.cs index 00e2a97..22f25e4 100644 --- a/src/Web/Insight.Web/Pages/Management/Customers/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Customers/Hosts.razor.cs @@ -19,12 +19,11 @@ public partial class Hosts [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } - - private HostEntity? Model { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; + private HostEntity _model = new(); protected override async Task OnInitializedAsync() { @@ -35,8 +34,8 @@ public partial class Hosts return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Customers", href: Navigation.Management.Customers.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Customers", href: Navigation.Management.Customers.Index)); var customer = await Database.Customer() .Aggregate() @@ -50,9 +49,9 @@ public partial class Hosts return; } - Title = $"Customer » {customer.Name} » Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(customer.Name, href: Navigation.Management.Customers.DetailsHref(CustomerId))); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); + _title = $"Customer » {customer.Name} » Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(customer.Name ?? "undefined", href: Navigation.Management.Customers.DetailsHref(CustomerId))); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -61,12 +60,12 @@ public partial class Hosts { var filter = Builders.Filter.Eq(p => p.Customer, CustomerId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.Description, regex) | - Builders.Filter.Regex(x => x.Agents.First().Serial, regex); + Builders.Filter.Regex(x => x.Agents!.First().Serial, regex); } var query = Database.Host() @@ -79,14 +78,14 @@ public partial class Hosts { "Name" => Builders.Sort.Ascending(p => p.Name), "Description" => Builders.Sort.Ascending(p => p.Description), - "Agent" => Builders.Sort.Ascending(p => p.Agents.First().Serial), + "Agent" => Builders.Sort.Ascending(p => p.Agents!.First().Serial), _ => null }, SortDirection.Descending => state.SortLabel switch { "Name" => Builders.Sort.Descending(p => p.Name), "Description" => Builders.Sort.Descending(p => p.Description), - "Agent" => Builders.Sort.Descending(p => p.Agents.First().Serial), + "Agent" => Builders.Sort.Descending(p => p.Agents!.First().Serial), _ => null }, _ => Builders.Sort.Ascending(p => p.Name) @@ -131,7 +130,7 @@ public partial class Hosts private void OnUnassign(HostEntity model) { - Model = new HostEntity + _model = new HostEntity { Id = model.Id, Name = model?.Name, @@ -148,14 +147,14 @@ public partial class Hosts await Database.Host() .UpdateOneAsync(Builders .Filter - .Eq(p => p.Id, Model.Id), Builders + .Eq(p => p.Id, _model.Id), Builders .Update .Set(p => p.Customer, null), cancellationToken: default); - if (Container is not null) + if (_container is not null) { - await Container.RefreshAsync(); + await _container.RefreshAsync(); } Notification.Success(Snackbar); diff --git a/src/Web/Insight.Web/Pages/Management/Customers/HostsAssign.razor b/src/Web/Insight.Web/Pages/Management/Customers/HostsAssign.razor index d92831d..6deea21 100644 --- a/src/Web/Insight.Web/Pages/Management/Customers/HostsAssign.razor +++ b/src/Web/Insight.Web/Pages/Management/Customers/HostsAssign.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -25,7 +25,7 @@
- + @context?.Name @@ -34,9 +34,9 @@
@{ - if (string.IsNullOrWhiteSpace(context.Agent) is false && context.Agents is not null && context.Agents.Any()) + if (string.IsNullOrWhiteSpace(context.Agent) is false && context.Agents is not null && context.Agents.Count != 0) { - + @context?.Agents.First()?.Serial } @@ -56,8 +56,8 @@ - - + + diff --git a/src/Web/Insight.Web/Pages/Management/Customers/HostsAssign.razor.cs b/src/Web/Insight.Web/Pages/Management/Customers/HostsAssign.razor.cs index f237eef..c45f63e 100644 --- a/src/Web/Insight.Web/Pages/Management/Customers/HostsAssign.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Customers/HostsAssign.razor.cs @@ -19,12 +19,11 @@ public partial class HostsAssign [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } - - private HostEntity? Model { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; + private HostEntity _model = new(); protected override async Task OnInitializedAsync() { @@ -35,8 +34,8 @@ public partial class HostsAssign return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Customers", href: Navigation.Management.Customers.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Customers", href: Navigation.Management.Customers.Index)); var customer = await Database.Customer() .Aggregate() @@ -50,10 +49,10 @@ public partial class HostsAssign return; } - Title = $"Customer » {customer.Name} » Assign Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(customer.Name, href: Navigation.Management.Customers.DetailsHref(CustomerId))); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Customers.HostsHref(CustomerId))); - Breadcrumbs.Add(new BreadcrumbItem("Assign", href: "#", true)); + _title = $"Customer » {customer.Name} » Assign Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(customer.Name ?? "undefined", href: Navigation.Management.Customers.DetailsHref(CustomerId))); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Customers.HostsHref(CustomerId))); + _breadcrumbs.Add(new BreadcrumbItem("Assign", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -62,12 +61,12 @@ public partial class HostsAssign { var filter = Builders.Filter.Eq(x => x.Customer, null); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.Description, regex) | - Builders.Filter.Regex(x => x.Agents.First().Serial, regex); + Builders.Filter.Regex(x => x.Agents!.First().Serial, regex); } var query = Database.Host() @@ -80,14 +79,14 @@ public partial class HostsAssign { "Name" => Builders.Sort.Ascending(p => p.Name), "Description" => Builders.Sort.Ascending(p => p.Description), - "Agent" => Builders.Sort.Ascending(p => p.Agents.First().Serial), + "Agent" => Builders.Sort.Ascending(p => p.Agents!.First().Serial), _ => null }, SortDirection.Descending => state.SortLabel switch { "Name" => Builders.Sort.Descending(p => p.Name), "Description" => Builders.Sort.Descending(p => p.Description), - "Agent" => Builders.Sort.Descending(p => p.Agents.First().Serial), + "Agent" => Builders.Sort.Descending(p => p.Agents!.First().Serial), _ => null }, _ => Builders.Sort.Ascending(p => p.Name) @@ -126,9 +125,9 @@ public partial class HostsAssign } } - private void OnAssign(HostEntity? model) + private void OnAssign(HostEntity model) { - Model = model; + _model = model; Assign = true; } @@ -139,14 +138,14 @@ public partial class HostsAssign await Database.Host() .UpdateOneAsync(Builders .Filter - .Eq(p => p.Id, Model.Id), Builders + .Eq(p => p.Id, _model.Id), Builders .Update .Set(p => p.Customer, CustomerId) , cancellationToken: default); - if (Container is not null) + if (_container is not null) { - await Container.RefreshAsync(); + await _container.RefreshAsync(); } Notification.Success(Snackbar); diff --git a/src/Web/Insight.Web/Pages/Management/Customers/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Customers/Index.razor.cs index 6e254a7..33a47cc 100644 --- a/src/Web/Insight.Web/Pages/Management/Customers/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Customers/Index.razor.cs @@ -16,10 +16,9 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private readonly List _breadcrumbs = new(); - private TableContainer? _container; private string _title = Global.Name; + private readonly List _breadcrumbs = []; private string? _search; protected override void OnInitialized() diff --git a/src/Web/Insight.Web/Pages/Management/HostGroups/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/HostGroups/Details.razor.cs index d6ba5ac..c508a0f 100644 --- a/src/Web/Insight.Web/Pages/Management/HostGroups/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/HostGroups/Details.razor.cs @@ -15,9 +15,8 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private readonly List _breadcrumbs = new(); - private string _title = Global.Name; + private readonly List _breadcrumbs = []; private HostGroupEntity? _model; private async Task LoadDataAsync() @@ -50,7 +49,7 @@ public partial class Details } _title = $"Host Groups » {_model.Name}|Insight"; - _breadcrumbs.Add(new BreadcrumbItem(_model.Name, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem(_model.Name ?? "undefined", href: "#", true)); await InvokeAsync(StateHasChanged); } diff --git a/src/Web/Insight.Web/Pages/Management/HostGroups/HostAssign.razor b/src/Web/Insight.Web/Pages/Management/HostGroups/HostAssign.razor index 336f04d..f30bc34 100644 --- a/src/Web/Insight.Web/Pages/Management/HostGroups/HostAssign.razor +++ b/src/Web/Insight.Web/Pages/Management/HostGroups/HostAssign.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Management/HostGroups/HostAssign.razor.cs b/src/Web/Insight.Web/Pages/Management/HostGroups/HostAssign.razor.cs index 1956cf1..1c936a8 100644 --- a/src/Web/Insight.Web/Pages/Management/HostGroups/HostAssign.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/HostGroups/HostAssign.razor.cs @@ -21,10 +21,10 @@ public partial class HostAssign [Inject] private NavigationManager NavigationManager { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -47,12 +47,12 @@ public partial class HostAssign return; } - Title = $"Host Groups » {hostgroup.Name} » Hosts » Assign|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Host Groups", href: Navigation.Management.HostGroups.Index)); - Breadcrumbs.Add(new BreadcrumbItem(hostgroup.Name, href: Navigation.Management.HostGroups.DetailsHref(GroupId))); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.HostGroups.HostsHref(GroupId))); - Breadcrumbs.Add(new BreadcrumbItem("Assign", href: "#", true)); + _title = $"Host Groups » {hostgroup.Name} » Hosts » Assign|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Host Groups", href: Navigation.Management.HostGroups.Index)); + _breadcrumbs.Add(new BreadcrumbItem(hostgroup.Name ?? "undefined", href: Navigation.Management.HostGroups.DetailsHref(GroupId))); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.HostGroups.HostsHref(GroupId))); + _breadcrumbs.Add(new BreadcrumbItem("Assign", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -61,9 +61,9 @@ public partial class HostAssign { var search = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); search &= Builders.Filter.Regex("customerName", regex) | Builders.Filter.Regex("hostName", regex); } @@ -146,7 +146,7 @@ public partial class HostAssign Host = hostId }, null, default); - Container?.RefreshAsync(); + _container?.RefreshAsync(); Notification.Success(Snackbar); } diff --git a/src/Web/Insight.Web/Pages/Management/HostGroups/Hosts.razor b/src/Web/Insight.Web/Pages/Management/HostGroups/Hosts.razor index e2ad8c8..d6a0cb4 100644 --- a/src/Web/Insight.Web/Pages/Management/HostGroups/Hosts.razor +++ b/src/Web/Insight.Web/Pages/Management/HostGroups/Hosts.razor @@ -21,18 +21,18 @@
- - @context?.Customers?.Name + + @context?.Customer?.Name - - @context?.Hosts?.Name + + @context?.Host?.Name - + Unassign diff --git a/src/Web/Insight.Web/Pages/Management/HostGroups/Hosts.razor.cs b/src/Web/Insight.Web/Pages/Management/HostGroups/Hosts.razor.cs index 7b856fc..1984b6e 100644 --- a/src/Web/Insight.Web/Pages/Management/HostGroups/Hosts.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/HostGroups/Hosts.razor.cs @@ -23,11 +23,10 @@ public partial class Hosts private TableContainer? _container; private string _title = Global.Name; + private readonly List _breadcrumbs = []; private string? _search; private HostGroupEntity? _model; - private readonly List _breadcrumbs = new(); - protected override async Task OnInitializedAsync() { _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); @@ -54,7 +53,7 @@ public partial class Hosts _title = $"Host Groups » {_model.Name} » Hosts|Insight"; - _breadcrumbs.Add(new BreadcrumbItem(_model.Name, href: Navigation.Management.HostGroups.DetailsHref(GroupId))); + _breadcrumbs.Add(new BreadcrumbItem(_model.Name ?? "undefined", href: Navigation.Management.HostGroups.DetailsHref(GroupId))); _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: "#", true)); await InvokeAsync(StateHasChanged); @@ -149,9 +148,9 @@ public partial class Hosts public class ViewModel { [BsonElement("customer")] - public CustomerEntity? Customers { get; set; } + public CustomerEntity? Customer { get; set; } [BsonElement("host")] - public HostEntity? Hosts { get; set; } + public HostEntity? Host { get; set; } } } \ No newline at end of file diff --git a/src/Web/Insight.Web/Pages/Management/HostGroups/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/HostGroups/Index.razor.cs index 2e70cd0..0cc645e 100644 --- a/src/Web/Insight.Web/Pages/Management/HostGroups/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/HostGroups/Index.razor.cs @@ -18,10 +18,9 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private readonly string _title = "Host Groups|Insight"; - private readonly List _breadcrumbs = new(); - private TableContainer? _container; + private readonly string _title = "Host Groups|Insight"; + private readonly List _breadcrumbs = []; private string? _search; protected override void OnInitialized() diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/ConsoleOptionDialog.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/ConsoleOptionDialog.razor index 9c0180c..0bc8509 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/ConsoleOptionDialog.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/ConsoleOptionDialog.razor @@ -122,7 +122,7 @@ -@code { + @code { private DialogOptions _browserOptions = new() { FullWidth = false, MaxWidth = MaxWidth.Large, FullScreen = false, NoHeader = true }; private bool _browserVisible; private bool _browserDrawer = true; @@ -147,14 +147,18 @@ await InvokeAsync(StateHasChanged); } - public async Task ToggleBrowserAsync() + public Task ToggleBrowserAsync() { _visible = !_visible; _browserVisible = !_browserVisible; + + return Task.CompletedTask; } private async Task OnSaveItemAsync(ScriptItem item) { + if (item.Value is null) return; + _currentItem = item; _visible = false; @@ -190,7 +194,7 @@ public class ScriptItem { - public string Key { get; set; } - public string Value { get; set; } + public string? Key { get; set; } + public string? Value { get; set; } } } \ No newline at end of file diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor index 6f993c5..9da61f6 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor @@ -1,6 +1,6 @@ @inherits ComponentBase - + @if (_model is not null) { @@ -8,7 +8,7 @@ Script Result - + @if (_running) { diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor.cs index cd63d1a..033074f 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Actions/Console/Index.razor.cs @@ -7,8 +7,6 @@ using Microsoft.AspNetCore.Components; using MongoDB.Bson; using MongoDB.Driver; using MudBlazor; -using System.Diagnostics; -using System.Threading; using Vaitr.Bus; using Vaitr.Network; @@ -25,10 +23,10 @@ public partial class Index [Inject] private Bus Bus { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - + private readonly string _id = ObjectId.GenerateNewId().ToString(); - private readonly List _breadcrumbs = new(); + private string _title = Global.Name; + private readonly List _breadcrumbs = []; private readonly ViewModel _model = new(); private async Task LoadDataAsync() @@ -60,9 +58,9 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Actions » Console|Insight"; + _title = $"Hosts » {host.Name} » Actions » Console|Insight"; - _breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); _breadcrumbs.Add(new BreadcrumbItem("Console", href: "#", true)); StateHasChanged(); diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/AgentAssign.razor b/src/Web/Insight.Web/Pages/Management/Hosts/AgentAssign.razor index 96cb4c5..c8148f9 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/AgentAssign.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/AgentAssign.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/AgentAssign.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/AgentAssign.razor.cs index 19cae2d..27a943d 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/AgentAssign.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/AgentAssign.razor.cs @@ -19,10 +19,10 @@ public partial class AgentAssign [Inject] private NavigationManager NavigationManager { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class AgentAssign return; } - Title = $"Hosts » {host.Name} » Agent Assign|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Agent Assign", href: "#", true)); + _title = $"Hosts » {host.Name} » Agent Assign|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Agent Assign", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,9 +59,9 @@ public partial class AgentAssign { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Serial, regex) | Builders.Filter.Regex(x => x.Hostname, regex); } @@ -103,7 +103,7 @@ public partial class AgentAssign } } - private async Task OnAssignAsync(AgentEntity? model) + private async Task OnAssignAsync(AgentEntity model) { try { @@ -111,9 +111,9 @@ public partial class AgentAssign .Filter .Eq(p => p.Id, HostId), Builders .Update - .Set(p => p.Agent, model.Id?.ToString()), cancellationToken: default); + .Set(p => p.Agent, model.Id), cancellationToken: default); - Container?.RefreshAsync(); + _container?.RefreshAsync(); Notification.Success(Snackbar); } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/CustomerAssign.razor b/src/Web/Insight.Web/Pages/Management/Hosts/CustomerAssign.razor index 39e4829..8b4d7a3 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/CustomerAssign.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/CustomerAssign.razor @@ -2,10 +2,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/CustomerAssign.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/CustomerAssign.razor.cs index 3996778..da9c79a 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/CustomerAssign.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/CustomerAssign.razor.cs @@ -19,10 +19,10 @@ public partial class CustomerAssign [Inject] private NavigationManager NavigationManager { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class CustomerAssign return; } - Title = $"Hosts » {host.Name} » Customer Assign|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Customer Assign", href: "#", true)); + _title = $"Hosts » {host.Name} » Customer Assign|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Customer Assign", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,9 +59,9 @@ public partial class CustomerAssign { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.Tag, regex); } @@ -113,7 +113,7 @@ public partial class CustomerAssign .Update .Set(p => p.Customer, model?.Id), cancellationToken: default); - Container?.RefreshAsync(); + _container?.RefreshAsync(); Notification.Success(Snackbar); } @@ -129,7 +129,7 @@ public partial class CustomerAssign private async Task OnRefreshAsync() { - if (Container is null) return; - await Container.RefreshAsync().ConfigureAwait(false); + if (_container is null) return; + await _container.RefreshAsync().ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Details.razor.cs index cd37787..86f7c2c 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Details.razor.cs @@ -18,8 +18,7 @@ public partial class Details private BaseContainer? _container; private string _title = Global.Name; - private readonly List _breadcrumbs = new(); - + private readonly List _breadcrumbs = []; private HostEntity? _host; private HostOsEntity? _os; private HostSystemEntity? _system; @@ -58,7 +57,7 @@ public partial class Details } _title = $"Hosts » {_host.Name} » Logs|Insight"; - _breadcrumbs.Add(new BreadcrumbItem(_host.Name, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem(_host.Name ?? "undefined", href: "#", true)); StateHasChanged(); diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Drives/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Drives/Index.razor index 3835bbd..f72ce01 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Drives/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Drives/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Drives/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Drives/Index.razor.cs index 7d3d556..5bfe9d3 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Drives/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Drives/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Drives|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Drives", href: "#", true)); + _title = $"Hosts » {host.Name} » Drives|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Drives", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,9 +59,9 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.Firmware, regex) | Builders.Filter.Regex(x => x.Serial, regex) | diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Mainboard/Details.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Mainboard/Details.razor index 62bc908..1fc1214 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Mainboard/Details.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Mainboard/Details.razor @@ -1,24 +1,24 @@ @inherits ComponentBase - + - @if (HostMainboard is not null) + @if (_hostMainboard is not null) { - + - + - + - + - + } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Mainboard/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Mainboard/Details.razor.cs index ca37073..6697865 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Mainboard/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Mainboard/Details.razor.cs @@ -16,14 +16,14 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private HostMainboardEntity? HostMainboard { get; set; } + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private HostMainboardEntity? _hostMainboard; private async Task LoadDataAsync() { - Breadcrumbs.Clear(); - HostMainboard = null; + _breadcrumbs.Clear(); + _hostMainboard = null; if (string.IsNullOrWhiteSpace(HostId) || ObjectId.TryParse(HostId, out var hostId) is false) { @@ -32,8 +32,8 @@ public partial class Details return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); StateHasChanged(); @@ -50,12 +50,12 @@ public partial class Details return; } - Title = $"Hosts » {host.Name} » Mainboard|Insight"; + _title = $"Hosts » {host.Name} » Mainboard|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Mainboard", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Mainboard", href: "#", true)); - HostMainboard = await Database.HostMainboard() + _hostMainboard = await Database.HostMainboard() .Find(p => p.Host == HostId) .FirstOrDefaultAsync(); diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Memory/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Memory/Index.razor index 1343679..64e5767 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Memory/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Memory/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Memory/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Memory/Index.razor.cs index 546aa16..28b678a 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Memory/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Memory/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Memory|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Memory", href: "#", true)); + _title = $"Hosts » {host.Name} » Memory|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Memory", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,9 +59,9 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Index, regex) | Builders.Filter.Regex(x => x.Company, regex) | Builders.Filter.Regex(x => x.Name, regex) | diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Processors/Details.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Processors/Details.razor index 33876cf..8a69fb6 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Processors/Details.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Processors/Details.razor @@ -1,8 +1,8 @@ @inherits ComponentBase - + - @if (HostProcessors?.FirstOrDefault() is HostProcessorEntity HostProcessor) + @if (_hostProcessors?.FirstOrDefault() is HostProcessorEntity HostProcessor) { @@ -45,7 +45,7 @@ - + } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Processors/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Processors/Details.razor.cs index bf8a272..9783e1b 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Processors/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Processors/Details.razor.cs @@ -16,17 +16,17 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private IEnumerable? HostProcessors { get; set; } = Enumerable.Empty(); + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private IEnumerable? _hostProcessors = Enumerable.Empty(); private async Task LoadDataAsync() { - Breadcrumbs.Clear(); - HostProcessors = Enumerable.Empty(); + _breadcrumbs.Clear(); + _hostProcessors = Enumerable.Empty(); - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); StateHasChanged(); @@ -48,14 +48,14 @@ public partial class Details return; } - Title = $"Hosts » {host.Name} » Processors|Insight"; + _title = $"Hosts » {host.Name} » Processors|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Processors", href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Processors", href: "#", true)); StateHasChanged(); - HostProcessors = await Database.HostProcessor() + _hostProcessors = await Database.HostProcessor() .Find(p => p.Host == HostId) .ToListAsync(); diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Videocards/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Videocards/Index.razor index cdb1ed9..c876158 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Videocards/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Videocards/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Videocards/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Videocards/Index.razor.cs index 99d6b3b..8e9c8f8 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Videocards/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Hardware/Videocards/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Videocards|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Videocards", href: "#", true)); + _title = $"Hosts » {host.Name} » Videocards|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Videocards", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,9 +59,9 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Company, regex) | Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.Memory, regex) | diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Index.razor index f906036..341c6bd 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Index.razor @@ -1,12 +1,12 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Index.razor.cs index e2b6a9f..4cf9999 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Index.razor.cs @@ -18,18 +18,16 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } - - private ViewModel? Model { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = "Hosts|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index, true)); + _title = "Hosts|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index, true)); } private async Task> LoadDataAsync(TableState state) @@ -50,9 +48,9 @@ public partial class Index var search = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); search &= Builders.Filter.Regex("name", regex) | Builders.Filter.Regex("description", regex) | Builders.Filter.Regex("customer.name", regex) | @@ -166,8 +164,8 @@ public partial class Index private async Task OnRefreshAsync() { - if (Container is null) return; - await Container.RefreshAsync().ConfigureAwait(false); + if (_container is null) return; + await _container.RefreshAsync().ConfigureAwait(false); } private bool _filter; @@ -202,7 +200,7 @@ public partial class Index { _filterUnassignedCustomer = value; - Container?.RefreshAsync(); + _container?.RefreshAsync(); if (value) { @@ -225,9 +223,9 @@ public partial class Index { _filterUnassignedAgent = value; - if (Container is not null) + if (_container is not null) { - _ = Container.RefreshAsync(); + _ = _container.RefreshAsync(); } if (value) diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Logs.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Logs.razor index 1141b62..dc91b64 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Logs.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Logs.razor @@ -2,10 +2,10 @@ @using Insight.Domain.Enums; diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Logs.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Logs.razor.cs index 317a055..bff8da6 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Logs.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Logs.razor.cs @@ -20,10 +20,10 @@ public partial class Logs [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -34,8 +34,8 @@ public partial class Logs return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); var host = await Database.Host() .Find(Builders @@ -50,9 +50,9 @@ public partial class Logs return; } - Title = $"Host » {host.Name}|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Logs", href: "#", true)); + _title = $"Host » {host.Name}|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Logs", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -61,9 +61,9 @@ public partial class Logs { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Category, regex) | Builders.Filter.Regex(x => x.Status, regex) | Builders.Filter.Regex(x => x.Source, regex) | @@ -166,7 +166,7 @@ public partial class Logs { _filterDate = value; - Container?.RefreshAsync(); + _container?.RefreshAsync(); if (value is not null) { @@ -189,7 +189,7 @@ public partial class Logs { _filterCategory = value; - Container?.RefreshAsync(); + _container?.RefreshAsync(); if (value is not null) { @@ -212,7 +212,7 @@ public partial class Logs { _filterStatus = value; - Container?.RefreshAsync(); + _container?.RefreshAsync(); if (value is not null) { diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Addresses/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Addresses/Index.razor index cd05100..fae228f 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Addresses/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Addresses/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -33,7 +33,7 @@ @if (context.Interfaces is not null && context.Interfaces.Any()) { - + @context.Interfaces.First().Name } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Addresses/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Addresses/Index.razor.cs index b17a4ce..142b4ba 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Addresses/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Addresses/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Addresses|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Addresses", href: "#", true)); + _title = $"Hosts » {host.Name} » Addresses|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Addresses", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,12 +59,12 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Address, regex) | Builders.Filter.Regex(x => x.Mask, regex) | - Builders.Filter.Regex(x => x.Interfaces.First().Description, regex); + Builders.Filter.Regex(x => x.Interfaces!.First().Description, regex); } var query = Database.HostInterfaceAddress() @@ -77,14 +77,14 @@ public partial class Index { "Address" => Builders.Sort.Ascending(p => p.Address), "Mask" => Builders.Sort.Ascending(p => p.Mask), - "Interface" => Builders.Sort.Ascending(p => p.Interfaces.First().Description), + "Interface" => Builders.Sort.Ascending(p => p.Interfaces!.First().Description), _ => null }, SortDirection.Descending => state.SortLabel switch { "Address" => Builders.Sort.Descending(p => p.Address), "Mask" => Builders.Sort.Descending(p => p.Mask), - "Interface" => Builders.Sort.Descending(p => p.Interfaces.First().Description), + "Interface" => Builders.Sort.Descending(p => p.Interfaces!.First().Description), _ => null }, _ => Builders.Sort.Ascending(p => p.Address) diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Gateways/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Gateways/Index.razor index 357b2af..4bebc2e 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Gateways/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Gateways/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -25,7 +25,7 @@ @if (context.Interfaces is not null && context.Interfaces.Any()) { - + @context.Interfaces.First().Name } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Gateways/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Gateways/Index.razor.cs index 7dd20a6..723aeab 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Gateways/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Gateways/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Gateways|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Gateways", href: "#", true)); + _title = $"Hosts » {host.Name} » Gateways|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Gateways", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,11 +59,11 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Address, regex) | - Builders.Filter.Regex(x => x.Interfaces.First().Description, regex); + Builders.Filter.Regex(x => x.Interfaces!.First().Description, regex); } var query = Database.HostInterfaceGateway() @@ -75,13 +75,13 @@ public partial class Index SortDirection.Ascending => state.SortLabel switch { "Address" => Builders.Sort.Ascending(p => p.Address), - "Interface" => Builders.Sort.Ascending(p => p.Interfaces.First().Description), + "Interface" => Builders.Sort.Ascending(p => p.Interfaces!.First().Description), _ => null }, SortDirection.Descending => state.SortLabel switch { "Address" => Builders.Sort.Descending(p => p.Address), - "Interface" => Builders.Sort.Descending(p => p.Interfaces.First().Description), + "Interface" => Builders.Sort.Descending(p => p.Interfaces!.First().Description), _ => null }, _ => Builders.Sort.Ascending(p => p.Address) diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Details.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Details.razor index 405d730..b6bcdcb 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Details.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Details.razor @@ -1,41 +1,41 @@ @inherits ComponentBase - + - @if (HostInterface is not null) + @if (_hostInterface is not null) { - + - + - + - + @{ - var color = Enum.Parse(HostInterface?.Status, true) switch + var color = Enum.Parse(_hostInterface.Status ?? string.Empty, true) switch { System.Net.NetworkInformation.OperationalStatus.Up => Color.Success, System.Net.NetworkInformation.OperationalStatus.Down => Color.Error, _ => Color.Error }; - + } @{ var value = "-"; - if (HostInterface?.Speed is not null) + if (_hostInterface?.Speed is not null) { - value = Math.Round((HostInterface.Speed.Value / Math.Pow(1000, 3)), 2).ToString(); + value = Math.Round((_hostInterface.Speed.Value / Math.Pow(1000, 3)), 2).ToString(); } @@ -45,9 +45,9 @@ @{ var value = "-"; - if (HostInterface?.Sent is not null) + if (_hostInterface?.Sent is not null) { - value = Math.Round((HostInterface.Sent.Value / Math.Pow(1000, 3)), 2).ToString(); + value = Math.Round((_hostInterface.Sent.Value / Math.Pow(1000, 3)), 2).ToString(); } @@ -57,40 +57,40 @@ @{ var value = "-"; - if (HostInterface?.Received is not null) + if (_hostInterface?.Received is not null) { - value = Math.Round((HostInterface.Received.Value / Math.Pow(1000, 3)), 2).ToString(); + value = Math.Round((_hostInterface.Received.Value / Math.Pow(1000, 3)), 2).ToString(); } } - + - + - + - + - + - + - + - + - + } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Details.razor.cs index b0fb0b9..ddc3b2e 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Details.razor.cs @@ -17,14 +17,14 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private HostInterfaceEntity? HostInterface { get; set; } + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private HostInterfaceEntity? _hostInterface; private async Task LoadDataAsync() { - Breadcrumbs.Clear(); - HostInterface = null; + _breadcrumbs.Clear(); + _hostInterface = null; if (string.IsNullOrWhiteSpace(HostId) || ObjectId.TryParse(HostId, out var hostId) is false) { @@ -33,8 +33,8 @@ public partial class Details return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); StateHasChanged(); @@ -51,7 +51,7 @@ public partial class Details return; } - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); StateHasChanged(); @@ -62,22 +62,22 @@ public partial class Details return; } - HostInterface = await Database.HostInterface() + _hostInterface = await Database.HostInterface() .Find(p => p.Host == HostId && p.Id == InterfaceId) .FirstOrDefaultAsync(); - if (HostInterface is null) + if (_hostInterface is null) { Notification.Error(Snackbar, "Not Found"); NavigationManager.NavigateTo(Navigation.Management.Hosts.Network.Interfaces.IndexHref(HostId)); return; } - Title = $"Hosts » {host.Name} » Interface » {HostInterface.Name ?? HostInterface.Description}|Insight"; + _title = $"Hosts » {host.Name} » Interface » {_hostInterface.Name ?? _hostInterface.Description}|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Interfaces", href: Navigation.Management.Hosts.Network.Interfaces.IndexHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem(HostInterface.Name ?? HostInterface.Description, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem("Interfaces", href: Navigation.Management.Hosts.Network.Interfaces.IndexHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem(_hostInterface.Name ?? "undefined", href: "#", true)); StateHasChanged(); } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Index.razor index c29e2b5..9023d58 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -45,7 +45,7 @@
- + @context?.Name diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Index.razor.cs index b5c1d2c..d7ab38f 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Interfaces/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Interfaces|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Interfaces", href: "#", true)); + _title = $"Hosts » {host.Name} » Interfaces|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Interfaces", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,9 +59,9 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Description, regex) | Builders.Filter.Regex(x => x.Mac, regex) | Builders.Filter.Regex(x => x.Speed, regex) | diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Nameservers/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Nameservers/Index.razor index 722541a..915d3e6 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Nameservers/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Nameservers/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -23,9 +23,9 @@ @context.Address - @if (context.Interfaces is not null && context.Interfaces.Any()) + @if (context.Interfaces is not null && context.Interfaces.Count != 0) { - + @context.Interfaces.First().Name } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Nameservers/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Nameservers/Index.razor.cs index 2c4343d..6bc92b7 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Nameservers/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Nameservers/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Nameservers|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Nameservers", href: "#", true)); + _title = $"Hosts » {host.Name} » Nameservers|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Nameservers", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,11 +59,11 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Address, regex) | - Builders.Filter.Regex(x => x.Interfaces.First().Description, regex); + Builders.Filter.Regex(x => x.Interfaces!.First().Description, regex); } var query = Database.HostInterfaceNameserver() @@ -75,13 +75,13 @@ public partial class Index SortDirection.Ascending => state.SortLabel switch { "Address" => Builders.Sort.Ascending(p => p.Address), - "Interface" => Builders.Sort.Ascending(p => p.Interfaces.First().Description), + "Interface" => Builders.Sort.Ascending(p => p.Interfaces!.First().Description), _ => null }, SortDirection.Descending => state.SortLabel switch { "Address" => Builders.Sort.Descending(p => p.Address), - "Interface" => Builders.Sort.Descending(p => p.Interfaces.First().Description), + "Interface" => Builders.Sort.Descending(p => p.Interfaces!.First().Description), _ => null }, _ => Builders.Sort.Ascending(p => p.Address) diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Routes/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Routes/Index.razor index 3d79e2e..f8e3921 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Routes/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Routes/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -47,9 +47,9 @@ @context.Metric - @if (context.Interfaces is not null && context.Interfaces.Any()) + @if (context.Interfaces is not null && context.Interfaces.Count != 0) { - + @context.Interfaces.First().Name } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Routes/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Routes/Index.razor.cs index 7dcf02a..d8a2480 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Network/Routes/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Network/Routes/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Routes|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Routes", href: "#", true)); + _title = $"Hosts » {host.Name} » Routes|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Routes", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,14 +59,14 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Destination, regex) | Builders.Filter.Regex(x => x.Mask, regex) | Builders.Filter.Regex(x => x.Gateway, regex) | Builders.Filter.Regex(x => x.Metric, regex) | - Builders.Filter.Regex(x => x.Interfaces.First().Description, regex); + Builders.Filter.Regex(x => x.Interfaces!.First().Description, regex); } var query = Database.HostInterfaceRoute() @@ -81,7 +81,7 @@ public partial class Index "Gateway" => Builders.Sort.Ascending(p => p.Gateway), "Mask" => Builders.Sort.Ascending(p => p.Mask), "Metric" => Builders.Sort.Ascending(p => p.Metric), - "Interface" => Builders.Sort.Ascending(p => p.Interfaces.First().Description), + "Interface" => Builders.Sort.Ascending(p => p.Interfaces!.First().Description), _ => null }, SortDirection.Descending => state.SortLabel switch @@ -90,7 +90,7 @@ public partial class Index "Gateway" => Builders.Sort.Descending(p => p.Gateway), "Mask" => Builders.Sort.Descending(p => p.Mask), "Metric" => Builders.Sort.Descending(p => p.Metric), - "Interface" => Builders.Sort.Descending(p => p.Interfaces.First().Description), + "Interface" => Builders.Sort.Descending(p => p.Interfaces!.First().Description), _ => null }, _ => Builders.Sort.Ascending(p => p.Destination) diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Groups/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Groups/Index.razor index d6ee0a5..8c5941e 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Groups/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Groups/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Groups/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Groups/Index.razor.cs index b8c3a1e..2d6471c 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Groups/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Groups/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Groups|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Groups", href: "#", true)); + _title = $"Hosts » {host.Name} » Groups|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Groups", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,9 +59,9 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Domain, regex) | Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.Sid, regex); diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Os/Details.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Os/Details.razor index d628b64..b47d3b9 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Os/Details.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Os/Details.razor @@ -1,30 +1,30 @@ @inherits ComponentBase - + - @if (HostOs is not null) + @if (_hostOs is not null) { - + - + - + - + - + - @if (HostOs?.Installed is not null) + @if (_hostOs?.Installed is not null) { - + } } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Os/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Os/Details.razor.cs index 413c69e..cd773be 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Os/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Os/Details.razor.cs @@ -16,14 +16,14 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - private readonly List _breadcrumbs = new(); - private HostOsEntity? HostOs { get; set; } + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private HostOsEntity? _hostOs; private async Task LoadDataAsync() { _breadcrumbs.Clear(); - HostOs = null; + _hostOs = null; _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); @@ -50,14 +50,14 @@ public partial class Details return; } - Title = $"Hosts » {host.Name} » Os|Insight"; + _title = $"Hosts » {host.Name} » Os|Insight"; - _breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); _breadcrumbs.Add(new BreadcrumbItem("Operation System", href: "#", true)); StateHasChanged(); - HostOs = await Database.HostOs() + _hostOs = await Database.HostOs() .Find(Builders .Filter .Eq(p => p.Host, HostId)) diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Printers/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Printers/Index.razor index 680750f..560cdff 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Printers/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Printers/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Printers/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Printers/Index.razor.cs index ee7735d..a39cffd 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Printers/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Printers/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Printers|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Printers", href: "#", true)); + _title = $"Hosts » {host.Name} » Printers|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Printers", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,9 +59,9 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.Port, regex) | Builders.Filter.Regex(x => x.Location, regex) | diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Services/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Services/Index.razor index 249e64e..fcdb191 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Services/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Services/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Services/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Services/Index.razor.cs index 06d65a0..9392365 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Services/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Services/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Services|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Services", href: "#", true)); + _title = $"Hosts » {host.Name} » Services|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Services", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,9 +59,9 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.DisplayName, regex) | Builders.Filter.Regex(x => x.Company, regex) | diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Sessions/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Sessions/Index.razor index 71a14eb..fafe541 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Sessions/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Sessions/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Sessions/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Sessions/Index.razor.cs index aba0d62..794d1f2 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Sessions/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Sessions/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Sessions|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Sessions", href: "#", true)); + _title = $"Hosts » {host.Name} » Sessions|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Sessions", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,9 +59,9 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Sid, regex) | Builders.Filter.Regex(x => x.User, regex) | Builders.Filter.Regex(x => x.Remote, regex) | diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Software/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Software/Index.razor index 1f57395..8a867e6 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Software/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Software/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Software/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Software/Index.razor.cs index c41172d..6271c6f 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Software/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Software/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Software|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Software", href: "#", true)); + _title = $"Hosts » {host.Name} » Software|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Software", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,9 +59,9 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Company, regex) | Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.Architecture, regex) | diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Details.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Details.razor index 40dc72b..57658d4 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Details.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Details.razor @@ -1,17 +1,17 @@ @using static Insight.Domain.Network.Agent.Messages.StoragePool; @inherits ComponentBase - + - @if (HostStoragePool is not null) + @if (_hostStoragePool is not null) { - + @{ - var color = Enum.Parse(HostStoragePool?.Health, true) switch + var color = Enum.Parse(_hostStoragePool.Health ?? string.Empty, true) switch { HealthState.Healthy => Color.Success, HealthState.Warning => Color.Warning, @@ -20,12 +20,12 @@ _ => Color.Error }; - + } - @if (HostStoragePool?.States != null) + @if (_hostStoragePool?.States != null) { - var value = string.Join(", ", HostStoragePool.States); + var value = string.Join(", ", _hostStoragePool.States); var color = value switch { "Degraded" => Color.Error, @@ -36,19 +36,19 @@ } - @if (HostStoragePool?.Primordial is false) + @if (_hostStoragePool?.Primordial is false) { - + } @{ var value = "-"; - if (HostStoragePool?.Size != null) + if (_hostStoragePool?.Size != null) { - value = $"{Math.Round((HostStoragePool.Size.Value / Math.Pow(1024, 3)), 2)} GB"; + value = $"{Math.Round((_hostStoragePool.Size.Value / Math.Pow(1024, 3)), 2)} GB"; } @@ -58,27 +58,27 @@ @{ var value = "-"; - if (HostStoragePool?.AllocatedSize != null) + if (_hostStoragePool?.AllocatedSize != null) { - value = $"{Math.Round((HostStoragePool.AllocatedSize.Value / Math.Pow(1024, 3)), 2)} GB"; + value = $"{Math.Round((_hostStoragePool.AllocatedSize.Value / Math.Pow(1024, 3)), 2)} GB"; } } - @if (HostStoragePool?.Primordial is false) + @if (_hostStoragePool?.Primordial is false) { - + } - + - @if (HostStoragePool?.Primordial is false) + @if (_hostStoragePool?.Primordial is false) { - + } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Details.razor.cs index 170fc41..2976821 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Details.razor.cs @@ -17,17 +17,17 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private HostStoragePoolEntity? HostStoragePool { get; set; } + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private HostStoragePoolEntity? _hostStoragePool; private async Task LoadDataAsync() { - Breadcrumbs.Clear(); - HostStoragePool = null; + _breadcrumbs.Clear(); + _hostStoragePool = null; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); StateHasChanged(); @@ -51,8 +51,8 @@ public partial class Details return; } - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: Navigation.Management.Hosts.Systems.StoragePools.IndexHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: Navigation.Management.Hosts.Systems.StoragePools.IndexHref(HostId))); StateHasChanged(); @@ -63,23 +63,23 @@ public partial class Details return; } - HostStoragePool = await Database.HostStoragePool() + _hostStoragePool = await Database.HostStoragePool() .Aggregate() .Match(p => p.Host == HostId && p.Id == StoragePoolId) .Lookup(Database.HostStoragePoolPhysicalDisk(), p => p.Id, p => p.StoragePool, p => p.PhysicalDisks) .Lookup(Database.HostStoragePoolVirtualDisk(), p => p.Id, p => p.StoragePool, p => p.VirtualDisks) .FirstOrDefaultAsync(); - if (HostStoragePool is null) + if (_hostStoragePool is null) { Notification.Error(Snackbar, "Not Found"); NavigationManager.NavigateTo(Navigation.Management.Hosts.Systems.StoragePools.IndexHref(HostId)); return; } - Title = $"Hosts » {host.Name} » Storage Pools » {HostStoragePool.Name}|Insight"; + _title = $"Hosts » {host.Name} » Storage Pools » {_hostStoragePool.Name}|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(HostStoragePool.Name, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem(_hostStoragePool.Name ?? "undefined", href: "#", true)); StateHasChanged(); } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Index.razor index a7fe9c8..fe074d0 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Index.razor @@ -2,10 +2,10 @@ @inherits ComponentBase
@@ -46,7 +46,7 @@
- + @context?.Name @@ -66,18 +66,18 @@ } - + @context?.PhysicalDisks?.Count - + @context?.VirtualDisks?.Count @{ - var color = Enum.Parse(context?.Health, true) switch + var color = Enum.Parse(context.Health ?? string.Empty, true) switch { HealthState.Healthy => Color.Success, HealthState.Warning => Color.Warning, diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Index.razor.cs index 0e8b369..5c549d2 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Storage Pools|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: "#", true)); + _title = $"Hosts » {host.Name} » Storage Pools|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,9 +59,9 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.Resiliency, regex) | Builders.Filter.Regex(x => x.Size, regex) | diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Details.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Details.razor index 3ce1493..8f1e351 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Details.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Details.razor @@ -1,29 +1,29 @@ @using static Insight.Domain.Network.Agent.Messages.PhysicalDisk; @inherits ComponentBase - + - @if (HostPhysicalDisk is not null) + @if (_hostPhysicalDisk is not null) { - + - + - + - + - + @{ - var color = Enum.Parse(HostPhysicalDisk?.Health, true) switch + var color = Enum.Parse(_hostPhysicalDisk.Health ?? string.Empty, true) switch { HealthState.Healthy => Color.Success, HealthState.Warning => Color.Warning, @@ -32,22 +32,22 @@ _ => Color.Error }; - + } - @if (HostPhysicalDisk?.States != null) + @if (_hostPhysicalDisk?.States != null) { - + } @{ var value = "-"; - if (HostPhysicalDisk?.Size != null) + if (_hostPhysicalDisk?.Size != null) { - value = $"{Math.Round((HostPhysicalDisk.Size.Value / Math.Pow(1024, 3)), 2)} GB"; + value = $"{Math.Round((_hostPhysicalDisk.Size.Value / Math.Pow(1024, 3)), 2)} GB"; } @@ -57,9 +57,9 @@ @{ var value = "-"; - if (HostPhysicalDisk?.AllocatedSize != null) + if (_hostPhysicalDisk?.AllocatedSize != null) { - value = $"{Math.Round((HostPhysicalDisk.AllocatedSize.Value / Math.Pow(1024, 3)), 2)} GB"; + value = $"{Math.Round((_hostPhysicalDisk.AllocatedSize.Value / Math.Pow(1024, 3)), 2)} GB"; } @@ -69,19 +69,19 @@ @{ var value = "-"; - if (HostPhysicalDisk?.Footprint != null) + if (_hostPhysicalDisk?.Footprint != null) { - value = $"{Math.Round((HostPhysicalDisk.Footprint.Value / Math.Pow(1024, 3)), 2)} GB"; + value = $"{Math.Round((_hostPhysicalDisk.Footprint.Value / Math.Pow(1024, 3)), 2)} GB"; } } - + - + } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Details.razor.cs index fcf3845..ff55ee4 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Details.razor.cs @@ -18,17 +18,17 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private HostStoragePoolPhysicalDiskEntity? HostPhysicalDisk { get; set; } + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private HostStoragePoolPhysicalDiskEntity? _hostPhysicalDisk { get; set; } private async Task LoadDataAsync() { - Breadcrumbs.Clear(); - HostPhysicalDisk = null; + _breadcrumbs.Clear(); + _hostPhysicalDisk = null; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); StateHasChanged(); @@ -52,8 +52,8 @@ public partial class Details return; } - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: Navigation.Management.Hosts.Systems.StoragePools.IndexHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: Navigation.Management.Hosts.Systems.StoragePools.IndexHref(HostId))); StateHasChanged(); @@ -75,8 +75,8 @@ public partial class Details return; } - Breadcrumbs.Add(new BreadcrumbItem(storagePool.Name, href: Navigation.Management.Hosts.Systems.StoragePools.DetailsHref(HostId, StoragePoolId))); - Breadcrumbs.Add(new BreadcrumbItem("Physical Disks", href: Navigation.Management.Hosts.Systems.StoragePools.PhysicalDisks.IndexHref(HostId, StoragePoolId))); + _breadcrumbs.Add(new BreadcrumbItem(storagePool.Name ?? "undefined", href: Navigation.Management.Hosts.Systems.StoragePools.DetailsHref(HostId, StoragePoolId))); + _breadcrumbs.Add(new BreadcrumbItem("Physical Disks", href: Navigation.Management.Hosts.Systems.StoragePools.PhysicalDisks.IndexHref(HostId, StoragePoolId))); StateHasChanged(); @@ -87,20 +87,20 @@ public partial class Details return; } - HostPhysicalDisk = await Database.HostStoragePoolPhysicalDisk() + _hostPhysicalDisk = await Database.HostStoragePoolPhysicalDisk() .Find(p => p.Host == HostId && p.StoragePool == StoragePoolId && p.Id == PhysicalDiskId) .FirstOrDefaultAsync(); - if (HostPhysicalDisk is null) + if (_hostPhysicalDisk is null) { Notification.Error(Snackbar, "Not Found"); NavigationManager.NavigateTo(Navigation.Management.Hosts.Systems.StoragePools.DetailsHref(HostId, StoragePoolId)); return; } - Title = $"Hosts » {host.Name} » Storage Pool » {storagePool.Name} » Physical Disk » {HostPhysicalDisk.Name}|Insight"; + _title = $"Hosts » {host.Name} » Storage Pool » {storagePool.Name} » Physical Disk » {_hostPhysicalDisk.Name}|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(HostPhysicalDisk.Name, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem(_hostPhysicalDisk.Name ?? "undefined", href: "#", true)); StateHasChanged(); } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Index.razor index f88a3a2..9da67d7 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Index.razor @@ -2,10 +2,10 @@ @inherits ComponentBase
@@ -46,7 +46,7 @@
- + @context?.Name diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Index.razor.cs index 086bf63..eb776e1 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/PhysicalDisks/Index.razor.cs @@ -20,10 +20,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -65,13 +65,13 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Storage Pools » {storagePool.Name} » Physical Disks|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: Navigation.Management.Hosts.Systems.StoragePools.IndexHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem(storagePool.Name, href: Navigation.Management.Hosts.Systems.StoragePools.DetailsHref(HostId, StoragePoolId))); - Breadcrumbs.Add(new BreadcrumbItem("Physical Disks", href: "#", true)); + _title = $"Hosts » {host.Name} » Storage Pools » {storagePool.Name} » Physical Disks|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: Navigation.Management.Hosts.Systems.StoragePools.IndexHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem(storagePool.Name ?? "undefined", href: Navigation.Management.Hosts.Systems.StoragePools.DetailsHref(HostId, StoragePoolId))); + _breadcrumbs.Add(new BreadcrumbItem("Physical Disks", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -80,9 +80,9 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.StoragePool, StoragePoolId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex); } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Details.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Details.razor index c04d773..f9fa385 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Details.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Details.razor @@ -1,17 +1,17 @@ @using static Insight.Domain.Network.Agent.Messages.VirtualDisk; @inherits ComponentBase - + - @if (HostVirtualDisk is not null) + @if (_hostVirtualDisk is not null) { - + @{ - var color = Enum.Parse(HostVirtualDisk?.Health, true) switch + var color = Enum.Parse(_hostVirtualDisk.Health ?? string.Empty, true) switch { HealthState.Healthy => Color.Success, HealthState.Warning => Color.Warning, @@ -20,34 +20,34 @@ _ => Color.Error }; - + } - + - + - + - + - @if (HostVirtualDisk?.States != null) + @if (_hostVirtualDisk?.States != null) { - + } @{ var value = "-"; - if (HostVirtualDisk?.Size != null) + if (_hostVirtualDisk?.Size != null) { - value = $"{Math.Round((HostVirtualDisk.Size.Value / Math.Pow(1024, 3)), 2)} GB"; + value = $"{Math.Round((_hostVirtualDisk.Size.Value / Math.Pow(1024, 3)), 2)} GB"; } @@ -57,9 +57,9 @@ @{ var value = "-"; - if (HostVirtualDisk?.AllocatedSize != null) + if (_hostVirtualDisk?.AllocatedSize != null) { - value = $"{Math.Round((HostVirtualDisk.AllocatedSize.Value / Math.Pow(1024, 3)), 2)} GB"; + value = $"{Math.Round((_hostVirtualDisk.AllocatedSize.Value / Math.Pow(1024, 3)), 2)} GB"; } @@ -69,9 +69,9 @@ @{ var value = "-"; - if (HostVirtualDisk?.Footprint != null) + if (_hostVirtualDisk?.Footprint != null) { - value = $"{Math.Round((HostVirtualDisk.Footprint.Value / Math.Pow(1024, 3)), 2)} GB"; + value = $"{Math.Round((_hostVirtualDisk.Footprint.Value / Math.Pow(1024, 3)), 2)} GB"; } @@ -81,9 +81,9 @@ @{ var value = "-"; - if (HostVirtualDisk?.ReadCacheSize != null) + if (_hostVirtualDisk?.ReadCacheSize != null) { - value = $"{Math.Round((HostVirtualDisk.ReadCacheSize.Value / Math.Pow(1024, 3)), 2)} GB"; + value = $"{Math.Round((_hostVirtualDisk.ReadCacheSize.Value / Math.Pow(1024, 3)), 2)} GB"; } @@ -93,9 +93,9 @@ @{ var value = "-"; - if (HostVirtualDisk?.WriteCacheSize != null) + if (_hostVirtualDisk?.WriteCacheSize != null) { - value = $"{Math.Round((HostVirtualDisk.WriteCacheSize.Value / Math.Pow(1024, 3)), 2)} GB"; + value = $"{Math.Round((_hostVirtualDisk.WriteCacheSize.Value / Math.Pow(1024, 3)), 2)} GB"; } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Details.razor.cs index a1d2231..9b62a67 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Details.razor.cs @@ -18,17 +18,17 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private HostStoragePoolVirtualDiskEntity? HostVirtualDisk { get; set; } + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private HostStoragePoolVirtualDiskEntity? _hostVirtualDisk; private async Task LoadDataAsync() { - Breadcrumbs.Clear(); - HostVirtualDisk = null; + _breadcrumbs.Clear(); + _hostVirtualDisk = null; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); StateHasChanged(); @@ -52,8 +52,8 @@ public partial class Details return; } - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: Navigation.Management.Hosts.Systems.StoragePools.IndexHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: Navigation.Management.Hosts.Systems.StoragePools.IndexHref(HostId))); StateHasChanged(); @@ -75,8 +75,8 @@ public partial class Details return; } - Breadcrumbs.Add(new BreadcrumbItem(storagePool.Name, href: Navigation.Management.Hosts.Systems.StoragePools.DetailsHref(HostId, StoragePoolId))); - Breadcrumbs.Add(new BreadcrumbItem("Virtual Disks", href: Navigation.Management.Hosts.Systems.StoragePools.VirtualDisks.IndexHref(HostId, StoragePoolId))); + _breadcrumbs.Add(new BreadcrumbItem(storagePool.Name ?? "undefined", href: Navigation.Management.Hosts.Systems.StoragePools.DetailsHref(HostId, StoragePoolId))); + _breadcrumbs.Add(new BreadcrumbItem("Virtual Disks", href: Navigation.Management.Hosts.Systems.StoragePools.VirtualDisks.IndexHref(HostId, StoragePoolId))); StateHasChanged(); @@ -87,20 +87,20 @@ public partial class Details return; } - HostVirtualDisk = await Database.HostStoragePoolVirtualDisk() + _hostVirtualDisk = await Database.HostStoragePoolVirtualDisk() .Find(p => p.Host == HostId && p.StoragePool == StoragePoolId && p.Id == VirtualDiskId) .FirstOrDefaultAsync(); - if (HostVirtualDisk is null) + if (_hostVirtualDisk is null) { Notification.Error(Snackbar, "Not Found"); NavigationManager.NavigateTo(Navigation.Management.Hosts.Systems.StoragePools.DetailsHref(HostId, StoragePoolId)); return; } - Title = $"Hosts » {host.Name} » Storage Pool » {storagePool.Name} » Virtual Disk » {HostVirtualDisk.Name}|Insight"; + _title = $"Hosts » {host.Name} » Storage Pool » {storagePool.Name} » Virtual Disk » {_hostVirtualDisk.Name}|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(HostVirtualDisk.Name, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem(_hostVirtualDisk.Name ?? "undefined", href: "#", true)); StateHasChanged(); } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Index.razor index fcd0573..0576aad 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Index.razor @@ -2,10 +2,10 @@ @inherits ComponentBase
@@ -61,7 +61,7 @@
- + @(context?.Name ?? "Unnamed") diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Index.razor.cs index 21f4aff..962b277 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/StoragePools/VirtualDisks/Index.razor.cs @@ -20,10 +20,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -65,13 +65,13 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Storage Pools » {storagePool.Name} » Virtual Disks|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: Navigation.Management.Hosts.Systems.StoragePools.IndexHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem(storagePool.Name, href: Navigation.Management.Hosts.Systems.StoragePools.DetailsHref(HostId, StoragePoolId))); - Breadcrumbs.Add(new BreadcrumbItem("Virtual Disks", href: "#", true)); + _title = $"Hosts » {host.Name} » Storage Pools » {storagePool.Name} » Virtual Disks|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: Navigation.Management.Hosts.Systems.StoragePools.IndexHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem(storagePool.Name ?? "undefined", href: Navigation.Management.Hosts.Systems.StoragePools.DetailsHref(HostId, StoragePoolId))); + _breadcrumbs.Add(new BreadcrumbItem("Virtual Disks", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -81,9 +81,9 @@ public partial class Index var filter = Builders.Filter.Eq(p => p.Host, HostId); filter &= Builders.Filter.Eq(p => p.StoragePool, StoragePoolId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex); } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Installed.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Installed.razor index 0e552b5..a465ae2 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Installed.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Installed.razor @@ -2,10 +2,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Installed.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Installed.razor.cs index 5347fcb..80e8104 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Installed.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Installed.razor.cs @@ -20,10 +20,10 @@ public partial class Installed [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; private HostUpdateEntity? Selected { get; set; } @@ -49,11 +49,11 @@ public partial class Installed return; } - Title = $"Hosts » {host.Name} » Installed Updates|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Installed Updates", href: "#", true)); + _title = $"Hosts » {host.Name} » Installed Updates|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Installed Updates", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -63,9 +63,9 @@ public partial class Installed var filter = Builders.Filter.Eq(x => x.Host, HostId); filter &= Builders.Filter.Eq(x => x.Pending, false); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.Description, regex) | Builders.Filter.Regex(x => x.SupportUrl, regex) | diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Pending.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Pending.razor index 18ef179..476c393 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Pending.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Pending.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Pending.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Pending.razor.cs index e9de72d..2407e92 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Pending.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Updates/Pending.razor.cs @@ -20,10 +20,10 @@ public partial class Pending [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; private HostUpdateEntity? Selected { get; set; } @@ -49,11 +49,11 @@ public partial class Pending return; } - Title = $"Hosts » {host.Name} » Pending Updates|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Pending Updates", href: "#", true)); + _title = $"Hosts » {host.Name} » Pending Updates|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Pending Updates", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -63,9 +63,9 @@ public partial class Pending var filter = Builders.Filter.Eq(x => x.Host, HostId); filter &= Builders.Filter.Eq(x => x.Pending, true); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.Description, regex) | Builders.Filter.Regex(x => x.SupportUrl, regex) | diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Details.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Details.razor index a344f82..00349c9 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Details.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Details.razor @@ -1,45 +1,45 @@ @inherits ComponentBase - + - @if (HostUser is not null) + @if (_hostUser is not null) { - + - + - + - + - + - + - + - + - + - + - + - + @* diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Details.razor.cs index 7c44e30..0633221 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Details.razor.cs @@ -17,17 +17,17 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private HostSysUserEntity? HostUser { get; set; } + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private HostSysUserEntity? _hostUser; private async Task LoadDataAsync() { - Breadcrumbs.Clear(); - HostUser = null; + _breadcrumbs.Clear(); + _hostUser = null; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); StateHasChanged(); @@ -51,8 +51,8 @@ public partial class Details return; } - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Users", href: Navigation.Management.Hosts.Systems.Users.IndexHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Users", href: Navigation.Management.Hosts.Systems.Users.IndexHref(HostId))); StateHasChanged(); @@ -63,20 +63,20 @@ public partial class Details return; } - HostUser = await Database.HostSystemUser() + _hostUser = await Database.HostSystemUser() .Find(p => p.Host == HostId && p.Id == UserId) .FirstOrDefaultAsync(); - if (HostUser is null) + if (_hostUser is null) { Notification.Error(Snackbar, "Not Found"); NavigationManager.NavigateTo(Navigation.Management.Hosts.Systems.Users.IndexHref(HostId)); return; } - Title = $"Hosts » {host.Name} » User » {HostUser.Name}|Insight"; + _title = $"Hosts » {host.Name} » User » {_hostUser.Name}|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(HostUser.Name, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem(_hostUser.Name ?? "undefined", href: "#", true)); StateHasChanged(); } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Index.razor index f1d05cc..47a2533 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -40,7 +40,7 @@
- + @if (context?.LocalAccount is not null && context.LocalAccount is true) { @context?.Name diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Index.razor.cs index f03c5d1..4a5db03 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Users/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Users|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Users", href: "#", true)); + _title = $"Hosts » {host.Name} » Users|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Users", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,9 +59,9 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.FullName, regex) | Builders.Filter.Regex(x => x.Sid, regex) | diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Details.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Details.razor index 823ffe1..eef0b0c 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Details.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Details.razor @@ -3,37 +3,37 @@ @using Microsoft.AspNetCore.Components.Rendering @using static Insight.Domain.Network.Agent.Messages.VirtualMaschine; - + - @if (HostVirtualMaschine is not null) + @if (_hostVirtualMaschine is not null) { - + - + - + - + @{ - var color = Enum.Parse(HostVirtualMaschine?.Enabled, true) switch + var color = Enum.Parse(_hostVirtualMaschine.Enabled ?? string.Empty, true) switch { EnabledEnum.Aktiviert => Color.Success, EnabledEnum.Deaktiviert => Color.Error, _ => Color.Inherit }; - var text = Enum.Parse(HostVirtualMaschine?.Enabled, true) switch + var text = Enum.Parse(_hostVirtualMaschine.Enabled ?? string.Empty, true) switch { EnabledEnum.Aktiviert => "Running", EnabledEnum.Deaktiviert => "Stopped", @@ -45,9 +45,9 @@ - @if (HostVirtualMaschine?.Health is not null) + @if (_hostVirtualMaschine?.Health is not null) { - var color = Enum.Parse(HostVirtualMaschine.Health, true) switch + var color = Enum.Parse(_hostVirtualMaschine.Health, true) switch { HealthStatusEnum.OK => Color.Success, HealthStatusEnum.Hauptfehler => Color.Warning, @@ -55,50 +55,50 @@ _ => Color.Error }; - + } - + - @if (Enum.TryParse(HostVirtualMaschine?.Enabled, true, out var enabled) && enabled == EnabledEnum.Aktiviert) + @if (Enum.TryParse(_hostVirtualMaschine?.Enabled, true, out var enabled) && enabled == EnabledEnum.Aktiviert) { @if (enabled == EnabledEnum.Aktiviert) { - + } - @if (HostVirtualMaschine?.MemoryUsage is not null) + @if (_hostVirtualMaschine?.MemoryUsage is not null) { @{ var value = "-"; - value = $"{Math.Round((HostVirtualMaschine.MemoryUsage.Value / Math.Pow(1024, 1)), 2)} GB"; + value = $"{Math.Round((_hostVirtualMaschine.MemoryUsage.Value / Math.Pow(1024, 1)), 2)} GB"; } } - @if (HostVirtualMaschine?.MemoryAvailable is not null) + @if (_hostVirtualMaschine?.MemoryAvailable is not null) { - + } - + - @if (HostVirtualMaschine?.OnTime is not null) + @if (_hostVirtualMaschine?.OnTime is not null) { - var ontime = TimeSpan.FromMilliseconds((double)HostVirtualMaschine.OnTime); + var ontime = TimeSpan.FromMilliseconds((double)_hostVirtualMaschine.OnTime); string label = string.Empty; string value = string.Empty; @@ -130,21 +130,21 @@ } - + @* *@ - + @{ var value = "-"; - @if (HostVirtualMaschine?.LastReplicationTime is not null && HostVirtualMaschine.LastReplicationTime.Value.Year >= 2000) + @if (_hostVirtualMaschine?.LastReplicationTime is not null && _hostVirtualMaschine.LastReplicationTime.Value.Year >= 2000) { - value = @HostVirtualMaschine?.LastReplicationTime?.ToString("dd/MM/yyyy HH:mm:ss"); + value = _hostVirtualMaschine?.LastReplicationTime?.ToString("dd/MM/yyyy HH:mm:ss"); } @@ -157,21 +157,21 @@ *@ - @if (string.IsNullOrWhiteSpace(HostVirtualMaschine?.Notes) is false) + @if (string.IsNullOrWhiteSpace(_hostVirtualMaschine?.Notes) is false) {
- +
} - @if (HostVirtualMaschine?.Configs is not null) + @if (_hostVirtualMaschine?.Configs is not null) {
- + diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Details.razor.cs index 627c4b9..176a864 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Details.razor.cs @@ -17,19 +17,19 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private HostHypervisorVirtualMaschineEntity? HostVirtualMaschine { get; set; } - private HashSet TreeItems { get; set; } = new HashSet(); + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private HostHypervisorVirtualMaschineEntity? _hostVirtualMaschine; + private readonly HashSet _treeItems = []; private async Task LoadDataAsync() { - Breadcrumbs.Clear(); - HostVirtualMaschine = null; - TreeItems.Clear(); + _breadcrumbs.Clear(); + _hostVirtualMaschine = null; + _treeItems.Clear(); - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); StateHasChanged(); @@ -53,8 +53,8 @@ public partial class Details return; } - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Virtual Maschines", href: Navigation.Management.Hosts.Systems.VirtualMaschines.IndexHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Virtual Maschines", href: Navigation.Management.Hosts.Systems.VirtualMaschines.IndexHref(HostId))); StateHasChanged(); @@ -65,22 +65,22 @@ public partial class Details return; } - HostVirtualMaschine = await Database.HostHypervisorVirtualMaschine() + _hostVirtualMaschine = await Database.HostHypervisorVirtualMaschine() .Aggregate() .Match(p => p.Host == HostId && p.Id == VirtualMaschineId) .Lookup(Database.HostVirtualMaschineConfig(), p => p.Id, p => p.VirtualMaschine, p => p.Configs) .FirstOrDefaultAsync(); - if (HostVirtualMaschine is null) + if (_hostVirtualMaschine is null) { Notification.Error(Snackbar, "Not Found"); NavigationManager.NavigateTo(Navigation.Management.Hosts.Systems.VirtualMaschines.IndexHref(HostId)); return; } - Title = $"Hosts » {host.Name} » Virtual Maschine » {HostVirtualMaschine.Name}|Insight"; + _title = $"Hosts » {host.Name} » Virtual Maschine » {_hostVirtualMaschine.Name}|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(HostVirtualMaschine.Name, href: "#", true)); + _breadcrumbs.Add(new BreadcrumbItem(_hostVirtualMaschine.Name ?? "undefined", href: "#", true)); StateHasChanged(); @@ -92,19 +92,19 @@ public partial class Details private void BuildSnapshotTree() { - if (HostVirtualMaschine?.Configs is null) return; + if (_hostVirtualMaschine?.Configs is null) return; - foreach (var config in HostVirtualMaschine.Configs.Where(p => string.IsNullOrWhiteSpace(p.ParentId))) + foreach (var config in _hostVirtualMaschine.Configs.Where(p => string.IsNullOrWhiteSpace(p.ParentId))) { + if (config is null) continue; + var item = new TreeItemData(config); - if (config?.UniqueId == HostVirtualMaschine?.UniqueId) - { + if (config?.UniqueId == _hostVirtualMaschine?.UniqueId) item.IsCurrentConfig = true; - } - TreeItems.Add(item); - Recursive(item, config); + _treeItems.Add(item); + Recursive(item, config!); } StateHasChanged(); @@ -112,39 +112,34 @@ public partial class Details private void Recursive(TreeItemData item, HostHypervisorVirtualMaschineConfigEntity entity) { - var childs = HostVirtualMaschine?.Configs?.Where(p => p.ParentId == entity.UniqueId); + var childs = _hostVirtualMaschine?.Configs?.Where(p => p.ParentId == entity.UniqueId); if (childs is not null && childs.Any()) { - item.TreeItems = new HashSet(); + item.TreeItems = []; foreach (var child in childs.OrderBy(p => p.CreationTime)) { + if (child is null) continue; + var newItem = new TreeItemData(child); - if (child?.UniqueId == HostVirtualMaschine?.UniqueId) - { + if (child?.UniqueId == _hostVirtualMaschine?.UniqueId) newItem.IsCurrentConfig = true; - } item.TreeItems.Add(newItem); - Recursive(newItem, child); + Recursive(newItem, child!); } } } - public class TreeItemData + public class TreeItemData(HostHypervisorVirtualMaschineConfigEntity entity) { - public HostHypervisorVirtualMaschineConfigEntity Entity { get; set; } + public HostHypervisorVirtualMaschineConfigEntity Entity { get; set; } = entity; public bool IsCurrentConfig { get; set; } = false; public bool IsExpanded { get; set; } = true; public bool HasChild => TreeItems != null && TreeItems.Count > 0; - public HashSet TreeItems { get; set; } = new HashSet(); - - public TreeItemData(HostHypervisorVirtualMaschineConfigEntity entity) - { - Entity = entity; - } + public HashSet TreeItems { get; set; } = []; } } \ No newline at end of file diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Index.razor index e293291..3bd10de 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Index.razor @@ -2,10 +2,10 @@ @inherits ComponentBase
@@ -56,7 +56,7 @@ @{ - var color = Enum.Parse(context?.Health, true) switch + var color = Enum.Parse(context.Health ?? string.Empty, true) switch { HealthStatusEnum.OK => Color.Success, HealthStatusEnum.Hauptfehler => Color.Warning, @@ -71,14 +71,14 @@ @{ - var color = Enum.Parse(context?.Enabled, true) switch + var color = Enum.Parse(context.Enabled ?? string.Empty, true) switch { EnabledEnum.Aktiviert => Color.Success, EnabledEnum.Deaktiviert => Color.Error, _ => Color.Inherit }; - var text = Enum.Parse(context?.Enabled, true) switch + var text = Enum.Parse(context.Enabled ?? string.Empty, true) switch { EnabledEnum.Aktiviert => "Running", EnabledEnum.Deaktiviert => "Stopped", diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Index.razor.cs index 28d2078..dd0ac81 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Index.razor.cs @@ -21,10 +21,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -48,11 +48,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Virtual Maschines|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Virtual Maschines", href: "#", true)); + _title = $"Hosts » {host.Name} » Virtual Maschines|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Virtual Maschines", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -62,9 +62,9 @@ public partial class Index var filter = Builders.Filter.Eq(p => p.Host, HostId); var search = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); search &= Builders.Filter.Regex(x => "name", regex) | Builders.Filter.Regex(x => "version_configuration", regex) | Builders.Filter.Regex(x => "guest_os", regex) | diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Snapshots/Details.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Snapshots/Details.razor index 21a891f..0efd8ac 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Snapshots/Details.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Snapshots/Details.razor @@ -2,15 +2,15 @@ @using Insight.Web.Pages.Management.Hosts.Systems.VirtualMaschines.Snapshots @using Microsoft.AspNetCore.Components.Rendering - + - + - + @{ @@ -19,62 +19,62 @@ } - @if (ParentSnapshot?.Id is not null) + @if (_parentSnapshot?.Id is not null) { - + } - @if (Snapshot?.CreationTime is not null) + @if (_snapshot?.CreationTime is not null) { - + } - + - + - + - + - @if (string.IsNullOrWhiteSpace(Snapshot?.Notes) is false) + @if (string.IsNullOrWhiteSpace(_snapshot?.Notes) is false) {
- +
}
- +
- +
- +
@@ -82,10 +82,10 @@
@code{ - private bool _active => Snapshot?.UniqueId == VirtualMaschine?.UniqueId; + private bool _active => _snapshot?.UniqueId == _virtualMaschine?.UniqueId; private void OnParent() { - NavigationManager.NavigateTo(Navigation.Management.Hosts.Systems.VirtualMaschines.Snapshots.DetailsHref(HostId, VirtualMaschineId, ParentSnapshot?.Id), true); + NavigationManager.NavigateTo(Navigation.Management.Hosts.Systems.VirtualMaschines.Snapshots.DetailsHref(HostId, VirtualMaschineId, _parentSnapshot?.Id), true); } } \ No newline at end of file diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Snapshots/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Snapshots/Details.razor.cs index 19fad3a..4939dde 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Snapshots/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/VirtualMaschines/Snapshots/Details.razor.cs @@ -18,20 +18,20 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private HostHypervisorVirtualMaschineEntity? VirtualMaschine { get; set; } - private HostHypervisorVirtualMaschineConfigEntity? Snapshot { get; set; } - private HostHypervisorVirtualMaschineConfigEntity? ParentSnapshot { get; set; } + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private HostHypervisorVirtualMaschineEntity? _virtualMaschine; + private HostHypervisorVirtualMaschineConfigEntity? _snapshot; + private HostHypervisorVirtualMaschineConfigEntity? _parentSnapshot; private async Task LoadDataAsync() { - Breadcrumbs.Clear(); - Snapshot = null; + _breadcrumbs.Clear(); + _snapshot = null; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); if (string.IsNullOrWhiteSpace(HostId) || ObjectId.TryParse(HostId, out var hostId) is false) { @@ -53,8 +53,8 @@ public partial class Details return; } - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Virtual Maschines", href: Navigation.Management.Hosts.Systems.VirtualMaschines.IndexHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Virtual Maschines", href: Navigation.Management.Hosts.Systems.VirtualMaschines.IndexHref(HostId))); if (string.IsNullOrWhiteSpace(VirtualMaschineId) || ObjectId.TryParse(VirtualMaschineId, out var virtualMaschineId) is false) { @@ -63,18 +63,18 @@ public partial class Details return; } - VirtualMaschine = await Database.HostHypervisorVirtualMaschine() + _virtualMaschine = await Database.HostHypervisorVirtualMaschine() .Find(p => p.Host == HostId && p.Id == VirtualMaschineId) .FirstOrDefaultAsync(); - if (VirtualMaschine is null) + if (_virtualMaschine is null) { Notification.Error(Snackbar, "Not Found"); NavigationManager.NavigateTo(Navigation.Management.Hosts.Systems.VirtualMaschines.IndexHref(HostId)); return; } - Breadcrumbs.Add(new BreadcrumbItem(VirtualMaschine.Name, href: Navigation.Management.Hosts.Systems.VirtualMaschines.DetailsHref(HostId, VirtualMaschineId))); + _breadcrumbs.Add(new BreadcrumbItem(_virtualMaschine.Name ?? "undefined", href: Navigation.Management.Hosts.Systems.VirtualMaschines.DetailsHref(HostId, VirtualMaschineId))); if (string.IsNullOrWhiteSpace(SnapshotId) || ObjectId.TryParse(SnapshotId, out var snapshotId) is false) { @@ -84,11 +84,11 @@ public partial class Details } // get snapshot - Snapshot = await Database.HostVirtualMaschineConfig() + _snapshot = await Database.HostVirtualMaschineConfig() .Find(p => p.Host == HostId && p.VirtualMaschine == VirtualMaschineId && p.Id == SnapshotId) .FirstOrDefaultAsync(); - if (Snapshot is null) + if (_snapshot is null) { Notification.Error(Snackbar, "Not Found"); NavigationManager.NavigateTo(Navigation.Management.Hosts.Systems.VirtualMaschines.DetailsHref(HostId, VirtualMaschineId)); @@ -96,15 +96,15 @@ public partial class Details } // get parent snapshot - if (Snapshot.ParentId is not null) + if (_snapshot.ParentId is not null) { - ParentSnapshot = await Database.HostVirtualMaschineConfig() - .Find(p => p.Host == HostId && p.VirtualMaschine == VirtualMaschineId && p.UniqueId == Snapshot.ParentId) + _parentSnapshot = await Database.HostVirtualMaschineConfig() + .Find(p => p.Host == HostId && p.VirtualMaschine == VirtualMaschineId && p.UniqueId == _snapshot.ParentId) .FirstOrDefaultAsync(); } - Breadcrumbs.Add(new BreadcrumbItem(Snapshot.Name, href: "#", true)); - Title = $"Hosts » {host.Name} » Virtual Maschine » {VirtualMaschine.Name} » Snapshot » {Snapshot.Name}|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(_snapshot.Name ?? "undefined", href: "#", true)); + _title = $"Hosts » {host.Name} » Virtual Maschine » {_virtualMaschine.Name} » Snapshot » {_snapshot.Name}|Insight"; StateHasChanged(); } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Details.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Details.razor index 51b0d47..4ade3c4 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Details.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Details.razor @@ -1,29 +1,29 @@ @inherits ComponentBase - + - @if (HostVolume is not null) + @if (_hostVolume is not null) { - + - + - + - + @{ var capacity = "-"; - if (HostVolume?.Size is not null) + if (_hostVolume?.Size is not null) { - capacity = $"{Math.Round((HostVolume.Size.Value / Math.Pow(1024, 3)), 2)} GB"; + capacity = $"{Math.Round((_hostVolume.Size.Value / Math.Pow(1024, 3)), 2)} GB"; } @@ -35,14 +35,14 @@ double? free = null; var value = "-"; - if (HostVolume?.FreeSpace is not null) + if (_hostVolume?.FreeSpace is not null) { - free = Math.Round((HostVolume.FreeSpace.Value / Math.Pow(1024, 3)), 2); + free = Math.Round((_hostVolume.FreeSpace.Value / Math.Pow(1024, 3)), 2); value = $"{free} GB"; - if (HostVolume?.Size is not null && HostVolume?.Size is not null) + if (_hostVolume?.Size is not null && _hostVolume?.Size is not null) { - size = Math.Round((HostVolume.Size.Value / Math.Pow(1024, 3)), 2); + size = Math.Round((_hostVolume.Size.Value / Math.Pow(1024, 3)), 2); value += $" ({Math.Round(free.Value / size.Value * 100, 2)}%)"; } } @@ -51,31 +51,31 @@ } - + - + - + - + - + - + - + - @if (HostVolume?.Provider is not null) + @if (_hostVolume?.Provider is not null) { - + } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Details.razor.cs index 52415a6..5e322ee 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Details.razor.cs @@ -17,17 +17,17 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private HostVolumeEntity? HostVolume { get; set; } + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private HostVolumeEntity? _hostVolume; private async Task LoadDataAsync() { - Breadcrumbs.Clear(); - HostVolume = null; + _breadcrumbs.Clear(); + _hostVolume = null; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); StateHasChanged(); @@ -51,8 +51,8 @@ public partial class Details return; } - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Volumes", href: Navigation.Management.Hosts.Systems.Volumes.IndexHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Volumes", href: Navigation.Management.Hosts.Systems.Volumes.IndexHref(HostId))); StateHasChanged(); @@ -63,19 +63,19 @@ public partial class Details return; } - HostVolume = await Database.HostVolume() + _hostVolume = await Database.HostVolume() .Find(p => p.Host == HostId && p.Id == VolumeId) .FirstOrDefaultAsync(); - if (HostVolume is null) + if (_hostVolume is null) { Notification.Error(Snackbar, "Not Found"); NavigationManager.NavigateTo(Navigation.Management.Hosts.Systems.Volumes.IndexHref(HostId)); return; } - Title = $"Hosts » {host.Name} » Volume » {HostVolume.Name}|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(HostVolume.Name, href: "#", true)); + _title = $"Hosts » {host.Name} » Volume » {_hostVolume.Name}|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(_hostVolume.Name ?? "undefined", href: "#", true)); StateHasChanged(); } diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Index.razor b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Index.razor index cfefda0..2d743e0 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Index.razor +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -40,7 +40,7 @@
- + @{ var name = context?.Name; diff --git a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Index.razor.cs index 6c05e7f..925bbb5 100644 --- a/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Hosts/Systems/Volumes/Index.razor.cs @@ -19,10 +19,10 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override async Task OnInitializedAsync() { @@ -46,11 +46,11 @@ public partial class Index return; } - Title = $"Hosts » {host.Name} » Volumes|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); - Breadcrumbs.Add(new BreadcrumbItem(host.Name, href: Navigation.Management.Hosts.DetailsHref(HostId))); - Breadcrumbs.Add(new BreadcrumbItem("Volumes", href: "#", true)); + _title = $"Hosts » {host.Name} » Volumes|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Hosts", href: Navigation.Management.Hosts.Index)); + _breadcrumbs.Add(new BreadcrumbItem(host.Name ?? "undefined", href: Navigation.Management.Hosts.DetailsHref(HostId))); + _breadcrumbs.Add(new BreadcrumbItem("Volumes", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -59,9 +59,9 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Host, HostId); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.Type, regex) | Builders.Filter.Regex(x => x.FileSystem, regex) | diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Details.razor b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Details.razor index a10bede..f0867b8 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Details.razor +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Details.razor @@ -2,25 +2,25 @@ @using Vaitr.Scheduler; - + - @if (Job is not null) + @if (_job is not null) { - + - + - + - + - + @* diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Details.razor.cs index b652160..e7eeba2 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Details.razor.cs @@ -4,7 +4,6 @@ using Microsoft.AspNetCore.Components; using MongoDB.Bson; using MongoDB.Driver; using MudBlazor; -using static MudBlazor.CategoryTypes; namespace Insight.Web.Pages.Management.Scheduler.Jobs; @@ -17,14 +16,14 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private JobEntity? Job { get; set; } + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private JobEntity? _job; private async Task LoadDataAsync() { - Breadcrumbs.Clear(); - Job = null; + _breadcrumbs.Clear(); + _job = null; if (string.IsNullOrWhiteSpace(JobId) || ObjectId.TryParse(JobId, out var jobId) is false) { @@ -33,27 +32,27 @@ public partial class Details return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Jobs", href: Navigation.Management.Scheduler.Jobs.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Jobs", href: Navigation.Management.Scheduler.Jobs.Index)); StateHasChanged(); - Job = await Database.Job() + _job = await Database.Job() .Aggregate() .Match(Builders.Filter.Eq(p => p.Id, JobId)) //.Lookup(Database.Host(), p => p.Id, p => p.Customer, p => p.Hosts) .FirstOrDefaultAsync(default); - if (Job is null) + if (_job is null) { Notification.Error(Snackbar, "Not Found"); NavigationManager.NavigateTo(Navigation.Management.Scheduler.Jobs.Index); return; } - Title = $"Job » {Job.Name ?? Job.Id}|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(Job.Name ?? Job.Id, href: "#", true)); + _title = $"Job » {_job.Name ?? _job.Id}|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(_job.Name ?? "undefined", href: "#", true)); StateHasChanged(); } diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Index.razor.cs index 5e384d1..50d2fc8 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Index.razor.cs @@ -8,7 +8,6 @@ using MongoDB.Bson.Serialization.Attributes; using MongoDB.Driver; using MudBlazor; using System.Text.RegularExpressions; -using Vaitr.Scheduler; using SortDirection = MudBlazor.SortDirection; namespace Insight.Web.Pages.Management.Scheduler.Jobs; @@ -19,10 +18,9 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private readonly List _breadcrumbs = new(); - private TableContainer? _container; private string _title = Global.Name; + private readonly List _breadcrumbs = []; private string? _search; protected override void OnInitialized() diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Tasks.razor b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Tasks.razor index 243cdab..adaa174 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Tasks.razor +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Tasks.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -38,8 +38,8 @@ - - + + diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Tasks.razor.cs b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Tasks.razor.cs index 3226d1a..948aa5a 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Tasks.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Tasks.razor.cs @@ -20,12 +20,11 @@ public partial class Tasks [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } - - private TaskEntity? Model { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; + private TaskEntity _model = new(); protected override async Task OnInitializedAsync() { @@ -36,9 +35,9 @@ public partial class Tasks return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Jobs", href: Navigation.Management.Scheduler.Jobs.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Jobs", href: Navigation.Management.Scheduler.Jobs.Index)); var job = await Database.Job() .Aggregate() @@ -52,9 +51,9 @@ public partial class Tasks return; } - Title = $"Scheduler » Jobs » {job.Name} » Tasks|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(job.Name, href: Navigation.Management.Scheduler.Jobs.DetailsHref(JobId))); - Breadcrumbs.Add(new BreadcrumbItem("Tasks", href: "#", true)); + _title = $"Scheduler » Jobs » {job.Name} » Tasks|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(job.Name ?? "undefined", href: Navigation.Management.Scheduler.Jobs.DetailsHref(JobId))); + _breadcrumbs.Add(new BreadcrumbItem("Tasks", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -63,9 +62,9 @@ public partial class Tasks { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("name", regex) | Builders.Filter.Regex("description", regex); @@ -92,21 +91,21 @@ public partial class Tasks })) .Match(filter) .Sort(state.SortDirection switch - { - SortDirection.Ascending => state.SortLabel switch - { - "Name" => Builders.Sort.Ascending("name"), - "Description" => Builders.Sort.Ascending("description"), - _ => null - }, - SortDirection.Descending => state.SortLabel switch - { - "Name" => Builders.Sort.Descending("name"), - "Description" => Builders.Sort.Descending("description"), - _ => null - }, - _ => Builders.Sort.Ascending("name") - }); + { + SortDirection.Ascending => state.SortLabel switch + { + "Name" => Builders.Sort.Ascending("name"), + "Description" => Builders.Sort.Ascending("description"), + _ => null + }, + SortDirection.Descending => state.SortLabel switch + { + "Name" => Builders.Sort.Descending("name"), + "Description" => Builders.Sort.Descending("description"), + _ => null + }, + _ => Builders.Sort.Ascending("name") + }); var countResult = await query.Count().FirstOrDefaultAsync(default); var itemResult = await query.Skip(state.Page * state.PageSize).Limit(state.PageSize).ToListAsync(default); @@ -148,7 +147,7 @@ public partial class Tasks private void OnUnassign(TaskEntity model) { - Model = new TaskEntity + _model = new TaskEntity { Id = model.Id, Name = model?.Name, @@ -166,10 +165,10 @@ public partial class Tasks .DeleteOneAsync(Builders .Filter.And(Builders.Filter .Eq(p => p.Job, JobId), Builders.Filter - .Eq(p => p.Task, Model?.Id)), + .Eq(p => p.Task, _model?.Id)), cancellationToken: default); - if (Container is not null) await Container.RefreshAsync(); + if (_container is not null) await _container.RefreshAsync(); Notification.Success(Snackbar); } diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TasksAssign.razor b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TasksAssign.razor index 8b706b0..6147882 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TasksAssign.razor +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TasksAssign.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -37,8 +37,8 @@ - - + + diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TasksAssign.razor.cs b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TasksAssign.razor.cs index 0928424..c021218 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TasksAssign.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TasksAssign.razor.cs @@ -20,12 +20,11 @@ public partial class TasksAssign [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } - - private TaskEntity? Model { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; + private TaskEntity _model = new(); protected override async Task OnInitializedAsync() { @@ -48,14 +47,14 @@ public partial class TasksAssign return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Jobs", href: Navigation.Management.Scheduler.Jobs.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Jobs", href: Navigation.Management.Scheduler.Jobs.Index)); - Title = $"Scheduler » Jobs » {job.Name} » Assign Tasks|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(job.Name, href: Navigation.Management.Scheduler.Jobs.DetailsHref(JobId))); - Breadcrumbs.Add(new BreadcrumbItem("Tasks", href: Navigation.Management.Scheduler.Jobs.TasksHref(JobId))); - Breadcrumbs.Add(new BreadcrumbItem("Assign", href: "#", true)); + _title = $"Scheduler » Jobs » {job.Name} » Assign Tasks|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(job.Name ?? "undefined", href: Navigation.Management.Scheduler.Jobs.DetailsHref(JobId))); + _breadcrumbs.Add(new BreadcrumbItem("Tasks", href: Navigation.Management.Scheduler.Jobs.TasksHref(JobId))); + _breadcrumbs.Add(new BreadcrumbItem("Assign", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -64,9 +63,9 @@ public partial class TasksAssign { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("name", regex) | Builders.Filter.Regex("description", regex); } @@ -86,25 +85,25 @@ public partial class TasksAssign { "preserveNullAndEmptyArrays", true } })) .AppendStage( - new BsonDocument("$match", + new BsonDocument("$match", new BsonDocument("map._job", new BsonDocument("$ne", new ObjectId(JobId)))) ) .Sort(state.SortDirection switch - { - SortDirection.Ascending => state.SortLabel switch - { - "Name" => Builders.Sort.Ascending("name"), - "Description" => Builders.Sort.Ascending("description"), - _ => null - }, - SortDirection.Descending => state.SortLabel switch - { - "Name" => Builders.Sort.Descending("name"), - "Description" => Builders.Sort.Descending("description"), - _ => null - }, - _ => Builders.Sort.Ascending("name") - }); + { + SortDirection.Ascending => state.SortLabel switch + { + "Name" => Builders.Sort.Ascending("name"), + "Description" => Builders.Sort.Ascending("description"), + _ => null + }, + SortDirection.Descending => state.SortLabel switch + { + "Name" => Builders.Sort.Descending("name"), + "Description" => Builders.Sort.Descending("description"), + _ => null + }, + _ => Builders.Sort.Ascending("name") + }); var countResult = await query.Count().FirstOrDefaultAsync(default); var itemResult = await query.Skip(state.Page * state.PageSize).Limit(state.PageSize).ToListAsync(default); @@ -140,9 +139,9 @@ public partial class TasksAssign } } - private void OnAssign(TaskEntity? model) + private void OnAssign(TaskEntity model) { - Model = model; + _model = model; Assign = true; } @@ -154,12 +153,12 @@ public partial class TasksAssign .InsertOneAsync(new JobTaskEntity { Job = JobId, - Task = Model.Id + Task = _model.Id }, cancellationToken: default); - if (Container is not null) + if (_container is not null) { - await Container.RefreshAsync(); + await _container.RefreshAsync(); } Notification.Success(Snackbar); diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Triggers.razor b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Triggers.razor index 2f22d5a..6f238df 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Triggers.razor +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Triggers.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -38,8 +38,8 @@ - - + + diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Triggers.razor.cs b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Triggers.razor.cs index bb6e9b2..ec72bc5 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Triggers.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/Triggers.razor.cs @@ -2,8 +2,8 @@ using Insight.Web.Components.Containers; using Insight.Web.Constants; using Microsoft.AspNetCore.Components; -using MongoDB.Bson.Serialization; using MongoDB.Bson; +using MongoDB.Bson.Serialization; using MongoDB.Driver; using MudBlazor; using System.Text.RegularExpressions; @@ -20,12 +20,11 @@ public partial class Triggers [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } - - private TriggerEntity? Model { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; + private TriggerEntity _model = new(); protected override async Task OnInitializedAsync() { @@ -36,9 +35,9 @@ public partial class Triggers return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Jobs", href: Navigation.Management.Scheduler.Jobs.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Jobs", href: Navigation.Management.Scheduler.Jobs.Index)); var job = await Database.Job() .Aggregate() @@ -52,9 +51,9 @@ public partial class Triggers return; } - Title = $"Scheduler » Jobs » {job.Name} » Triggers|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(job.Name, href: Navigation.Management.Scheduler.Jobs.DetailsHref(JobId))); - Breadcrumbs.Add(new BreadcrumbItem("Triggers", href: "#", true)); + _title = $"Scheduler » Jobs » {job.Name} » Triggers|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(job.Name ?? "undefined", href: Navigation.Management.Scheduler.Jobs.DetailsHref(JobId))); + _breadcrumbs.Add(new BreadcrumbItem("Triggers", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -63,9 +62,9 @@ public partial class Triggers { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("name", regex) | Builders.Filter.Regex("description", regex); @@ -148,7 +147,7 @@ public partial class Triggers private void OnUnassign(TriggerEntity model) { - Model = new TriggerEntity + _model = new TriggerEntity { Id = model.Id, Name = model?.Name, @@ -166,10 +165,10 @@ public partial class Triggers .DeleteOneAsync(Builders .Filter.And(Builders.Filter .Eq(p => p.Job, JobId), Builders.Filter - .Eq(p => p.Trigger, Model?.Id)), + .Eq(p => p.Trigger, _model?.Id)), cancellationToken: default); - if (Container is not null) await Container.RefreshAsync(); + if (_container is not null) await _container.RefreshAsync(); Notification.Success(Snackbar); } diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TriggersAssign.razor b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TriggersAssign.razor index 488a992..f3c4499 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TriggersAssign.razor +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TriggersAssign.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -37,8 +37,8 @@ - - + + diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TriggersAssign.razor.cs b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TriggersAssign.razor.cs index 7e2b141..27056bd 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TriggersAssign.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Jobs/TriggersAssign.razor.cs @@ -20,12 +20,11 @@ public partial class TriggersAssign [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } - - private TriggerEntity? Model { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; + private TriggerEntity _model = new(); protected override async Task OnInitializedAsync() { @@ -48,14 +47,14 @@ public partial class TriggersAssign return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Jobs", href: Navigation.Management.Scheduler.Jobs.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Jobs", href: Navigation.Management.Scheduler.Jobs.Index)); - Title = $"Scheduler » Jobs » {job.Name} » Assign Triggers|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(job.Name, href: Navigation.Management.Scheduler.Jobs.DetailsHref(JobId))); - Breadcrumbs.Add(new BreadcrumbItem("Triggers", href: Navigation.Management.Scheduler.Jobs.TriggersHref(JobId))); - Breadcrumbs.Add(new BreadcrumbItem("Assign", href: "#", true)); + _title = $"Scheduler » Jobs » {job.Name} » Assign Triggers|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(job.Name ?? "undefined", href: Navigation.Management.Scheduler.Jobs.DetailsHref(JobId))); + _breadcrumbs.Add(new BreadcrumbItem("Triggers", href: Navigation.Management.Scheduler.Jobs.TriggersHref(JobId))); + _breadcrumbs.Add(new BreadcrumbItem("Assign", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -64,9 +63,9 @@ public partial class TriggersAssign { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("name", regex) | Builders.Filter.Regex("description", regex); } @@ -86,25 +85,25 @@ public partial class TriggersAssign { "preserveNullAndEmptyArrays", true } })) .AppendStage( - new BsonDocument("$match", + new BsonDocument("$match", new BsonDocument("map._job", new BsonDocument("$ne", new ObjectId(JobId)))) ) .Sort(state.SortDirection switch - { - SortDirection.Ascending => state.SortLabel switch - { - "Name" => Builders.Sort.Ascending("name"), - "Description" => Builders.Sort.Ascending("description"), - _ => null - }, - SortDirection.Descending => state.SortLabel switch - { - "Name" => Builders.Sort.Descending("name"), - "Description" => Builders.Sort.Descending("description"), - _ => null - }, - _ => Builders.Sort.Ascending("name") - }); + { + SortDirection.Ascending => state.SortLabel switch + { + "Name" => Builders.Sort.Ascending("name"), + "Description" => Builders.Sort.Ascending("description"), + _ => null + }, + SortDirection.Descending => state.SortLabel switch + { + "Name" => Builders.Sort.Descending("name"), + "Description" => Builders.Sort.Descending("description"), + _ => null + }, + _ => Builders.Sort.Ascending("name") + }); var countResult = await query.Count().FirstOrDefaultAsync(default); var itemResult = await query.Skip(state.Page * state.PageSize).Limit(state.PageSize).ToListAsync(default); @@ -140,9 +139,9 @@ public partial class TriggersAssign } } - private void OnAssign(TriggerEntity? model) + private void OnAssign(TriggerEntity model) { - Model = model; + _model = model; Assign = true; } @@ -154,12 +153,12 @@ public partial class TriggersAssign .InsertOneAsync(new JobTriggerEntity { Job = JobId, - Trigger = Model.Id + Trigger = _model.Id }, cancellationToken: default); - if (Container is not null) + if (_container is not null) { - await Container.RefreshAsync(); + await _container.RefreshAsync(); } Notification.Success(Snackbar); diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Details.razor b/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Details.razor index 0f84a27..555e249 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Details.razor +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Details.razor @@ -2,13 +2,13 @@ @using Vaitr.Scheduler; - + - @if (Task is not null) + @if (_task is not null) { - + @* diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Details.razor.cs index 56c79b1..6e93725 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Details.razor.cs @@ -16,14 +16,14 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private TaskEntity? Task { get; set; } + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private TaskEntity? _task; private async Task LoadDataAsync() { - Breadcrumbs.Clear(); - Task = null; + _breadcrumbs.Clear(); + _task = null; if (string.IsNullOrWhiteSpace(TaskId) || ObjectId.TryParse(TaskId, out var taskId) is false) { @@ -32,24 +32,24 @@ public partial class Details return; } - Task = await Database.Task() + _task = await Database.Task() .Aggregate() .Match(Builders.Filter.Eq(p => p.Id, TaskId)) .FirstOrDefaultAsync(default); - if (Task is null) + if (_task is null) { Notification.Error(Snackbar, "Not Found"); NavigationManager.NavigateTo(Navigation.Management.Scheduler.Tasks.Index); return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Tasks", href: Navigation.Management.Scheduler.Tasks.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Tasks", href: Navigation.Management.Scheduler.Tasks.Index)); - Title = $"Task » {Task.Name ?? Task.Id}|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(Task.Name ?? Task.Id, href: "#", true)); + _title = $"Task » {_task.Name ?? _task.Id}|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(_task.Name ?? "undefined", href: "#", true)); StateHasChanged(); } diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Index.razor.cs index 27f5c3e..59504e2 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Index.razor.cs @@ -18,10 +18,9 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private readonly List _breadcrumbs = new(); - private TableContainer? _container; private string _title = Global.Name; + private readonly List _breadcrumbs = []; private string? _search; protected override void OnInitialized() diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Jobs.razor b/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Jobs.razor index 6c492fe..2d43675 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Jobs.razor +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Jobs.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -37,8 +37,8 @@ - - + + diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Jobs.razor.cs b/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Jobs.razor.cs index ac268d9..6c08f47 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Jobs.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Tasks/Jobs.razor.cs @@ -2,8 +2,8 @@ using Insight.Web.Components.Containers; using Insight.Web.Constants; using Microsoft.AspNetCore.Components; -using MongoDB.Bson.Serialization; using MongoDB.Bson; +using MongoDB.Bson.Serialization; using MongoDB.Driver; using MudBlazor; using System.Text.RegularExpressions; @@ -20,12 +20,11 @@ public partial class Jobs [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } - - private JobEntity? Model { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; + private JobEntity _model = new(); protected override async Task OnInitializedAsync() { @@ -36,9 +35,9 @@ public partial class Jobs return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Tasks", href: Navigation.Management.Scheduler.Tasks.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Tasks", href: Navigation.Management.Scheduler.Tasks.Index)); var task = await Database.Task() .Aggregate() @@ -52,9 +51,9 @@ public partial class Jobs return; } - Title = $"Scheduler » Tasks » {task.Name} » Jobs|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(task.Name, href: Navigation.Management.Scheduler.Tasks.DetailsHref(TaskId))); - Breadcrumbs.Add(new BreadcrumbItem("Jobs", href: "#", true)); + _title = $"Scheduler » Tasks » {task.Name} » Jobs|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(task.Name ?? "undefined", href: Navigation.Management.Scheduler.Tasks.DetailsHref(TaskId))); + _breadcrumbs.Add(new BreadcrumbItem("Jobs", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -63,9 +62,9 @@ public partial class Jobs { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("name", regex) | Builders.Filter.Regex("description", regex); @@ -143,7 +142,7 @@ public partial class Jobs private void OnUnassign(JobEntity model) { - Model = new JobEntity + _model = new JobEntity { Id = model.Id, Name = model?.Name, @@ -161,10 +160,10 @@ public partial class Jobs .DeleteOneAsync(Builders .Filter.And(Builders.Filter .Eq(p => p.Task, TaskId), Builders.Filter - .Eq(p => p.Job, Model?.Id)), + .Eq(p => p.Job, _model?.Id)), cancellationToken: default); - if (Container is not null) await Container.RefreshAsync(); + if (_container is not null) await _container.RefreshAsync(); Notification.Success(Snackbar); } diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Details.razor b/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Details.razor index ca48096..ed37313 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Details.razor +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Details.razor @@ -2,13 +2,13 @@ @using Vaitr.Scheduler; - + - @if (Trigger is not null) + @if (_trigger is not null) { - + @* diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Details.razor.cs b/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Details.razor.cs index 39523fa..92f70dc 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Details.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Details.razor.cs @@ -16,14 +16,14 @@ public partial class Details [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private TriggerEntity? Trigger { get; set; } + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private TriggerEntity? _trigger; private async Task LoadDataAsync() { - Breadcrumbs.Clear(); - Trigger = null; + _breadcrumbs.Clear(); + _trigger = null; if (string.IsNullOrWhiteSpace(TriggerId) || ObjectId.TryParse(TriggerId, out var triggerId) is false) { @@ -32,24 +32,24 @@ public partial class Details return; } - Trigger = await Database.Trigger() + _trigger = await Database.Trigger() .Aggregate() .Match(Builders.Filter.Eq(p => p.Id, TriggerId)) .FirstOrDefaultAsync(default); - if (Trigger is null) + if (_trigger is null) { Notification.Error(Snackbar, "Not Found"); NavigationManager.NavigateTo(Navigation.Management.Scheduler.Triggers.Index); return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Triggers", href: Navigation.Management.Scheduler.Triggers.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Triggers", href: Navigation.Management.Scheduler.Triggers.Index)); - Title = $"Trigger » {Trigger.Name ?? Trigger.Id}|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(Trigger.Name ?? Trigger.Id, href: "#", true)); + _title = $"Trigger » {_trigger.Name ?? _trigger.Id}|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(_trigger.Name ?? "undefined" ?? _trigger.Id, href: "#", true)); StateHasChanged(); } diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Index.razor.cs b/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Index.razor.cs index f833c85..7e10461 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Index.razor.cs @@ -18,10 +18,9 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private readonly List _breadcrumbs = new(); - private TableContainer? _container; private string _title = Global.Name; + private readonly List _breadcrumbs = []; private string? _search; protected override void OnInitialized() diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Jobs.razor b/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Jobs.razor index 6c492fe..2d43675 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Jobs.razor +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Jobs.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
@@ -37,8 +37,8 @@ - - + + diff --git a/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Jobs.razor.cs b/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Jobs.razor.cs index 97bd0c3..08dfcb9 100644 --- a/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Jobs.razor.cs +++ b/src/Web/Insight.Web/Pages/Management/Scheduler/Triggers/Jobs.razor.cs @@ -2,8 +2,8 @@ using Insight.Web.Components.Containers; using Insight.Web.Constants; using Microsoft.AspNetCore.Components; -using MongoDB.Bson.Serialization; using MongoDB.Bson; +using MongoDB.Bson.Serialization; using MongoDB.Driver; using MudBlazor; using System.Text.RegularExpressions; @@ -20,12 +20,11 @@ public partial class Jobs [Inject] private ISnackbar Snackbar { get; init; } = default!; [Inject] private NavigationManager NavigationManager { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } - - private JobEntity? Model { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; + private JobEntity _model = new(); protected override async Task OnInitializedAsync() { @@ -36,9 +35,9 @@ public partial class Jobs return; } - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Triggers", href: Navigation.Management.Scheduler.Triggers.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Triggers", href: Navigation.Management.Scheduler.Triggers.Index)); var task = await Database.Trigger() .Aggregate() @@ -52,9 +51,9 @@ public partial class Jobs return; } - Title = $"Scheduler » Triggers » {task.Name} » Jobs|Insight"; - Breadcrumbs.Add(new BreadcrumbItem(task.Name, href: Navigation.Management.Scheduler.Triggers.DetailsHref(TriggerId))); - Breadcrumbs.Add(new BreadcrumbItem("Jobs", href: "#", true)); + _title = $"Scheduler » Triggers » {task.Name} » Jobs|Insight"; + _breadcrumbs.Add(new BreadcrumbItem(task.Name ?? "undefined", href: Navigation.Management.Scheduler.Triggers.DetailsHref(TriggerId))); + _breadcrumbs.Add(new BreadcrumbItem("Jobs", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -63,9 +62,9 @@ public partial class Jobs { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("name", regex) | Builders.Filter.Regex("description", regex); @@ -143,11 +142,11 @@ public partial class Jobs private void OnUnassign(JobEntity model) { - Model = new JobEntity + _model = new JobEntity { Id = model.Id, - Name = model?.Name, - Description = model?.Description + Name = model.Name, + Description = model.Description }; Unassign = true; @@ -161,10 +160,10 @@ public partial class Jobs .DeleteOneAsync(Builders .Filter.And(Builders.Filter .Eq(p => p.Trigger, TriggerId), Builders.Filter - .Eq(p => p.Job, Model?.Id)), + .Eq(p => p.Job, _model.Id)), cancellationToken: default); - if (Container is not null) await Container.RefreshAsync(); + if (_container is not null) await _container.RefreshAsync(); Notification.Success(Snackbar); } diff --git a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Drives/Index.razor b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Drives/Index.razor index c01d3d8..77c0fdf 100644 --- a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Drives/Index.razor +++ b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Drives/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Drives/Index.razor.cs b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Drives/Index.razor.cs index 6a8f7b5..fa96067 100644 --- a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Drives/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Drives/Index.razor.cs @@ -18,18 +18,18 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Monitoring » Maintenance » Drives|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Monitoring", href: Navigation.Monitoring.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Maintenance", href: Navigation.Monitoring.Maintenance.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Drives", href: "#", true)); + _title = $"Monitoring » Maintenance » Drives|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Monitoring", href: Navigation.Monitoring.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Maintenance", href: Navigation.Monitoring.Maintenance.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Drives", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -39,9 +39,9 @@ public partial class Index var filter = Builders.Filter.Ne(p => p.Status, "OK"); var search = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); search &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("name", regex) | diff --git a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Guests/Index.razor b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Guests/Index.razor index 6eb5324..df79683 100644 --- a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Guests/Index.razor +++ b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Guests/Index.razor @@ -2,10 +2,10 @@ @inherits ComponentBase
@@ -65,7 +65,7 @@ @{ - var color = Enum.Parse(context?.Health, true) switch + var color = Enum.Parse(context.Health ?? string.Empty, true) switch { HealthStatusEnum.OK => Color.Success, HealthStatusEnum.Hauptfehler => Color.Warning, diff --git a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Guests/Index.razor.cs b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Guests/Index.razor.cs index 18ceda9..a5294d5 100644 --- a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Guests/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Guests/Index.razor.cs @@ -18,18 +18,18 @@ namespace Insight.Web.Pages.Monitoring.Maintenance.Guests [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Monitoring » Maintenance » Virtual Maschines|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Monitoring", href: Navigation.Monitoring.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Maintenance", href: Navigation.Monitoring.Maintenance.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Virtual Maschines", href: "#", true)); + _title = $"Monitoring » Maintenance » Virtual Maschines|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Monitoring", href: Navigation.Monitoring.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Maintenance", href: Navigation.Monitoring.Maintenance.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Virtual Maschines", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -38,9 +38,9 @@ namespace Insight.Web.Pages.Monitoring.Maintenance.Guests { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("name", regex) | diff --git a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Index.razor.cs b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Index.razor.cs index 30d53b2..da01c11 100644 --- a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Index.razor.cs @@ -14,9 +14,9 @@ public partial class Index [Inject] private ISnackbar Snackbar { get; init; } = default!; private string _title = Global.Name; - private ViewModel _model = new(); + private readonly ViewModel _model = new(); - private readonly List _breadcrumbs = new(); + private readonly List _breadcrumbs = []; protected override void OnInitialized() { diff --git a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Snapshots/Index.razor b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Snapshots/Index.razor index e494713..d167a73 100644 --- a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Snapshots/Index.razor +++ b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Snapshots/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Snapshots/Index.razor.cs b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Snapshots/Index.razor.cs index 680909b..d4a0937 100644 --- a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Snapshots/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Snapshots/Index.razor.cs @@ -18,18 +18,18 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Monitoring » Maintenance » Snapshots|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Monitoring", href: Navigation.Monitoring.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Maintenance", href: Navigation.Monitoring.Maintenance.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Snapshots", href: "#", true)); + _title = $"Monitoring » Maintenance » Snapshots|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Monitoring", href: Navigation.Monitoring.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Maintenance", href: Navigation.Monitoring.Maintenance.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Snapshots", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -38,9 +38,9 @@ public partial class Index { var filter = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("virtualmaschine.name", regex) | diff --git a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Storagepools/Index.razor b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Storagepools/Index.razor index 209a023..07747fc 100644 --- a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Storagepools/Index.razor +++ b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Storagepools/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Storagepools/Index.razor.cs b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Storagepools/Index.razor.cs index 37a1717..96cd84a 100644 --- a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Storagepools/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Storagepools/Index.razor.cs @@ -18,18 +18,18 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Monitoring » Maintenance » Storage Pools|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Monitoring", href: Navigation.Monitoring.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Maintenance", href: Navigation.Monitoring.Maintenance.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: "#", true)); + _title = $"Monitoring » Maintenance » Storage Pools|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Monitoring", href: Navigation.Monitoring.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Maintenance", href: Navigation.Monitoring.Maintenance.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Storage Pools", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -39,9 +39,9 @@ public partial class Index var filter = Builders.Filter.Ne(p => p.Health, "Healthy"); var search = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); search &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("name", regex) | diff --git a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Updates/Index.razor b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Updates/Index.razor index ffe5c06..7ebe158 100644 --- a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Updates/Index.razor +++ b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Updates/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Updates/Index.razor.cs b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Updates/Index.razor.cs index f3af967..ef68485 100644 --- a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Updates/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Updates/Index.razor.cs @@ -18,18 +18,18 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Monitoring » Maintenance » Updates|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Monitoring", href: Navigation.Monitoring.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Maintenance", href: Navigation.Monitoring.Maintenance.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Updates", href: "#", true)); + _title = $"Monitoring » Maintenance » Updates|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Monitoring", href: Navigation.Monitoring.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Maintenance", href: Navigation.Monitoring.Maintenance.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Updates", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -38,9 +38,9 @@ public partial class Index { var filter = Builders.Filter.Eq(p => p.Pending, true); - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); filter &= Builders.Filter.Regex(x => x.Name, regex) | Builders.Filter.Regex(x => x.Date, regex); } diff --git a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Volumes/Index.razor b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Volumes/Index.razor index 6e22c4c..0007257 100644 --- a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Volumes/Index.razor +++ b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Volumes/Index.razor @@ -1,10 +1,10 @@ @inherits ComponentBase
diff --git a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Volumes/Index.razor.cs b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Volumes/Index.razor.cs index 6592afc..d45208d 100644 --- a/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Volumes/Index.razor.cs +++ b/src/Web/Insight.Web/Pages/Monitoring/Maintenance/Volumes/Index.razor.cs @@ -18,18 +18,18 @@ public partial class Index [Inject] private IMongoDatabase Database { get; init; } = default!; [Inject] private ISnackbar Snackbar { get; init; } = default!; - private TableContainer? Container { get; set; } - private string Title { get; set; } = Global.Name; - private List Breadcrumbs { get; } = new(); - private string? Search { get; set; } + private TableContainer? _container; + private string _title = Global.Name; + private readonly List _breadcrumbs = []; + private string? _search; protected override void OnInitialized() { - Title = $"Monitoring » Maintenance » Volumes|Insight"; - Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); - Breadcrumbs.Add(new BreadcrumbItem("Monitoring", href: Navigation.Monitoring.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Maintenance", href: Navigation.Monitoring.Maintenance.Index)); - Breadcrumbs.Add(new BreadcrumbItem("Volumes", href: "#", true)); + _title = $"Monitoring » Maintenance » Volumes|Insight"; + _breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home)); + _breadcrumbs.Add(new BreadcrumbItem("Monitoring", href: Navigation.Monitoring.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Maintenance", href: Navigation.Monitoring.Maintenance.Index)); + _breadcrumbs.Add(new BreadcrumbItem("Volumes", href: "#", true)); } private async Task> LoadDataAsync(TableState state) @@ -39,9 +39,9 @@ public partial class Index var filter = Builders.Filter.Ne(p => p.FreeSpace, null); var search = Builders.Filter.Empty; - if (string.IsNullOrWhiteSpace(Search) is false) + if (string.IsNullOrWhiteSpace(_search) is false) { - var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase)); + var regex = new BsonRegularExpression(new Regex(_search, RegexOptions.IgnoreCase)); search &= Builders.Filter.Regex("customer.name", regex) | Builders.Filter.Regex("host.name", regex) | Builders.Filter.Regex("name", regex); diff --git a/src/Web/Insight.Web/Pages/Remote/Index.razor b/src/Web/Insight.Web/Pages/Remote/Index.razor index 101d033..de59c20 100644 --- a/src/Web/Insight.Web/Pages/Remote/Index.razor +++ b/src/Web/Insight.Web/Pages/Remote/Index.razor @@ -66,7 +66,7 @@ @if (_casting is false) { - + Connect } @@ -78,7 +78,7 @@ Stats - + Disconnect } @@ -132,11 +132,10 @@ private CastMetric? _metric; private CastScreen? _screen; private CastCursor? _cursor; - private CastClipboardReceived? _clipboard; private List _subs = new(); - protected override async Task OnAfterRenderAsync(bool firstRender) + protected override Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { @@ -146,6 +145,8 @@ _subs.Add(Bus.SubscribeAsync(OnClientConnectedAsync, null)); _subs.Add(Bus.SubscribeAsync(OnClientDisconnectedAsync, null)); } + + return Task.CompletedTask; } [JSInvokable] @@ -250,7 +251,7 @@ { _screen = screenData; - if (_rendered is false) return; + if (_rendered is false || _cachedSession is null) return; try { diff --git a/src/Web/Insight.Web/Program.cs b/src/Web/Insight.Web/Program.cs index e03c538..4094806 100644 --- a/src/Web/Insight.Web/Program.cs +++ b/src/Web/Insight.Web/Program.cs @@ -57,8 +57,8 @@ internal class Program // WEBSERVICES builder.Services.AddWebServices(); - builder.Services.AddProxyServices(builder.Configuration); - builder.Services.AddRoutingServices(builder.Configuration); + builder.Services.AddProxyServices(); + builder.Services.AddRoutingServices(); builder.Services.AddSignalR(options => { options.EnableDetailedErrors = true; diff --git a/src/Web/Insight.Web/Services/ChatService.cs b/src/Web/Insight.Web/Services/ChatService.cs index b348462..6fd6f92 100644 --- a/src/Web/Insight.Web/Services/ChatService.cs +++ b/src/Web/Insight.Web/Services/ChatService.cs @@ -8,21 +8,14 @@ using static Insight.Web.Constants.Events.Chat; namespace Insight.Web.Services; -public class ChatService +public class ChatService(Bus bus, IMongoDatabase database, ILogger logger) { public readonly ConcurrentDictionary> Users = new(); public readonly ConcurrentDictionary Sessions = new(); - private readonly Bus _bus; - private readonly IMongoDatabase _database; - private readonly ILogger _logger; - - public ChatService(Bus bus, IMongoDatabase database, ILogger logger) - { - _bus = bus; - _database = database; - _logger = logger; - } + private readonly Bus _bus = bus; + private readonly IMongoDatabase _database = database; + private readonly ILogger _logger = logger; public async Task InitAsync(CancellationToken cancellationToken) { @@ -38,11 +31,11 @@ public class ChatService { Username = user.UserName, Email = user.Email - }, new()); + }, []); } } - public async Task AddAsync(SessionState session, CancellationToken cancellationToken) + public async Task AddAsync(SessionState session) { if (string.IsNullOrWhiteSpace(session.Id) || session.Uid is null) return; if (Users.Any(p => p.Key.Uid == session.Uid) is false) return; @@ -51,20 +44,20 @@ public class ChatService user.Value.Add(session.Id); user.Key.Online = true; - _logger.LogInformation($"Chat ({user.Key.Username} / {session.Id}) added"); + _logger.LogInformation("Chat ({username} / {session}) added", user.Key.Username, session.Id); try { - _ = _bus.PublishAsync(new ChatUserConnected(user.Key), default); - _ = _bus.PublishAsync(new ChatRefresh(), default); + await _bus.PublishAsync(new ChatUserConnected(user.Key), default); + await _bus.PublishAsync(new ChatRefresh(), default); } catch (Exception ex) { - _logger.LogError(ex.Message); + _logger.LogError("{exception}", ex.Message); } } - public async Task RemoveAsync(SessionState session, CancellationToken cancellationToken) + public async Task RemoveAsync(SessionState session) { if (string.IsNullOrWhiteSpace(session.Id) || session.Uid is null) return; if (Users.Any(p => p.Key.Uid == session.Uid) is false) return; @@ -76,23 +69,23 @@ public class ChatService { user.Value.Remove(session.Id); - _logger.LogInformation($"Chat ({user.Key.Username} / {session.Id}) removed"); + _logger.LogInformation("Chat ({username} / {session}) removed", user.Key.Username, session.Id); } user.Key.Online = false; try { - _ = _bus.PublishAsync(new ChatUserDisconnected(user.Key), default); - _ = _bus.PublishAsync(new ChatRefresh(), default); + await _bus.PublishAsync(new ChatUserDisconnected(user.Key), default); + await _bus.PublishAsync(new ChatRefresh(), default); } catch (Exception ex) { - _logger.LogError(ex.Message); + _logger.LogError("{exception}", ex.Message); } } - public async Task AddOrGetSession(IEnumerable members) + public Task AddOrGetSession(IEnumerable members) { //if (Sessions.Any(p => p.Value.Members.Equals(members))) //{ @@ -102,12 +95,10 @@ public class ChatService if (Sessions.Values.FirstOrDefault(p => { foreach (var mem in members) - { if (p.Members.Any(x => x.Uid == mem.Uid) is false) return false; - } return true; - }) is ChatSession session) { return session; } + }) is ChatSession session) { return Task.FromResult(session); } session = new ChatSession(members, OnMessageSentAsync); @@ -128,7 +119,7 @@ public class ChatService //} } - return session; + return Task.FromResult(session); } private async Task OnMessageSentAsync(ChatSession session, ChatMessage message, CancellationToken cancellationToken) @@ -142,11 +133,11 @@ public class ChatService try { - _ = _bus.PublishAsync(new ChatMessageReceived(session, message), default); + await _bus.PublishAsync(new ChatMessageReceived(session, message), default); } catch (Exception ex) { - _logger.LogError(ex.Message); + _logger.LogError("{exception}", ex.Message); } } } \ No newline at end of file diff --git a/src/Web/Insight.Web/Services/ServiceHost.cs b/src/Web/Insight.Web/Services/ServiceHost.cs index 2c85602..56a5250 100644 --- a/src/Web/Insight.Web/Services/ServiceHost.cs +++ b/src/Web/Insight.Web/Services/ServiceHost.cs @@ -1,15 +1,9 @@ namespace Insight.Web.Services; -public class ServiceHost : IHostedService +public class ServiceHost(ChatService chatService, ILogger logger) : IHostedService { - private readonly ChatService _chatService; - private readonly ILogger _logger; - - public ServiceHost(ChatService chatService, ILogger logger) - { - _chatService = chatService; - _logger = logger; - } + private readonly ChatService _chatService = chatService; + private readonly ILogger _logger = logger; public async Task StartAsync(CancellationToken cancellationToken) { @@ -23,8 +17,8 @@ public class ServiceHost : IHostedService } } - public async Task StopAsync(CancellationToken cancellationToken) + public Task StopAsync(CancellationToken cancellationToken) { - + return Task.CompletedTask; } } diff --git a/src/Web/Insight.Web/Services/SessionHandler.cs b/src/Web/Insight.Web/Services/SessionHandler.cs index 190d6c9..6c24e7f 100644 --- a/src/Web/Insight.Web/Services/SessionHandler.cs +++ b/src/Web/Insight.Web/Services/SessionHandler.cs @@ -6,32 +6,22 @@ using MongoDB.Driver; namespace Insight.Web.Services; -public class SessionHandler : CircuitHandler +public class SessionHandler( + ChatService chatService, + SessionPool sessionCache, + AuthenticationStateProvider authenticationStateProvider, + IMongoDatabase database, + IHttpContextAccessor httpContextAccessor, + ILogger logger) : CircuitHandler { public SessionState State { get; } = new(); - private readonly ChatService _chatService; - private readonly SessionPool _sessionPool; - private readonly AuthenticationStateProvider _authenticationState; - private readonly IMongoDatabase _database; - private readonly IHttpContextAccessor _httpContextAccessor; - private readonly ILogger _logger; - - public SessionHandler( - ChatService chatService, - SessionPool sessionCache, - AuthenticationStateProvider authenticationStateProvider, - IMongoDatabase database, - IHttpContextAccessor httpContextAccessor, - ILogger logger) - { - _chatService = chatService; - _authenticationState = authenticationStateProvider; - _sessionPool = sessionCache; - _database = database; - _httpContextAccessor = httpContextAccessor; - _logger = logger; - } + private readonly ChatService _chatService = chatService; + private readonly SessionPool _sessionPool = sessionCache; + private readonly AuthenticationStateProvider _authenticationState = authenticationStateProvider; + private readonly IMongoDatabase _database = database; + private readonly IHttpContextAccessor _httpContextAccessor = httpContextAccessor; + private readonly ILogger _logger = logger; public override async Task OnCircuitOpenedAsync(Circuit circuit, CancellationToken cancellationToken) { @@ -52,7 +42,7 @@ public class SessionHandler : CircuitHandler await base.OnCircuitOpenedAsync(circuit, cancellationToken); await _sessionPool.AddAsync(State, cancellationToken); - await _chatService.AddAsync(State, cancellationToken); + await _chatService.AddAsync(State); } public override async Task OnCircuitClosedAsync(Circuit circuit, CancellationToken cancellationToken) @@ -64,7 +54,7 @@ public class SessionHandler : CircuitHandler public override async Task OnConnectionUpAsync(Circuit circuit, CancellationToken cancellationToken) { - _logger.LogInformation($"Session up: {circuit.Id}"); + _logger.LogInformation("Session up: {circuit}", circuit.Id); await base.OnConnectionUpAsync(circuit, cancellationToken); @@ -72,19 +62,19 @@ public class SessionHandler : CircuitHandler await UpdateStateAsync(cancellationToken); - await _chatService.AddAsync(State, cancellationToken); + await _chatService.AddAsync(State); await _sessionPool.UpdateAsync(State, cancellationToken); } public override async Task OnConnectionDownAsync(Circuit circuit, CancellationToken cancellationToken) { - _logger.LogInformation($"Session down: {circuit.Id}"); + _logger.LogInformation("Session down: {circuit}", circuit.Id); await base.OnConnectionDownAsync(circuit, cancellationToken); State.Connected = false; - await _chatService.RemoveAsync(State, cancellationToken); + await _chatService.RemoveAsync(State); await _sessionPool.UpdateAsync(State, cancellationToken); _httpContextAccessor?.HttpContext?.Abort(); diff --git a/src/Web/Insight.Web/Services/SessionPool.cs b/src/Web/Insight.Web/Services/SessionPool.cs index bf4799e..f3c9473 100644 --- a/src/Web/Insight.Web/Services/SessionPool.cs +++ b/src/Web/Insight.Web/Services/SessionPool.cs @@ -5,18 +5,12 @@ using Vaitr.Bus; namespace Insight.Web.Services; -public class SessionPool +public class SessionPool(Bus bus, ILogger logger) { public readonly ConcurrentDictionary Sessions = new(); - private readonly Bus _bus; - private readonly ILogger _logger; - - public SessionPool(Bus bus, ILogger logger) - { - _bus = bus; - _logger = logger; - } + private readonly Bus _bus = bus; + private readonly ILogger _logger = logger; public async Task AddAsync(SessionState state, CancellationToken cancellationToken) {