Removed unused middleware. Fixed plugin loading issues

This commit is contained in:
2025-04-15 12:19:32 +02:00
parent 0b0c9304b1
commit db7ac8d174
4 changed files with 35 additions and 92 deletions

View File

@@ -29,11 +29,14 @@ public class FrontendController : Controller
{ {
var assembliesMap = PluginService.GetAssemblies("client"); var assembliesMap = PluginService.GetAssemblies("client");
if (assembliesMap.ContainsKey(assemblyName)) if (!assembliesMap.TryGetValue(assemblyName, out var path))
throw new HttpApiException("The requested assembly could not be found", 404); throw new HttpApiException("The requested assembly could not be found", 404);
var path = assembliesMap[assemblyName]; var absolutePath = Path.Combine(
Directory.GetCurrentDirectory(),
path
);
await Results.File(path).ExecuteAsync(HttpContext); await Results.File(absolutePath).ExecuteAsync(HttpContext);
} }
} }

View File

@@ -1,72 +0,0 @@
using System.Diagnostics;
using System.Net.Sockets;
using MoonCore.Exceptions;
namespace Moonlight.ApiServer.Http.Middleware;
public class ApiErrorMiddleware
{
private readonly RequestDelegate Next;
public ApiErrorMiddleware(RequestDelegate next)
{
Next = next;
}
public async Task Invoke(HttpContext context)
{
try
{
await Next(context);
}
catch (HttpApiException httpApiException)
{
await Results.Problem(
title: httpApiException.Title,
detail: httpApiException.Detail,
statusCode: httpApiException.Status,
type: "moonlight/general-api-error"
).ExecuteAsync(context);
}
catch (HttpRequestException e)
{
var logger = context.RequestServices.GetRequiredService<ILogger<ApiErrorMiddleware>>();
if (e.InnerException is SocketException)
{
logger.LogCritical("An unhandled socket exception occured. [{method}] {path}: {e}", context.Request.Method, context.Request.Path, e);
await Results.Problem(
title: "An socket exception occured on the api server",
detail: "Check the api server logs for more details",
statusCode: 502,
type: "moonlight/remote-api-connection-error"
).ExecuteAsync(context);
return;
}
logger.LogCritical("An unhandled exception occured. [{method}] {path}: {e}", context.Request.Method, context.Request.Path, e.Demystify());
await Results.Problem(
title: "An http request exception occured on the api server",
detail: "Check the api server logs for more details",
statusCode: 500,
type: "moonlight/remote-api-request-error"
).ExecuteAsync(context);
}
catch (Exception e)
{
var logger = context.RequestServices.GetRequiredService<ILogger<ApiErrorMiddleware>>();
logger.LogCritical("An unhandled exception occured. [{method}] {path}: {e}", context.Request.Method, context.Request.Path, e);
await Results.Problem(
title: "An unhanded exception occured on the api server",
detail: "Check the api server logs for more details",
statusCode: 500,
type: "moonlight/critical-api-error"
).ExecuteAsync(context);
}
}
}

View File

