From c396fac204c6ba9e433d5fcee5d39d03d5985a89 Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Sat, 7 Aug 2021 19:15:48 +0200 Subject: [PATCH] :art: add handleFile() --- package-lock.json | Bin 677545 -> 677545 bytes package.json | 2 +- src/routes/guilds/#guild_id/index.ts | 29 +++------------------------ src/routes/users/@me/index.ts | 16 ++------------- src/util/cdn.ts | 15 ++++++++++++++ 5 files changed, 21 insertions(+), 41 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc8bff16bd2c6455a0d236f3c8ad6db082c7b791..e18715bcb64c1f6519e0e04054fbb3bafa562634 100644 GIT binary patch delta 300 zcmZ3vR&(WA%?Y0wEjND2jhUXP!K6QVLagTW!kvr?p~cxQVMf8ePQ~87l?Hz4Rp!Qt z5gwVAe%TonW?^P-9+m}}mLa8?UWvJu=4RQgQRx3<5Sj@pby;GTufBV%ttP2?@Cy4Pi3n#P-Colpr6A&{4 rG0S%01lGgV^l;Sl4{Gc((;dXvAg*c$x(bNdfS4VKIe@O@yiy4OQBY~h delta 301 zcmZ3vR&(WA%?Y0wEjE71jhWtP#bz*_?GCHPWX59(VIh%8#g_Vh { router.patch("/", check(UserModifySchema), async (req: Request, res: Response) => { const body = req.body as UserModifySchema; - - if (body.avatar) { - try { - const mimetype = body.avatar.split(":")[1].split(";")[0]; - const buffer = Buffer.from(body.avatar.split(",")[1], "base64"); - - // @ts-ignore - const { id } = await uploadFile(`/avatars/${req.user_id}`, { buffer, mimetype, originalname: "avatar" }); - body.avatar = id; - } catch (error) { - throw new HTTPError("Invalid avatar"); - } - } + body.avatar = await handleFile(body.avatar as string); const user = await UserModel.findOneAndUpdate({ id: req.user_id }, body, { projection: PublicUserProjection }).exec(); // TODO: dispatch user update event diff --git a/src/util/cdn.ts b/src/util/cdn.ts index a66e22153..fb0cfb53c 100644 --- a/src/util/cdn.ts +++ b/src/util/cdn.ts @@ -1,5 +1,6 @@ import { Config } from "@fosscord/server-util"; import FormData from "form-data"; +import { HTTPError } from "lambert-server"; import fetch from "node-fetch"; export async function uploadFile(path: string, file: Express.Multer.File) { @@ -22,3 +23,17 @@ export async function uploadFile(path: string, file: Express.Multer.File) { if (response.status !== 200) throw result; return result; } + +export async function handleFile(path: string, body?: string): Promise { + if (!body || !body.startsWith("data:")) return body; + try { + const mimetype = body.split(":")[1].split(";")[0]; + const buffer = Buffer.from(body.split(",")[1], "base64"); + + // @ts-ignore + const { id } = await uploadFile(`/${path}/${guild_id}`, { buffer, mimetype, originalname: "banner" }); + return id; + } catch (error) { + throw new HTTPError("Invalid " + path); + } +}