summary refs log tree commit diff
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-02-03 03:22:58 +0100
committerRory& <root@rory.gay>2026-02-03 03:22:58 +0100
commita2bf29bc7f22c00129dd8f9e7e8aead33825ed93 (patch)
treecef488ff0664707b0b9267defc478f24f957df38
parentUpdate schemas (diff)
downloadserver-ts-a2bf29bc7f22c00129dd8f9e7e8aead33825ed93.tar.xz
cdn: avatar decorations
-rw-r--r--src/cdn/Server.ts4
-rw-r--r--src/cdn/routes/avatar-decoration-presets.ts40
2 files changed, 42 insertions, 2 deletions
diff --git a/src/cdn/Server.ts b/src/cdn/Server.ts

index 091621f0..68974433 100644 --- a/src/cdn/Server.ts +++ b/src/cdn/Server.ts
@@ -100,10 +100,10 @@ export class CDNServer extends Server { console.log("[Server] Route /channel-icons registered"); this.app.use("/guilds/:guild_id/users/:user_id/avatars", guildProfilesRoute); - console.log("[Server] Route /guilds/avatars registered"); + console.log("[Server] Route /guilds/:guild_id/users/:user_id/avatars registered"); this.app.use("/guilds/:guild_id/users/:user_id/banners", guildProfilesRoute); - console.log("[Server] Route /guilds/banners registered"); + console.log("[Server] Route /guilds/:guild_id/users/:user_id/banners registered"); return super.start(); } diff --git a/src/cdn/routes/avatar-decoration-presets.ts b/src/cdn/routes/avatar-decoration-presets.ts new file mode 100644
index 00000000..736a281d --- /dev/null +++ b/src/cdn/routes/avatar-decoration-presets.ts
@@ -0,0 +1,40 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2023 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. +*/ + +import { Router, Response, Request } from "express"; +import { storage } from "../util/Storage"; +import { HTTPError } from "lambert-server"; +import { fileTypeFromBuffer } from "file-type"; +import { cache } from "../util/cache"; + +const router = Router({ mergeParams: true }); + +router.get("/:avatar_decoration_data_asset", cache, async (req: Request, res: Response) => { + const { avatar_decoration_data_asset } = req.params as { [key: string]: string }; + const path = `avatar-decoration-presets/${avatar_decoration_data_asset}`; + + const file = await storage.get(path); + if (!file) throw new HTTPError("not found", 404); + const type = await fileTypeFromBuffer(file); + + res.set("Content-Type", type?.mime); + + return res.send(file); +}); + +export default router;