@@ -8,17 +8,20 @@ public class BundleGenerationService : IHostedService
{ {
private readonly ILogger<BundleGenerationService> Logger; private readonly ILogger<BundleGenerationService> Logger;
private readonly IWebHostEnvironment HostEnvironment; private readonly IWebHostEnvironment HostEnvironment;
private readonly PluginService PluginService;
private readonly BundleService BundleService; private readonly BundleService BundleService;
public BundleGenerationService( public BundleGenerationService(
ILogger<BundleGenerationService> logger, ILogger<BundleGenerationService> logger,
IWebHostEnvironment hostEnvironment, IWebHostEnvironment hostEnvironment,
BundleService bundleService BundleService bundleService,
PluginService pluginService
) )
{ {
Logger = logger; Logger = logger;
HostEnvironment = hostEnvironment; HostEnvironment = hostEnvironment;
BundleService = bundleService; BundleService = bundleService;
PluginService = pluginService;
} }
private async Task Bundle(CancellationToken cancellationToken) private async Task Bundle(CancellationToken cancellationToken)
@@ -34,29 +37,36 @@ public class BundleGenerationService : IHostedService
if (fileInfo is NotFoundFileInfo || fileInfo.PhysicalPath == null) if (fileInfo is NotFoundFileInfo || fileInfo.PhysicalPath == null)
{ {
Logger.LogWarning( fileInfo = PluginService.WwwRootFileProvider.GetFileInfo(cssFile);
"Unable to find physical path for the requested css file '{file}'. Make sure its inside a wwwroot folder",
cssFile if (fileInfo is NotFoundFileInfo || fileInfo.PhysicalPath == null)
); {
Logger.LogWarning(
continue; "Unable to find physical path for the requested css file '{file}'. Make sure its inside a wwwroot folder",
cssFile
);
continue;
}
} }
Logger.LogTrace("Discovered css file '{path}' at '{physicalPath}'", cssFile, fileInfo.PhysicalPath); Logger.LogTrace("Discovered css file '{path}' at '{physicalPath}'", cssFile, fileInfo.PhysicalPath);
physicalCssFiles.Add(fileInfo.PhysicalPath); physicalCssFiles.Add(fileInfo.PhysicalPath);
} }
if(physicalCssFiles.Count == 0) if (physicalCssFiles.Count == 0)
Logger.LogWarning("No physical paths to css files loaded. The generated bundle will be empty. Unless this is intended by you this is a bug"); Logger.LogWarning(
"No physical paths to css files loaded. The generated bundle will be empty. Unless this is intended by you this is a bug");
// TODO: Implement cache // TODO: Implement cache
// TODO: File system watcher for development // TODO: File system watcher for development
var bundleContent = await CreateCssBundle(physicalCssFiles); var bundleContent = await CreateCssBundle(physicalCssFiles);
Directory.CreateDirectory(PathBuilder.Dir("storage", "tmp")); Directory.CreateDirectory(PathBuilder.Dir("storage", "tmp"));
await File.WriteAllTextAsync(PathBuilder.File("storage", "tmp", "bundle.css"), bundleContent, await File.WriteAllTextAsync(PathBuilder.File("storage", "tmp", "bundle.css"), bundleContent,
cancellationToken); cancellationToken);
@@ -83,7 +93,7 @@ public class BundleGenerationService : IHostedService
{ {
var fileContent = await File.ReadAllTextAsync(physicalPath); var fileContent = await File.ReadAllTextAsync(physicalPath);
var stylesheet = await parser.ParseAsync(fileContent); var stylesheet = await parser.ParseAsync(fileContent);
// Check if it's the first stylesheet we are loading // Check if it's the first stylesheet we are loading
if (mainStylesheet == null || content == null) if (mainStylesheet == null || content == null)
{ {
@@ -106,7 +116,7 @@ public class BundleGenerationService : IHostedService
Logger.LogError("An unable to delegate main stylesheet. Did every load attempt of an stylesheet fail?"); Logger.LogError("An unable to delegate main stylesheet. Did every load attempt of an stylesheet fail?");
return ""; return "";
} }
// Process stylesheets against the main one // Process stylesheets against the main one
foreach (var stylesheet in additionalStyleSheets) foreach (var stylesheet in additionalStyleSheets)
{ {

View File

@@ -236,7 +236,9 @@ public class Startup
{ {
try try
{ {
PluginLoadContext.LoadFromAssemblyPath(assemblyFile); PluginLoadContext.LoadFromAssemblyPath(
Path.Combine(Directory.GetCurrentDirectory(), assemblyFile)
);
} }
catch (Exception e) catch (Exception e)
{ {
@@ -647,7 +649,7 @@ public class Startup
"Hangfire.Server.BackgroundServerProcess", "Hangfire.Server.BackgroundServerProcess",
LogLevel.Warning LogLevel.Warning
); );
WebApplicationBuilder.Logging.AddFilter( WebApplicationBuilder.Logging.AddFilter(
"Hangfire.BackgroundJobServer", "Hangfire.BackgroundJobServer",
LogLevel.Warning LogLevel.Warning
@@ -660,7 +662,7 @@ public class Startup
{ {
if (WebApplication.Environment.IsDevelopment()) if (WebApplication.Environment.IsDevelopment())
WebApplication.UseHangfireDashboard(); WebApplication.UseHangfireDashboard();
return Task.CompletedTask; return Task.CompletedTask;
} }