summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/routes/guilds/#guild_id/index.ts29
-rw-r--r--src/routes/users/@me/index.ts16
-rw-r--r--src/util/cdn.ts15
3 files changed, 20 insertions, 40 deletions
diff --git a/src/routes/guilds/#guild_id/index.ts b/src/routes/guilds/#guild_id/index.ts

index 051b44c4..a2dfeeda 100644 --- a/src/routes/guilds/#guild_id/index.ts +++ b/src/routes/guilds/#guild_id/index.ts
@@ -17,7 +17,7 @@ import { HTTPError } from "lambert-server"; import { GuildUpdateSchema } from "../../../schema/Guild"; import { emitEvent } from "../../../util/Event"; import { check } from "../../../util/instanceOf"; -import { uploadFile } from "../../../util/cdn"; +import { handleFile } from "../../../util/cdn"; import "missing-native-js-functions"; const router = Router(); @@ -43,31 +43,8 @@ router.patch("/", check(GuildUpdateSchema), async (req: Request, res: Response) const perms = await getPermission(req.user_id, guild_id); perms.hasThrow("MANAGE_GUILD"); - if (body.icon && body.icon.startsWith('data')) { - try { - const mimetype = body.icon.split(":")[1].split(";")[0]; - const buffer = Buffer.from(body.icon.split(",")[1], "base64"); - - // @ts-ignore - const { id } = await uploadFile(`/icons/${guild_id}`, { buffer, mimetype, originalname: "icon" }); - body.icon = id; - } catch (error) { - throw new HTTPError("Invalid icon"); - } - } - - if (body.banner && body.banner.startsWith('data')) { - try { - const mimetype = body.banner.split(":")[1].split(";")[0]; - const buffer = Buffer.from(body.banner.split(",")[1], "base64"); - - // @ts-ignore - const { id } = await uploadFile(`/banners/${guild_id}`, { buffer, mimetype, originalname: "banner" }); - body.banner = id; - } catch (error) { - throw new HTTPError("Invalid banner"); - } - } + body.icon = await handleFile("icons", body.icon); + body.banner = await handleFile("banners", body.banner); const guild = await GuildModel.findOneAndUpdate({ id: guild_id }, body) .populate({ path: "joined_at", match: { id: req.user_id } }) diff --git a/src/routes/users/@me/index.ts b/src/routes/users/@me/index.ts
index 68196afe..25a05da3 100644 --- a/src/routes/users/@me/index.ts +++ b/src/routes/users/@me/index.ts
@@ -4,7 +4,7 @@ import { HTTPError } from "lambert-server"; import { getPublicUser } from "../../../util/User"; import { UserModifySchema } from "../../../schema/User"; import { check } from "../../../util/instanceOf"; -import { uploadFile } from "../../../util/cdn"; +import { handleFile } from "../../../util/cdn"; const router: Router = Router(); @@ -14,19 +14,7 @@ router.get("/", async (req: Request, res: Response) => { 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 a66e2215..fb0cfb53 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<string | undefined> { + 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); + } +}