DevServer things :>

This commit is contained in:
Masu Baumgartner
2024-11-08 23:53:06 +01:00
parent 764ebe3586
commit 18810766ed
2 changed files with 148 additions and 136 deletions

View File

@@ -0,0 +1,10 @@
namespace Moonlight.ApiServer;
public static class DevServer
{
public async static Task Run(string[] args)
{
Console.WriteLine("Preparing development server");
await Program.Main(args);
}
}

View File

@@ -1,102 +1,102 @@
using System.Net;
using System.Reflection; using System.Reflection;
using MoonCore.Extended.Extensions; using MoonCore.Extended.Extensions;
using MoonCore.Extended.Helpers;
using MoonCore.Extensions; using MoonCore.Extensions;
using MoonCore.Helpers; using MoonCore.Helpers;
using MoonCore.PluginFramework.Extensions; using MoonCore.PluginFramework.Extensions;
using MoonCore.Services;
using Moonlight.ApiServer; using Moonlight.ApiServer;
using Moonlight.ApiServer.Configuration; using Moonlight.ApiServer.Configuration;
using Moonlight.ApiServer.Helpers; using Moonlight.ApiServer.Helpers;
using Moonlight.ApiServer.Http.Middleware; using Moonlight.ApiServer.Http.Middleware;
using Moonlight.ApiServer.Implementations;
using Moonlight.ApiServer.Interfaces.Auth; using Moonlight.ApiServer.Interfaces.Auth;
using Moonlight.ApiServer.Interfaces.OAuth2; using Moonlight.ApiServer.Interfaces.OAuth2;
using Moonlight.ApiServer.Interfaces.Startup; using Moonlight.ApiServer.Interfaces.Startup;
// Cry about it public class Program
#pragma warning disable ASP0000
// Fancy start console output... yes very fancy :>
var rainbow = new Crayon.Rainbow(0.5);
foreach (var c in "Moonlight")
{ {
public static async Task Main(string[] args)
{
// Cry about it
#pragma warning disable ASP0000
// Fancy start console output... yes very fancy :>
var rainbow = new Crayon.Rainbow(0.5);
foreach (var c in "Moonlight")
{
Console.Write( Console.Write(
rainbow rainbow
.Next() .Next()
.Bold() .Bold()
.Text(c.ToString()) .Text(c.ToString())
); );
} }
Console.WriteLine(); Console.WriteLine();
// Storage i guess // Storage i guess
Directory.CreateDirectory(PathBuilder.Dir("storage")); Directory.CreateDirectory(PathBuilder.Dir("storage"));
// TODO: Load plugin/module assemblies // TODO: Load plugin/module assemblies
// Configure startup logger // Configure startup logger
var startupLoggerFactory = new LoggerFactory(); var startupLoggerFactory = new LoggerFactory();
// TODO: Add direct extension method // TODO: Add direct extension method
var providers = LoggerBuildHelper.BuildFromConfiguration(configuration => var providers = LoggerBuildHelper.BuildFromConfiguration(configuration =>
{ {
configuration.Console.Enable = true; configuration.Console.Enable = true;
configuration.Console.EnableAnsiMode = true; configuration.Console.EnableAnsiMode = true;
configuration.FileLogging.Enable = false; configuration.FileLogging.Enable = false;
}); });
startupLoggerFactory.AddProviders(providers); startupLoggerFactory.AddProviders(providers);
var startupLogger = startupLoggerFactory.CreateLogger("Startup"); var startupLogger = startupLoggerFactory.CreateLogger("Startup");
// Configure startup interfaces // Configure startup interfaces
var startupServiceCollection = new ServiceCollection(); var startupServiceCollection = new ServiceCollection();
startupServiceCollection.AddConfiguration(options => startupServiceCollection.AddConfiguration(options =>
{ {
options.UsePath(PathBuilder.Dir("storage")); options.UsePath(PathBuilder.Dir("storage"));
options.UseEnvironmentPrefix("MOONLIGHT"); options.UseEnvironmentPrefix("MOONLIGHT");
options.AddConfiguration<AppConfiguration>("app"); options.AddConfiguration<AppConfiguration>("app");
}); });
startupServiceCollection.AddLogging(loggingBuilder => { loggingBuilder.AddProviders(providers); }); startupServiceCollection.AddLogging(loggingBuilder => { loggingBuilder.AddProviders(providers); });
startupServiceCollection.AddPlugins(configuration => startupServiceCollection.AddPlugins(configuration =>
{ {
// Configure startup interfaces // Configure startup interfaces
configuration.AddInterface<IAppStartup>(); configuration.AddInterface<IAppStartup>();
configuration.AddInterface<IDatabaseStartup>(); configuration.AddInterface<IDatabaseStartup>();
configuration.AddInterface<IEndpointStartup>(); configuration.AddInterface<IEndpointStartup>();
// Configure assemblies to scan // Configure assemblies to scan
configuration.AddAssembly(Assembly.GetEntryAssembly()!); configuration.AddAssembly(typeof(Program).Assembly);
}); });
var startupServiceProvider = startupServiceCollection.BuildServiceProvider(); var startupServiceProvider = startupServiceCollection.BuildServiceProvider();
var appStartupInterfaces = startupServiceProvider.GetRequiredService<IAppStartup[]>(); var appStartupInterfaces = startupServiceProvider.GetRequiredService<IAppStartup[]>();
var config = startupServiceProvider.GetRequiredService<AppConfiguration>(); var config = startupServiceProvider.GetRequiredService<AppConfiguration>();
ApplicationStateHelper.SetConfiguration(config); ApplicationStateHelper.SetConfiguration(config);
// Start the actual app // Start the actual app
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
await Startup.ConfigureLogging(builder); await Startup.ConfigureLogging(builder);
await Startup.ConfigureDatabase( await Startup.ConfigureDatabase(
builder, builder,
startupLoggerFactory, startupLoggerFactory,
startupServiceProvider.GetRequiredService<IDatabaseStartup[]>() startupServiceProvider.GetRequiredService<IDatabaseStartup[]>()
); );
// Call interfaces // Call interfaces
foreach (var startupInterface in appStartupInterfaces) foreach (var startupInterface in appStartupInterfaces)
{ {
try try
{ {
await startupInterface.BuildApp(builder); await startupInterface.BuildApp(builder);
@@ -109,48 +109,48 @@ foreach (var startupInterface in appStartupInterfaces)
e e
); );
} }
} }
builder.Services.AddControllers(); builder.Services.AddControllers();
builder.Services.AddSingleton(config); builder.Services.AddSingleton(config);
builder.Services.AutoAddServices<Program>(); builder.Services.AutoAddServices<Program>();
builder.Services.AddHttpClient(); builder.Services.AddHttpClient();
await Startup.ConfigureTokenAuthentication(builder, config); await Startup.ConfigureTokenAuthentication(builder, config);
await Startup.ConfigureOAuth2(builder, startupLogger, config); await Startup.ConfigureOAuth2(builder, startupLogger, config);
// Implementation service // Implementation service
builder.Services.AddPlugins(configuration => builder.Services.AddPlugins(configuration =>
{ {
configuration.AddInterface<IOAuth2Provider>(); configuration.AddInterface<IOAuth2Provider>();
configuration.AddInterface<IAuthInterceptor>(); configuration.AddInterface<IAuthInterceptor>();
configuration.AddAssembly(Assembly.GetEntryAssembly()!); configuration.AddAssembly(typeof(Program).Assembly);
}); });
var app = builder.Build(); var app = builder.Build();
await Startup.PrepareDatabase(app); await Startup.PrepareDatabase(app);
if (config.Client.Enable) if (config.Client.Enable)
{ {
if (app.Environment.IsDevelopment()) if (app.Environment.IsDevelopment())
app.UseWebAssemblyDebugging(); app.UseWebAssemblyDebugging();
app.UseBlazorFrameworkFiles(); app.UseBlazorFrameworkFiles();
app.UseStaticFiles(); app.UseStaticFiles();
} }
app.UseRouting(); app.UseRouting();
app.UseApiErrorHandling(); app.UseApiErrorHandling();
await Startup.UseTokenAuthentication(app); await Startup.UseTokenAuthentication(app);
await Startup.UseOAuth2(app); await Startup.UseOAuth2(app);
// Call interfaces // Call interfaces
foreach (var startupInterface in appStartupInterfaces) foreach (var startupInterface in appStartupInterfaces)
{ {
try try
{ {
await startupInterface.ConfigureApp(app); await startupInterface.ConfigureApp(app);
@@ -163,17 +163,17 @@ foreach (var startupInterface in appStartupInterfaces)
e e
); );
} }
} }
app.UseMiddleware<ApiAuthenticationMiddleware>(); app.UseMiddleware<ApiAuthenticationMiddleware>();
app.UseMiddleware<AuthorizationMiddleware>(); app.UseMiddleware<AuthorizationMiddleware>();
// Call interfaces // Call interfaces
var endpointStartupInterfaces = startupServiceProvider.GetRequiredService<IEndpointStartup[]>(); var endpointStartupInterfaces = startupServiceProvider.GetRequiredService<IEndpointStartup[]>();
foreach (var endpointStartup in endpointStartupInterfaces) foreach (var endpointStartup in endpointStartupInterfaces)
{ {
try try
{ {
await endpointStartup.ConfigureEndpoints(app); await endpointStartup.ConfigureEndpoints(app);
@@ -186,11 +186,13 @@ foreach (var endpointStartup in endpointStartupInterfaces)
e e
); );
} }
} }
app.MapControllers(); app.MapControllers();
if(config.Client.Enable) if (config.Client.Enable)
app.MapFallbackToFile("index.html"); app.MapFallbackToFile("index.html");
app.Run(); await app.RunAsync();
}
}