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)
@@ -32,6 +35,10 @@ public class BundleGenerationService : IHostedService
{ {
var fileInfo = HostEnvironment.WebRootFileProvider.GetFileInfo(cssFile); var fileInfo = HostEnvironment.WebRootFileProvider.GetFileInfo(cssFile);
if (fileInfo is NotFoundFileInfo || fileInfo.PhysicalPath == null)
{
fileInfo = PluginService.WwwRootFileProvider.GetFileInfo(cssFile);
if (fileInfo is NotFoundFileInfo || fileInfo.PhysicalPath == null) if (fileInfo is NotFoundFileInfo || fileInfo.PhysicalPath == null)
{ {
Logger.LogWarning( Logger.LogWarning(
@@ -41,6 +48,7 @@ public class BundleGenerationService : IHostedService
continue; continue;
} }
}
Logger.LogTrace("Discovered css file '{path}' at '{physicalPath}'", cssFile, fileInfo.PhysicalPath); Logger.LogTrace("Discovered css file '{path}' at '{physicalPath}'", cssFile, fileInfo.PhysicalPath);
@@ -48,7 +56,8 @@ public class BundleGenerationService : IHostedService
} }
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
@@ -57,6 +66,7 @@ public class BundleGenerationService : IHostedService
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);

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)
{ {