From b8627809902efea805c82cfa0a2d02196c06e762 Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Sun, 19 Sep 2021 19:05:26 +0200 Subject: [PATCH] :truck: move file handle to utility --- bundle/package-lock.json | Bin 82022 -> 82024 bytes cdn/package-lock.json | Bin 354786 -> 354815 bytes gateway/package-lock.json | Bin 156237 -> 156266 bytes util/package-lock.json | Bin 446397 -> 459190 bytes util/package.json | 2 ++ util/src/util/cdn.ts | 54 ++++++++++++++++++++++++++++++++++++++ util/src/util/index.ts | 1 + 7 files changed, 57 insertions(+) create mode 100644 util/src/util/cdn.ts diff --git a/bundle/package-lock.json b/bundle/package-lock.json index 3199f7d8e3ad0dc33b924269fb3f20f41a943f21..f2dd7beee49d02d63db6474ebf54ae0c06c9ce43 100644 GIT binary patch delta 152 zcmaFX!1|(rb;AT!afg!1g4AOD-29^S#5^S{1*JGcJxe{~%^j?}nFNpp4Gr`RCU4vk zGdYt_dUC~1Ck>>q=$}LpE>Rv7QsGXZIma TMxY6tjFW$Jb8dcjq@o%CXJa_i delta 110 zcmaFS!1}C#b;AVK&Ffh=Gfh_AXS{hGhb8ai96o+V#d=J>qF| zC+}sB+B|!!Ju^t<bHbEN-XqSn`RXA~M!0rC#>u+7xF-KN%D4Idk<4lU D#xX6W diff --git a/cdn/package-lock.json b/cdn/package-lock.json index 7a4edd89674878d41c0794505b4c1b61f482e1dd..8a2346f4ea42409e25ab4084cd8d4f8b565e5f51 100644 GIT binary patch delta 49 zcmaEKS@i#9(G5nd6U&6yN=q_xlys&mIx)#Kd$P8BvN8fO6A&{4G0S#OR@Rv*0JV+} A5&!@I delta 44 vcmex=S@h9m(G5nd)1$>%`KKGyFmW`ev9_nNG6FFZ5HkZY%l0%@)|n{)V>J!u diff --git a/gateway/package-lock.json b/gateway/package-lock.json index 40db319da8a742b4f6d65a61a87afc99f19909b0..ae6009dbd6bc7627f95c985add5825f9376262eb 100644 GIT binary patch delta 36 scmX?mg!9!A&JE9*Csqlum6l}YDCtZVoGa7(kGcIHGvoGu%uN1q04eJZ>;M1& delta 26 icmaELg!AkX&JE9*C$G98-Ym`1F3rNYU7Cf-KMnw;oC)Rt diff --git a/util/package-lock.json b/util/package-lock.json index 4b0f1f1517e9ee45bfdacc0a32ed79d16784a74c..e5a62d0f36a1fa06c3e0b137b0fd5e4f3349a0d8 100644 GIT binary patch delta 5089 zcmdUyeT>`m8OP<=$+b5Mca*l*yIwEN!Nf?D*m-dh)TzyTocH%PsRhSzUM`6f+n2=2 zRA{%sScg==f*%4jTA?vbXo7JQnV1;8fx1a(V<4evXb8$+3<+s;Lh2-hn4R?K6$+~+ zXj%U8@5TQ8p6B^K&!bPCd3f%r@9lWv9cZfAX)M#6=0>&V0H!zVO)IZMk9}s<3fK>z zZ7cV{AN&ZMxCOaZyyp>IeDb{o(RoOnCh=k_V8puKsE?@k!f1U^wdXmTeNf8?tht-_ z8_RJ#Vsp^7wr4=r43syBlfJNnBkF0IC?$wWyB8<5#$v7(>ZAj%cCu`AiN_}}aSB#V zP%Va`sb%pG59~waF?c)&Z39pIQGq}vKz<)Gh=-0$Y&-jwL1#ES(wSsuMChmLG*zPW z{jNEfZFwqfCy`7E*)E&sGkvq!?2fW@wdOUI!zPBtP)9R>8xzTXq@HGka3JT8XA|*w z&PXTh=BA~O5rw|H=UmFzz2NZs(8xe=U`jCwT6*M4G4}W-@z$dgApRP%ON<}E!Liqn z8L;}kLY>Bo$wDedrU-{iV9d6L1x+Tjq)_45CeG%(gus;?LDGlE$Uxns9dy#1$x?MT zDk*C>+6+*grZ(y!31?{8pE0nFmdD{GQnYyb#gPfO7F(shu1#|MSjZbRyC*kFKh3`7 zew*eEw9w{gp4Um+U0TO4lgl+qN3}S5q`Fy;S@oFhQ{S+>y!q*q)}JummoE~vckJA9 z!Ak)7O=Lzq_AezMcPUX>sXZ5bPc}x#E&z655adUc-`o1QCPrF*b7C!rIz)2yM}P8PE`k{B37e)ZqkxM zNqb_zL`no2tY(U(Vm2Ak2D4c%UPuTjae9+hJakkAsutwEm5=Yg9fqZ92AB)l4w*&l ze%sZf+Llcj4Rlh0gTt>XcBKu;2=A_y(q31WWvQ&YCv=Tvy4N%G*=mGNB|;WgrWGP6y8BQ(PdHaSzC_|v-zwfLr8o%VRDe291BY2F>i`rfLe+eckX9G>Yl+uKo*{eMaG~0AyMj!#eD2Z{e$^su(qrOrDd*o1Rp7)` z@B(BK+23o@jH~YV5$2w?P;rzZb=HBI>js+Yve`j zZ!;_PXZP=cJA4t4&mvousNN{KygF;xQk2$Oed)yUKsVl*-nwHR(-mFqTBtif%U;^r zt(sZJO)p1yI+^i?#rW#Nl{ISI!{l!)8sHF+?J5nX$Mga?buaWSuy3eXSoz(DZ_mRN zxeV@l1epg4PJt~*ZC_fDnj1%xP3h|M=28{j^_+4sW3>96m1;m(suh-rx+za}8H2fA z4Ac!+r_c#_%bl2q;qegZ>9)H*tc+GuG-+$p8eFT>Z`qp}%IM3MC{Mu_4YhpDq{H3d zTs;wbdNa6!hOV4cqk5Z0?uh%v>De9P!>1;|ojc&I;6c6W3h>X(uoCQ7!yAELK(1cU z956~Q8rRyc+^I_>$C3S!eyI2otlo5<6XJ`j&z-*lbPF&B-hWexto-@6FGHW&Jh1?s z0aNqP_Q`XB0WaMLUjsf;!#lxLP-O&DcdL}*-ji<)f3_V8s38hCu2O7;rPzzBkD}8h zSqv$bqo=GQIQ5ibVK!SRI;tE$Ao6`@$WafOC>Mn$wfu4q9R4n}AO_#sJU>!w&9|{A zJWX;`RrU_tM8La&;pgzKADp&B!_#)fNxkBe#swU|QeqeCT#oCYU1_F`=0ib->J(b3 zL8n}-hw+{#*v4(1YBrFg(s-H0<1Cl#)v0>P7;1zoB`nQW(}Bl`s}P-%yHT_S21bX}kOt9cyFLP5a33hMxRpK3h}?gmG3Wa4W@gr}EOyTLvqGVuu#ZnxKZij%nC^>&K+VvrLl!S10nUTHI%HxfA>ccg7ym{nxQ_j<8KnZ)cO!y`KYZx# zfH6sCO0%03mxTw%aRQeZ2+!Vn>4|XEjMR2y!)K9j%kbenNN@JbgTdj(Eb_MbOC&)+ zdR225Lcwig6dWac3_ z@VQmw-ydEion^ifI;()w_bcZv3!cq^mKxbOeEJ#X$H%{9JR3fClj_KI7X@Y4e<758 UTdsz2A;@5N&2aB+s#^m80lVCg3;+NC delta 219 zcmV<103`pmgB-n|8?fgAv;P630h1782(!rp^oz6Em5vCrZ=Z1lvm>Q@1G6uzZ6C8> z%v(IS>j?qm9k=2x0Y@N*TTlVFTTlYTF1Im(0<*!B+R`7FAdv>2mwYe-4!5900~sur z>9hk4w>!560|A$Cv;!Bno^k`w)VD@W1S1HyWL5;`1Gjuz1W*H)7mx)Gw?JY9X&Sd+ zeFWGvw=1&*ni-b{r~((4TLc6VmmnYkHJ3jx0eH72)C6c7w}bEm_WPGHfdbRFAMXV# Vp_kM{1HQMvkp{jbw=TB^h)U^@SL^@) diff --git a/util/package.json b/util/package.json index 751484af..2fa93f9b 100644 --- a/util/package.json +++ b/util/package.json @@ -31,6 +31,7 @@ "@types/amqplib": "^0.8.1", "@types/jsonwebtoken": "^8.5.0", "@types/mongoose-autopopulate": "^0.10.1", + "@types/multer": "^1.4.7", "@types/node": "^14.17.9", "@types/node-fetch": "^2.5.12", "jest": "^27.0.6" @@ -44,6 +45,7 @@ "jsonwebtoken": "^8.5.1", "lambert-server": "^1.2.10", "missing-native-js-functions": "^1.2.15", + "multer": "^1.4.3", "node-fetch": "^2.6.1", "patch-package": "^6.4.7", "pg": "^8.7.1", 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 { + 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";