From e304ee320321247fda3814ca79718465c924cbd8 Mon Sep 17 00:00:00 2001 From: Madeline <46743919+MaddyUnderStars@users.noreply.github.com> Date: Sun, 24 Jul 2022 13:45:46 +1000 Subject: [PATCH] Really shitty external image resizing --- bundle/package-lock.json | Bin 597172 -> 606758 bytes bundle/package.json | 8 +++++--- cdn/package.json | 2 ++ cdn/src/routes/external.ts | 38 ++++++++++++++++++++++++++++++++++- package-lock.json | Bin 791974 -> 818595 bytes util/src/entities/Config.ts | 4 ++++ util/src/entities/Message.ts | 2 +- 7 files changed, 49 insertions(+), 5 deletions(-) diff --git a/bundle/package-lock.json b/bundle/package-lock.json index 4c5e5b776e2c831bf7a7b7f746fddbdbe1a8c40f..6e4d70c78807b1cb546b45191e886edc49c49931 100644 GIT binary patch delta 5571 zcmd6rd2k!|b;k$0i{0fRO9UyBA}NW7t_T9KxB;b(1>zzB0w9PRiDUub;=XSnwnrZ4 z7~68p6t!NPII)z;*cm&Dq>_k>bjO)OU@**)5_ByK*>7n zWICO2V*G>M{q6qt{ocOs_kDIxe0$U5pW1vhORkQGiuuW%V@dTtp|w+gGbwl-2^Yrcm%P7aoNgXKn^ElEl@&#JhuFvJyxcrQGS#Y1rH zEHzA^dnw@FeWY@rbFM_Re2u6Rg#v!^OMIhSm9rR|*0Q=5WL;`jsH$t7CZoe=E-`M2 zDi>uKA(P7n&30+im5I2L5w{^|jm?^as({auoypbmA*)Aknx3Cg$})j;(pT`vWpL>4 z=utR$oHq;Rb@*-Y`-ky9So5F6807bpRoHuqH^9Apny0C@-l`42k>Rc$_}vt?tv`}W z=ZYxG&c8?@mWkz^AU)EepRIU23A4G_NX3PEc6za*oMqJxOD&Pr$D9Es98sI~3-yMw z?wx4}Gr3S9m7kL&3(f*#D?1%*AW|$Cn~G34qKq=uvPbPxz=c-Actv}pIw%G3UQC2kC+nk7wM3FqJBZG|frNgAGhg<3t7 z$mG+ks8mZdn`!oH)yc#%m@r`*xYtdXSOq^eVuSF|Pq7|YHB1RwXRNEZeRpH$dmyF5 z(3)z*dhXf#u`jLzrJ5Lo(X;p%{8CBn>s)u>H@E;Co9S*?Qc>yyKg1`v?|c>8-UIrx zyg_c_DE7)WDpV|n8i^8|(qU`i;37`I_fO-J(L_mfbtH~5bi0r20lbee+l{{CqyX-nvC$&mdsnCLCZXqDi%4$rr?o>*ofo3h7_V`swSwi72X%}ib zbJC|>)HYOpji#(|gmjju5Bj=^5so;A?fqh_JT=H2EaSf#?QA{2gs*PF#mo30*RzQ@ zBjjDzjT%CJLek%s*v+z0cPi3r7TN-`fKM(@#-eHKyxZ^3m%R>|W~OR)1%Xf=y&RfUb0wUMgCZzu#yc~^cmo^$zx(>kj~J(Gw*s2|$`&)&rw zYMnVv^mZOzM+TESVCfxdkS`N6Vkz7yz(#SUn1R*bCpYrcaOfm81kZnxAmCpG#4yy3 zQLFgnP*D_xiOpm`e9c9V!2?^c2|g-gsT>Zu332P5$NI^1B3w=6;lgk6_2jZcz`utu z1?>9{-3vSZ1>Xv9g|L21B7(~yYycCf;MfRyN+F+I*$CQH(_x7sXGsUM5!;MxPM-^w zEq?bx-RP34t44V|w~)xyJhGH;CSuoG~Ew=t7wxew$z3}?y=&kD)*)kg`i_jt>=n>tp zCqh|j%Wcx5l2_$HcD5Mtl^0{PF;#U|<@aPGu}ZZlb7#$Ig{x`sC$g!sHshMhPg|^h zw>;xh)!lNhbJ1XzN`*deNv6%ms)?#QqL|BTs=^u^`Z1xq7SlaxTmrj3j}dT0g3%D@ zBDPLs5}8CqRAfu}T(-ob*ls=`lEbA5V#?cO8opVf!el5GYphEX%#;Mt#k&$}Nw^?WTfEXk*2O&Mx3hcTOB)s3*ek+S5y5$lYwqI1l7WrevyqLB_sWtv61)}1o?qQyX_ZdU1K z;hce0S|fI6A!w54im5`=9CO&JL5aoArgZT6eZ&aAqiQ(6hLFN@Ns_M#OA)`%7SUTZ=9oS=+5&z>I8OqRB~$`j|&Jt+2Qn!D(xl4Hla5a;>aKK37jJr|H?p@HHKs zGjO4gc$zO4%TYO7PtY4+uZy1IE06^+@ZSPr36>t>ZMd4pd+#H5ASY;>)&QHSvh6ln z>TIB(<>F=6@;K80cO~KpIM`ZA=wpqQq#D>TD$BNo3veXf@cVNabm}))A2U4fV1{&$w$$OBx=Bk9~@`|7u>Pex%!R8|sTl zrrTi2PYmHG=;g$Pi&b@A>5I)U$&Axdlm-oksMX+bu|8i+=xNJdNsiy+7MWd|I(3WDE$Xr~Xttr(KpUWUL#^n~R+B9!8n6hDi*5GNU zwf}}5d5s@ieWM$=e+&=?DO`M$Hv|WtM1-~d1Ra3yK1e(Rj~~JZ;o&8s8=l)ww3a*l zd4QM*SYC*jUGahMzXOG3E~lIPHj zzsM4+VeeVg7YPdoo^(6m|+#jIQR$)jDXTL{nINm$(BJTs( zb`#jQk?Y~E|DwBF=ShmwipVQ_J`@Nmf`bo{+hBGba;NtYmO}{pvps)aa6MJwkAe6J za`*#*_0Ie0b)4}cS^JP-YTpy&)OAceVHcU{DT+;PYLKD z_@4){J+RSBPr#Ke6a_C-$PwKE((zclMz5t?;! zgL|lVo7~QG)b0W9nK!6H2}bQGO^9Isg8NE{{)egmJH~oe1Y_YRBmA+x&il}xl3=@y zuKTGA0^Yim&mETiWNcA+i&m42Z;nuhp{1e@g<56UwE0m?L9=Lz<+?; zK6NvZqSkiv0R)6nD7;HgWmg7LugAIk!hH=yLD$tajI~Mi0IBJFAEQG4U3$|>A?hV^ z9I`2D8Buvk&^f8K5EEd1u=4%i*3CunB#tz`OvunM6)NC+#0s_k^4(qGfvekEll+pY|S1$r}30%8kH{*)eoI|Kv` zFD=lM@YVvoX$0B!wddTig$~#*UuZu;kH8rLF}Mnybd|DVY#H|6MGXMnk7#bVpV$DJ zZ}8W^t6!(b5$R5ZNoMUb;oge6OH1^GcSTS)2FI>Y8{ziHsR_uRM_uGU1PC$>lk{3R ze+uhri+_6?8izZ;+ZMWKWq?06W@;(9velm#%%CW!a6>BEb=8Nkn-7t_7}2(?;B5AI_^yZV@4k?7e`vj{lDaR_ zZVCLE)apJO(WiIYly(6YGigS%5{pW#aOEK^G?C;RQ^bmi9$~Bw3-ZKK0n78njIHp? z%2L5mNfa2ZVS4y#XHlxtVnok*aaO;KZmO0n;JGTqivgr+Ndqw87U$COqhCDOrb)ncOfo^?S&3rlX~}QVkdPVfyDphktrOOz6VC?x zeuSiP$etz?o)7XQExYPCVNhRAVxVb~5SVo^4vrL(hUZR@-2##-lDk=R1N(qv2B(+r zS6{qRz}rE3{*8ygZ4v>)J|13S?=4a*gqbwPiWGfa#3cML9uDJqipUzA?It7X5LZdE zATUHt;3}4ku(4fCgdO8zJdD2~@+G5(pwT1GpIjOZ_%+cCuI<#Uu9XyQ$fiSrYEvw# z-eN;%E)~k~aVL!~gF8>kcM?qmbm!VN+Ixy}L4e(lGeef=yMdF0a{@6mj zw&9GOwQ#L9)?_kYblAJNfc5IM6_J;)%Lx!%@E+RhSx&z?^`pk#`zik d%nG{Dy)H#NP0S4A6T|=mC6W$5{pOBce*vG(P~!jq diff --git a/bundle/package.json b/bundle/package.json index 83186be4..1e6bc5e9 100644 --- a/bundle/package.json +++ b/bundle/package.json @@ -54,7 +54,8 @@ "ts-patch": "^1.4.4", "tsconfig-paths": "^3.12.0", "typescript": "^4.2.3", - "typescript-json-schema": "0.50.1" + "typescript-json-schema": "0.50.1", + "@types/sharp": "^0.30.4" }, "dependencies": { "@aws-sdk/client-s3": "^3.36.1", @@ -110,6 +111,7 @@ "typescript": "^4.1.2", "typescript-cached-transpile": "^0.0.6", "typescript-json-schema": "^0.50.1", - "ws": "^7.4.2" + "ws": "^7.4.2", + "sharp": "^0.30.7" } -} +} \ No newline at end of file diff --git a/cdn/package.json b/cdn/package.json index c63713c0..ca1e6416 100644 --- a/cdn/package.json +++ b/cdn/package.json @@ -31,6 +31,7 @@ "@types/multer": "^1.4.7", "@types/node": "^14.17.0", "@types/node-fetch": "^2.5.7", + "@types/sharp": "^0.30.4", "@zerollup/ts-transform-paths": "^1.7.18", "ts-patch": "^1.4.4" }, @@ -55,6 +56,7 @@ "multer": "^1.4.2", "nanocolors": "^0.2.12", "node-fetch": "^2.6.2", + "sharp": "^0.30.7", "supertest": "^6.1.6", "typescript": "^4.1.2" }, diff --git a/cdn/src/routes/external.ts b/cdn/src/routes/external.ts index dc90e3c8..65b8bcb1 100644 --- a/cdn/src/routes/external.ts +++ b/cdn/src/routes/external.ts @@ -3,8 +3,9 @@ import fetch from "node-fetch"; import { HTTPError } from "lambert-server"; import { Snowflake } from "@fosscord/util"; import { storage } from "../util/Storage"; -import FileType from "file-type"; +import FileType, { stream } from "file-type"; import { Config } from "@fosscord/util"; +import sharp from "sharp"; // TODO: somehow handle the deletion of images posted to the /external route @@ -56,4 +57,39 @@ router.get("/:id", async (req: Request, res: Response) => { return res.send(file); }); +// this method is gross lol don't care +router.get("/resize/:url", async (req: Request, res: Response) => { + const url = decodeURIComponent(req.params.url); + const { width, height } = req.query; + if (!width || !height) throw new HTTPError("Must provide width and height"); + const w = parseInt(width as string); + const h = parseInt(height as string); + if (w < 1 || h < 1) throw new HTTPError("Width and height must be greater than 0"); + + const { resizeHeightMax, resizeWidthMax } = Config.get().cdn; + if (resizeHeightMax && resizeWidthMax && + (w > resizeWidthMax || h > resizeHeightMax)) + throw new HTTPError(`Width and height must not exceed ${resizeWidthMax}, ${resizeHeightMax}`); + + let buffer; + try { + const response = await fetch(url, DEFAULT_FETCH_OPTIONS); + buffer = await response.buffer(); + } + catch (e) { + throw new HTTPError("Couldn't fetch website"); + } + + const resizedBuffer = await sharp(buffer) + .resize(parseInt(width as string), parseInt(height as string), { + fit: "inside", + }) + .png() + .toBuffer(); + + res.setHeader("Content-Disposition", "attachment"); + res.setHeader("Content-Type", "image/png"); + return res.end(resizedBuffer); +}); + export default router; diff --git a/package-lock.json b/package-lock.json index 6bfe9d85589dcbb81c96bf380ce8f87ef7b05a81..9a887d0644b4194b91bb96891cb8e0c4efd18794 100644 GIT binary patch delta 10467 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 delta 957 zcmY+CZ){Ul7{+sZ@45G!o?GlfSqtr4*U|lN*AAi}!!YJVWD~Q24icUFQ?@}_=h`ZY z2w}z%z@>O3uQG94mKcMREbX>8GUA3PhD`&4WW;2qKulbaxn#iv{Gb~~qo3XnPu|~? zJkQhjhyUYGeFM+(L=*3p5?QA6jo|rFVl*0Q4!Rz5?oE6ji94aDT+S8Cj+cn3IETyM zs4UTXJZ^wvQ8{0XzqUjq-^_+PBP>mrZ7B)o`|f;*4Uy%d|D(U91H+_vL4sXh5SKUD zTpwr&2j=Onob^>tc#1rw!P;mz;M`p4tk}3^;gq!2);9$_MP6U7xN+DE+q-xaW~zw^ zCP#^V0VSLln23pGux?OQAe1Xp(cH^LY|JQPS5p(+=i3*-z9!Wt-spFVWV>4=W3Kk} zE0}&o`m-Bf2phhx6V;OrSW(O-ptHtcg4hiMhncTvDx|MvmvQ7LLu3v1*yU9Q^rg!_ z38!81SQdmf$#eKlg{MDY?$l(Kse!QLh$v~#Lw~bGE%PKOPk5ab2#@2>DF;#nDlD6XgVbd2!p2c1IFT+zy>_Elv2S3HwmnU1`}73Ww`MZ4HJ0RKBmk2pMMT#zG?< zwz5F0C$J|HXla1jYg#HKpCk$#D3>*uE~R$7l|jFh7KX4GDtvSi3`AuP&!^BlJ=9YF zpyL<)-j&dMQ?p`UCcWoSTBEyL7f?3nxkMS9&82x@%cK^Ve3Y90`?Uf}5=N`k2GU*4 z3eJ>y-_8?Udq9V+qr?HBQDTMCM(%*VF7Ae19~#Z@%xdQTcN7|ayN+fVVSl#15*%f8 zDb7Ak_dfLh2ys5by0_uz9>oMZ!-m^fbc-ITLTfQQ>IY_HW*D%`NjTC$7sF?Bk_iSK zvIQP~nW<3G#%A%Y2pe}v4WgvM3LTr|ixB#N5!`Wt9dx38mfhCz?nRcBhUQ<`thvK@ zpP})-F*OJ6nY@SMZ~>1~Y<`5#FQ)5pzJ3Efb%^&H(eWPNrlNF`o3nAlIKNKt%n$rb QK5o?XQWp;9>AzL}1^nAzr2qf` diff --git a/util/src/entities/Config.ts b/util/src/entities/Config.ts index 84bd367e..e545e36a 100644 --- a/util/src/entities/Config.ts +++ b/util/src/entities/Config.ts @@ -50,6 +50,8 @@ export interface ConfigValue { endpointClient: string | null; endpointPublic: string | null; endpointPrivate: string | null; + resizeHeightMax: number | null; + resizeWidthMax: number | null; }; api: { defaultVersion: string; @@ -218,6 +220,8 @@ export const DefaultConfigOptions: ConfigValue = { endpointClient: null, endpointPrivate: null, endpointPublic: null, + resizeHeightMax: 1000, + resizeWidthMax: 1000, }, api: { defaultVersion: "9", diff --git a/util/src/entities/Message.ts b/util/src/entities/Message.ts index 013e92a9..e18cf691 100644 --- a/util/src/entities/Message.ts +++ b/util/src/entities/Message.ts @@ -114,7 +114,7 @@ export class Message extends BaseClass { @ManyToOne(() => Application) application?: Application; - @Column({ nullable: true, type: "longtext" }) + @Column({ nullable: true }) content?: string; @Column()