TermRemoteCtl/apps/windows_agent/src/TermRemoteCtl.Agent/Program.cs

53 lines
1.9 KiB
C#

using Microsoft.Extensions.Options;
using TermRemoteCtl.Agent.Api;
using TermRemoteCtl.Agent.Configuration;
using TermRemoteCtl.Agent.History;
using TermRemoteCtl.Agent.Projects;
using TermRemoteCtl.Agent.Realtime;
using TermRemoteCtl.Agent.Security;
using TermRemoteCtl.Agent.Sessions;
using TermRemoteCtl.Agent.Terminal;
var builder = WebApplication.CreateBuilder(args);
var agentOptions = builder.Services.AddAgentOptions(builder.Configuration);
builder.Services.AddSingleton<IClock, SystemClock>();
builder.Services.AddSingleton<PairingService>();
builder.Services.AddSingleton<TrustedDeviceStore>();
builder.Services.AddSingleton<AuditLog>();
builder.Services.AddSingleton(serviceProvider =>
{
var options = serviceProvider.GetRequiredService<IOptions<AgentOptions>>().Value;
return new ProjectStore(options.DataRoot);
});
builder.Services.AddSingleton<ProjectRegistry>();
builder.Services.AddSingleton<SessionRegistry>();
builder.Services.AddSingleton<IConPtySessionFactory, ConPtySessionFactory>();
builder.Services.AddSingleton<ISessionHost, PowerShellSessionHost>();
builder.Services.AddSingleton<ITerminalDiagnosticsSink, LoggingTerminalDiagnosticsSink>();
builder.Services.AddSingleton(serviceProvider =>
{
var options = serviceProvider.GetRequiredService<IOptions<AgentOptions>>().Value;
return new SessionHistoryStore(options.DataRoot);
});
// Task 2 uses ASP.NET Core's local development certificate so HttpsPort is a truthful HTTPS listener.
builder.WebHost.ConfigureKestrel(kestrel =>
{
AgentEndpointConfiguration.ConfigureHttpsEndpoint(kestrel, agentOptions);
});
var app = builder.Build();
agentOptions = app.Services.GetRequiredService<IOptions<AgentOptions>>().Value;
Directory.CreateDirectory(agentOptions.DataRoot);
app.MapGet("/health", () => Results.Json(new { status = "ok" }));
app.MapPairingEndpoints();
app.MapProjectEndpoints();
app.MapSessionEndpoints();
app.MapTerminalSocket();
app.Run();
public partial class Program;