diff --git a/allstarr/Middleware/AdminStaticFilesMiddleware.cs b/allstarr/Middleware/AdminStaticFilesMiddleware.cs index 14e7965..a95a804 100644 --- a/allstarr/Middleware/AdminStaticFilesMiddleware.cs +++ b/allstarr/Middleware/AdminStaticFilesMiddleware.cs @@ -1,3 +1,6 @@ +using Microsoft.AspNetCore.StaticFiles; +using Microsoft.Extensions.FileProviders; + namespace allstarr.Middleware; /// @@ -7,30 +10,15 @@ namespace allstarr.Middleware; public class AdminStaticFilesMiddleware { private readonly RequestDelegate _next; - private readonly StaticFileMiddleware _staticFileMiddleware; - private readonly DefaultFilesMiddleware _defaultFilesMiddleware; + private readonly IWebHostEnvironment _env; private const int AdminPort = 5275; public AdminStaticFilesMiddleware( RequestDelegate next, - IWebHostEnvironment env, - ILoggerFactory loggerFactory) + IWebHostEnvironment env) { _next = next; - - var staticFileOptions = new StaticFileOptions(); - var defaultFilesOptions = new DefaultFilesOptions(); - - _staticFileMiddleware = new StaticFileMiddleware( - _next, - env, - Microsoft.Extensions.Options.Options.Create(staticFileOptions), - loggerFactory); - - _defaultFilesMiddleware = new DefaultFilesMiddleware( - (ctx) => _staticFileMiddleware.Invoke(ctx), - env, - Microsoft.Extensions.Options.Options.Create(defaultFilesOptions)); + _env = env; } public async Task InvokeAsync(HttpContext context) @@ -39,13 +27,50 @@ public class AdminStaticFilesMiddleware if (port == AdminPort) { - // Serve static files on admin port - await _defaultFilesMiddleware.Invoke(context); + var path = context.Request.Path.Value ?? "/"; + + // Serve index.html for root path + if (path == "/" || path == "/index.html") + { + var indexPath = Path.Combine(_env.WebRootPath, "index.html"); + if (File.Exists(indexPath)) + { + context.Response.ContentType = "text/html"; + await context.Response.SendFileAsync(indexPath); + return; + } + } + + // Try to serve static file from wwwroot + var filePath = Path.Combine(_env.WebRootPath, path.TrimStart('/')); + if (File.Exists(filePath)) + { + var contentType = GetContentType(filePath); + context.Response.ContentType = contentType; + await context.Response.SendFileAsync(filePath); + return; + } } - else + + // Not admin port or file not found - continue pipeline + await _next(context); + } + + private static string GetContentType(string filePath) + { + var ext = Path.GetExtension(filePath).ToLowerInvariant(); + return ext switch { - // Skip static files on main port - await _next(context); - } + ".html" => "text/html", + ".css" => "text/css", + ".js" => "application/javascript", + ".json" => "application/json", + ".png" => "image/png", + ".jpg" or ".jpeg" => "image/jpeg", + ".gif" => "image/gif", + ".svg" => "image/svg+xml", + ".ico" => "image/x-icon", + _ => "application/octet-stream" + }; } }