summary refs log tree commit diff
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-04-11 21:38:36 +0200
committerRory& <root@rory.gay>2026-04-11 21:39:47 +0200
commit1d7627454675c9ebfa7c1a9c5add79f8fcf36691 (patch)
treee866e38e88119c9ef70abd4452d6049a57459b5c
parentFunctioning CDN-CS workers (diff)
downloadserver-ts-1d7627454675c9ebfa7c1a9c5add79f8fcf36691.tar.xz
Cdn cs worker cleanup
-rw-r--r--extra/admin-api/Spacebar.Cdn.Worker/Controllers/ImageResizeController.cs8
-rw-r--r--extra/admin-api/Spacebar.Cdn.Worker/DiscordImageResizeService.cs2
-rw-r--r--extra/admin-api/Spacebar.Cdn.Worker/Mimes.cs2
-rw-r--r--extra/admin-api/Spacebar.Cdn.Worker/Program.cs7
-rw-r--r--extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.AnyCPU.csproj4
-rw-r--r--extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.aarch64.csproj4
-rw-r--r--extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.x86_64.csproj4
-rw-r--r--extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.AnyCPU.csproj4
-rw-r--r--extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.aarch64.csproj4
-rw-r--r--extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.x86_64.csproj4
-rw-r--r--extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.AnyCPU.csproj4
-rw-r--r--extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.aarch64.csproj4
-rw-r--r--extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.x86_64.csproj4
-rw-r--r--extra/admin-api/Spacebar.Cdn/CdnConfiguration.cs16
-rw-r--r--extra/admin-api/Spacebar.Cdn/Controllers/GetImageController.cs112
-rw-r--r--extra/admin-api/Spacebar.Cdn/Controllers/StaticAssetController.cs132
-rw-r--r--extra/admin-api/Spacebar.Cdn/Controllers/UserController.cs154
-rw-r--r--extra/admin-api/Spacebar.Cdn/Mimes.cs2
-rw-r--r--extra/admin-api/Spacebar.Cdn/Program.cs2
19 files changed, 220 insertions, 253 deletions
diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Controllers/ImageResizeController.cs b/extra/admin-api/Spacebar.Cdn.Worker/Controllers/ImageResizeController.cs
deleted file mode 100644

