mirror of
https://github.com/spacebarchat/server.git
synced 2026-04-13 20:25:40 +00:00
32 lines
1.3 KiB
C#
32 lines
1.3 KiB
C#
using ArcaneLibs.Extensions.Streams;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.OpenApi;
|
|
using Spacebar.AdminApi.TestClient.Services.Services;
|
|
using Spacebar.Cdn.Extensions;
|
|
using Spacebar.Cdn.Services;
|
|
using Spacebar.Interop.Cdn.Abstractions;
|
|
|
|
namespace Spacebar.Cdn.Controllers;
|
|
|
|
[ApiController]
|
|
public class StaticAssetController(LruFileCache lfc, IFileSource fs, CdnWorkerService cws) : ControllerBase {
|
|
[HttpGet("/embed/avatars/{avatarIdx}")]
|
|
[HttpGet("/embed/avatars/{avatarIdx}.{ext}")]
|
|
public async Task<IActionResult> GetUserAvatar(string avatarIdx, string ext = "webp") {
|
|
DiscordImageResizeParams resizeParams = Request.GetResizeParams();
|
|
var cacheKey = Request.Path + resizeParams.ToSerializedName();
|
|
LruFileCache.Entry? entry;
|
|
entry = await lfc.GetOrAdd(cacheKey, async () => {
|
|
|
|
var res = await cws.GetRawClient("q8").GetAsync(Request.Path + Request.QueryString);
|
|
var outStream = await res.Content.ReadAsStreamAsync();
|
|
|
|
return new LruFileCache.Entry() {
|
|
Data = outStream.ReadToEnd().ToArray(),
|
|
MimeType = res.Content.Headers.ContentType?.ToString() ?? Mimes.GetMime(Mimes.GetFormatForExtension(ext))
|
|
};
|
|
});
|
|
|
|
return new FileContentResult(entry.Data, entry.MimeType);
|
|
}
|
|
} |