summary refs log tree commit diff
path: root/util/src
diff options
context:
space:
mode:
authorFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-09-19 19:05:26 +0200
committerFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-09-19 19:05:26 +0200
commit9ae19d8e0628aa6d1dcd8bbb184a280812040b98 (patch)
treebe3ffee005b65374588cbd4e674ff587fa32589c /util/src
parentMerge branch 'master' of https://github.com/fosscord/fosscord-api (diff)
downloadserver-9ae19d8e0628aa6d1dcd8bbb184a280812040b98.tar.xz
:truck: move file handle to utility
Diffstat (limited to 'util/src')
-rw-r--r--util/src/util/cdn.ts54
-rw-r--r--util/src/util/index.ts1
2 files changed, 55 insertions, 0 deletions
diff --git a/util/src/util/cdn.ts b/util/src/util/cdn.ts
new file mode 100644

index 00000000..754d6244 --- /dev/null +++ b/util/src/util/cdn.ts
@@ -0,0 +1,54 @@ +import FormData from "form-data"; +import { HTTPError } from "lambert-server"; +import fetch from "node-fetch"; +import { Config } from "./Config"; +import multer from "multer"; + +export async function uploadFile(path: string, file: Express.Multer.File) { + const form = new FormData(); + form.append("file", file.buffer, { + contentType: file.mimetype, + filename: file.originalname, + }); + + const response = await fetch(`${Config.get().cdn.endpoint || "http://localhost:3003"}${path}`, { + headers: { + signature: Config.get().security.requestSignature, + ...form.getHeaders(), + }, + method: "POST", + body: form, + }); + const result = await response.json(); + + 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, { buffer, mimetype, originalname: "banner" }); + return id; + } catch (error) { + console.error(error); + throw new HTTPError("Invalid " + path); + } +} + +export async function deleteFile(path: string) { + const response = await fetch(`${Config.get().cdn.endpoint || "http://localhost:3003"}${path}`, { + headers: { + signature: Config.get().security.requestSignature, + }, + method: "DELETE", + }); + const result = await response.json(); + + if (response.status !== 200) throw result; + return result; +} diff --git a/util/src/util/index.ts b/util/src/util/index.ts
index 2de26fc7..3160380f 100644 --- a/util/src/util/index.ts +++ b/util/src/util/index.ts
@@ -1,6 +1,7 @@ export * from "./ApiError"; export * from "./BitField"; export * from "./checkToken"; +export * from "./cdn"; export * from "./Config"; export * from "./Constants"; export * from "./Database";