diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/FilesController.cs b/MareSynchronosServer/MareSynchronosStaticFilesServer/FilesController.cs new file mode 100644 index 0000000..53464af --- /dev/null +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/FilesController.cs @@ -0,0 +1,37 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using System.IO; +using System.Linq; +using System.Security.Claims; +using System.Threading.Tasks; + +namespace MareSynchronosStaticFilesServer +{ + [Route("/cache")] + public class FilesController : Controller + { + private readonly ILogger logger; + private readonly IConfiguration configuration; + + public FilesController(ILogger logger, IConfiguration configuration) + { + this.logger = logger; + this.configuration = configuration; + } + + [HttpGet("{fileId}")] + public IActionResult GetFile(string fileId) + { + var authedUser = HttpContext.User.Claims.FirstOrDefault(f => string.Equals(f.Type, ClaimTypes.NameIdentifier, System.StringComparison.Ordinal))?.Value ?? "Unknown"; + logger.LogInformation($"GetFile:{authedUser}:{fileId}"); + + FileInfo fi = new(Path.Combine(configuration.GetRequiredSection("MareSynchronos")["CacheDirectory"], fileId)); + if (!fi.Exists) return NotFound(); + + var fileStream = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read, FileShare.Read); + + return File(fileStream, "application/octet-stream"); + } + } +} diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/MareSynchronosStaticFilesServer.csproj b/MareSynchronosServer/MareSynchronosStaticFilesServer/MareSynchronosStaticFilesServer.csproj index 38579cf..41aecaf 100644 --- a/MareSynchronosServer/MareSynchronosStaticFilesServer/MareSynchronosStaticFilesServer.csproj +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/MareSynchronosStaticFilesServer.csproj @@ -19,6 +19,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/Startup.cs b/MareSynchronosServer/MareSynchronosStaticFilesServer/Startup.cs index 18b878f..e1fd575 100644 --- a/MareSynchronosServer/MareSynchronosStaticFilesServer/Startup.cs +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/Startup.cs @@ -36,7 +36,7 @@ public class Startup var mareSettings = Configuration.GetRequiredSection("MareSynchronos"); - //services.AddControllers(); + services.AddControllers(); var defaultMethodConfig = new MethodConfig { @@ -99,18 +99,10 @@ public class Startup app.UseAuthentication(); app.UseAuthorization(); - app.UseStaticFiles(new StaticFileOptions() - { - FileProvider = new PhysicalFileProvider(Configuration.GetRequiredSection("MareSynchronos")["CacheDirectory"]), - RequestPath = "/cache", - ServeUnknownFileTypes = true, - - }); - app.UseEndpoints(e => { e.MapGrpcService(); - //e.MapControllers(); + e.MapControllers(); }); } } \ No newline at end of file