2023-09-21 22:10:55 +02:00
using Insight.Domain.Constants ;
using Insight.Domain.Interfaces ;
using Insight.Domain.Messages ;
2023-09-21 18:58:32 +02:00
using Insight.Infrastructure ;
using Insight.Server.Extensions ;
using Insight.Server.Network ;
using Insight.Server.Network.Handlers.Agent ;
using Insight.Server.Network.Handlers.Web ;
using Insight.Server.Services ;
using Microsoft.Extensions.Configuration ;
using Microsoft.Extensions.DependencyInjection ;
using Microsoft.Extensions.Hosting ;
using Microsoft.Extensions.Logging ;
using System.Net ;
using Vaitr.Bus ;
using Vaitr.Network ;
using Vaitr.Network.Hosting ;
2023-09-21 22:10:55 +02:00
namespace Insight.Server ;
internal class Program
2023-09-21 18:58:32 +02:00
{
2023-09-21 22:10:55 +02:00
public static async Task Main ( string [ ] args )
2023-09-21 18:58:32 +02:00
{
2023-09-21 22:10:55 +02:00
var builder = Host . CreateDefaultBuilder ( args ) ;
builder . UseWindowsService ( ) ;
builder . UseSystemd ( ) ;
builder . ConfigureAppConfiguration ( options = >
{
options . Defaults ( ) ;
} ) ;
builder . ConfigureLogging ( options = >
2023-09-21 18:58:32 +02:00
{
2023-09-21 22:10:55 +02:00
options . ClearProviders ( ) ;
options . SetMinimumLevel ( LogLevel . Trace ) ;
2023-09-21 18:58:32 +02:00
2023-09-21 22:10:55 +02:00
options . AddSimpleConsole ( options = >
2023-09-21 18:58:32 +02:00
{
2023-09-21 22:10:55 +02:00
options . IncludeScopes = true ;
options . SingleLine = true ;
options . TimestampFormat = "yyyy-MM-dd HH:mm:ss.fff " ;
2023-09-21 18:58:32 +02:00
} ) ;
2023-09-21 22:10:55 +02:00
options . AddFile ( $"{Configuration.AppDirectory?.FullName}/" + "logs/server_{Date}.log" , LogLevel . Trace , fileSizeLimitBytes : 104857600 , retainedFileCountLimit : 10 , outputTemplate : "{Timestamp:o} [{Level:u3}] {Message} {NewLine}{Exception}" ) ;
} ) ;
builder . ConfigureServices ( ( host , services ) = >
{
//var databaseLoggerFactory = LoggerFactory.Create(b =>
//{
// b.AddSimpleConsole();
// b.SetMinimumLevel(LogLevel.Debug);
//});
// INFRASTRUCTURE
services . AddDatabase ( host . Configuration ) ;
// AGENT SERVER
services . UseHostedServer < AgentSession , IMessage > ( options = >
2023-09-21 18:58:32 +02:00
{
2023-09-21 22:10:55 +02:00
options . Address = IPAddress . Any ;
options . Port = host . Configuration . GetValue < int? > ( Appsettings . AgentServerPort ) ? ? throw new Exception ( $"{Appsettings.AgentServerPort} value not set (appsettings)" ) ;
options . Keepalive = 10000 ;
options . Timeout = 30000 ;
options . Backlog = 128 ;
2023-09-21 18:58:32 +02:00
2023-09-21 22:10:55 +02:00
options . Encryption = Encryption . Tls12 ;
options . Certificate = host . Configuration . GetValue < string? > ( Appsettings . AgentServerCertificate ) ? ? throw new Exception ( $"{Appsettings.AgentServerCertificate} value not set (appsettings)" ) ;
options . CertificatePassword = host . Configuration . GetValue < string? > ( Appsettings . AgentServerCertificatePassword ) ? ? throw new Exception ( $"{Appsettings.AgentServerCertificatePassword} value not set (appsettings)" ) ;
2023-09-21 18:58:32 +02:00
2023-09-21 22:10:55 +02:00
options . UseSerializer < MemPackSerializer < IMessage > , IMessage > ( ) ;
2023-09-21 18:58:32 +02:00
} ) ;
2023-09-21 22:10:55 +02:00
services . AddSingleton < AgentHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , AgentHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , DriveHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , Network . Handlers . Agent . EventHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , InterfaceHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , MainboardHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , MemoryHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , OperationSystemHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , PrinterHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , ProcessorHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , ServiceHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , SessionHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , SoftwareHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , StoragePoolHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , SystemInfoHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , TrapHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , UpdateHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , UserHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , VideocardHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , VirtualMaschineHandler > ( ) ;
services . AddSingleton < IMessageHandler < AgentSession > , ConsoleHandler > ( ) ;
// WEB (FRONTEND-PROXY) SERVER
services . UseHostedServer < WebSession , IMessage > ( options = >
2023-09-21 18:58:32 +02:00
{
2023-09-21 22:10:55 +02:00
options . Address = IPAddress . Any ;
options . Port = host . Configuration . GetValue < int? > ( Appsettings . WebServerPort ) ? ? throw new Exception ( $"{Appsettings.WebServerPort} value not set (appsettings)" ) ;
options . Keepalive = 10000 ;
options . Timeout = 30000 ;
options . Backlog = 128 ;
options . Encryption = Encryption . Tls12 ;
options . Certificate = host . Configuration . GetValue < string? > ( Appsettings . WebServerCertificate ) ? ? throw new Exception ( $"{Appsettings.WebServerCertificate} value not set (appsettings)" ) ;
options . CertificatePassword = host . Configuration . GetValue < string? > ( Appsettings . WebServerCertificatePassword ) ? ? throw new Exception ( $"{Appsettings.WebServerCertificatePassword} value not set (appsettings)" ) ;
options . UseSerializer < MemPackSerializer < IMessage > , IMessage > ( ) ;
2023-09-21 18:58:32 +02:00
} ) ;
2023-09-21 22:10:55 +02:00
services . AddSingleton < IMessageHandler < WebSession > , ConsoleProxyHandler > ( ) ;
// DISPATCH
services . AddHostedService < JobService > ( ) ;
services . AddHostedService < DispatchService > ( ) ;
// GLOBAL DEPENDENCIES
services . AddSingleton < Bus > ( ) ;
services . AddTransient ( provider = > new HttpClient ( new HttpClientHandler
{
ClientCertificateOptions = ClientCertificateOption . Manual ,
ServerCertificateCustomValidationCallback = ( httpRequestMessage , cert , cetChain , policyErrors ) = > true
} ) ) ;
} ) ;
var host = builder . Build ( ) ;
await host . RunAsync ( ) . ConfigureAwait ( false ) ;
2023-09-21 18:58:32 +02:00
}
}