index 7ba26965..00000000 --- a/extra/admin-api/Spacebar.Cdn.Worker/Controllers/ImageResizeController.cs +++ /dev/null
@@ -1,8 +0,0 @@ -using Microsoft.AspNetCore.Mvc; - -namespace Spacebar.Cdn.Worker.Controllers; - -[ApiController] -public class ImageResizeController : ControllerBase { - -} \ No newline at end of file diff --git a/extra/admin-api/Spacebar.Cdn.Worker/DiscordImageResizeService.cs b/extra/admin-api/Spacebar.Cdn.Worker/DiscordImageResizeService.cs
index 64e72660..7aaf312e 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/DiscordImageResizeService.cs +++ b/extra/admin-api/Spacebar.Cdn.Worker/DiscordImageResizeService.cs
@@ -75,7 +75,7 @@ public class DiscordImageResizeService { // pads.IsPixelArt(frame) frame.Resize(resizeParams.Size.Value, resizeParams.Size.Value, resizeParams.Quality == DiscordImageResizeQuality.Low ? FilterType.Point : FilterType.Gaussian); - Console.WriteLine($"Resized frame from {oldWidth}x{oldHeight} to {frame.Width}x{frame.Height}: {img.IndexOf(frame)}/{img.Count}"); + Console.WriteLine($"Resized frame from {oldWidth}x{oldHeight} to {frame.Width}x{frame.Height}: {img.IndexOf(frame)+1}/{img.Count}"); } }); } diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Mimes.cs b/extra/admin-api/Spacebar.Cdn.Worker/Mimes.cs
index 8337e81d..a60cee1c 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Mimes.cs +++ b/extra/admin-api/Spacebar.Cdn.Worker/Mimes.cs
@@ -40,7 +40,7 @@ public static class Mimes { public static string GetMime(MagickFormat fmt) => fmt switch { MagickFormat.Png => "image/png", - MagickFormat.Jpeg => "image/jpeg", + MagickFormat.Jpeg or MagickFormat.Jpg => "image/jpeg", MagickFormat.Gif => "image/gif", MagickFormat.Bmp => "image/bmp", MagickFormat.Tiff => "image/tiff", diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Program.cs b/extra/admin-api/Spacebar.Cdn.Worker/Program.cs
index a722e666..9c60d741 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Program.cs +++ b/extra/admin-api/Spacebar.Cdn.Worker/Program.cs
@@ -1,10 +1,5 @@ -using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; using System.Globalization; -using ArcaneLibs; -using ArcaneLibs.Extensions.Streams; using ImageMagick; -using Microsoft.AspNetCore.Mvc; using Spacebar.AdminApi.TestClient.Services.Helpers; using Spacebar.AdminApi.TestClient.Services.Services; using Spacebar.Cdn.Worker; @@ -12,7 +7,7 @@ using Spacebar.Interop.Cdn.Abstractions; var builder = WebApplication.CreateBuilder(args); -var sw = Stopwatch.StartNew(); +// var sw = Stopwatch.StartNew(); Console.WriteLine("Pre-initializing Magick.NET..."); // OpenCL.IsEnabled = true; MagickNET.Initialize(); diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.AnyCPU.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.AnyCPU.csproj
index 2c2b794b..38abbbc9 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.AnyCPU.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.AnyCPU.csproj
@@ -17,8 +17,4 @@ <ProjectReference Include="..\Interop\Spacebar.Interop.Cdn.Abstractions\Spacebar.Interop.Cdn.Abstractions.csproj" Condition="'$(ContinuousIntegrationBuild)'!='true'"/> <PackageReference Include="Spacebar.Interop.Cdn.Abstractions" Version="*-preview*" Condition="'$(ContinuousIntegrationBuild)'=='true'"/> </ItemGroup> - - <ItemGroup> - <Folder Include="Renderers\" /> - </ItemGroup> </Project> diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.aarch64.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.aarch64.csproj
index 16d278df..688b758e 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.aarch64.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.aarch64.csproj
@@ -17,8 +17,4 @@ <ProjectReference Include="..\Interop\Spacebar.Interop.Cdn.Abstractions\Spacebar.Interop.Cdn.Abstractions.csproj" Condition="'$(ContinuousIntegrationBuild)'!='true'"/> <PackageReference Include="Spacebar.Interop.Cdn.Abstractions" Version="*-preview*" Condition="'$(ContinuousIntegrationBuild)'=='true'"/> </ItemGroup> - - <ItemGroup> - <Folder Include="Renderers\" /> - </ItemGroup> </Project> diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.x86_64.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.x86_64.csproj
index 34f49b8e..6c698387 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.x86_64.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.x86_64.csproj
@@ -17,8 +17,4 @@ <ProjectReference Include="..\Interop\Spacebar.Interop.Cdn.Abstractions\Spacebar.Interop.Cdn.Abstractions.csproj" Condition="'$(ContinuousIntegrationBuild)'!='true'"/> <PackageReference Include="Spacebar.Interop.Cdn.Abstractions" Version="*-preview*" Condition="'$(ContinuousIntegrationBuild)'=='true'"/> </ItemGroup> - - <ItemGroup> - <Folder Include="Renderers\" /> - </ItemGroup> </Project> diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.AnyCPU.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.AnyCPU.csproj
index 48e671ed..11f74861 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.AnyCPU.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.AnyCPU.csproj
@@ -17,8 +17,4 @@ <ProjectReference Include="..\Interop\Spacebar.Interop.Cdn.Abstractions\Spacebar.Interop.Cdn.Abstractions.csproj" Condition="'$(ContinuousIntegrationBuild)'!='true'"/> <PackageReference Include="Spacebar.Interop.Cdn.Abstractions" Version="*-preview*" Condition="'$(ContinuousIntegrationBuild)'=='true'"/> </ItemGroup> - - <ItemGroup> - <Folder Include="Renderers\" /> - </ItemGroup> </Project> diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.aarch64.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.aarch64.csproj
index 781068a6..62423943 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.aarch64.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.aarch64.csproj
@@ -17,8 +17,4 @@ <ProjectReference Include="..\Interop\Spacebar.Interop.Cdn.Abstractions\Spacebar.Interop.Cdn.Abstractions.csproj" Condition="'$(ContinuousIntegrationBuild)'!='true'"/> <PackageReference Include="Spacebar.Interop.Cdn.Abstractions" Version="*-preview*" Condition="'$(ContinuousIntegrationBuild)'=='true'"/> </ItemGroup> - - <ItemGroup> - <Folder Include="Renderers\" /> - </ItemGroup> </Project> diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.x86_64.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.x86_64.csproj
index 16a2d115..e70da713 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.x86_64.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.x86_64.csproj
@@ -17,8 +17,4 @@ <ProjectReference Include="..\Interop\Spacebar.Interop.Cdn.Abstractions\Spacebar.Interop.Cdn.Abstractions.csproj" Condition="'$(ContinuousIntegrationBuild)'!='true'"/> <PackageReference Include="Spacebar.Interop.Cdn.Abstractions" Version="*-preview*" Condition="'$(ContinuousIntegrationBuild)'=='true'"/> </ItemGroup> - - <ItemGroup> - <Folder Include="Renderers\" /> - </ItemGroup> </Project> diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.AnyCPU.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.AnyCPU.csproj
index 663e16c6..2296a332 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.AnyCPU.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.AnyCPU.csproj
@@ -17,8 +17,4 @@ <ProjectReference Include="..\Interop\Spacebar.Interop.Cdn.Abstractions\Spacebar.Interop.Cdn.Abstractions.csproj" Condition="'$(ContinuousIntegrationBuild)'!='true'"/> <PackageReference Include="Spacebar.Interop.Cdn.Abstractions" Version="*-preview*" Condition="'$(ContinuousIntegrationBuild)'=='true'"/> </ItemGroup> - - <ItemGroup> - <Folder Include="Renderers\" /> - </ItemGroup> </Project> diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.aarch64.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.aarch64.csproj
index 326ed11e..e7803db9 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.aarch64.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.aarch64.csproj
@@ -17,8 +17,4 @@ <ProjectReference Include="..\Interop\Spacebar.Interop.Cdn.Abstractions\Spacebar.Interop.Cdn.Abstractions.csproj" Condition="'$(ContinuousIntegrationBuild)'!='true'"/> <PackageReference Include="Spacebar.Interop.Cdn.Abstractions" Version="*-preview*" Condition="'$(ContinuousIntegrationBuild)'=='true'"/> </ItemGroup> - - <ItemGroup> - <Folder Include="Renderers\" /> - </ItemGroup> </Project> diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.x86_64.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.x86_64.csproj
index 1943e7b0..6b38743d 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.x86_64.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.x86_64.csproj
@@ -17,8 +17,4 @@ <ProjectReference Include="..\Interop\Spacebar.Interop.Cdn.Abstractions\Spacebar.Interop.Cdn.Abstractions.csproj" Condition="'$(ContinuousIntegrationBuild)'!='true'"/> <PackageReference Include="Spacebar.Interop.Cdn.Abstractions" Version="*-preview*" Condition="'$(ContinuousIntegrationBuild)'=='true'"/> </ItemGroup> - - <ItemGroup> - <Folder Include="Renderers\" /> - </ItemGroup> </Project> diff --git a/extra/admin-api/Spacebar.Cdn/CdnConfiguration.cs b/extra/admin-api/Spacebar.Cdn/CdnConfiguration.cs
index e69de29b..65ad4710 100644 --- a/extra/admin-api/Spacebar.Cdn/CdnConfiguration.cs +++ b/extra/admin-api/Spacebar.Cdn/CdnConfiguration.cs
@@ -0,0 +1,16 @@ +namespace Spacebar.Cdn; + +public class SpacebarCdnConfiguration +{ + public SpacebarCdnConfiguration(IConfiguration configuration) { + configuration.GetRequiredSection("Spacebar").GetRequiredSection("Cdn").Bind(this); + } + + // public + +} + +// public class SpacebarCdnWorkerConfiguration +// { +// public +// } \ No newline at end of file diff --git a/extra/admin-api/Spacebar.Cdn/Controllers/GetImageController.cs b/extra/admin-api/Spacebar.Cdn/Controllers/GetImageController.cs
index 8e64100a..c4473932 100644 --- a/extra/admin-api/Spacebar.Cdn/Controllers/GetImageController.cs +++ b/extra/admin-api/Spacebar.Cdn/Controllers/GetImageController.cs
@@ -1,56 +1,56 @@ -using ArcaneLibs.Extensions.Streams; -using Microsoft.AspNetCore.Mvc; -using Spacebar.AdminApi.TestClient.Services.Services; -using Spacebar.Cdn.Extensions; -using Spacebar.Interop.Cdn.Abstractions; - -namespace Spacebar.Cdn.Controllers; - -[ApiController] -public class GetImageController(LruFileCache lfc, IFileSource fs, DiscordImageResizeService dirs) : ImageController { - // [HttpGet("/avatars/{_:required}")] - [HttpGet("/emojis/{emoji_id:required}.{ext:required}")] - [HttpGet("/stickers/{sticker_id:required}.{ext:required}")] - // [HttpGet("/avatars/{user_id:required}/{avatar_hash:required}.{ext:required}")] - [HttpGet("/banners/{user_id:required}/{user_banner:required}.{ext:required}")] - public async Task<IActionResult> GetImage(string? ext) { - var originalKey = fs.BaseUrl + Request.Path; - var cacheKey = Request.Path + Request.QueryString; - - DiscordImageResizeParams resizeParams = GetResizeParams(); - - var entry = await lfc.GetOrAdd(cacheKey, async () => { - var original = await fs.GetFile(Request.Path); - - if (Request.Query.Any()) { - using var img = await original.ToMagickImageCollectionAsync(); - dirs.Apply(img, resizeParams); - - var outStream = new MemoryStream(); - await img.WriteAsync(outStream, img.First().Format); - outStream.Position = 0; - - return new LruFileCache.Entry() { - Data = outStream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - } - - return new LruFileCache.Entry() { - Data = original.Stream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - }); - - // byte array with mime type result - return new FileContentResult(entry.Data, entry.MimeType); - } - - // TODO: is message_id required? Can't tell from discord.food: /attachments/{channel_id}/[{message_id]/attachment_id}/{attachment_filename} - [HttpGet("/attachments/{channel_id:required}/{message_id:required}/{attachment_id:required}/{filename:required}")] - [HttpGet("/ephemeral-attachments/{application_id:required}/{attachment_id:required}/{attachment_filename:required}")] - public async Task<IActionResult> GetAttachmentImage() { - // TODO: url signing, file type checks - return await GetImage(""); - } -} \ No newline at end of file +// using ArcaneLibs.Extensions.Streams; +// using Microsoft.AspNetCore.Mvc; +// using Spacebar.AdminApi.TestClient.Services.Services; +// using Spacebar.Cdn.Extensions; +// using Spacebar.Interop.Cdn.Abstractions; +// +// namespace Spacebar.Cdn.Controllers; +// +// [ApiController] +// public class GetImageController(LruFileCache lfc, IFileSource fs, DiscordImageResizeService dirs) : ImageController { +// // [HttpGet("/avatars/{_:required}")] +// [HttpGet("/emojis/{emoji_id:required}.{ext:required}")] +// [HttpGet("/stickers/{sticker_id:required}.{ext:required}")] +// // [HttpGet("/avatars/{user_id:required}/{avatar_hash:required}.{ext:required}")] +// [HttpGet("/banners/{user_id:required}/{user_banner:required}.{ext:required}")] +// public async Task<IActionResult> GetImage(string? ext) { +// var originalKey = fs.BaseUrl + Request.Path; +// var cacheKey = Request.Path + Request.QueryString; +// +// DiscordImageResizeParams resizeParams = Request.GetResizeParams(); +// +// var entry = await lfc.GetOrAdd(cacheKey, async () => { +// var original = await fs.GetFile(Request.Path); +// +// if (Request.Query.Any()) { +// using var img = await original.ToMagickImageCollectionAsync(); +// dirs.Apply(img, resizeParams); +// +// var outStream = new MemoryStream(); +// await img.WriteAsync(outStream, img.First().Format); +// outStream.Position = 0; +// +// return new LruFileCache.Entry() { +// Data = outStream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// } +// +// return new LruFileCache.Entry() { +// Data = original.Stream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// }); +// +// // byte array with mime type result +// return new FileContentResult(entry.Data, entry.MimeType); +// } +// +// // TODO: is message_id required? Can't tell from discord.food: /attachments/{channel_id}/[{message_id]/attachment_id}/{attachment_filename} +// [HttpGet("/attachments/{channel_id:required}/{message_id:required}/{attachment_id:required}/{filename:required}")] +// [HttpGet("/ephemeral-attachments/{application_id:required}/{attachment_id:required}/{attachment_filename:required}")] +// public async Task<IActionResult> GetAttachmentImage() { +// // TODO: url signing, file type checks +// return await GetImage(""); +// } +// } \ No newline at end of file diff --git a/extra/admin-api/Spacebar.Cdn/Controllers/StaticAssetController.cs b/extra/admin-api/Spacebar.Cdn/Controllers/StaticAssetController.cs
index 5d9d0d78..48ae2253 100644 --- a/extra/admin-api/Spacebar.Cdn/Controllers/StaticAssetController.cs +++ b/extra/admin-api/Spacebar.Cdn/Controllers/StaticAssetController.cs
@@ -1,66 +1,66 @@ -using ArcaneLibs.Extensions.Streams; -using Microsoft.AspNetCore.Mvc; -using Microsoft.OpenApi; -using Spacebar.AdminApi.TestClient.Services.Services; -using Spacebar.Cdn.Extensions; -using Spacebar.Interop.Cdn.Abstractions; - -namespace Spacebar.Cdn.Controllers; - -[ApiController] -public class StaticAssetController(LruFileCache lfc, IFileSource fs, DiscordImageResizeService dirs) : ImageController { - private static readonly Dictionary<string, string> defaultAvatarHashMap = new() { - { "0", "4a8562cf00887030c416d3ec2d46385a" }, - { "1", "9b0bb198936784c45c72833cc426cc55" }, - { "2", "22341bdb500c7b63a93bbce957d1601e" }, - { "3", "d9977836b82058bf2f74eebd50edc095" }, - { "4", "9d6ddb4e4d899a533a8cc617011351c9" }, - { "5", "7213ab6677377974697dfdfbaf5f6a6f" }, - }; - - private static readonly Dictionary<string, string> defaultGroupDMAvatarHashMap = new() { - { "0", "3b70bb66089c60f8be5e214bf8574c9d" }, - { "1", "9581acd31832465bdeaa5385b0e919a3" }, - { "2", "a8a4727cf2dc2939bd3c657fad4463fa" }, - { "3", "2e46fe14586f8e95471c0917f56726b5" }, - { "4", "fac7e78de9753d4a37083bba74c1d9ef" }, - { "5", "4ab900144b0865430dc9be825c838faa" }, - { "6", "1276374a404452756f3c9cc2601508a5" }, - { "7", "904bf9f1b61f53ef4a3b7a893afeabe3" }, - }; - - // png only - [HttpGet("/embed/avatars/{userIndex}.{ext}")] - public async Task<IActionResult> GetDefaultUserAvatar(string userIndex, string ext) { - - var cacheKey = Request.Path + Request.QueryString; - - DiscordImageResizeParams resizeParams = GetResizeParams(); - - var entry = await lfc.GetOrAdd(cacheKey, async () => { - var original = await fs.GetFile(Request.Path); - - if (Request.Query.Any()) { - using var img = await original.ToMagickImageCollectionAsync(); - dirs.Apply(img, resizeParams); - - var outStream = new MemoryStream(); - await img.WriteAsync(outStream, img.First().Format); - outStream.Position = 0; - - return new LruFileCache.Entry() { - Data = outStream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - } - - return new LruFileCache.Entry() { - Data = original.Stream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - }); - - // byte array with mime type result - return new FileContentResult(entry.Data, entry.MimeType); - } -} \ No newline at end of file +// using ArcaneLibs.Extensions.Streams; +// using Microsoft.AspNetCore.Mvc; +// using Microsoft.OpenApi; +// using Spacebar.AdminApi.TestClient.Services.Services; +// using Spacebar.Cdn.Extensions; +// using Spacebar.Interop.Cdn.Abstractions; +// +// namespace Spacebar.Cdn.Controllers; +// +// [ApiController] +// public class StaticAssetController(LruFileCache lfc, IFileSource fs, DiscordImageResizeService dirs) : ImageController { +// private static readonly Dictionary<string, string> defaultAvatarHashMap = new() { +// { "0", "4a8562cf00887030c416d3ec2d46385a" }, +// { "1", "9b0bb198936784c45c72833cc426cc55" }, +// { "2", "22341bdb500c7b63a93bbce957d1601e" }, +// { "3", "d9977836b82058bf2f74eebd50edc095" }, +// { "4", "9d6ddb4e4d899a533a8cc617011351c9" }, +// { "5", "7213ab6677377974697dfdfbaf5f6a6f" }, +// }; +// +// private static readonly Dictionary<string, string> defaultGroupDMAvatarHashMap = new() { +// { "0", "3b70bb66089c60f8be5e214bf8574c9d" }, +// { "1", "9581acd31832465bdeaa5385b0e919a3" }, +// { "2", "a8a4727cf2dc2939bd3c657fad4463fa" }, +// { "3", "2e46fe14586f8e95471c0917f56726b5" }, +// { "4", "fac7e78de9753d4a37083bba74c1d9ef" }, +// { "5", "4ab900144b0865430dc9be825c838faa" }, +// { "6", "1276374a404452756f3c9cc2601508a5" }, +// { "7", "904bf9f1b61f53ef4a3b7a893afeabe3" }, +// }; +// +// // png only +// [HttpGet("/embed/avatars/{userIndex}.{ext}")] +// public async Task<IActionResult> GetDefaultUserAvatar(string userIndex, string ext) { +// +// var cacheKey = Request.Path + Request.QueryString; +// +// DiscordImageResizeParams resizeParams = GetResizeParams(); +// +// var entry = await lfc.GetOrAdd(cacheKey, async () => { +// var original = await fs.GetFile(Request.Path); +// +// if (Request.Query.Any()) { +// using var img = await original.ToMagickImageCollectionAsync(); +// dirs.Apply(img, resizeParams); +// +// var outStream = new MemoryStream(); +// await img.WriteAsync(outStream, img.First().Format); +// outStream.Position = 0; +// +// return new LruFileCache.Entry() { +// Data = outStream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// } +// +// return new LruFileCache.Entry() { +// Data = original.Stream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// }); +// +// // byte array with mime type result +// return new FileContentResult(entry.Data, entry.MimeType); +// } +// } \ No newline at end of file diff --git a/extra/admin-api/Spacebar.Cdn/Controllers/UserController.cs b/extra/admin-api/Spacebar.Cdn/Controllers/UserController.cs
index 97626609..a6c47036 100644 --- a/extra/admin-api/Spacebar.Cdn/Controllers/UserController.cs +++ b/extra/admin-api/Spacebar.Cdn/Controllers/UserController.cs
@@ -1,77 +1,77 @@ -using ArcaneLibs.Extensions.Streams; -using Microsoft.AspNetCore.Mvc; -using Spacebar.AdminApi.TestClient.Services.Services; -using Spacebar.Cdn.Extensions; -using Spacebar.Interop.Cdn.Abstractions; - -namespace Spacebar.Cdn.Controllers; - -[ApiController] -public class UserController(LruFileCache lfc, IFileSource fs, DiscordImageResizeService dirs) : ImageController { - [HttpGet("/avatars/{userId}/{hash}.{ext}")] - public async Task<IActionResult> GetUserAvatar(string userId, string hash, string ext) { - var originalKey = fs.BaseUrl + Request.Path; - var cacheKey = Request.Path + Request.QueryString; - - DiscordImageResizeParams resizeParams = GetResizeParams(); - - var entry = await lfc.GetOrAdd(cacheKey, async () => { - var original = await fs.GetFile(Request.Path); - - if (Request.Query.Any()) { - using var img = await original.ToMagickImageCollectionAsync(); - dirs.Apply(img, resizeParams); - - var outStream = new MemoryStream(); - await img.WriteAsync(outStream, img.First().Format); - outStream.Position = 0; - - return new LruFileCache.Entry() { - Data = outStream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - } - - return new LruFileCache.Entry() { - Data = original.Stream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - }); - - // byte array with mime type result - return new FileContentResult(entry.Data, entry.MimeType); - } - [HttpGet("/banners/{userId}/{hash}.{ext}")] - public async Task<IActionResult> GetUserBanner(string userId, string hash, string ext) { - var originalKey = fs.BaseUrl + Request.Path; - var cacheKey = Request.Path + Request.QueryString; - - DiscordImageResizeParams resizeParams = GetResizeParams(); - - var entry = await lfc.GetOrAdd(cacheKey, async () => { - var original = await fs.GetFile(Request.Path); - - if (Request.Query.Any()) { - using var img = await original.ToMagickImageCollectionAsync(); - dirs.Apply(img, resizeParams); - - var outStream = new MemoryStream(); - await img.WriteAsync(outStream, img.First().Format); - outStream.Position = 0; - - return new LruFileCache.Entry() { - Data = outStream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - } - - return new LruFileCache.Entry() { - Data = original.Stream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - }); - - // byte array with mime type result - return new FileContentResult(entry.Data, entry.MimeType); - } -} \ No newline at end of file +// using ArcaneLibs.Extensions.Streams; +// using Microsoft.AspNetCore.Mvc; +// using Spacebar.AdminApi.TestClient.Services.Services; +// using Spacebar.Cdn.Extensions; +// using Spacebar.Interop.Cdn.Abstractions; +// +// namespace Spacebar.Cdn.Controllers; +// +// [ApiController] +// public class UserController(LruFileCache lfc, IFileSource fs, DiscordImageResizeService dirs) : ImageController { +// [HttpGet("/avatars/{userId}/{hash}.{ext}")] +// public async Task<IActionResult> GetUserAvatar(string userId, string hash, string ext) { +// var originalKey = fs.BaseUrl + Request.Path; +// var cacheKey = Request.Path + Request.QueryString; +// +// DiscordImageResizeParams resizeParams = GetResizeParams(); +// +// var entry = await lfc.GetOrAdd(cacheKey, async () => { +// var original = await fs.GetFile(Request.Path); +// +// if (Request.Query.Any()) { +// using var img = await original.ToMagickImageCollectionAsync(); +// dirs.Apply(img, resizeParams); +// +// var outStream = new MemoryStream(); +// await img.WriteAsync(outStream, img.First().Format); +// outStream.Position = 0; +// +// return new LruFileCache.Entry() { +// Data = outStream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// } +// +// return new LruFileCache.Entry() { +// Data = original.Stream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// }); +// +// // byte array with mime type result +// return new FileContentResult(entry.Data, entry.MimeType); +// } +// [HttpGet("/banners/{userId}/{hash}.{ext}")] +// public async Task<IActionResult> GetUserBanner(string userId, string hash, string ext) { +// var originalKey = fs.BaseUrl + Request.Path; +// var cacheKey = Request.Path + Request.QueryString; +// +// DiscordImageResizeParams resizeParams = GetResizeParams(); +// +// var entry = await lfc.GetOrAdd(cacheKey, async () => { +// var original = await fs.GetFile(Request.Path); +// +// if (Request.Query.Any()) { +// using var img = await original.ToMagickImageCollectionAsync(); +// dirs.Apply(img, resizeParams); +// +// var outStream = new MemoryStream(); +// await img.WriteAsync(outStream, img.First().Format); +// outStream.Position = 0; +// +// return new LruFileCache.Entry() { +// Data = outStream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// } +// +// return new LruFileCache.Entry() { +// Data = original.Stream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// }); +// +// // byte array with mime type result +// return new FileContentResult(entry.Data, entry.MimeType); +// } +// } \ No newline at end of file diff --git a/extra/admin-api/Spacebar.Cdn/Mimes.cs b/extra/admin-api/Spacebar.Cdn/Mimes.cs
index efef1e80..3401ddd0 100644 --- a/extra/admin-api/Spacebar.Cdn/Mimes.cs +++ b/extra/admin-api/Spacebar.Cdn/Mimes.cs
@@ -39,7 +39,7 @@ public static class Mimes { public static string GetMime(MagickFormat fmt) => fmt switch { MagickFormat.Png => "image/png", - MagickFormat.Jpeg => "image/jpeg", + MagickFormat.Jpeg or MagickFormat.Jpg => "image/jpeg", MagickFormat.Gif => "image/gif", MagickFormat.Bmp => "image/bmp", MagickFormat.Tiff => "image/tiff", diff --git a/extra/admin-api/Spacebar.Cdn/Program.cs b/extra/admin-api/Spacebar.Cdn/Program.cs
index 61a5c07b..911c7259 100644 --- a/extra/admin-api/Spacebar.Cdn/Program.cs +++ b/extra/admin-api/Spacebar.Cdn/Program.cs
@@ -13,8 +13,8 @@ if (!string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable("APPSETTINGS_P // builder.Services.AddSingleton<IFileSource>(new ProxyFileSource("http://cdn.old.server.spacebar.chat")); builder.Services.AddSingleton<IFileSource>(new FilesystemFileSource(Environment.GetEnvironmentVariable("STORAGE_PATH") ?? throw new InvalidOperationException("STORAGE_PATH not set!"))); builder.Services.AddSingleton<LruFileCache>(new LruFileCache(1 * 1024 * 1024 * 1024)); -builder.Services.AddSingleton<PixelArtDetectionService>(); builder.Services.AddSingleton<DiscordImageResizeService>(); +builder.Services.AddSingleton<PixelArtDetectionService>(); builder.Services.AddDbContextPool<SpacebarDbContext>(options => { options