From 8854aeca6957d215e63a9194dcab64ed66712f1d Mon Sep 17 00:00:00 2001 From: Darker-Ink Date: Tue, 10 Sep 2024 15:53:50 -0500 Subject: [PATCH 1/7] feat: oauth2 plus bots --- .gitignore | 2 + bun.lockb | Bin 313776 -> 264424 bytes lib/domain_checker.dll | Bin 4105547 -> 4104531 bytes lib/domain_checker.so | Bin 2771472 -> 2771200 bytes package.json | 13 +- patches/@types%2Famqplib@0.10.5.patch | 22 + src/Emails/ForgotPassword.tsx | 14 +- src/Emails/Image.tsx | 2 - src/Emails/RecentLogin.tsx | 147 ++ src/Emails/Registration.tsx | 24 +- src/ExampleRateLimit.ts | 43 + src/Middleware/BodyValidator.ts | 15 + src/Middleware/RateLimit.ts | 82 + src/Middleware/User.ts | 533 +++++-- src/Routes/auth/forgot.ts | 40 +- src/Routes/auth/login.ts | 28 +- src/Routes/auth/logout.ts | 9 +- src/Routes/auth/register.ts | 56 +- src/Routes/auth/reset.ts | 8 +- src/Routes/emails/see.ts | 83 +- src/Routes/index.ts | 43 +- src/Routes/oauth2/authorize.ts | 851 +++++++++++ src/Routes/oauth2/token/index.ts | 324 ++++ src/Routes/oauth2/token/revoke.ts | 169 +++ .../applications/[applicationId]/bot/index.ts | 197 +++ .../v1/applications/[applicationId]/index.ts | 144 ++ .../v1/applications/[applicationId]/reset.ts | 85 ++ src/Routes/v1/applications/index.ts | 232 +++ .../channels/[channelId]/ack/[messageId].ts | 9 +- .../v1/channels/[channelId]/attachments.ts | 415 +++++ src/Routes/v1/channels/[channelId]/index.ts | 5 - .../[channelId]/messages/[messageId]/index.ts | 17 +- .../messages/[messageId]/report.ts | 5 - .../v1/channels/[channelId]/messages/index.ts | 1335 +++++++++-------- src/Routes/v1/channels/[channelId]/typing.ts | 9 +- src/Routes/v1/guilds/[guildId]/bans/index.ts | 5 - src/Routes/v1/guilds/[guildId]/channels.ts | 413 +++-- src/Routes/v1/guilds/[guildId]/index.ts | 32 +- src/Routes/v1/guilds/[guildId]/invites/@me.ts | 12 - .../guilds/[guildId]/invites/[inviteCode].ts | 5 - .../v1/guilds/[guildId]/invites/index.ts | 13 +- src/Routes/v1/guilds/[guildId]/leave.ts | 9 +- .../[guildId]/members/[memberId]/ban.ts | 5 - .../[guildId]/members/[memberId]/index.ts | 9 +- .../[guildId]/members/[memberId]/kick.ts | 5 - .../members/[memberId]/roles/[roleId].ts | 87 +- .../members/[memberId]/roles/index.ts | 5 - .../v1/guilds/[guildId]/members/index.ts | 5 - src/Routes/v1/guilds/[guildId]/report.ts | 5 - .../[guildId]/{role => roles}/[roleId].ts | 25 +- .../guilds/[guildId]/{role => roles}/index.ts | 55 +- src/Routes/v1/guilds/index.ts | 376 ++--- src/Routes/v1/invites/[inviteCode].ts | 74 +- .../v1/users/@me/channels/[channelId].ts | 5 - src/Routes/v1/users/@me/channels/index.ts | 5 - src/Routes/v1/users/@me/index.ts | 104 +- src/Routes/v1/users/@me/invites.ts | 5 - src/Routes/v1/users/@me/platform-invites.ts | 17 +- .../@me/relationships/[relationshipId].ts | 9 +- .../v1/users/@me/relationships/index.ts | 13 +- src/Routes/v1/users/@me/sessions.ts | 90 +- src/Routes/v1/users/@me/settings.ts | 15 +- src/Routes/v1/users/@me/verify.ts | 165 ++ src/Routes/v1/users/[userId]/index.ts | 11 +- src/Routes/v1/users/[userId]/profile.ts | 9 +- src/Routes/v1/users/[userId]/report.ts | 5 - src/Routes/v1/webhooks/[token]/[id]/github.ts | 5 - src/Routes/v1/webhooks/[token]/[id]/index.ts | 5 - src/Types/ConfigTypes.ts | 96 -- src/Types/JsonSchemaType.ts | 22 + src/Types/Routes.ts | 29 +- src/Types/config.template.json | 127 +- src/Types/index.ts | 2 + src/Utils/Classes/API.ts | 456 ++++-- src/Utils/Classes/App.ts | 8 +- src/Utils/Classes/BitFields/Flags.ts | 4 + src/Utils/Classes/BitFields/Permissions.ts | 74 +- src/Utils/Classes/DB/Client.ts | 72 +- src/Utils/Classes/DB/Finder.ts | 8 + src/Utils/Classes/DB/Table.ts | 4 + src/Utils/Classes/DB/createTableTypes.ts | 10 + src/Utils/Classes/Encryption.ts | 25 + src/Utils/Classes/ErrorGen.ts | 58 +- src/Utils/Classes/IpUtils.ts | 3 +- src/Utils/Classes/Logger.ts | 190 +-- src/Utils/Classes/RateLimit.ts | 360 +++++ src/Utils/Classes/Ratelimiting.ts | 3 - src/Utils/Classes/Routing/Route.ts | 2 +- src/Utils/Classes/Shared/RabbitMQ.ts | 77 +- src/Utils/Cql | 2 +- src/Utils/EmbedChecker.ts | 5 +- src/Utils/S3Events/delete.ts | 114 ++ src/Utils/S3Events/put.ts | 155 ++ .../Versioning/v1/FixChannelPositions.ts | 50 +- src/Utils/Versioning/v1/PermissionCheck.ts | 62 + src/Utils/bigint.ts | 22 + src/Utils/safeBigInt.ts | 14 + src/Utils/safeParse.ts | 14 + src/configs/example.json | 96 +- src/rust/domain_checker/src/lib.rs | 1 - src/tableMigration.ts | 6 +- 101 files changed, 6661 insertions(+), 2074 deletions(-) create mode 100644 patches/@types%2Famqplib@0.10.5.patch delete mode 100644 src/Emails/Image.tsx create mode 100644 src/ExampleRateLimit.ts create mode 100644 src/Middleware/RateLimit.ts create mode 100644 src/Routes/oauth2/authorize.ts create mode 100644 src/Routes/oauth2/token/index.ts create mode 100644 src/Routes/oauth2/token/revoke.ts create mode 100644 src/Routes/v1/applications/[applicationId]/bot/index.ts create mode 100644 src/Routes/v1/applications/[applicationId]/index.ts create mode 100644 src/Routes/v1/applications/[applicationId]/reset.ts create mode 100644 src/Routes/v1/applications/index.ts create mode 100644 src/Routes/v1/channels/[channelId]/attachments.ts rename src/Routes/v1/guilds/[guildId]/{role => roles}/[roleId].ts (90%) rename src/Routes/v1/guilds/[guildId]/{role => roles}/index.ts (80%) create mode 100644 src/Routes/v1/users/@me/verify.ts delete mode 100644 src/Types/ConfigTypes.ts create mode 100644 src/Utils/Classes/RateLimit.ts delete mode 100644 src/Utils/Classes/Ratelimiting.ts create mode 100644 src/Utils/S3Events/delete.ts create mode 100644 src/Utils/S3Events/put.ts create mode 100644 src/Utils/bigint.ts create mode 100644 src/Utils/safeBigInt.ts create mode 100644 src/Utils/safeParse.ts diff --git a/.gitignore b/.gitignore index 83a0b2e4..f4879f11 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,5 @@ src/configs/* src/migrate.ts src/fixtest.ts + +RateLimits.ts diff --git a/bun.lockb b/bun.lockb index 372d836b8a0ac39cbb919c73a1bd3752dc7c49d0..b9c423f487d8c42b6055db751298c530c7f8c43d 100755 GIT binary patch literal 264424 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

`+izh^H%R__V#1xRZDs=a_{%9E1v9M1YI ze`tn@3za#Aa$}}Hl5|K0T#Na!W0qCi`IZ+`#X9=l``7lpx6wd$WcEyT+WW3=GI>iu z?mS?)Pe^3-amml8PV!w}|LR)MADQ%hM}JoH z@AoQw4dVAM|9D;UJtO+}*zG@g4fs7a&|jPB&!WF)PN6@G{+_+3zqaS|HbsZX;|v)$ zc>bJs>4k!fKk~dXeT)g`vueEgD zLYdXb^DZt1Lsc!cN5+gvN_Vo!r^Jy5^bJwLK`!!++Ugp{Qu`)PD1=0NQpw~UrHoyh z^A2>%_wMCf`EHT==tv(@lczx5_DONPvVGN2@{Ei+L6Ap4BvQ%gu35^Ba%-!k#&amH z2KOoI-Plick{ti1NA&FB>th{C3v(Zz>xR;fT7!tPe7tQ=iMnZj634| zJ06ui4sHmTD03t+4!#pYYT`RhebbyRHqC3jCZT?IBau2yI&JikeEsgoGcpnftt(7Z zJ@L_sinG(NZC+TBD1I;$iRf0KVV+rgDql{gNR-*F{+BPuX>oF7|NP_VC3g>M`JkJ= z2KryvtUF!RI^~5|<6Esu+0~-k5hM=imU(8+$-@^l<0%lOJoxDMXq})9lvaO*eA1E6 zv-N{UO-^>ZjFOMCDyTd|^|v$GcU*3|X3soLH+<)>)j+?to1#HxbeofA(#FW)o2zIx zptkj`qhC_}IQr$$*KPGob$@4b)B}(6wLZt``E*)|e9bgr@1;(4S_vi9j}!m9I5@lV z*L}9y>SJHI_exxMwfaOM3sL?Bn>lK~Gwp|%vDw?MQ@u**<5MG%Rv*)CscYSa?|Bx- z>~GnSNUQhg7rw9FqPAy{uuCqzWpO0wk^I(YhU+!=p68IzS1QlhMTCb$^0fK&!(Zy} zADroq{f%aolC|4Vw?F1JpECo3aMp5H~Z>? zmL1tWN5&GZ4{43W9?9+VMY>$AFhOng%F0##J)+b|;{PipW3j9B*XDm;M!xl$TgEdd z{e1q{zOY$hk?J9viVHpF-=g{& z=*LOm3k=%R&pPi6{l3;qRj=wct?ZN{dm?#u(%kdu%{rY+eNRafD392UKJgVAh{vxR zID13Q&_O)=6(fBWTF3t?T8zZOs{&2l;o;uVhIChYZ$IT*mO3@Zk$?7Hdga6AYn7ka zb3RXeDsf0H{`+Pz+RK;m{f*R=9nJXPOH=Zpwsle?A0IbfR^%`1-OshUcpVO1|;wkUWrvPN2qznLOf2?s|RHn$toI`(QZsRil!F+zfIlrif(sY!njeRTh$ zj6FSKwVFdWM;ugqG|s=jpuJtF|J-`%6{_84RIk6W=gfjUFD9)~Mzi`z>`CqE-Aiuu z19mV1nr$7wPTO*=%tQS-iUu>>eH*XZ(@11;;U}8`vq7eZ#7A=39d~? zcFeTWB1!a%x|Yct=u@Q~rnN})HTa%;zD&B zx+9UjZ`-XUU;ES;aK<7Tha@MGeEU;oU0yzBG7@?N>9Bu6k`GDP$VTqZYP}t2i8FMy zy1V}_^3j=%Zj%PfbJ0o^!yF{yRi}EDsqtX6bGYU^F8r(PNTffgIQ(Vst_@pd+?Lg@ zGf!C~ku~7{w-Y}(^^6WiA}eGhI`4{*nkgVKn6IQ8{2C9blc!NM?`M&kGRh=q9c9eY zf4@Y>tLPI?u2JXyn_X`&7`WwXd96II@)StI|MpFp-}(32zI`v0)XHE3%CmQ^YSFXh z1Kg5!eM4`l)F~QVMk1}=?&kP{d7WDF#HUhH;^^!4Z9ddo8Ko;Ud}|%8JoJ{|`i|Tk zQ(VX3yI!?HzOGBQjW|B;i$(IShgc-v=3{TulT_>|hkicaliK&hd7#_2^(FeP{-4{n zH9ttOe#8%?Z70~Wl(&}jd!$brRDb(qJLu)G`5k%xhm?5apSf7P+BWC&Z6Bg~qG<4K zAA&^d5YlZ_p9OXDXwr7}bw_rXxZ|p{MmHpR@rQ9|&IdR18T87MS_@6G_GxH_PY?Sy zQsOARaugEjk@mbBwY*r#D@hfJGDDfFNdhkR$XMAo+e=H26yHP4<=IA@{G_({OZht^ z<`{UR3f+{{ZXhXuq(rLe`zDR8%dV7Jl5~^$WcKC@kCR>MF=M|-T$Me$5}M>%uX|0C zO+ME_iKFylO*M%_v4Da(a^$A3GRKM5B!_Q1l-p4ET6QIlQqq~4WOQ%SxsX+vJ6R-q z&2jE``rQ9U4!$~!ZpwRL4>d{7q8m=-NHJQ`%}tr1q}|N7t0+&Aq>Uad&DWLP6?1vY zASsH(epK$;*=NmU9~Rw|?K~eOg^|?He=1Qq$CoSRok-dL<9)MV{(i(zYFkkuL0ch70K zblFyEa&N7w^da)k_I+1A@$L4HN5Caj)VXE+FGa?;TaNAO2>938O`J4-KGe42z54m+ z$BA!)e~$0`cji-cr#ib`+{R;Y+S^OnCznk_{z>THsRjLSo9Ne%ek-|%23hEpS1cU< zxqZv|vTLYx<<7sOL4vkc#)Sm^K#_cpZnJl(ZDHf{wRv-$9#L2McZT@#i_7omrf;42 zTAN#AeBI2ekN9>o$I%~U610KRe&TEJ-`y7Cm()Bbk8e?R{^s;M{iwbt?%1R5Ic!cn zwMfeYH>%4zSoyfI;UE%O9fmduo*NU~>a}t{m+DYsa6}rvqi? zaDX_X^`1eee{J*XIP*92PS#mXQulcFcWDkX+ zK1Y%kNqDuxu?CY@Pi4$f+FTT$os=7nZs$i{d2_0kJTs^5MSp7@C62P9OL$Js;xK_( z+R^>$j9dTv6#Cz^a6X{kS?yo^@%r3F9T;gD(3P5t|Ky1IoAdGChA>NNR8dF5IA5$5 zN5I&5VpYlCzja=g@>E4)kKO+M-Exr()g*ua&bLSsep_E83BN1Pjbfd5<>lW{b|N3C zxxat!T~hPVB!B;QyGZtElD~h0TqHW*3t%is_}zbbQ(fo1chpWzKIuvHoA>ycu6NfY zfBzP}lt<@{c;fgFCj+Vd{X6-;^R7Gv()lg{sU`gV0}871{R5&T@Q#hycl7=3&%C?* zk5kjn=g+)f|9{CRp{Kc(j^cN$lh6}uYMejw?AQFm>|Im;-xEjQZdQqtA@MQwc?yqe zTWYi$wb0YnmXCrP`LvB8kniOC@%8o!6K~xoYrXQKG}bckP|Z=k{O;}QSL z$y}1LSA#^^rfxuLcGT0R-#W+ST+?+t66r^2+rJ`_zUo32SLYPTN7hzG3}rXsDiY~O zH+v2}ZgQ)USd$P(XBU()%g-3XKTE*Z1sla=|JXXfqb%`{dB2x%eA5bpI;E&?2oJS#FT0Bj%ZW0X&OZXW!%oLNwVd+^uA%vR#F~j zViKn?66xO#gyczc;?%meNZ9SwO-+gO{G>Y8pPATjMdo+aiW5g0Pvg%I_}5hFb-0J@ z7hIx8V3=XYyr%nGFR56JI7}{O+k<~LsgqoB;#^?VT<@ui6%7=vjX}|-KyEcvpLO%y zm5LVz@b7R`%#Ci2E;!#Fs^Ur&7TjIXwLkA>*WE2`ADSZGHsc5$!qe&K=P4) zQf?$iHC8_jNz|Z|b&frhKbkP0Uc`jOshvbH7>k zY+z+4$w$e?pnq>FzTIN@x+PnUu6?kK+-I75cvAGt&L`12hJPeP?lZ-YW1ey8OUj&6 z?_<2Wp4YzX%h~ppS(<(veMz44>ONnS)5~@)dG$P%l$1>ZZ2c68_-Kt+c59a&+|K+> zB+P6KHW$?Td2{mrHFxe|wk1_zZzG}%elW-gOc1?%phTJ7_s)IIy<}!=5Fw5Upok-& z!0yw#yU*?Ox@VtryL-e4NJKsrOhiBv6+zJeA7~Om@#7JJpg24R@eyGNAOkwXLkB?( ziutWowX16HvrpANJ^qn-^r@;{Yt^c%RjXF5s#^7ohrHnVYY+1<_px7|@Xl*r^vXMb zj-4Ta5k`2h{qlc4|7+iHk9$3UyKv^q)oWMtMf&v3pFDPL`Iu)|3Zxv~eeS_JYd`el zCqL*JfAiB=0M$nnbNwODAC!D~;T<1))iuxhjGkRF9>sfu{v2_z_JD^yH~+xPPCmiI zEcZt|hk|=U!Rz|3{-c}k`(}|YA}P*rgU{0T@ms&^o&8Tg=xO>zB}MD&D@nQc4Pn5Uw`Bf@}`pIWLPJC;@?;?>}-YSzb7<_4cPh4TX8Ep3j+vG{_{k~7$IQ?O; zSqfTSF|$&vHn|Mhu-tY7k^9k+H6f*-pi3$2HKX7pC9Rw6ZA&%LGxOw~8TVM40@A}bC7>UH&o6J9U zEWGLckACgO>5mEp(x*^8EXMo7i7)xLcRsxT^H<7gVeytmcbAhve}-&)``Pt>@%bPB z)z|oPTHd~~T-EY=i1m)w@_LAE(ffYHaMky}7@`oPAZUr-j_G!zzB9;$Y-W9Pu z*Yd6ixTL1<{HVFtcJn`e=FBghznz`@N>=?jUmgJO{QNt<=~uty`8VHIeL1oAMZP?c zFKa*fg}43cqrUj3=8F)wTp}&!ko$ei%%^Yp;g|lyM<4kVb~t#oNNIa8Uu1Xr8Snn5 z;jxE237?5p83a@|HePQ{Os2&4ET6y z0{?T;+t2?me|+QJzW1v|?jTyk;M?Th%iX%ZNwv(*y5+j|(_p#`+N#rZ@`Wjre_G$V z&{4Adt&4a5xxu!3=IO6Ie$}T%cR@=Ns&CWe!R1x|(zXF#niR-+zSC^w zpILjt$IXm!!*Bl6M?U=hA3;A*&&$9R)2W`OfqB8* z4Yr#;_zjoe+{+FXM!gRIEak{KkuQv1{G2N;d*ws;B4;O&mfv)nnE~H&@nIkQ)DPcq zg;JpJ2()krXLv}SCTx@-08e33rA<@;XszVG;(Ut}!E>~o4fUH|hKf9!94Le2^CUV`*?%X=(#)GvD2 zw9d36a;NDXoO0|-)-Bc|SxG>3%Zoi$THfP!Q=g|k@SU$eIP<03!6wrJR4;$a=h1f< z8`ndB{i$#H?l*nneZW|4@F{$`53Td;58qKd{twTKmS(@~*)PBFg1)**MRM}|Hmf>_kR2T{ZS9|ZoWt_{K<9KKJ|X@zW#TsFDKSM!WWUF*IoAXk9^|K zzCw1??!p|roVGW8%5ccdZ~NFUef$qz^Fhk7?=!vIetFlQ{KQwj^wbZ&S-)s6+-kqP zVsgbhFFo(aPx>#PwqMRZ>DBLj-AC^)Ye4HU^dI>mE&3zRe)7gupT0xtWBsWvr|k`& zG5gNXd)K%8>)-v-bIeT|oqzs_FEY=4_VWMzk`Ej_OK7v4__)s+c`$kLz5n8?2hV*K zUu1U-x$}K|`D$QJfBF|6d5@pI{RX}WhafGFqEq}b*hH)Oshe)U`_rEP`7ig_&is{; z6wlgx!*|~Bm9P5uN`cM`_Lk4u*%#dF*8gzZ1MlEo4tYg-ecfLh+HU)UXTIor^56K7 z$F|ECnM+>xhA&<7%OCjLe^6{nHLn(BoaCMS&e^Bm@wLz0c{^XMKH4v{@#clKwa35d z*Is!2Uw+5OJhtU+-MU|*`}NCVTI8se%Uy&i}21Hf3A4IV_$UPZT`zo z@I|zmC%tgvIj_CpWAX;9rTX&seYvO!Ykzf%`MvDga@t$(kIEU2iq}ost$#cA{OKqk zJW-yM+`0bP)n|{D{hNyM_EpEu9m{z^d^Fy^Y*zLZ(_6oI#ji|X^ix-C_D9Dh?cN`L z#kHS#(8V{-N*=DjU-A$9;jw3b_x5-G-JjphaK>}bow@nT4(|1(S>7M)^OoadpZfl9 z`pm;441+itlNDFXz2!UKVSwf5+sW z|M}m2?et1C1_yqCGiNE9g)1UaQmmcva z_c<`%U;5(z^b?Pt{m0*Y5OL{&@%djEyz;8@XHF59nfki#`o`_2JpV)gZG-sziGTi% z+h29Vnddy9xfgLG-@lgcH(&X==e^}iYmd3h?Q>V#_b$R8d%xk3AN)N!f`2Z%c76_4 zaGY?p;{^S@wz1hC4~q-sasA!sjfcEHD36XEXVqVejz`=5oh%>i%m?{&LpQ>X=fjJv zdN!-rw71)bcWjgw{z@Cvmm-Uc^L$_vMm%9Rgq2+8{c>|YGTUp4x;O1lW*f$y1$Bzc z#SDvPJkSlJZ|vpetQhb>{qY`880Vv{X`XFOl@Rl3FgPyP3pdmroN2ir98Op_k7i{p zdCHC$G?jdq9v+9J3*~rJ_I3gCB#$S>D4+BVwE@zyKb#DTY^Oiloy{iYBaR=R7CWpj zr-$pK2~JMe$J3qT#<+Ssvw@6_%JZBUn(f>a0rHpu^pOl@SF|R8H}>|+K8D@n+cYZL zI>nYQ4Kd9+x5#*;9c{kYij<@_SqjnLOs2@w3EGAw*@tB&=FyXhyh|wpMU%)(6zQwG zA`Gext{~>oz|hB$T*blqg)-6tL5G4Vh-nR#ppDIZvltv#-|5qhX};Az$mV@`Y9K7{ z;s%yfn6vEjo>ueIWIP$mcxgbCgYm4HHXHBk2ybyuce40xJec(-8|8ja21;Sam=+&~ zGhD6PxP68wpU=j;47}YxD5hGcY(F3Di4b5I;V@pGAIy4Y=#z1VJN8EEY(Cu_Z%=a$ zM`y$FtUn$N#yeSgINTf$N^D7m8792SJ7f;JsmR2Nq&sJsX&*D>gfH{nOh_!py}e?# z-XFU_M%T$u9nYt|A{*ut9>-+r>+Q{^ISHm8s+lQ+lAWT8@j``};*89Q^t%^3bi0pa zqSTxfHbl^gP>gd=P_Ce{vn5n8R;!`PoIUOxzc}yr_OiirzSZA49M6YEKH5f-Wpc|$ z{+DV|=|O*B+JD&ZF^uzBZx`jNps84{?oRr>v0*#=I9-Me8c%0c>_SurgwO}+ug#dp%q9%*Dx-ji;?G*b3vU#T% zNuN%T3zkfbW^8oC1@ELkmF+Tc z*bpL7uCm9WhBpB)ya|CJc0TfQCsK4}5yH0fn5j_6X1m3xzkQg&5wTkNTv8byL$-;5 zj{?{L(#@`8*B(2a#uQ+oOOir1pdQE|M)_hOi8n^A!ob(!G-q1KFK`7|7Sfr1~MIPToIxvv^HGPFGSJ`AMW-CTNe;D<)p~>)M6|{&@A_k zJ@c8z^upyy4XIIAjpSu-KAj#$3J!8neh`!CN;s2xVC*EKm`UPaWJT7)b3hS6EEG;) zF0fX?Oz29@;tsd8ZBLgVt$Nsu+OWQF|Z*8_D*3z*3sN zVY1soiy1T1MM_u#L19b2pmB)Uh_g^Y5}1ORvQY{;=$)#`Oke5BL7`PU5yb;VH&(q` zK9JSoe&Czr5$a~7seC4fNFYSECIzA6K|o!Y#z>Dw&v$_O2)vwz_1p%mk9Y=-)HcR? zqP(gsC{QhPPK}I|<09As7J!r>hD4VghXgy-iV+001jL$%@Hmd;OvNq$^@&3_=Wb|d zCNVIq(t$>eW?oM6eZzv4icG3zL2*C_F_m{JBFf!j6B`QyM%Q4X za%cOy{od}ns58fXJko`lp91t(hfb>7&`S>rAoN!uQdMctDUDI5++(Req{MG6Uw}~I zIteq?qxOnJfUBVI>qvvS1uuXu+(|WEvW@{yu&ROUMa_n9!|Y`-%hZ=aEm4=avci=) zp%;EKYhAlgid1GP3`Es%C|MlqYtUuy8E5QUbu7iK%N@~_(?~(^qUWDUjNFj$fC$h9 zu}=LNVsgzaWK~VBGlAAz29-r0sjbZskb+p{q=?jr*;kA%7(ce=gF^XE)wps#k(GGK z!mm){gBV3vw(K$U5AvNzX$eTFNF29nwW$&8DFvaAC~V3eS+6tj^#sPgJbjhuZ{r>e zU=#2HV|za8i6JSYb7Hp2T0Zd9;=YR`Exp9{Aq_GvXJWN!SVhc)teh++Wh|=nZVwYd zq>y?>aMu&G!5uGBCWq=G*h~hnm_RqVXe(n3K0)nFLMJW5Hb?+`jzN7YWk9Lf>;SIC zebpls_9iYV+u6GmR(V|KMa=X4t@Zd)W2BkDVgfWBkIyHVwBm!nd=@l8kjiwCUP&J2 z!vWy(1G}ef>(2NGkPENW<*Y?LGjo_osMLYkLm?ipVS-t$j4iEd`M_0+>zGZA^QsAr zWilYgBxFnsRza?EUdjja%B+i77%NP|>ftki-bXx-MEPr56$Y`xNuMO;rX5TnkwK-x zWLi6|?grLe&;+qg{am-JgP@+!35T~V1MefsD=O+_)TIn9E|0WDm0ue)#UE~;Vg#B^d(R*01BHcfzaVVFn`0*Y!YOD5U6*)G>v0?)#@Y<5L3>qgQ^ z(3$`ZDb{LmMqmQ!8+CC@@d$L2IH^*(E@VnC8hta&Q});^>Bn|Nq(v^;mbnO$tL=tC zgotS|FA;_S*$`l919A&lhI&h*a)L^eDI5LtHhUgLY}X^qCbR@l+8D~w+!A7@P??2! zBi5OXoM3FEDAJTVQ>!K1WUEMs`pLzeICpFfE&;(`=?OSAk=tzy3XqE^p{Y^9F5zCE zW9&dyLB@m}kD^QlD`F&{vMI%8Y=jlIOXI~+t7(GN(=KKsa54qUJs{w!Af=~SuTB`y z^#tXiO6L>ukurtuD#SDxTUDPIybEcdPEXa9Yf}(ZL8_JRNHzilWV)ksNUG~L8vDb5 zy1il$q{*yyoy|@-;PnJwReO$sp~X>}*d$xe2u2ISgvJSNT?UJlW>m0S$_{cGVM}ho zx`;zILef%q;V=Nm7SaTj-Qbh${cM}(V1toBSrjRpe^4R+f)(tt7Yz_~!O3Z+y7 zHR}bUW)k|BoiY3uLpIL;h2AM=`WQu7S;l7a#mtnon220T?^o^1LSes@4Vg+Io^Nxi zO>8Rj*>-j=V*$p*7q!SVYg4Pb?H3WW>49!p0R+CU9ap(x{I`57pTJX*zFx>%!)@Vd zDxohfhFtNr>PeUCVE}s)%s3gh5z&<+w8<$u@T4de83~tt9pQv8DA{m|GDvce?sCXX&0uUWNeC#*x_Y!sjx|QAjCpr=+?Uzh zhO~!MTW%U(gQvd zxO{|uPd8QNxE#nTsM08P{Hj0N=7PqqtS76WHe2eXVZa!G1~G+B$%M9JxS(lER@tQZ z>=3rjZ({8@C=bBa;|FTevuPc1MF-;*;IvF#vOkd$NaJZvN&H2A*>wh|s4~v)mE);| zO3tOC&6f;09muHWTrD6rA7SN0irT%n=&Abso*uiPBpcH1Nl7k_>*w=<&QVoR;Zn@h z!*z%XN%`#r5ggfu#vq1z+R1jf&={a;Ya<3x8lT?l0)hT21u6sFrl%h7i7;M0BZ%q= zvS>|Cm(^WhpsOI1r1jG}o0wJz_(pppH7rB6lV%9GkYOmtaN?7tXJ89$xY@4?*pNoK zVdqD=JkpZ&j9{xLc#IJo!66wC1TmmxH65=D94xj8AZ>_onw}HTjQYK7djwb&^a3nG z>!$3^Z4Nxwi}fn!<_1R)2@WHmjhx_Vq)=TszeIJ-fvu-=z61FY(=qEAL0M0Lnd~~a z%(sioJjD_rF~}vjJd9eEQqstvm-f*G7ckZmV$^P~WJHSY7e#T+nbSbq5VWUf1czBl zRXv|lfD{&>9rd8M?1zl7?L`Wg&tQSmPMkP#^_gqV zV_fggvAW>bgX7@bK;Xn?w#^w?PNQx?$-#!A;Mz@wrIlNeoaY&yJ-v{65T&~&m4Xj&dWjb3s~9!B)Og)LQb8uB@D|;J&(wI>F0cI`=F=d}yDS7|fUu=?ax(VG6Ny2B!^CmtOooU(wC zw4))kb%e)iIDPV6LEEI%U_An@c1Y2nmP((nDt+PTtRpkjd7%*DN;FN3+q#K0> zF=j%q7W``9OV!$pJzv|)V$;5uJnWw!fexcmhopV`te|Id(q+FCY*YxF)w8kfMKs7U` zuDEqPAMNB5871=`l|!S^b)&fSV{?pTxzA#Xw=|bM6ayQ+)aSZ6TYa3iF7?!fzv6E$ zU&{r0b8ZW9GT{P!G3^iMQ~qN;wJRKfF^eU2+26wb0Ea!gUVz8Zwj;Dws+~70OLp}m0rPqbNC}4dA*z?9z zhdFUD$1Ff+=2Vmm*5xj{qPzX$`{U_WCMGf6P1MV*+HwQgSVws-uox}(8_>*3@y#UU zPWo;trOC2Lejqx%wd#qL#*%$drCecC3t8V5!1@S-EUo)5Z9P!AmQ+kB8<}!uUo8DL z1nud2Kn)fHx{*TJc26|YYa!EuB8)P%re}#xBLl>p@hWPMQrXhT%dTD5RWz_zK%WtGjw ziAaQuAQ$+87)+A3lm*2B9mMq1UsAMW20{w9L0^*?&8+6x*Ee7i@;0o)G42mCJrx!~ z5aa?$5L5n2k=>jdLD5X|r}4QaGD{wP_L&5igP>aJ$&49!nr{PV0y@4@48(*lDy#g^ z&2}$Y#ZS`y6yyR!5YvKF!a?eWy9!%NLR!W1i8Vz-HxXz~L~?JVm}KgZ2rTIXTt%ts z8PGPQ;w&YKiV|kh9dH{$C|Lg&7+|M4H)6|}((5y6!4*U&p;VO2w<5?)fXkaW8j`ls zC&t8h72)v~9ZxY~&6s7O=11d+iy+WOu(=Y!;lf%8u;@`uO2+AB-j?1Syf5?MS^v36x0I>c%h+W~3GO$jZjIw7Sd!;lWpgi+wF0FtFK0^9UI z6psg&IQ5DfqDU)**+3jdJ4vEinINdeJ?r&2BO}4CDsV0e2)}x(;jKlto?ky128?}uc)?B&9ltcTF`;;N+_i-l4>9ouEq=-u-I>>n?a2L52L_K7s;sdbv<+TjCw7evId8Bdb{Fd7r((+kl4B&;Cv2y?L=;a zWi?z|F;@od0FcxE!7OTZUB$5+VT=$41!RrpDKsZAi|E7g>7TUJbBIQZ?1OBo5{l z8vx_>4mmi3g};%qpO?do=T2MG%?LK8X=_OlWC$?z{SQy!#N2qXWv8A+^{(+f zYmFm#thOe$0bcZ`dUFS6G)E`YJfsC=vdy1uvW&)4x<0CfpZA=(L#|76!(dd5v%EYU z^^CnNQ=0;LAtbAs)z}91#pmq=pTt$NajF!P`i-1HPgz)a(B3tQFpw));432Fz4ShK zy-@(KCm>qVHrdv;099+c?k^xKVV(LU}vpaw;x<|czL z4F0yRy=%VaoP+wn&6T};5JA3}nSvG*X(WnO`-nY)Ew((LuTu$i%yL{LWoit{0yv0? z87es+IIRd+7lvh+Yg79)?Je7^fH<{?Yg%ocE?8Q4LHAx&=rLRJ6v5^p&fg>L8sq|F z5Tk}^6)+s=LXg>6F}6f!#I)x|5KYGfUd<=rAkp8oq)g?{SJ-ky*K9~#yW^`tQ#3P;Y?xeezr* z5jPO$y4OZ>(?0SO(BB>2kN^e~2ykp1%;r5t>?r2z)n^hEj|a8 z=7?1*%m*#uJ*||CX^>-kyVjjxY)cNBD@I#gy>D`p$L$#GNO)N`fJ%-Br5M?`|BKDO z?M-6gJi#_$d4bzV{F#~=w_rak7d^Inb1g*y8B4zf6m>7jt+K%E!U3lCMlmX7 z`!~f>vTS83*2tls@Hy3%%)#u%WO=Squi~y$AqQpZC*TAg*d3f=9_e+wdV{3>`&mKNbW8`Nlnub zgOpxCuH}t2Uqz1K^w{)#Nk>}=w}O{B`oc?Bd?jPaR1}nMP^oXP)8;~rAx|&sXwU-4 z$|B`33@^X}0$LkVt5iziXchptD@^Q#atW?eojlE;@DXti%r)bbGUlGX6Y@F04TGS! zo=`CR4Ig*%up>|8nU<*@%d4*L%2v2b^SjV`Pu8WItuC_aP284by@~76{l>VtZ|gp| zEi=JW*X_&S$!jK|!omF|Nk$iNtzSApm9cuq+W%LbZt57$RS4L|{6P91>v?}#3AYEu* zJGfRxY3ivI!RqzeSE(x_wQK}@h0v$0g3QR}YPU`HQBrmjJHAzFY1ta;v<1`hpe-0U z3MjT_xtC$CH}1}GLXVwVF2Hd{aA;&f4RYiHaKtrrj(>HwDeR_$#AvK>nOED$7uxx#%L2IoExayn&mM&9o z&MJ3lu|6tHXx|D&HDSz1V?-KSI+GRjNPMqb_qdVV9wk6N0&LndXgG+04x@S?Q^gF= zSq~WdDA4w7sbn*&$dhsrMy;S&yLs%yZjZ3KbU7lFJG{b%rU;QxY0I}3KCllpv6>|) zfYy>aDe$ci^UPw0#(gGfH3tEjv_XrFVVNQ1hx}=`)In?5Mz*b|kL0Q1PxDa=IRq}U zo)~+CTX7e?a%w`(NPw~mGOW@DLy+qp0dQ4Nb@h~$#uH^AErnPq(|a+%2Guk0L4w+e zJCq-An86VwcmW&XILEF6Ua_v)!BfLKHV8nrI5N6%a&59jRM|)6!RRAkg1Pl_O)dN8 zcL_VGw4>E3#N4zl} zB<$kpY9Rr`Q$4MYM8-w!dw*EZ4}EpIhxv4GYrJ2lkhA5N`o(??69++R@yZ4il3ckp zuVoZb6uJ8q+qRRtw()~3Za{@1V=8COa4lk=Gr;hGpWM?hGF60*|x zl7_JDv3f^{paocd6nG`+!1~6>ZZNoT*A5AUI~(Lo3yMSniXnA#x;6%6M~*d$%r}a~ z#SAei8($y*s7E!URhV>oQ$#6qqjfq9pbd$VoYwbhRoT=@78E96DxeFoD3=ATDf70# z^P|w|@l_uiv+;N^>)XdsFb3PWGN#oMDgdg9j{+RdF0wiH%mb$IDyL~;d`AuYWvQNY z2Kk{(`t=NbCi!~GWIW-p?qce6mNU6G@^a*@;GFbg`Vun5eWEb#bUYYX_dXoPY=U#8 ze9pS^Fx%~KahN#T4|ReXko1aaheo?RJpcySY67I@U^#vL*D*bOHygoBv13x zYMUGc6xq2#t2IIEGz2((=__DIlTapcSgQn&t*tJwt9W}Vc+H^~*Wl_bAeE`Xx^fr3 zcmh_b4ql~lnTQQ%$(ycto{}~0$_%9=Ex;rL4@~wH-GHuFK4SC;Y1-GtSch^!zKRAO*8#>NnpY-`j2)UMDKdu4>s zUnauzIk;L`QaIGv?K=C;Oswn%&+C&PW=wLa=_o9^Fj@N6Z%(6%-!x!@3}I{Q&Vxgl zvbJ5J4vWB!gvC$Y*vgUTCM!_7@R8bSHs0C61@_K#JP(x?pSZkrcm$3?Du*{5U8c*X z<4ba?WqaJ4m(6dcycL?!0Jx^J^d3b-hh#Z?VdC7MHTpHtTOG z4x0o#=~Kb2jq5t9(dcxQojrC6X$6)T{SnVb_483o6?A#P>%xjFwVrdu0O`WY(C__krb$`sdib!Bsyw<$*HWX$`KTKDX9x4)NqYe_ zsVUMd%Rnf8*(a^G;s52Fx7Z?JTufA4DaF_}ZLO+cYfA>7^%oeabGxVjWBUiCQM;Kp zK2&)KMOZek<(=*w2e_GBcyw93cytnEcUzi8WG{GHii4fnG9U|J2 z5u@o#ZwvI87OB%nv&cyfsuiKEUQa<&tGF^p3Wsks;C-YMta%0iI1_-Wcq7Q%?2l0G zG*JLuSlPg^6tBhL)G_VYv7z7!`EuvYtGv*Y))VOsF0TP>0@OQwC8wrm16qsg$&S?O zJJi}i5Jr`PRIfD_0fK_<6wWKYA?LH~1@@DQAw`Ee`T$aY)%Qkf zD9hbY0Q8EeT;5M$DAN{h$Iz#%*+Mq^m~t#X*ri0z;&oi#Lk_Lo*5Tt(7e@xR%zVLfBSE(=Z8US$xzy zec*JVnQg<+;G%IND^m={qt$zTE-L_71!1#v$@0V&#|;Fo3hId|9TF}@w|rPtZ(*&@ z#FfhoI~V=TI{PMkBAZa8wS6Ya@ew_Xt|iI*!ZtEGH6GSr)D()JBX={q~Esm$bwqp7T- zct|O>8Mu%a%nNCqDoy1Io=|Rv)p+W6k z1l@8~8%m#7B9zZFdC9cTBnDr_1{+mCmRC>LQb;{PMQy6nf`?}XLG2mZw4iPy7&L9k zomi+}s!<3OHl(ec8s=dW0vbjYJ~iaMyad`u^c=q~@^n7h?r)DHlF#sy8uwK69*F93 z1|g63!pu9zsR&&fLEtk%g^zUNH%B0#E)1mj5ld)Kr$x2cJe`yKEK__uw{USa%K#Qe zfwxPTNFBu_JQQDL0J|{b(mE=MK<2}XEDJV)vmu!RtTf-qdvmaj=W;`ChS#=Peqbg3 zkaG=U7Avpj(a-Cz6B^IYr`DVtDbD4gKo_QpkgD7m=u%wMoAP)Kd+Qj=n9?FxYx%VO z0ywaz7fbbWK~YbD=hAoS8lp()sLk5il}QJNbzuXRdV=krl>Av7@zMw>sAlg{dNZk0 zbGC7g;HtPtDv=yQTxOB?6`?>5_41cJ54>Y4pH$yOCRJhC@TkJ7U{?`UCGj{8{0V?}xgYiyTxmZBe&PA|I>JD0SSV!udT#I|ymWP_d8 zT1v5Bg1T5G)P9K7%xE|scZEwI%T?=K47w)47vz;r>2e~W*7{X0>>akrwY! zQT5vJ%j(4U=F#z^Y_^~$Rj{utbKqq?wizh9U~fqc#OTp!pQ!VM#*{q~Ukaz~aXmXK zQOXSi@NvTR>R6Grj1X@@bhjX7jdrCNxN{h=bsPu|@eIXj>`2i;E?cgJp|R2rF#v5y zSCTd8jjtTxn(c@^Sa&mAOuT95E+!A*xCkcdV#+H{F?uVcRbHXGnI;`=^o$6m171y$ z1El(kB}C5q#7CtoM~Du~l{jUly|p+D+6W;EO;8*uMDh9igZ!UNrLefNMWJdK;4+a zl+U3sm>oX@+>Dx+7>%Q^q_+bo>NZS_?eujS-Eb2BPZ_39y`0@h(T+(ru_3MUoV46` zQ+f)iV{+axsAb?egQ`j8;(TB0hM2F6q#{wLX{jTTl?bXl9Z|6=sI}td-W94fv|gaV zQUwi`m3nN6>!g+HgTX>vPeF(c89Gu!y4FccJm#e7s9y_e^O$27a7(=6nEQe5qM)o@ zPh_0mS$-b6dDThIaA3?(*E_U<;g~QHQDtd}Vhx<5Fas{Qn(5#@D8SI_pk*a)x0m}> zQIRpX5_2})J*@=X^x3o;aKq0~@~}~j4V#XJR9biKwWdp(mFTYfA6p5u?jCC;&|TSs zvL3FIfO{Ani@{)^25aE-^ouAV+DaSlvno2Hs8Tc^ZS{Miv6}!#33%#GwV91-X}mcv zH^+yuwy);|nE_$iN)NZdn1Fc^^Cu+OQx_Z6H(BZ7fU@ij=2Uzt??q)IV9bHzbuKOB z^TCXit-Rb_mmP6?f65><_i#+u+yg9UpyNt6Pt>{V(UA(aWv7;H$(`yPk^-JE>W{`n z=n1Rk;7u(NacTW^v7x}Sn5gG>QjvGO(DEBcLU}2oD zNUyUzE;cLVysP{u7o_-DSD>xOw$rYtXR!y(v++41|a)(=8*mV zw2wTC^xQ&Ttx^L%<2q9M$j?TD48e&rm4kwpErz4hlO!v@d!1Ca+;dj>2HRWM&2D@*vQd+ zxxb6#=H{3?zhzwijHibtzfrtW=>7ZSAymd~vh*Z+c=b6sKPW$XQa$DOw>o*{2vsK5 z1ErZuQ%xi#k{T@lo<<5-(&CA}#Z{j6@w|_SNsDwIXzuC7Ci(RcdY3}aQ18ysn{oKF z!y=#@O@{I~vmPIlqoxzOi*&Y>_r()xq-$DoLuX5BC+(F7BADSt*|Q;kxgkQs5T&4( zZA%YVLAAW5=Jl}Fz=ly>X{6wFT4TWhY!&QOuDkjHpbK|upIWB@U5hJcr)c&J0Jx8M z4vDn$fODX1`wqkdwf=VMf^>0$ZaFcX+AOTM zNJdb~&k|`n8&B{+aH$yVaK(6YZTO zX*B_0(u=ZTp|05F$9TO-$w8LXIz#9$+?HPbhpq0~6e?ZVa9xVw5oBALy7RLkz2&D+ z^HHBQz$hE$J5jeDwR})ei|ZmTMTCln;(#ueSu%)q;y*6k%2tqo0UgAsO1i7yMunGx zZLpJ6CA0WCHeeF!#7u|d9)9pyuxx7jC2to*-zJ0=nX(#d4mMaTbsXcY;TF5a5uY zO@kXQM#grKOKYQcD1o6l(@&tZmFv-PtId<6-IH3ZL@Np6==V;{suM!%V%hqSiL_Nv zdV`j882+?wI)|t~Djh{qS_GlX13DM(#K*oI1?A};EtDp(BhGpe(^dHP6sIH+GSvPC z%Ymv2G90Wa6AeK3T>Is21VxYwEI~|`=tkv_Kravr4o|s=kyB=gY%}imcXkK-AG>f> zpRC1pl(MGPpRtF8dID{m9uVRsXM2!~38)Ho(wwa4T2V~##yTx_I9&yfwq%u5sWoPf zD=04D9uD+bqaX$~>Hbh(b|?lYNmG%qwK(OUPwt)?2yuqvz$F4~`levBlcg=I4mZ4z zG8`-)sJb^NOTS`t$t))#Z0YhyPgMC?5TzS1BGSRt5b~lZSbamT@S~BsHJm+*%c05~ zrqHRuid=mwY`-7%BUP2N%^`uHSc!I$mCd5S(M&>ErB9r;)B;p3shvb$vyDL2Oj0~4 zl@Fy>sNiupam10z9rkE*Vh2q#DOhqu7%ab_?;2jXBpRm`+|}A%d&$Uy2!@v2P}7pC z>-dxe6!#=J{@umuC)WTO{iTfGwq%t;tLRIi#skhU+D%gqdq8bxa3gl2VDyAJn1Zk! zjM;ArQ+3)56GZ=t9##(QSejQ_S73q;4)JjYXU=uc019_tWxi8O(uWH<@E+;c5JQ!n zqO0KQEoR98hYhWc!qiRrPAeI-fRze8B>aFapTfrX3cQ{M@p6>!VeWC?*@c|Wg7{pV z+N#T|NXuBj3u%g6?E*Yig*%CuW~+HTt|3>!<9fs6 zaY@=ftBhV9I3O~5r?;o5j-Z!)#gM{FhC6irPG;@d^{;C6?qX(HZV!Qi2u?q#-SEW6 zKkkWYM??vImi)TR9v)hnJQ)*eL z2hB+R!fcA&L-{_`wM-V@A>87XG!9mZ0$v4SEql;8LI7OD(inmD&NXH)1|%jBAQ108n|+=ijbYLZ`sOql!J=_$BkN<7?v3iZYzDc9 z!dp`H+51{LhB*K-UI1@PUd)ebFh5wxZc-z;^>OuD2?2{5NHUK5ViXiN5uvl?Q3 zN_}367iN#PN<1o3ZI~KHO*tw$`&_$g3?a|)Lf7irjt@x-la7qg6X#iLb!3K#L*jyz zqoVVqxiR8VF_EF5m&fhV9S+`n(RgUdw0{6 zx7y#!uAQGfef_a>$K;u)@%B}OFj=BJZ(p{y_P{qj`-UI5{GNCJs^2$2$L#NA*Ot@X zx*UOL|8yM_?w;(Ru0KJk+j?{{x&GM6(=8ak`3q}nC)d`VRS|XTJ?{3~Z}{2gp0DEn Hzx@6`?Wk~m diff --git a/lib/domain_checker.dll b/lib/domain_checker.dll index cdcc4b5d101f1dccd5bb85b461f5b7f0e1f58716..a07a0108ea75077eaa91cb8d2e6623eb2ef92ba8 100755 GIT binary patch delta 787091 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

$jjMoxb_j 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

-tBgjOKfEt(@sy9kO5^mhsdANpjTv0>B- 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

y2;qTXwaNF5kP2K-ch2<6C_`bv;7b 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 o_M+Vz3pi)KoAC-h{V&TA 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


Qksor%d#ZBC!*Cu0~@g? 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 delta 787097 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�Zjq3i{uqcl3iB}yACqmmII5irfA=;Igt-4 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 |73h(O1PY%>}&u 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ĚJu6_fExO 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

J0L2WaTT_fCQ`3R`&j< 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

PXeP{!WMb>J2m>^*@SY`su}6ExW>!*m6IsH>vsV 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⋘Pde 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 {UPhd)fa!l>Ga^r7t1S&A)$X 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 Vrm|hrQ^}}nO;aK2(Yvhs{{v&Y52pYC delta 901131 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
shiL48Y}8(jRatw-E6c-!FJ{}pV# zBhOGUFnDC}vB6X2a{Q}S&s0#4f8~Y28_w1PunpcJ57aewDNx=wcxdpE!IP~$5Yw## zk&{27KzOa_7VHzzKPJLHgv!AGi6YPkw7~3j3YXcIt}ct&MnC2*xuT&cj5}XweIyC zMBuCk_)~;B)fraPfci5nJ#k`A&HI z|InxYO$1#k*ai20k+dcB_*nU86!6WjWwU_g6OhFR`Dfuq=jNFD7(z{QjF{U3ujmCO5|5FvuL3hMh` z`Nv7%UGgE^BR>HjkVo){JUEG9Ou-1AlAnUl$YXdxej48RX}uF;>E-Y9QE&zY9r6V3 zlAne5$tUoT{2Y8#d)a@r{89u76`Y4p$*1s~`~rMIp2015trOMtzlfl<9+W*il^Dn003JNCV1w13a3ZIiN;Nr<^BQ6Ja4c>e*J^zc3$`^??6>Nid z$s2Hwd^>zVZo#9aWBu(!FkS|7{Wak!`7Zd3+=dtAyWx$W(L2!!5ZDy#fp^H;aF={9 zyieYNhvfUF&W_56PjK}!b9W!Zx}(z{NrR+8?XDntx3SLKL*gkHfpJZA3Pyn;MO}O z7yl_QO-|l`FQl)Y|1AX8FX^3V!dv7v+#zqld*p4nuX%a>I|znaP`>(M#4-7P_=LO* z&&UtJ=j3kX_5Abn5g$ZBle`CSlOKY2$vwD7ei%L|y*|FW1NIR_RB!}7Cimef`BC_c zd;l+2F4x~N1dW^ZPK0oq{5ZTrK7_mEC*XbZ=wo>P4=Ff_f)V)$o{*n{Psw9=PJSA` z2q+jMuzp$Z#2I*tJb^ppXW>2a3EYP-pa0Jx7*atBkIB!&C*)IjM($vh&2t6#tBHs>A$SwGkd?!37Z+;xl{|gFs zp}_i8y%RRPMZO#EkhkDH@;z|>R|EY3Z3IIq*b9%zJManlK6pm%z~{>4{jdC}1%Y^m zenMS%ll%a@P42?Gc?6%5pM>Y@US0nYg2j4J`YE{8*EN`RoCpnx}?rFY^g+$LYZJLK2k zF1h%Gd@Tt26l_Bfk~iQZ^6l`1+=5TZcfxb&tLOhFf&~@qf?LnlJ7L3HylXu_~@_q1(+^M{pe{%}-B;pTgVZ7vNp;toCyLc@$hk z!GL@QkH{~<$K*LYCBF=xRbI`1wfyD?3M#k)Z}@sA3b;*v72Y9Vz}+>k*Iy6cYW3HG zYW-b9K}aqx%4gi(k~c2m`9G&%+c)F^7UUM(x<&6q9|vxcZ^wZhav$6G zZlULY3k5zE?1T@=oA8)?fCEg(LwKfK-v7$~A9w_F71Z}XA$H*a;(7XrZFrMB!hYK1 zyRm(jJZK^CC>UW!1M)rCJ|b_!$K-qADS1bFAZ8ToLqS3Az#G4zcVa)>CXX?I4tW>b zyS117SIh4Jf<6_Dv7?aO#r7legYblW7bfp?-K*>0LXfWqr6)M>g1m9O}@bP z9ddz}@4%%X!h!qbC*dLa2tFb|1y9Ih_*DAp`TsP6oC?P91^F4c^?bb(3A{yq7Vc4m+Q|$Fk1!n`n!r9732$eB%c4L6tpqoocsiKv>=b*)(iAbbg-Wm`2pM~oEOmZ z|4HnqM+GCePkstMB#+@S`Dyq>xxD|Czl4GyQ$ca(R}LT$DFqi$Fe7&{;(|QG_6@p}7vVPf4Bn}|?7v!m zmk_vAki+}rm*FA#96lny0#DYxy8Z=%>3UFl4f71Q`|VgwM(Q7@4?LA8`}gH_3Ow+e^p# zvk`Qcfn0yP;U0MlJ|N!%kI38bG5OvAK}tafJ|o`;FUTEu<3)NW_QP%RE zM;^lm^ZykD4iyye9{E+cPriT; z$*;j<-OKC$Dfyx@(F3s!o{=};bMozQ@dx^dEqIfBXYJ+j+Y~fW&?Vmm_sDJdfP6PR zB5%RRl~?m$Ex$boQYvV}XXJa~1$hVF80wwa2e;R}UVjdP&RS5dzx{BRybJG>AApDC zE__6O@KbpHPblc2U`l=no|Aj<1^HpP^%A`keR%67^aynXfkOp8yhnZ%?voGTL-J$r zSb5$5vehAii3+OzmtV)>8Tk-CCqDrff2fZ*f;Y*7lL*=rjNo1JQ*e(wh7ZV3!z1#s z^gxU$ID>+eJb};1&%z7x3B2)Ay%Xo)cI{>V)$&Ubbg1Aw+$EpF`{WnkA$bNLt$TI- zFCs|RgVJa4DfuOMPM*UTj1^-h%6zmK4$1?BJm!X0uS-XlK>_sIwFA^EY&tN9mG5Tam0ejJ{W z58-q26L1l&kGTAWM|iXJdj6|B;7J5+Dj31Lrl)hUb5qf)oWE^7C+)dR$f-FM?PPg!nXG3&^*@Gx7#} zPQD#3HuY<7)n3lOCIvfD&?axfyX3pz9=Q!4kne^^l~?m$wYr61Oa*)3DR~<{Bi{=z z$UE@H$yF!n^|ud!y%tpK&w+Qy_rqQCF1$~E03MRNpT_h5h=PMCNXUEeDfuCIPVT`M z`Dy8ah$tANU`&1no{}f<8TnawK|X;u zURiab?7v!m=MdO+u<{h%AwLgy$*1r>`2~2m?$!0r5RBG?(l5dj@)>+eehHqF=kNvj z<(zQE z`tTO{5x7I{!+YdM;Xe7G@@oDKDL96Lm^_3}$dAJ_@*#XqegZB|(erEB?=*sF71Sp%hL6e5z*F)BJ|jO1FUTjK!SjFPHTsCpp};0j z;T`hxaF=`v?~`AEhXDl{f)V*ectSpdPsuOAbMhR%fG?l_FC(yCt9N1!Z;@YtJLCnt zM}8IV>mG;&f}tLWYw(y{d={?-_Kt-(Gt)|NcxLv4w&r`A&G7yb14;?}B^e zHhfTdb$qqVb|Z+Wpamb3?}4Y}ZTO6QFT7audi`|}G-ACI``|XY1MiUUhr8rmc%S^h zXYu?WQsAOsM1BySkoVwI@j!hPlP{#Sn3 zj9{pO`uUJI6NaC!sq0{2?XNL^$|z#CizKtn|uWClAnTmi2v5jo@G1Evcut;|UeCV;1(#7^oz^=shquVDz#Z}e-Xp&X_fOOF{{q2~3a-Ip za&ZZ-1?1b{8F>RfUpm&`b_C)t^$}a}CizZyo4g6{lJA0h;10PD?~xy^yqbSL1p^ce$&bNf@(?~DKMv2xhwypn z_54?Nz!M0>SRZi&Z<3#cx5-EFF8L|Aw{p4uVg!R#P{012hDYRM_?Y|*JS9)yGxD>S z@cds;FhN1%4SFZe!EN#s-XT8^cgd&len7zm1R;3_ACX^#C*(8ul>8DrhcBQ1a|8=2 zxD2=6sCQxxZ;@YtJLCntr+Xl-BJlM>@ajso!} zeZ&^LNxl=_CU3&K7eg2UgC z2M}-3N9@C!iVBX&|eQqAHzfPGw>040#C@#!l&eu((Cz`Q*aIi3-T0h zC3+{$!&~H2xI=yc-b?8DKSSVC!A1Cxd; z-Xt&JZSt$|F8Lxr;8Ac5J|GvLm&-CD-v%F(H{dDxc6czOz(P=v?}Rtrs&}FZx5;S~BA>z?-2-s}K~E1v z2KUJ?!iVHDcual?J|WL*FXvxI!DST8$>(tKc74QG;7#%Z-X^~a?^a&Tf3^G;2s|pd z1|N`%FW|L+d>edB-hiiTUa!CH2xeK~4qx;0tmGZoNbA#C~{-ybE`f%ln@Y2N3jBP~ZQ` z|ATb6PksWo zkcaSy{5X6}K7^;Wm;G1E?*xJw6-4lY{3N{b*Lo*LaGU%TytD4r^^Xy_>p|(K;eGNk zJS0B@ACV{Ug#2vj_57PsFhN01eh$7MpWu5u>zv++6y9RTew=gk{C^%nj|!%6pZo%R zNS?uC@{91v(y{(#2(o1$*WV@hoIHn%cj+U(3~!Rp;cfCO0fH_C1>7UQ3LlU!;1T&X z_?TSe^0gyKDcFW!M&5uIGk|qcfcNkj0z6H=j0w-r22>t!<*!Nczfk?{T)HjT?O^}^Wh%(QTTv-0FTIz!N=rb z9>`^oQg9pvGx8z4AU^?byjSnU6n8+IJi_*!fP#|lE?57`Du6pUq1hj z5lpGz3_K@K;0yAzaO-dMPE6n}-OIoKiNMhVk-~fA=ixs26h0)s0FTMD+ROPjq2MA4 zGV&RGPJRh4-lvZ^hd0SD!`qct^It8$If5<~T!DM!1$;n$6&{f<;Nvx~*WWb+=~_^) zzq{q?n2~RT7vv3iRRO`u;ocmU4OjE8lEF;HaSPfBD(~?~(6^`{Z5tko*8VCJ$T$6ABK( zGx8pMPJRe3KA?}-gEz?!OAkbwf<6kmYkC%@1mm!!e1G)Y#!ZY$2d`^A| zF8)>@aSm^iUk(toDVW2%y1gUxi2H3wSW5;2MIITznC)1?1b{1$hJB_&dE5 z+u^qK)$_lFphE>a;VyX--Y4G$56Nx#Nb~ag??#YlLHTES;ZyQG@SMC2Uy$#GTOZOp z(W$(ee=Q33p}-+`;63vFaG$&jACez{$EDZvU)=#+1QRMa2+zoS@HzP*xVWH?*n>A$ zF4x~-1npH&ufIOLOMV3Ik^Arg`B8X8KKLS@|Hl*@LqSR&!e`{i;RX2+-uSTIi4$-; zpddofAwLOs$w%-$`6+lv9>YiQ<@5h(1PK+4;ZyQ6@SHq>FUZfrt&eD(2*d=8d*tWgKKT?rB)?F5Isak`G89b6FTykO8GKHD2`)aWjacOHX64oVSIh4*f;JV* z;a&18aF4uz56G{=qcyMB-vYsSEvVMtHF!!c?!jvT`8Ie#-hekUy%XE-!SlaOfrWw& z`A)b?-h}tbcfmt)8$QbD`F}TpgbG^lDfu3FPTqzu$oImnkD(Lt{#Skoji9B1`u=O z1n-ldf`{aB>Gk{@QE(as3Hca4B|iht$rJd3{4CtMNYDQh1g(o}Eh;;44(^br@E-Yj zxKBQX50{ShcL71X4CMOD;1lwT@Qi#0pOasLi%;qU%L4>W3NFLj|6 ztMDMAV1Zyvehr?Ii_3T|Am0Wr$Q$s+-`Aa3J^ybA4d?(x`Z^HZJyWpYb z<@L7_jI^Nqz5t$(x8PIqJ@A~o4PTJ&t-P9l)~EDI(Lq6rd>`B)ci=tp{cxYW3m=wV z&wq6XJb)mk0vA3ZKM2prd+<5=A-I?=2Q1g0hoHF%>h*UR-X`zEyW~gU9=Q)6kRQE_ z=l_U;0Sd2%nK3hZp2Scq91qvK94+Pav?#BY21WB-|w*!TaQ=;30hZ{2wD2 zQNd|=LOzC1$&Yk2r%j$uGj&iED71T-+;PR669_;4XOs-q*am{@W3RT2MZg!$;&h;R$&YJ|*7;&&ln| ztNFK}U^fb^d-P7U;4Sh!aEH7N?~(6?`=!_OU)=#a2!>R!4<3^{@Co^Tct+lZ&sQ$j z-vI>TvOZ!L-XuQ=Z76(Rx5-0zhx|C)B_G23@a6OW2?QY(MDP*$Nq9m&f=|g$!E@aM5hGaWfjAAf?$tXn zhPTMiz#Z}g-XlL-dpZAn3MMERlAnXeBDOy?FjFC|IDNG1ohB4Q`W* zFXOdh;)Z@~NWKtI5C1R)hz@Dce=ctYNUPsw+|bLH~>SH1~_V4;Gl|K-p|%Qc;jn&Cyv2w@(|u3 zKMr@vho#r^uTQ}V6oljvd_;Z{o{*2=Q}R>r{A=|5A0t>$!D+a4MeoEI-XcHq|LMB_ z`1bz(uIuk@-FCKh>zK;l`R{E1=g{^3fJMHK$NOM>Wo@3V%0b+9WSEC zgo;6{1}qw(j7+MFSTxR}L8=DrARFDtps}>0GUAeAxTL$IF`N21_$xjTpW@@WulE0M1XC%P;oc|R zPQ2rRxJh^xh;QI!$J6_tpymYjdjZ}M_wly)7Ty!j;Y0E5)YJ7hkszR8CccCFpK?2q z$MfR5cqm@LE7r61zxV{)BZ#D+h&RRe@s4HVsE`EZy#A|q0{1hLENBB6F;EZ4@UdO#pyPY`41Mvo46u-dB z_;UZ>B&bQjCEgHk;cf9NyeHnqhpxxwnqcAvri0JKZ*c!JZYR2UUi=mh#e13C^;ePL zj)F+Mk2l5d@s9Wa?~6a+qtw&&zqtK|1c?+p;^xQQ8ISOs_!C|bALFGp&+flxg6dk3 z-hUIkF8+eI#1p(L{)!L8rwRN2u>@}vOvPuo_vUuu9S_9KkMJxI-@wanvj6u8YErO? zH^hCsExv{K#B=y?;q%WwW3~wEwnfMOw|AgC#Jf0Wd#Y6G9Kv0oj50Au) zcvE~I?}&$ZU;JS1u^CBFq974J#LZ8-GcMyf@guw-UcpP5+x{Gh8Y#_NIgGkhvu$Gx9&J8_N&;tjkgeqlXZe`N`p6x75o@rHN{Z;M~y zJ@Ga^{3+T0UlUBEpo7oEZ*YI+cA|^t#c%O&>D+%kg32=1Y;?9 z!>8gi-22;ZC*JWu-25od0>|z3-ykSEf&E;-YvP-DL)^#P;#+u6JePX9{)Q54Q!o(^ z@R|4y?*ARP6L~x@zKe&}v-Q9D1S}9#q+kz^#EW=Sd>`+Khj@SG^ZW0BV6+Od`>%v2 z;)l3-cV}G2bK*yMLA>&#?Egy=98*vgui|y_6TBr}!@J_A_#l=bA{dLG;ZyNC?)_c2 z6X$p!-oT6aa{qrpP?mxwUK78>8{#dzEq;afT#rqgVCV+s8lQ-F@R|4x?*Bcv6J0zn zew(>nf1w0D3M%4vcqHD(o8tF)M?B$YO!}#(>wj_kO$kO)FyM_6@dw=eeRsw~JSYB$ z7uGzx|3(C*wIIF!p75&p7_W;z<1O(C-W7lOQTG1>2@(p%;;;Bre2RPKW7+4%qN8tk zAU?y3CUy(n3CdDner*2msEKdj4RH@|i*Mq+g=hV@=j;;<7eO`;`wtM|6Y(5A6W_-D z&vGXg;CbUPPyoz_%J-z-X1cUX!dJP|opW;*T2=_k6?Zg=#h}W&B zn@wWIS-us-7W#ca|L5pB01y}e)yp7MquW^6F?L-I9FMU3~ zxgiLbLE0DlSFqw0@mo9+@8M1HJG>*_j|ut`+~Xth0iK9I;O2AP84vNC_#++{Bp4Bt z#Gml0_!zH?KjSU&3ErLiYXAR2Fpz=-AB(@@Q}HS8eV*HiH#~6MUjG?E(FyEtzu{$Z z^UAY8d;@QYdw5%XGxc=+^(62q7>aM<6Y(5A6W_-D&v!c!;Cbum_{-aGhai-KJYEss z#Ut?o-W1=%J1ft|H${T}DoD@E?BgTx5KqJpaO1f%F5x-x!&mnI1qsR&l*Etls(1yj ziyz}H@haYpB{(4%h}ZD3_$fXWk8tk`+)kX~0lwV-*9nSJaE_P78+c9p0&j>n@wV%+ zxg_Yhfob7G@hf~H-o|I**SP{N?S} zC+JJTJw6g2;EDJHZobH!@et3gc{;v%Bq*!}sgLlI_!C|gALDiLXS^jod1e3KmEeVf zfp~(C#b5EM_!Rdx-A=sW!KUp0X9Ptlc*o1)<`X;%#5eGUxQDkFp7r0hdXu2H2-5!B zmyZv{xA2L04xfo{PE>Un2YeOM;#hwD6($6+RJf<1_JV z-1irq$mVbV4hVw$GD!Pk{|Z(-6z}2{@mo9+@8M1HyO^LOK_Bmn-{T|k0iK9I;O0vg zGoDXuh{rhz9tjHKBfKR3gjdDKcwPJ%Z_RzR|DOqEUCD^2(C+_1z@hyBJp2KJ2+qnO8Wd9!! z9 zfCm+ z6hFty;tjkeet|b!k4=-H?FQx&?}@kYq4*U(5pUx&@$1a(`tv{HE{YBXdGQ-O6z}2{ z@mo9+@8QkV?fA>v?2e!#1%13PevgmD2Y4d>fSaGUns7S484~2yg47@Jg7^q8i9g|0 z@iAT(fBxi0vhhtzf(Zp(@fUm`p5SBgS9~fy#l4*D|KA9L+^R)sCuVq2{2ecgn@{m9 z5Z}NX3!l&5t^tDfB1lKIuT8us?&Cx8Eqo%L!)N00Hi7^1-5CdXUVH}+#q)SYd>4}bi|8zUwj`QiHCS1et?@_kWSe4fAL9IBFJUI$`A2^co{E=AK_K;3SM9L z^!gtYwAKUbRlF;Hf)B)N_*ncDpNdD;)A5b>Woau`Gd`mr5U=A!@pHT^-oR_(7kJ~# zWdGkJXiLE*-V<-(L-8woBHqSlOV8$S%r$|(?RKJr=f!XEP`ry*#BcFPycZKRCAh;o z;(fd?evgmD2Y4d>fXC*`-5C!Fa^jD8L41Ul#Gml0_!zIxeYO98CTK~)1n-K!-~;gl zAB(@@Q^)P~pAvY#(Cx$<9*EEIqWC*r7B^F#1>zg2+wo090*`{W_$J;H_wk|l7CsTr z;WO*$_{&egZ36!nxt$2`y!Z|tis$i)_%0r;JR9E>2%4)PJukC|cf^Z$Uwj`QiHCS1 zelTVKZvuD5B?@xlhj>A}jF-fZ@TzzPug4M`6STyucvt)cABflRvG^%I#h3g4h`{^B zZYR$0K)j9@#n17wcmuDw9-9k-h8vhB-WI>ad*Us8D1L=c#M_zM^*58?ngai$ZYMf; zUi=0R#k+V#{1%T=x8pBwzaBwT3hwZZcpvYJ-{T|k0iLXRI=*=zFkj)$c!=l3AMt|t z2rr30;Z^bRl>L8Qf@ca^;uE|p{(=w06MQWGich~Hc4s^#@OE5(!vpadUKD@F%i`wK zJPQ_{_1|8C4T8oZNUw{1d3alV6Yq)p_)vTcpNPjff|&%{xc^JsP6T*fdCU)>=fn^3f_ND(i67zBbx*H< zg`mD3SU<*F;#IsWeu59gYxr3F)OtF;nMx2*;C+?bi8DM9uj57WbG$6xz-wRiv26V1 zCAc7HNI?^Ci(leB@fJQ5zrrU=pO0_a1hZw3_QifL!2P`2i4L9@zrjQCE?yD8jR_(N zdU#X(4)2Kf@xJ&yJ`x|`aU#J3f%$58#zQgyv&Q8951^bn+8G64a^1J5O3mb@k_iX-ol6CSDD-OH<6%C z!A$%b_kX$Di4L9@zrjQCE?!C9j=y~R-4aAn(8HVJcX&szbe6)g1Y!K-V&eSUGW!uAfDjkua*7(E5TF>rnpyd zJMo4G;xoJ`{*IRyp7lTN^^fz#U=gHdUmJKs+{4@An|M#$$A{wa7QsY<96l4@#{FO6 zb|S#@;yZXKo}YVcDiZ8c5Q!J?ruZJ-5ijC>@qK)hx$XaA{~r=0QgDEqU+K=cgy+N$ z@q&06FRgoe{f`K$>w)zOUKc;cTjEu`D}I6x#B0{m@y%F*QwpZy5$=7R+lezg5U=A! z@pHWVb+Z3&5Y(jL0&j>n@wWIS-V<-(!=-2QxBt`{!DJbveX&29fzQORaevS4LC)&Bp9 zpehApye|HXx5OuSSNsJZIBu_hLNIm$`@I04icfLxSGk>d!vpadUKD>%-Hva{5|}rh z1>zfcL)^pL;+uF++{cI3)A5&|fLjC;Dahe7@on7y2DcLdo)_Q2!_n>;~f6{P27 zcJWBOfH%eW@Q!#9?~CuhvHu@Q5K@qcAK<3w&bWl<#1HX;co{Fn5*!g!#VdGS{1|VE zSMjd+2|mD=`~MojSPD+@sd$8YzuN7@86Jq&@uKUoIVUK)fob41@e8~m-o)GDmv~RS zmAPGiLkX@Zn25LWnfNvC{~EUw9Xv07gNLcx@t3z>m!KjAw|FGp!<*uFct^aC_t!if z-`o?7)`HXrcq0CQn{RYyJj8S2k9a|R^!AZ#d{dI(iGr&57_W;z<1O(C-W7kr2j3|B z|Ab&H1+Vy2e2RPfZYSRGKzxQ57e1fA{be(P@*+t4pT2&AXMy+z-Vpcjw)iIA6OVm@ zp#)p_L_CMj#J6$(*Sehu@VxlW++!0;kf)#`zKciV1-vP~hj+w_ct3O7|Hb})pI{^f zA)bgI;O5u4GcMsd@k6|@?&qmH1yn@%okMWjx74M3lSWm|{0|{yrjKxp! zsd$8YA9Fi#h6mzxy!f$?W#ca|!8t)$3L1D#`~q)?H}SUkCEi>5e0w(_yq4dZm<6f!N3XZ_X2z@{)$hQf_(}`;vt@hAK>P|opA}zi67#H zSb{P^N&E<}idXQu_%YrRui{;Nx&J>Q7)U`4AB&&jQ}GD*exuuoGdyrTHg$rc8<=yv zEZ)Ft;um;ByotBPFEh96uO~r^f}!{oJ`r!@Gx2NO|4nWuI(R;HJO1+ayCDdrpo>?; zZ}CXHhd0IV@Xng2z-c!LxRG3V7-i&#EReX%s#h>w(zv5HzDenEFZYSPSx8s{Yf*A!x@prr|Ze~0S#5eGUxQDl`r{ga_0XGSHQsCo5 z@hyBJp2KJ2+qnOaEjy8oZvuk+DoD@E?BJnz9u)4Mz#C1) z%Nu?+u>X&{Gn@RL`OFI95ndJ#zjc11mDKI{%iFK3KU-Z-SYn+IG4L%hw<1_JZ#?5bYJNNs4n*F~g!7~NE`2J`8 zy!5w)!epJsFaK|24Hhad3D2R!^QSsVrvf zPAtxSASismOCRv+2fY3PZ_RzR|6g4D?gt76AMo)9eEI?R{;Bm&*z3O-IB){{!{=W( zzrPFOi{ne;7aU&^UmPEae@}XRy8apxEDGA!_~woJc+f=GNZKvUfN;`s@+ z#TUo-#DD7-$Mb@L1dD>P_#b0{M0|0)_s_T;8a&Q-P=WXZUW_Fe5|qUs@tXJuZ-_tP zZSgVQ!Tnf5Rj38Qv6s$2;QY zJJU;J*I!?Pgc*#)H?jiz=YrxMZvI(!#+!If+{X*4+wqsT-xfhh3UYW=d>gNe2Y5?- z2k)+VI=;yh4Az3wck!`!0iTNR;ofg|J5j^~@%``oNH)GHN)S>|7C*pi;!`eJL%hWC zZSh0A_uFOvUnUqz!4W??f+u`-zFGH!8JY>@8DDM8{GTn-A;7zVBOQ}e@jqY53Kj_viKcd6Yt{<@q4^2 zKCqsSZ+a3uP%so9;uG;ld?r4^{omns;t9|Hj*n&IFE7EEAe4eo!DW2e+ zrO(GVuLS*NkoLv?4k$hnf5Q{;8E*ascgF8{PTa(QalSz)NU(vI#67$!?z7tK;+q`b z68G`AE5R1QKs<+!#kcXPcz}B+ZYOr|VD78^f1aQy1-p1zynxrl_wa^z5pO$gum3(l z&k5|m3xp5F5Acb237?4{;{LzrcA}iR9pB_7IHDjFuizE&V>}YC;!W`rykk8be|h`W z2>McRijTx2JP|*`&A;T%xQ^#mo{ewL2@0zqJulP1OX3%JRlJGU#V_%ec_)z=- zpNJ3fnfN2_*PKq+fB%yp?*`@x55>oLMf@3$#3y)D{3Ua{{yGvQ6!gVk@saoxPsHDF z^RGBFHZwezx*dOc`@Itsq`>^8`7@#E6qvGbSM{|6G}DJY8X;$`syUK8KL8{$R0{mrp^M*9RkDG2eQ_yIl{ZFQL-zX;O)+t(2uidXQ8_%R-dSMjEJd_vHXpoaIwPw|m>geT%>xH)w@ zU7vewauS?VP!Mn6CGiWqD&EBF;+J?UbKC#L{=Y@gm4YjLAl}Bu;@9|8yn}oH+FB>l z>wiNKtOwS+cv1WoFN^o^n)n^w5bs-0$2V;W?kVVr5AdP*13nQS;xq9_-2a`j{~rMq4*fDh(F_z_ylh*J)6J%Sr3BFGD!Pk|632<7k|Y^;!`{kf5Xkc?oMnL z6XYa##|z?S#Irzr1FwpEcwKxGk6RM>1YPkhd?22~$Ku=gR6M}FDC@*(|Gz^J%!B1^ zna7LbyLef=fY-$L@P^~|`WFe>PGG+m;63pWABrE~6Y&y06F*EnU4Q<+;Vz0Y1$pr! zJQT0s74aP32_x}ij&E8|$6vO(O3;yl6TB~8!$;z$cp@I*=65Y8oQ-eJ2y&|+Jug$o z3*zT^NxXqq#V_!>cyq-5za_yX1zqtLJ`lgc$Kq{#Dt?W7@xQrjMKts_!y7G zpEI}XuPMQVf{yqL-WN~sk@zc~h);3zZ`ldk@t3#X8$m7&)_jH+#NY9fxcRR6GomWK zf!EhO9p88at+gQaO}s1a;{)+6d@P>Br{de+^^t6RlpGkf23DTl@;| ziMR2g_%%Ke@8GlFEBpT&0{`E3JJH4S;6cX+h)Z2tDofC-w*Anl9&4Jf=L zKEV6p5BNxYh$rH;nA^ERq-c0u1hc`Xo)}LUGWJ%5P!kP z;t4*T`)dFHO5mNlotWZ*_#0jnpW$Wkcf96!di}q9{Z6j90~vzMK7jU4jY)E%9T#D_+G1;wSi6yoOI>2~G(- z*_cFlAby4y#p`%k{2Z_0%l&_Ypdkepcw4-Q_rx#pp?C|QxE`A;f|(nbHtsjvHF1sS z#XEQ?euG!UyP4bd7fEnSK~ubkcf{}TzIY!WiQnT%>UR9)?KdDW|Gqop2RtV}#0%n& zcu9POSJylp-#ii2*Mii?cuV{l?}|_Gf%pqP7EivL{r^;gR|>q}=XPR>2jXvdQGAA% z#ozJT?~_Gm{xZ)3DcHc<;vU`;-^7RFK0aA^)_>dTErQu1Nc(SJIo$sb+)ixcdGP=b z#dq+Ec$_DQB-q89;sv}TzK8e4i}*-z-c!8o_iuuzrer-{N*6!UOR$yeMAB%i`zO)A3DB zf(8W*@e8~y-o$(2m-tY;g-^caW7+u2OK?RnlY%zx|A%fTuJOEh2M@(>@XFHXocIG?5Fg?t@kczaN-!d* zi$CEl@iE>Nf5r#m6MQ`P)&Bp5U@8R(?ls*`yyAiQ6fcUu;bq6|^`8;coWOo7=Brji z{GH?5;^t}o?C6O%d7q*9MtXd@{w5N5ywOa2<7dr(#M1wd-A?#;UcAM?q4*~6U$LH! zzr6k06huz{qBsn86YPf;05tM?^6=r zd1C)xl_1X>)x`(AQA>Q6X$XcKuZ( zsPaaU_zB(=PZ*#hKE?auGklb~9e;WInJ<{%--#5|7})$L?u<|IoVdsP6vQKrFRghx zzBwbPt_7+4yir}e&hahrbG$3wzz5Hr^Az#)k{f`fpp^A($+JwEy;XgU`gfxc{HJow&vG;ypYR zkM9U767=y%{2p(L5Acro1Kt-O&fWg}p9GH-B;q67wA>j#;W_a!UJ!rAOPSmLFZTZv zf~pj};C1l?Z;8L+UGXVCSoie$7g%)T^}u=&pNhZnM&2KCJ2Arp@o;e$sN45X$2VmO z-g%>%xcMHw9gA<^ZE+9piErY=KP3BqpI{;dTlh>ohx`AT+lg&FFCO6G(zE&7zi5P@ zvJBF`*dNWtBk^6lDPF)k;(K^syciRVB-qCj@enuvxjW+nJSSel3*v`(T#}$nP!&JI z>*5u>C4P)|#jE&W?yLQOX>k`w!3hOZ@iNDIS8gY293P0E;zh^p^^XY3PGFykcul;H zH^k5Jws-^YiC?6iuD_uKO$sLB6=pmWzvOuTzi>Oz!t>%)-Y2x4j=%f_JmiC-A_Z5x zQ6%2Ro8s4aN4$ggSDuY;ZU{!JAU!YB#S`&c-29jBjBCs+C*I@ug81F{u>UVf(5Ij( zevjA12Y5^T0q=?r@j)y>#0m2X>S8gXp93O~3;YED8{~r^SrQjK_iBIr` z_zT_^Pw<}W_V<4YhHhY{_(Z(HjA!C+9PhW?PR#JUcr$w+yZ%B6DvP^7{GB(7#Lf54 zpNdWK4ZI`n;r-O@_{-aGlVBtTKAwng;pPv!Gj7qLoOq7o3u~T^Z?*|aYeDJ(UKQWL z>*9I5CBBPy#S7p2k!*Z3kYJC3v3L=mitppzA8|Vo;(_=9Ui>4n|1S}grQi^+iI?$) z_z~U~ui(9f&*yLdtyhBKB1rphUsZe}euB@$Yq1h(4b%>et{?AP260&Grq)g;w`+8x$XaA|9?eLl7co~6~D&o;vKvt zeuH<{J-z;2g28%V{T3gK_wcFs9q#>6w-bFl5Wlycj&F(*3@9jzKj1a-A>I&w#M|N{ zy!S^xmW{u>1WyD*DH!7u@n?J{KEeI}#_hxlo?rTWe3KA_%OLHG{WqZSiue?d#NY6y z_zdrezsCf93Cv%aKU7BI8+an_;pV?}XS|8$#C<$2NU%jv63^jP@ol^=9^ftU9lSgD z)&4(EFpz>>d@NqTr{a6K*Ks>h!~@6e_1`BbI)U96;AQaxye3}48{&s}TfCfly8e0+ z98oY7uiz8$V|*rF#r^-z?ZgS5x1Nr_y!~nfp%k3r74Zm<#Lw`icpdMoJR9Gf6ZBU> zdS0f1kHjzVM7)WcKjzN(63>aZ{tEm5f&^C-l*HS3Rs0&Si+Avr_zm8TCFl|i#BcGj zcn_b7-{IaLcRSI?1AMvvzb7b4!2mCdKj1a-A>I&w#M`dh|NckNa|82)55>p$MEn__ ziBE9<#_hyQ=63z%B}ga;#b5D?_!N)C-|(jR4DY0F$6wxl?*x4*Fk_wt;v0A(?&0Q7 zxHI0wb8DWCZ+wEnT9En{UJ}pYRq<`SE*{`5@traI|E>gi3I^i4_*lGvPsR6e?_1qY z6!G9&V>j3*C`v(ym&Fh8ns^Csh#%tZg=hV@tu7Pv7D3v7`#Qph;uU-%evHq=tGNFs z-3iAh1bGQ+cqo2~SHvSc5@WJ{ci}m>w)zyJ`lgf$KpMFDt?E1-{y9rZ#^B~1QOg+ zP!u2FW$_2RCO*U);*WUy+hqSgBIrrM6Fw9l;}h{`d?r4@{r`T^iERG%_kRiU%OLHG z{rz7&6o17l;!`{lf5V&NvzVYG!8_g;H{ZvzKzsvF#68^nsl|-v6Whe&oCH2WL3|4@ ziRbXD_%>b_5AfF9SNs1Rg02+g@qzd*J{B+FQ}I3AyIt>uz5YdlzzOX40=y_5;$`sz zye3}48{&tlr|YjRL79S{_z^x7uiz8$V|*rF#r^+5_WvgYc^jm!#V2D855-UMig<)a z;%9hs<>~zGZ$J@rRzc?HcwfAMkHjzVM7)Wc|IwY;<@d4w&q>gtpdfyQm&Dt6Rs0&S zi+Au=EWr&ySGr=PrsD3i9F!9*V!>74az^iNE2^)b04o+iXVA zk%D);FK+%S&jRrcJQ4SB^FOU7oQ`ic336*e>ONi&-@;4cIlL;qjn~D4zsmlC*n=q+@%w?{a<|2T@vK7VC5~mAby3H#M^jP{2H&XdwTsl1g-VJ`VHO{@8SdT zTYN0u!>8hR*3_y(Sc zdw6XAS9ivn1UYdZFNkm9CGi|y72n3|b6@TM1A>+m?BHGTJU$TL#mC|WeCoKp{(A&o z-|a*Z55)KJqIigx#SieBcqw%|zG+BsNI_e?jQ7Nk@S%7GpNJphGwbR2%TK^6f&ag` zojAes;x#-JKgBEJ5gx5P8{eD}G*>}-UZ#$B#Lw}*cmp4aU*L&&^RKc0H{apT_>zL0 zcndFxU*RS3HeMCK#_O>J9fFql4c-;+;sfzpd@SC>r}%RJe@Ec`?`|jhcp!d{7sUs7 zS^NR7xo-ddAA*J(m`A)VKEiwAPxw%Lj8DX$Gq>w+Cc%UP|K9Dy3!WEG@KF2}uZU0a zD0Msj^7eZpXiC8h?})$SeR1>5vp{?UPu4sg-*^P(&$=_-#B<_4UJ&2HOX4}aD!%>v zk!*ZZmmr{^CBB1q#q;<;d>0>!7x3wymHq!7f%kv7ohagg_�~5Am}20bX19eE!Ci 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
  • cFxrOj2;$9R)qVfYUA;0((FyNY5@vG6q$vX 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 reo%pCj?0Yc@aX^Gm(hAdZ3p!DxJ; + createChannel(): Promise; +@@ -52,7 +54,7 @@ export interface Channel extends events.EventEmitter { + + assertExchange( + exchange: string, +- type: "direct" | "topic" | "headers" | "fanout" | "match" | string, ++ type: "direct" | "topic" | "headers" | "fanout" | "match" | StringAlike, + options?: Options.AssertExchange, + ): Promise; + checkExchange(exchange: string): Promise; diff --git a/src/Emails/ForgotPassword.tsx b/src/Emails/ForgotPassword.tsx index 0a75fedb..76da10c5 100644 --- a/src/Emails/ForgotPassword.tsx +++ b/src/Emails/ForgotPassword.tsx @@ -1,5 +1,4 @@ import { Body, Button, Container, Head, Heading, Hr, Html, Img, Preview, Section, Text } from "@react-email/components"; -import { imrUrl } from "./Image.tsx"; const styles = { main: { @@ -37,11 +36,12 @@ const styles = { lineHeight: "1.5rem", }, btnContainer: { - display: "flex", - flexDirection: "column", - alignItems: "center", + margin: "27px auto", + width: "auto", }, btn: { + textAlign: "center" as const, + margin: "0 auto", backgroundColor: "#9AA9E0", color: "#161922", padding: "1rem", @@ -49,8 +49,6 @@ const styles = { textDecoration: "none", fontWeight: "bold", fontSize: ".8rem", - // center - display: "flex", }, btnText: { textAlign: "center", @@ -75,16 +73,14 @@ const forgotPassword = (username: string, resetPasswordUrl: string) => {
    - Kastel Logo + Kastel Logo Kastel
    Hello {username}, -
    We received a request to reset your password. If you did not make this request, please ignore this email. Otherwise, you can reset your password using the button below. -

    Click the button below to reset your password.
    diff --git a/src/Emails/Image.tsx b/src/Emails/Image.tsx deleted file mode 100644 index 9b385ef9..00000000 --- a/src/Emails/Image.tsx +++ /dev/null @@ -1,2 +0,0 @@ -export const imrUrl = - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAYAAADL1t+KAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nO3dd3wVZb4/8M9p6ZV0SAgkwdBBOtJBRV0VdO3K6hZdt6nby927q97dvavrrrr726p3xbVjw64gHaT30EMNIRVIb6f9/hg6AZKTM/Odeebzfr2OKJhzPjmczGeeZ2aecQAIgoiIiCzNKR2AiIiIuo6FTkREpAAWOhERkQJY6ERERApgoRMRESmAhU5ERKQAFjoREZECWOhEREQKYKETEREpgIVORESkABY6ERGRAljoRERECmChExERKYCFTkREpAAWOhERkQJY6ERERApgoRMRESmAhU5ERKQAFjoREZECWOhEREQKYKETEREpgIVORESkABY6ERGRAljoRERECmChExERKYCFTkREpAAWOhERkQJY6ERERApgoRMRESmAhU5ERKQAFjoREZECWOhEREQKYKETEREpgIVORESkABY6ERGRAljoRERECmChExERKYCFTkREpAAWOhERkQJY6ERERApgoRMRESmAhU5ERKQAFjoREZECWOhEREQKYKETEREpgIVORESkABY6ERGRAljoRERECmChExERKYCFTkREpAAWOhERkQJY6ERERApgoRMRESmAhU5ERKQAFjoREZECWOhEREQKYKETEREpgIVORESkABY6ERGRAljoRERECmChExERKYCFTkREpAAWOhERkQJY6ERERApgoRMRESmAhU5ERKQAFjoREZECWOhEREQKYKETEREpgIVORESkABY6ERGRAljoRERECmChExERKYCFTkREpAAWOhERkQJY6ERERApwSwcg60uM6oGsxMHIShyEzIRBSI7JRYQrBh5XNNyuKHic0fC4ohEdkQQA8Pqb2320+hpQ3bgHZbVbUFa7FWV1W9DirRX+7og6xuOKRmbCQGQlDEJm4iBkxPdDlCcJHpf2+fc4o078TEQj0h0LAGjx1p3/sxBoRn1LufZzULcVZbVbcLRxr/B3R1bgABCUDkHWEOGKPVHcg5GVMOhUgcdEJOv2mjXNh1FeuxVHareg/MTGrbJ+J/xBr26vSXQxDjiQGtcHmSd+BrSfhcHoFpsHp0OfSc82XxPK64pOFXx53VaU1mxCs/e4Lq9H1sRCp4uKieiG/NQp6JM+FQVpU5Ee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"; diff --git a/src/Emails/RecentLogin.tsx b/src/Emails/RecentLogin.tsx index 8d49bf9c..1a0f6908 100644 --- a/src/Emails/RecentLogin.tsx +++ b/src/Emails/RecentLogin.tsx @@ -1 +1,148 @@ // ? Note: This is when theres a new login with an IP that has not been used before, or has not been used in a while + +import { + Body, + Container, + Head, + Heading, + Hr, + Html, + Img, + Preview, + Text, +} from "@react-email/components"; + +interface RecursiveTypes { + [key: string]: RecursiveTypes | React.CSSProperties; +} + +const styles = { + main: { + backgroundColor: "#161922", + fontFamily: "sans-serif", + }, + container: { + backgroundColor: "#101319", + color: "#CFDBFF", + padding: "20px 20px 20px", + margin: "0 auto", + }, + logo: { + icon: { + width: "50px", + height: "50px", + borderRadius: "50%", + }, + text: { + fontSize: "2rem", + fontWeight: "bold", + marginLeft: "1rem", + }, + container: { + display: "flex", + alignItems: "center", + }, + }, + header: { + fontSize: "1.2rem", + lineHeight: "1.5rem", + }, + paragraph: { + fontSize: "1rem", + lineHeight: "1.5rem", + }, + locationContainer: { + width: "auto", + margin: "12px" + }, + btnContainer: { + margin: "27px auto", + width: "auto", + marginBottom: "0px" + }, + btn: { + textAlign: "center" as const, + margin: "0 auto", + backgroundColor: "#9AA9E0", + color: "#161922", + padding: "1rem", + borderRadius: "1rem", + textDecoration: "none", + fontWeight: "bold", + fontSize: ".8rem", + }, + btnText: { + textAlign: "center", + fontSize: "0.8rem", + color: "#CFDBFF", + }, + hr: { + borderColor: "#262F40", + margin: "15px 0", + }, + footer: { + fontSize: ".7rem", + textAlign: "center", + }, +} satisfies RecursiveTypes; + +const recentLogin = (username: string, formattedDate: string, device: string, platform: string, ip: string) => { + return ( + + + Someone logged into your account from a new location + + +
    + Kastel Logo + Kastel +
    + Hey {username}, + + We've detected a login to your account from a new location. If this was you, feel free to disregard this message. + Below you can find the details of the login: + +
    +
    + + Time: + {formattedDate} + + + Device: + {/* i.e macbook, windows, mobile etc */} + {device} + + + Platform: + {/* what platform they logged in by, i.e the web, desktop app, mobile app etc */} + {platform} + + + IP: + {ip} + + {/* + *Approximate geographic location based on IP address: test + */} +
    + {/*
    + +
    */} + + If this was not you please reset your password immediately. + +
    + + + ); +}; + +export default recentLogin; diff --git a/src/Emails/Registration.tsx b/src/Emails/Registration.tsx index 15cdba35..753e4d75 100644 --- a/src/Emails/Registration.tsx +++ b/src/Emails/Registration.tsx @@ -9,12 +9,10 @@ import { Hr, Html, Img, - Link, Preview, Section, Text, } from "@react-email/components"; -import { imrUrl } from "./Image.tsx"; const styles = { main: { @@ -52,11 +50,13 @@ const styles = { lineHeight: "1.5rem", }, btnContainer: { - display: "flex", - flexDirection: "column", - alignItems: "center", + margin: "27px auto", + width: "auto", + marginBottom: "0px" }, btn: { + textAlign: "center" as const, + margin: "0 auto", backgroundColor: "#9AA9E0", color: "#161922", padding: "1rem", @@ -64,8 +64,6 @@ const styles = { textDecoration: "none", fontWeight: "bold", fontSize: ".8rem", - // center - display: "flex", }, btnText: { textAlign: "center", @@ -73,17 +71,16 @@ const styles = { color: "#CFDBFF", }, hr: { - // HR: Display a divider that separates content areas in your email. borderColor: "#262F40", margin: "15px 0", }, footer: { - fontSize: ".6rem", + fontSize: ".7rem", textAlign: "center", }, } as const; -const registration = (username: string, verifyUrl: string, deleteAccountUrl: string) => { +const registration = (username: string, verifyUrl: string) => { return ( @@ -91,16 +88,14 @@ const registration = (username: string, verifyUrl: string, deleteAccountUrl: str
    - Kastel Logo + Kastel Logo Kastel
    Welcome to Kastel, {username}! -
    Thank you for signing up to Kastel. We are very excited to have you here, I hope you will enjoy our community. -

    Before you can truly enjoy Kastel, you'll need to verify your email. Don't worry, it's easy; Just click the @@ -112,8 +107,7 @@ const registration = (username: string, verifyUrl: string, deleteAccountUrl: str
    - If you did not sign up for kastel, please click on this link to delete the account{" "} - Delete Account + If you did not sign up for kastel, please ignore this email!{" "}
    diff --git a/src/ExampleRateLimit.ts b/src/ExampleRateLimit.ts new file mode 100644 index 00000000..96295af2 --- /dev/null +++ b/src/ExampleRateLimit.ts @@ -0,0 +1,43 @@ +import type { RateLimitOptions } from "@/Utils/Classes/RateLimit.ts"; + +export default { + global: { + bucket: "global", + interval: 1 * 60 * 1000, // 1 minute + maxTokens: 100, + dynamic: true, + global: true, + max4xx: 1000, + max5xx: 1000, + reductionStart: 8, + reductionRate: 0.2 + }, + home: { + get: { + bucket: "home-get", + interval: 1 * 60 * 1000, // 1 minute + maxTokens: 20, + dynamic: false, + mode: "automatic" + } + }, + auth: { + register: { + bucket: "auth-register", + interval: 24 * 60 * 60 * 1000, // 1 day + maxTokens: 25, + mode: "manual", + + }, + login: { + bucket: "auth-login", + interval: 6 * 60 * 60 * 1000, // 6 hours + maxTokens: 25, + consumeOnSuccess: true + } + } +} satisfies { + [key: string]: RateLimitOptions | { + [key: string]: RateLimitOptions + } +} diff --git a/src/Middleware/BodyValidator.ts b/src/Middleware/BodyValidator.ts index 51b379c3..fa958645 100644 --- a/src/Middleware/BodyValidator.ts +++ b/src/Middleware/BodyValidator.ts @@ -85,6 +85,21 @@ const validate = ( const bodyValidator = (options: BodyValidator) => { return ({ body, set }: CreateRoute>): CreateMiddleware> => { + if (typeof body !== "object") { + set.status = 400; + + const error = errorGen.InvalidField(); + + error.addError({ + body: { + code: "InvalidType", + message: `Body was invalid, expected type was object, received type was ${typeof body}`, + }, + }); + + return error.toJSON(); + } + const errors = validate([], body, options); if (errors.length > 0) { diff --git a/src/Middleware/RateLimit.ts b/src/Middleware/RateLimit.ts new file mode 100644 index 00000000..4cdf9df0 --- /dev/null +++ b/src/Middleware/RateLimit.ts @@ -0,0 +1,82 @@ +import type { UserMiddlewareType } from "@/Middleware/User.ts"; +import errorGen from "@/Utils/Classes/ErrorGen.ts"; +import type { RateLimitHeaders, RateLimitOptions } from "@/Utils/Classes/RateLimit.ts"; +import RateLimit from "@/Utils/Classes/RateLimit.ts"; +import type { CreateMiddleware, CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; + +export interface RateLimitMiddlewareOptions { + ratelimit: RateLimit; + setHeaders: (headers: RateLimitHeaders) => void; +} + +/** + * NOTE: MAKE SURE THIS IS UNDER USER MIDDLEWARE, otherwise automatic mode will use the user's ip instead of the user's id + */ +const ratelimitMiddleware = (ratelimitOptions: RateLimitOptions) => { + return async ({ + headers, + set, + app, + user, + ip, + request + }: CreateRoute]>): Promise | string> | RateLimitMiddlewareOptions> => { + const ratelimit = new RateLimit(app, ratelimitOptions); + + if (ratelimit.options.mode === "manual") { + return { + ratelimit, + setHeaders: (headers: RateLimitHeaders) => { + set.headers = { + "X-RateLimit-Limit": String(headers.limit), + "X-RateLimit-Remaining": String(headers.remaining), + "X-RateLimit-Bucket": headers.bucket, + "X-RateLimit-Global": "true", + "X-RateLimit-Reset-At": String(headers.reset), + } + } + } + } + + const checked = await ratelimit.check({ + identifier: user?.id ?? ip, + request: { + headers, + ip, + request, + set + } + }); + + if (!checked.canContinue) { + const error = errorGen.TooManyRequests(); + + error.addError({ + ratelimit: { + code: "TooManyRequests", + message: `You are being rate limited, please try again in ${(checked.headers.reset - Date.now()) / 1000} seconds`, + tryAgainAfter: (checked.headers.reset - Date.now()) / 1000, + }, + }); + + set.status = 429; + + return error.toJSON(); + } + + return { + ratelimit, + setHeaders: (headers: RateLimitHeaders) => { + set.headers = { + "X-RateLimit-Limit": String(headers.limit), + "X-RateLimit-Remaining": String(headers.remaining), + "X-RateLimit-Bucket": headers.bucket, + "X-RateLimit-Global": "true", + "X-RateLimit-Reset-At": String(headers.reset), + } + } + } + } +} + +export default ratelimitMiddleware; diff --git a/src/Middleware/User.ts b/src/Middleware/User.ts index d6ab035b..49858889 100644 --- a/src/Middleware/User.ts +++ b/src/Middleware/User.ts @@ -1,11 +1,16 @@ -import type { UserMiddleware } from "@/Types/Routes.ts"; +import type { Scopes } from "@/Constants.ts"; +import type { Requesters, UserMiddleware } from "@/Types/Routes.ts"; +import { bufferToBigint } from "@/Utils/bigint.ts"; +import type API from "@/Utils/Classes/API.ts"; import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; +import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; import type { CreateMiddleware, CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; import Token from "@/Utils/Classes/Token.ts"; -import { settingsTable } from "@/Utils/Cql/Tables/SettingsTable.ts"; -import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; +import { botsGuildsTable } from "@/Utils/Cql/Tables/BotGuildsTable.ts"; +import { type SettingsTable, settingsTable } from "@/Utils/Cql/Tables/SettingsTable.ts"; +import { usersTable, type UserTable } from "@/Utils/Cql/Tables/UserTable.ts"; export interface UserMiddlewareType extends Record { user: { @@ -27,14 +32,328 @@ export interface UserMiddlewareType extends Record { language: string; navBarLocation: "bottom" | "left"; privacy: number; - status: "dnd" | "idle" | "invisible" | "offline" | "online"; + status: number; theme: string; + maxFileUploadSize: number; }; token: string; username: string; + oauth2: { + isOauth2: boolean; + accessToken: string | null; + refreshToken: string | null; + scopes: Scopes[]; // ? the scopes of the requesting user. The other information is just provided to not break existing code + }; + checkInGuild: (guildId: string) => Promise; }; } +const requesterCheck = ( + type: "User" | "Bot" | "Webhook" | "OAuth", + allowedRequesters: Requesters | Requesters[], + allowedScopes?: Scopes[], + scopes?: Scopes[], +): boolean => { + const allowedRequestersArr = Array.isArray(allowedRequesters) ? allowedRequesters : [allowedRequesters]; + + if (!allowedRequestersArr.includes(type)) { + return false; + } + + if (type === "OAuth" && allowedScopes && scopes) { + return allowedScopes.every((scope) => scopes.includes(scope)); + } + + return true; +}; + +const tokenAuthenication = async ({ + authHeader, + app, + set, +}: { + authHeader: string; + app: API; + set: CreateRoute["set"]; +}): Promise<{ + success: boolean; + response: unknown; + userSettings: NullifyStuff | null; + userData: NullifyStuff | null; + oauth2: UserMiddlewareType["user"]["oauth2"] | null; +}> => { + const unAuthorizedError = errorGen.UnAuthorized(); + const vaildatedToken = Token.validateToken(authHeader); + + if (!vaildatedToken) { + app.logger.debug("Token couldn't be validated"); + + unAuthorizedError.addError({ + user: { + code: "InvalidToken", + message: "The token provided was invalid", + }, + }); + + set.status = 401; + + return { + success: false, + response: unAuthorizedError.toJSON(), + userSettings: null, + userData: null, + oauth2: null, + }; + } + + const decodedToken = Token.decodeToken(authHeader); + + const userSettings = await settingsTable.get( + { + userId: Encryption.encrypt(decodedToken.Snowflake), + }, + { + fields: [ + "tokens", + "maxFileUploadSize", + "bio", + "guildOrder", + "language", + "privacy", + "theme", + "status", + "allowedInvites", + "customStatus", + "navLocation", + "emojiPack", + ], + }, + ); + + const userData = await usersTable.get( + { + userId: Encryption.encrypt(decodedToken.Snowflake), + }, + { + fields: ["email", "userId", "flags", "password", "publicFlags", "guilds", "username"], + }, + ); + + if (!userSettings || !userData) { + app.logger.debug("User settings wasn't found", decodedToken.Snowflake); + app.logger.debug(userData ?? "null", userSettings ?? "null"); + + unAuthorizedError.addError({ + user: { + code: "InvalidToken", + message: "The token provided was invalid", + }, + }); + + if ((userData && !userSettings) || (!userData && userSettings)) { + // ! darkerink: just in case there is one but not the other (has happened in very rare cases) contacting support will be the only way to fix this (for now); + set.status = 500; + + return { + response: "Internal Server Error :(", + success: false, + userSettings: null, + userData: null, + oauth2: null, + }; + } else { + set.status = 401; + + return { + success: false, + response: unAuthorizedError.toJSON(), + userSettings: null, + userData: null, + oauth2: null, + }; + } + } + + if (!userSettings.tokens.some((Token) => Token.token === Encryption.encrypt(authHeader as string))) { + app.logger.debug("Token not found in the user settings"); + + unAuthorizedError.addError({ + user: { + code: "InvalidToken", + message: "The token provided was invalid", + }, + }); + + set.status = 401; + + return { + success: false, + response: unAuthorizedError.toJSON(), + userSettings: null, + userData: null, + oauth2: null, + }; + } + + return { + success: true, + response: "", + userSettings: userSettings as NullifyStuff, + userData: userData as NullifyStuff, + oauth2: null, + }; +}; + +const oauth2Authenication = async ({ + authHeader, + set, +}: { + authHeader: string; + app: API; + set: CreateRoute["set"]; +}): Promise<{ + success: boolean; + response: unknown; + userSettings: NullifyStuff | null; + userData: NullifyStuff | null; + oauth2: UserMiddlewareType["user"]["oauth2"] | null; +}> => { + const [token, userId] = authHeader.split("-"); + + if (!token || !userId) { + const unAuthorizedError = errorGen.UnAuthorized(); + + unAuthorizedError.addError({ + user: { + code: "InvalidToken", + message: "The token provided was invalid", + }, + }); + + set.status = 401; + + return { + success: false, + response: unAuthorizedError.toJSON(), + userSettings: null, + userData: null, + oauth2: null, + }; + } + + const parsedUserId = String(bufferToBigint(Buffer.from(userId, "hex"))); + + const fetchedUser = await usersTable.get( + { + userId: Encryption.encrypt(parsedUserId), + }, + { + fields: ["email", "userId", "flags", "password", "publicFlags", "guilds", "username", "oauth2"], + }, + ); + + if (!fetchedUser) { + const unAuthorizedError = errorGen.UnAuthorized(); + + unAuthorizedError.addError({ + user: { + code: "InvalidToken", + message: "The token provided was invalid", + }, + }); + + set.status = 401; + + return { + success: false, + response: unAuthorizedError.toJSON(), + userSettings: null, + userData: null, + oauth2: null, + }; + } + + const oauth2 = fetchedUser.oauth2.find((o) => o.tokens.find((t) => t.accessToken === Encryption.encrypt(authHeader))); + const foundAccessToken = oauth2?.tokens.find((t) => t.accessToken === Encryption.encrypt(authHeader)); + + if (!oauth2 || !foundAccessToken) { + const unAuthorizedError = errorGen.UnAuthorized(); + + unAuthorizedError.addError({ + user: { + code: "InvalidToken", + message: "The token provided was invalid", + }, + }); + + set.status = 401; + + return { + success: false, + response: unAuthorizedError.toJSON(), + userSettings: null, + userData: null, + oauth2: null, + }; + } + + if ((foundAccessToken.expiresAt?.getTime() ?? 0) < Date.now()) { + const unAuthorizedError = errorGen.UnAuthorized(); + + unAuthorizedError.addError({ + user: { + code: "ExpiredToken", + message: "The token provided has expired", + }, + }); + + set.status = 401; + + return { + success: false, + response: unAuthorizedError.toJSON(), + userSettings: null, + userData: null, + oauth2: null, + }; + } + + const userSettings = await settingsTable.get( + { + userId: Encryption.encrypt(parsedUserId), + }, + { + fields: [ + "tokens", + "maxFileUploadSize", + "bio", + "guildOrder", + "language", + "privacy", + "theme", + "status", + "allowedInvites", + "customStatus", + "navLocation", + "emojiPack", + ], + }, + ); + + return { + success: true, + response: null, + oauth2: { + accessToken: authHeader, + refreshToken: Encryption.decrypt(foundAccessToken.refreshToken!), + isOauth2: true, + scopes: foundAccessToken.scopes as Scopes[], + }, + userSettings: userSettings as NullifyStuff, + userData: fetchedUser as NullifyStuff, + }; +}; + const userMiddleware = (options: UserMiddleware) => { return async ({ headers, @@ -43,11 +362,14 @@ const userMiddleware = (options: UserMiddleware) => { }: CreateRoute): Promise | UserMiddlewareType | string>> => { let authHeader = headers.authorization; const isBot = headers.authorization?.toLowerCase()?.startsWith("bot ") ?? false; + const isOauth2 = headers.authorization?.toLowerCase()?.startsWith("bearer ") ?? false; const unAuthorizedError = errorGen.UnAuthorized(); - if ((isBot && options.AllowedRequesters === "User") || (!isBot && options.AllowedRequesters === "Bot")) { - app.logger.debug(`Unexpected User Type ${isBot ? "Is Bot" : "Isn't Bot"}`); + const type: Requesters = isBot ? "Bot" : isOauth2 ? "OAuth" : "User"; + + if (!requesterCheck(type, options.allowedRequesters)) { + app.logger.debug(`Unexpected User Type ${isBot ? "Is Bot" : "Isn't Bot"}`, isBot, options.allowedRequesters); unAuthorizedError.addError({ user: { @@ -63,7 +385,7 @@ const userMiddleware = (options: UserMiddleware) => { authHeader = authHeader?.split(" ").length === 2 ? authHeader.split(" ")[1] : authHeader; - if (options.AccessType === "LoggedIn" && !authHeader) { + if (options.accessType === "LoggedIn" && !authHeader) { app.logger.debug("User isn't logged in though it is expected"); unAuthorizedError.addError({ @@ -78,7 +400,7 @@ const userMiddleware = (options: UserMiddleware) => { return unAuthorizedError.toJSON(); } - if (options.AccessType === "LoggedOut" && authHeader) { + if (options.accessType === "LoggedOut" && authHeader) { app.logger.debug("User is logged in though its not expected"); unAuthorizedError.addError({ @@ -93,93 +415,13 @@ const userMiddleware = (options: UserMiddleware) => { return unAuthorizedError.toJSON(); } - if (options.AccessType === "LoggedIn" && authHeader) { - const vaildatedToken = Token.validateToken(authHeader); - - if (!vaildatedToken) { - app.logger.debug("Token couldn't be validated"); - - unAuthorizedError.addError({ - user: { - code: "InvalidToken", - message: "The token provided was invalid", - }, - }); - - set.status = 401; - - return unAuthorizedError.toJSON(); - } - - const decodedToken = Token.decodeToken(authHeader); - - const userSettings = await settingsTable.get( - { - userId: Encryption.encrypt(decodedToken.Snowflake), - }, - { - fields: [ - "tokens", - "maxFileUploadSize", - "bio", - "guildOrder", - "language", - "privacy", - "theme", - "status", - "allowedInvites", - "customStatus", - "navLocation", - "emojiPack", - ], - }, - ); - - const userData = await usersTable.get( - { - userId: Encryption.encrypt(decodedToken.Snowflake), - }, - { - fields: ["email", "userId", "flags", "password", "publicFlags", "guilds", "username"], - }, - ); - - if (!userSettings || !userData) { - app.logger.debug("User settings wasn't found", decodedToken.Snowflake); - app.logger.debug(userData ?? "null", userSettings ?? "null"); - - unAuthorizedError.addError({ - user: { - code: "InvalidToken", - message: "The token provided was invalid", - }, - }); - - if ((userData && !userSettings) || (!userData && userSettings)) { - // darkerink: just in case there is one but not the other (has happened in very rare cases) contacting support will be the only way to fix this (for now); - set.status = 500; - - return "Internal Server Error :("; - } else { - set.status = 401; - - return unAuthorizedError.toJSON(); - } - } - - if (!userSettings?.tokens?.some((Token) => Token.token === Encryption.encrypt(authHeader as string))) { - app.logger.debug("Token not found in the user settings"); - - unAuthorizedError.addError({ - user: { - code: "InvalidToken", - message: "The token provided was invalid", - }, - }); - - set.status = 401; + if (options.accessType === "LoggedIn" && authHeader) { + const { oauth2, response, success, userData, userSettings } = isOauth2 + ? await oauth2Authenication({ authHeader, app, set }) + : await tokenAuthenication({ authHeader, app, set }); - return unAuthorizedError.toJSON(); + if (!success || !userData || !userSettings) { + return response as string; } const userFlags = new FlagFields(userData.flags ?? "0", userData.publicFlags ?? "0"); @@ -194,7 +436,7 @@ const userMiddleware = (options: UserMiddleware) => { accountNotAvailableError.addError({ email: { - code: "AccountDeleted", + code: userFlags.has("AccountDeleted") ? "AccountDeleted" : "AccountDataUpdate", message: "The Account has been deleted", }, }); @@ -219,15 +461,11 @@ const userMiddleware = (options: UserMiddleware) => { return accountNotAvailableError.toJSON(); } - if ( - (isBot && (!userFlags.PrivateFlags.has("Bot") || !userFlags.PrivateFlags.has("VerifiedBot"))) || - (!isBot && (userFlags.PrivateFlags.has("Bot") || userFlags.PrivateFlags.has("VerifiedBot"))) - ) { + if ((isBot && !userFlags.PrivateFlags.has("Bot")) || (!isBot && userFlags.PrivateFlags.has("Bot"))) { app.logger.debug( "The user has a (or is missing) a flag its not meant to (bot) and is using an invalid header tbh idk how to log this well", isBot, - (!isBot && userFlags.PrivateFlags.has("Bot")) || userFlags.PrivateFlags.has("VerifiedBot"), - (isBot && !userFlags.PrivateFlags.has("Bot")) || !userFlags.PrivateFlags.has("VerifiedBot"), + userFlags.PrivateFlags.has("Bot"), ); unAuthorizedError.addError({ @@ -242,33 +480,13 @@ const userMiddleware = (options: UserMiddleware) => { return unAuthorizedError.toJSON(); } - if ( - options.AllowedRequesters.includes("User") && - (userFlags.PrivateFlags.has("Bot") || userFlags.PrivateFlags.has("VerifiedBot")) - ) { + if (!requesterCheck(type, options.allowedRequesters, options.oAuth2Scopes ?? [], oauth2?.scopes ?? [])) { + // ! I think we can trust the type here? app.logger.debug("User only endpoint though user is a bot"); unAuthorizedError.addError({ user: { - code: "InvalidToken", - message: "You are not allowed to access this endpoint.", - }, - }); - - set.status = 401; - - return unAuthorizedError.toJSON(); - } - - if ( - options.AllowedRequesters.includes("Bot") && - !(userFlags.PrivateFlags.has("Bot") || userFlags.PrivateFlags.has("VerifiedBot")) - ) { - app.logger.debug("Bot only endpoint though user is not a bot"); - - unAuthorizedError.addError({ - user: { - code: "InvalidToken", + code: "InvalidUserType", message: "You are not allowed to access this endpoint.", }, }); @@ -278,15 +496,15 @@ const userMiddleware = (options: UserMiddleware) => { return unAuthorizedError.toJSON(); } - if (options.Flags && options.Flags.length > 0) { - for (const flag of options.Flags) { + if (options.flags && options.flags.length > 0) { + for (const flag of options.flags) { if (!userFlags.PrivateFlags.has(flag)) { app.logger.debug(`User is missing the ${flag} flag`); unAuthorizedError.addError({ user: { - code: "LostInTheMaze", - message: "You seemed to have gotten lost in the maze.. Are you sure it was meant for you?", + code: "WrongTurn", + message: "Oop's, seems you made the wrong turn into the boss's office.", }, }); @@ -297,15 +515,15 @@ const userMiddleware = (options: UserMiddleware) => { } } - if (options.DisallowedFlags && options.DisallowedFlags.length > 0) { - for (const flag of options.DisallowedFlags) { + if (options.disallowedFlags && options.disallowedFlags.length > 0) { + for (const flag of options.disallowedFlags) { if (userFlags.PrivateFlags.has(flag)) { app.logger.debug(`User has the ${flag} flag`); unAuthorizedError.addError({ user: { - code: "LostInTheMaze", - message: "You seemed to have gotten lost in the maze.. Are you sure it was meant for you?", // yes this is a joke for Discord's staff only endpoints + code: "WrongTurn", + message: "Oop's, seems you made the wrong turn into the boss's office.", }, }); @@ -322,30 +540,51 @@ const userMiddleware = (options: UserMiddleware) => { publicFlags: (userData.publicFlags ?? "").toString(), }); + const bot = userFlags.PrivateFlags.has("Bot") || userFlags.PrivateFlags.has("VerifiedBot"); + return { user: { token: authHeader, - bot: userFlags.PrivateFlags.has("Bot") || userFlags.PrivateFlags.has("VerifiedBot"), + bot, flagsUtil: userFlags, - email: completeDecrypted.email, - id: completeDecrypted.userId, - password: completeDecrypted.password, - guilds: completeDecrypted.guilds ?? [], - username: completeDecrypted.username, + email: completeDecrypted.email!, + id: completeDecrypted.userId!, + password: completeDecrypted.password!, + guilds: completeDecrypted.guilds, + username: completeDecrypted.username!, settings: Encryption.completeDecryption({ bio: userSettings.bio, - guildOrder: userSettings.guildOrder ?? [], - language: userSettings.language, - privacy: userSettings.privacy, - status: userSettings.status, - theme: userSettings.theme, + guildOrder: userSettings.guildOrder as { guildId: string; position: number }[], + language: userSettings.language ?? "en-US", + privacy: userSettings.privacy ?? 0, + status: userSettings.status ?? 0, + theme: userSettings.theme ?? "dark", allowedInvites: userSettings.allowedInvites ?? 0, customStatus: userSettings.customStatus, - navBarLocation: userSettings.navLocation ?? "bottom", - emojiPack: userSettings.emojiPack ?? "twemoji", - }), + navBarLocation: (userSettings.navLocation as "bottom" | "left") ?? "bottom", + emojiPack: (userSettings.emojiPack as "fluentui-emoji" | "native" | "noto-emoji" | "twemoji") ?? "twemoji", + maxFileUploadSize: userSettings.maxFileUploadSize ?? app.constants.settings.Max.MaxFileSize, + } satisfies UserMiddlewareType["user"]["settings"]), + oauth2: oauth2 ?? { + accessToken: null, + isOauth2: false, + refreshToken: null, + scopes: [], + }, + checkInGuild: async (guildId: string) => { + if (!bot) { + return completeDecrypted.guilds.includes(guildId); + } + + const foundGuildTable = await botsGuildsTable.get({ + botId: Encryption.encrypt(completeDecrypted.userId!), + guildId: Encryption.encrypt(guildId), + }); + + return !!foundGuildTable; + }, }, - }; + } satisfies UserMiddlewareType; } return ""; diff --git a/src/Routes/auth/forgot.ts b/src/Routes/auth/forgot.ts index b07a5db7..c7cdc83d 100644 --- a/src/Routes/auth/forgot.ts +++ b/src/Routes/auth/forgot.ts @@ -5,7 +5,6 @@ import forgotPassword from "@/Emails/ForgotPassword.tsx"; import bodyValidator from "@/Middleware/BodyValidator.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { string } from "@/Types/BodyValidation.ts"; -import type API from "@/Utils/Classes/API.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; @@ -16,16 +15,14 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; import Token from "@/Utils/Classes/Token.ts"; import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; import { verificationLinksTable } from "@/Utils/Cql/Tables/VerificationLinkTable.ts"; +import type API from "@/Utils/Classes/API.ts"; +import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; const forgotPasswordBody = { email: string().email(), }; export default class ForgotPassword extends Route { - public constructor(App: API) { - super(App); - } - @Method("post") @Description("Reset a forgotten password") @ContentTypes("application/json") @@ -33,19 +30,30 @@ export default class ForgotPassword extends Route { public async postForgot({ body, set, ip }: CreateRoute<"/forgot", Infer>) { const user = await usersTable.get( { email: Encryption.encrypt(body.email) }, - { fields: ["userId", "email", "username"] }, + { fields: ["userId", "email", "username", "flags"] }, ); if (!user) { // ? 204 means we successfully did nothing, though the client should always interpret this as a success set.status = 204; - + this.App.logger.debug(`User with email ${body.email} does not exist`); return; } + + const flags = new FlagFields(user.flags ?? "0", "0"); - const generated = this.generateEmailToken(body.email); + if (flags.has("Bot")) { + // ? 204 means we successfully did nothing, though the client should always interpret this as a success + set.status = 204; + + this.App.logger.debug(`User with email ${body.email} is a bot`); + + return; + } + + const generated = ForgotPassword.generateEmailToken(body.email, this.App); await verificationLinksTable.create({ code: Encryption.encrypt(generated.token), @@ -57,20 +65,20 @@ export default class ForgotPassword extends Route { ip: Encryption.encrypt(ip), }); - const renderedEmail = render( + const renderedEmail = await render( forgotPassword( Encryption.decrypt(user.username ?? "Unknown User"), - `https://development.kastelapp.com/reset/${generated.id}/${generated.token}`, + `http${this.App.config.server.secure ? "s" : ""}://${this.App.config.server.domain}/reset/${generated.id}/${generated.token}`, ), { pretty: false, }, ); - const renderedText = render( + const renderedText = await render( forgotPassword( Encryption.decrypt(user.username ?? "Unknown User"), - `https://development.kastelapp.com/reset/${generated.id}/${generated.token}`, + `http${this.App.config.server.secure ? "s" : ""}://${this.App.config.server.domain}/reset/${generated.id}/${generated.token}`, ), { pretty: false, @@ -78,15 +86,15 @@ export default class ForgotPassword extends Route { }, ); - void this.App.sendEmail("NoReply", body.email, "Reset your password", renderedEmail, renderedText); + this.App.sendEmail("NoReply", body.email, "Reset your password", renderedEmail, renderedText); set.status = 204; - + this.App.logger.info(`Sent forgot password email to ${body.email}`); } - public generateEmailToken(email: string) { - const snowflake = this.App.snowflake.generate(); + public static generateEmailToken(email: string, app: API) { + const snowflake = app.snowflake.generate(); const rawToken = Bun.SHA512.hash(Encryption.encrypt(`${snowflake}.${email}.${Token.generateToken(snowflake)}`)); // typed array diff --git a/src/Routes/auth/login.ts b/src/Routes/auth/login.ts index bfc02d68..a874999f 100644 --- a/src/Routes/auth/login.ts +++ b/src/Routes/auth/login.ts @@ -3,7 +3,6 @@ import bodyValidator from "@/Middleware/BodyValidator.ts"; import userMiddleware from "@/Middleware/User.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { string } from "@/Types/BodyValidation.ts"; -import type API from "@/Utils/Classes/API.ts"; import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; @@ -24,17 +23,13 @@ const postLoginBody = { }; export default class Login extends Route { - public constructor(App: API) { - super(App); - } - @Method("post") @Description("Login to an existing account") @ContentTypes("application/json") @Middleware( userMiddleware({ - AccessType: "LoggedOut", - AllowedRequesters: "User", + accessType: "LoggedOut", + allowedRequesters: "User", }), ) @Middleware(bodyValidator(postLoginBody)) @@ -55,6 +50,23 @@ export default class Login extends Route { return error.toJSON(); } + + const flags = new FlagFields(fetchedUser.flags ?? "0", fetchedUser.publicFlags ?? "0"); + + if (flags.has("Bot")) { + const error = errorGen.InvalidCredentials(); + + error.addError({ + login: { + code: "BadLogin", + message: "The Email or Password provided were invalid or missing.", + }, + }); + + set.status = 401; + + return error.toJSON(); + } if (!fetchedUser.password) { const error = errorGen.InvalidCredentials(); @@ -88,8 +100,6 @@ export default class Login extends Route { return error.toJSON(); } - const flags = new FlagFields(fetchedUser.flags ?? "0", fetchedUser.publicFlags ?? "0"); - if (flags.has("AccountDeleted")) { const error = errorGen.AccountNotAvailable(); diff --git a/src/Routes/auth/logout.ts b/src/Routes/auth/logout.ts index b3c79904..ab740be1 100644 --- a/src/Routes/auth/logout.ts +++ b/src/Routes/auth/logout.ts @@ -1,6 +1,5 @@ import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; -import type API from "@/Utils/Classes/API.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; @@ -11,17 +10,13 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; import { settingsTable } from "@/Utils/Cql/Tables/SettingsTable.ts"; export default class Logout extends Route { - public constructor(App: API) { - super(App); - } - @Method("delete") @Description("Delete the current session") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async deleteLogout({ user, set }: CreateRoute<"/logout", any, [UserMiddlewareType]>) { diff --git a/src/Routes/auth/register.ts b/src/Routes/auth/register.ts index 8c9de220..0afb6770 100644 --- a/src/Routes/auth/register.ts +++ b/src/Routes/auth/register.ts @@ -1,9 +1,10 @@ -import { statusTypes } from "@/Constants.ts"; +import Constants, { statusTypes } from "@/Constants.ts"; +import registration from "@/Emails/Registration.tsx"; import bodyValidator from "@/Middleware/BodyValidator.ts"; import userMiddleware from "@/Middleware/User.ts"; +import ForgotPassword from "@/Routes/auth/forgot.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { string } from "@/Types/BodyValidation.ts"; -import type API from "@/Utils/Classes/API.ts"; import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; @@ -17,7 +18,9 @@ import Token from "@/Utils/Classes/Token.ts"; import { platformInviteTable } from "@/Utils/Cql/Tables/PlatformInviteTable.ts"; import { type SettingsTable, settingsTable } from "@/Utils/Cql/Tables/SettingsTable.ts"; import { usersTable, type UserTable } from "@/Utils/Cql/Tables/UserTable.ts"; +import { verificationLinksTable } from "@/Utils/Cql/Tables/VerificationLinkTable.ts"; import tagGenerator from "@/Utils/TagGenerator.ts"; +import { render } from "@react-email/render"; const postRequestBody = { email: string().email(), @@ -30,17 +33,13 @@ const postRequestBody = { export default class Register extends Route { public maxUsernames = 6_000; // You can create 9999 users with the same username, but on registration, it will be limited to 6000 - public constructor(App: API) { - super(App); - } - @Method("post") @Description("Register a new account") @ContentTypes("application/json") @Middleware( userMiddleware({ - AccessType: "LoggedOut", - AllowedRequesters: "User", + accessType: "LoggedOut", + allowedRequesters: "User", }), ) @Middleware(bodyValidator(postRequestBody)) @@ -124,6 +123,7 @@ export default class Register extends Route { userId: Encryption.encryptedSnowflake(), username: Encryption.encrypt(body.username), usernameTag: Encryption.encrypt(`${body.username}#${tag}`), + oauth2: [] }; const token = Token.generateToken(Encryption.decrypt(userObject.userId!)); @@ -133,7 +133,6 @@ export default class Register extends Route { language: "en-US", maxFileUploadSize: this.App.constants.settings.Max.MaxFileSize, maxGuilds: this.App.constants.settings.Max.GuildCount, - mentions: [], privacy: 0, status: statusTypes.offline | statusTypes.online, theme: "dark", @@ -166,7 +165,44 @@ export default class Register extends Route { ); } - await Promise.all([usersTable.create(userObject), settingsTable.create(settignsObject)]); + const generatedToken = ForgotPassword.generateEmailToken(body.email, this.App); + + await Promise.all([ + usersTable.create(userObject), + settingsTable.create(settignsObject), + verificationLinksTable.create({ + code: Encryption.encrypt(generatedToken.token), + createdDate: new Date(), + expireDate: new Date(Date.now() + 1_000 * 60 * 60 * 24 * 3), // ? 3 days + userId: userObject.userId!, + flags: Constants.verificationFlags.VerifyEmail, + id: Encryption.encrypt(generatedToken.id), + ip: Encryption.encrypt(ip), + }), + ]); + + const renderedEmail = await render( + registration( + Encryption.decrypt(userObject.username ?? "Unknown User"), + `http${this.App.config.server.secure ? "s" : ""}://${this.App.config.server.domain}/verify/${generatedToken.id}/${generatedToken.token}`, + ), + { + pretty: false, + }, + ); + + const renderedText = await render( + registration( + Encryption.decrypt(userObject.username ?? "Unknown User"), + `http${this.App.config.server.secure ? "s" : ""}://${this.App.config.server.domain}/verify/${generatedToken.id}/${generatedToken.token}`, + ), + { + pretty: false, + plainText: true, + }, + ); + + this.App.sendEmail("NoReply", body.email, "Welcome to Kastel!", renderedEmail, renderedText); return { token, diff --git a/src/Routes/auth/reset.ts b/src/Routes/auth/reset.ts index 69e8d1e4..e4dcc588 100644 --- a/src/Routes/auth/reset.ts +++ b/src/Routes/auth/reset.ts @@ -2,7 +2,6 @@ import { statusTypes, verificationFlags } from "@/Constants.ts"; import bodyValidator from "@/Middleware/BodyValidator.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { snowflake, string } from "@/Types/BodyValidation.ts"; -import type API from "@/Utils/Classes/API.ts"; import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; @@ -24,14 +23,10 @@ const patchResetBody = { const postResetBody = { id: snowflake(), - token: string(), + token: string().min(16), }; export default class ResetPassword extends Route { - public constructor(App: API) { - super(App); - } - @Method("patch") @Description("Reset your password") @ContentTypes("application/json") @@ -105,7 +100,6 @@ export default class ResetPassword extends Route { language: "en-US", maxFileUploadSize: this.App.constants.settings.Max.MaxFileSize, maxGuilds: this.App.constants.settings.Max.GuildCount, - mentions: [], privacy: 0, status: statusTypes.offline | statusTypes.online, customStatus: null, diff --git a/src/Routes/emails/see.ts b/src/Routes/emails/see.ts index f83510b0..25268d9f 100644 --- a/src/Routes/emails/see.ts +++ b/src/Routes/emails/see.ts @@ -1,7 +1,6 @@ import { join } from "node:path"; import process from "node:process"; import { render } from "@react-email/render"; -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; @@ -11,7 +10,7 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; const isRegisted = ( type: T, deaf: unknown, -): deaf is { default(username: string, verificationCode: string, deleteAccountUrl: string): JSX.Element } => { +): deaf is { default(username: string, verificationCode: string): JSX.Element } => { return ( type === "Registration" && typeof deaf === "object" && @@ -21,19 +20,32 @@ const isRegisted = ( ); }; +const isRecentLogin = ( + type: T, + deaf: unknown, +): deaf is { + default(username: string, formattedDate: string, device: string, platform: string, ip: string): JSX.Element; +} => { + return ( + type === "RecentLogin" && + typeof deaf === "object" && + deaf !== null && + "default" in deaf && + typeof deaf.default === "function" + ); +}; + export default class Index extends Route { public emailDirectory: string = join(import.meta.dirname, "../../Emails"); - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Get the features of the API") @ContentTypes("any") public async Request({ query, set, + headers, + ip, }: CreateRoute< "/", any, @@ -69,11 +81,37 @@ export default class Index extends Route { } if (isRegisted(query.type, imported)) { - const rendered = render( + const rendered = await render( + imported.default(query.username ?? "User", query.verificationCode ?? "https://example.com/verify/1234567890"), + { + pretty: true, + }, + ); + + set.status = 200; + set.headers = { + "Content-Type": "text/html", + }; + + return rendered; + } else if (isRecentLogin(query.type, imported)) { + const device = this.detectDevice(headers["user-agent"] ?? ""); + + const rendered = await render( imported.default( query.username ?? "User", - query.verificationCode ?? "https://example.com/verify/1234567890", - query.deleteAccountUrl ?? "https://example.com/delete/1234567890", + new Date().toLocaleString("en-US", { + timeZone: "UTC", + year: "numeric", + month: "long", + day: "numeric", + hour: "numeric", + minute: "numeric", + second: "numeric", + }), + device, + "Web", + ip, ), { pretty: true, @@ -81,13 +119,14 @@ export default class Index extends Route { ); set.status = 200; + set.headers = { "Content-Type": "text/html", }; return rendered; } else { - const rendered = render(imported.default(), { + const rendered = await render(imported.default(), { pretty: true, }); @@ -100,4 +139,28 @@ export default class Index extends Route { return rendered; } } + + // todo: add this to the frontend + private detectDevice(userAgent: string): string { + const deviceRegex = /Macintosh|Windows|Linux|iPhone|iPad|Android|CrOS/; + + const match = userAgent.match(deviceRegex); + const matched = match?.[0]; + + if (!matched) { + return "Unknown Device"; + } + + const mappings = { + Macintosh: "Mac", + Windows: "Windows", + Linux: "Linux", + iPhone: "iOS", + iPad: "iOS", + Android: "Android", + CrOS: "Chrome OS", + }; + + return mappings[matched as keyof typeof mappings] ?? "Unknown Device"; + } } diff --git a/src/Routes/index.ts b/src/Routes/index.ts index f3358762..21b308b1 100644 --- a/src/Routes/index.ts +++ b/src/Routes/index.ts @@ -1,32 +1,16 @@ -// import { -// allowedMentions, -// auditLogActions, -// channelTypes, -// guildFeatures, -// inviteFlags, -// messageFlags, -// permissionOverrideTypes, -// permissions, -// presenceTypes, -// publicFlags, -// statusTypes, -// relationshipFlags, -// privateFlags -// } from "@/Constants.ts" -import type API from "@/Utils/Classes/API.ts"; +import ratelimitMiddleware from "@/Middleware/RateLimit.ts"; +import RateLimits from "@/RateLimits.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; +import Middleware from "@/Utils/Classes/Routing/Decorators/Middleware.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class Index extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Get the features of the API") @ContentTypes("any") + @Middleware(ratelimitMiddleware(RateLimits.home.get)) public Request() { const apiVersions = Object.keys(this.App.router.routes) .map((route) => { @@ -53,25 +37,6 @@ export default class Index extends Route { latest: apiVersions[apiVersions.length - 1] ?? 0, }, features: this.App.config.server.features ?? [], - // constants: { // ? NOTE: to any bot devs, do not rely on the API provided constants. Please hard code them into your library. - // allowedMentions, - // auditLogActions, - // channelTypes, - // guildFeatures: Object.values(guildFeatures).filter((feature) => feature.settable && !feature.deprecated).map((feature) => feature.name), - // inviteFlags, - // messageFlags, - // permissionOverrideTypes, - // permissions, - // presenceTypes, - // publicFlags, - // relationshipFlags, - // privateFlags: { - // Spammer: privateFlags.Spammer, - // VerifiedBot: privateFlags.VerifiedBot, - // Bot: privateFlags.Bot, - // }, - // statusTypes - // } }), ); } diff --git a/src/Routes/oauth2/authorize.ts b/src/Routes/oauth2/authorize.ts new file mode 100644 index 00000000..19c92483 --- /dev/null +++ b/src/Routes/oauth2/authorize.ts @@ -0,0 +1,851 @@ +import Constants, { applicationFlags, applicationScopes, Scopes } from "@/Constants.ts"; +import type { UserMiddlewareType } from "@/Middleware/User.ts"; +import userMiddleware from "@/Middleware/User.ts"; +import FlagUtilsBInt from "@/Utils/Classes/BitFields/NewFlags.ts"; +import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; +import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import errorGen from "@/Utils/Classes/ErrorGen.ts"; +import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; +import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; +import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; +import Middleware from "@/Utils/Classes/Routing/Decorators/Middleware.ts"; +import type { CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; +import Route from "@/Utils/Classes/Routing/Route.ts"; +import { applicationsTable } from "@/Utils/Cql/Tables/ApplicationTable.ts"; +import { botsGuildsTable } from "@/Utils/Cql/Tables/BotGuildsTable.ts"; +import { guildMembersTable, type GuildMemberTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; +import { guildsTable } from "@/Utils/Cql/Tables/GuildTable.ts"; +import { rolesTable, type RoleTable } from "@/Utils/Cql/Tables/RoleTable.ts"; +import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; +import safeParse from "@/Utils/safeParse.ts"; +import PermissionHandler from "@/Utils/Versioning/v1/PermissionCheck.ts"; + +interface BotUser { + avatar: string | null; + bio?: string | null; + flags: string; + globalNickname: string | null; + id: string; + publicFlags: string; + tag: string; + username: string; +} + +interface GetAuthorizeReturnType { + guilds: { + id: string; + name: string; + icon: string | null; + features: string[]; + permissions: [string, string][]; + }[]; + bot: BotUser | null; + application: { + avatar: string | null; + botId: string | null; + flags: string; + name: string; + }; + authorized: boolean; // ? if the user has authorized the application before +} + +interface RedisStateStorage { + applicationId: string; + scopes: string[]; + expiresAt: number; // ? max is 10 minutes, though we do 60s + userId: string; + redirectUri: string; +} + +export default class FetchPatch extends Route { + @Method("get") + @Description("Gets all the guilds you can authorize a bot in") + @ContentTypes("any") + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: ["User"], + }), + ) + public async getAuthorizeGuilds({ + user, + set, + query, + }: CreateRoute< + "/oauth2/authorize", + any, + [UserMiddlewareType], + any, + { + client_id: string; + response_type?: string; + redirect_uri?: string; + scope: string; + } + >) { + if (!query.client_id || !query.scope) { + const error = errorGen.InvalidQuery(); + + if (!query.client_id) { + error.addError({ + client_id: { + code: "InvalidQuery", + message: "client_id is required", + }, + }); + } + + if (!query.scope) { + error.addError({ + scope: { + code: "InvalidQuery", + message: "scope is required", + }, + }); + } + + set.status = 400; + + return error.toJSON(); + } + + if (query.response_type && query.response_type !== "code") { + const error = errorGen.InvalidQuery(); + + error.addError({ + response_type: { + code: "InvalidQuery", + message: "response_type must be code", + }, + }); + + set.status = 400; + + return error.toJSON(); + } + + if (query.response_type && !query.redirect_uri) { + const error = errorGen.InvalidQuery(); + + error.addError({ + redirect_uri: { + code: "InvalidQuery", + message: "redirect_uri is required", + }, + }); + + set.status = 400; + + return error.toJSON(); + } + + const splitScopes = query.scope.split(" "); + + const application = await applicationsTable.get( + { + applicationId: Encryption.encrypt(query.client_id), + }, + { + fields: ["avatar", "botId", "flags", "name", "description"], + }, + ); + + if (!application) { + const error = errorGen.UnknownApplication(); + + error.addError({ + client_id: { + code: "UnknownApplication", + message: "The provided client_id does not exist", + }, + }); + + set.status = 404; + + return error.toJSON(); + } + + const foundBot = + splitScopes.includes(Scopes.Bot) && application.botId + ? await usersTable.get( + { + userId: application.botId, + }, + { + fields: ["avatar", "flags", "globalNickname", "publicFlags", "tag", "username"], + }, + ) + : null; + + if (splitScopes.includes(Scopes.Bot) && !foundBot) { + const notABot = errorGen.InvalidScope(); + + notABot.addError({ + scope: { + code: "InvalidScope", + message: "The provided application is not a bot", + }, + }); + + set.status = 400; + + return notABot.toJSON(); + } + + const guilds = ( + await Promise.all( + user.guilds.map(async (guildId) => { + const guild = await guildsTable.get( + { + guildId: Encryption.encrypt(guildId), + }, + { + fields: ["name", "icon", "features"], + }, + ); + + if (!guild) { + return null; + } + + const guildMember = await guildMembersTable.get({ + guildId: Encryption.encrypt(guildId), + userId: Encryption.encrypt(user.id), + left: false, + }); + + if (!guildMember) { + return null; + } + + const roles = ( + await Promise.all( + guildMember.roles.map(async (id) => + rolesTable.get( + { roleId: id, guildId: Encryption.encrypt(id) }, + { fields: ["roleId", "permissions", "position"] }, + ), + ), + ) + ).filter((val) => val !== null); + + const permissionCheck = new PermissionHandler( + user.id, + guildMember.flags ?? 0, + roles.map((role) => ({ + id: role.roleId!, + permissions: Permissions.permissionFromDatabase(role.permissions), + position: role.position!, + })), + [], + ); + + return { + id: guildId, + name: Encryption.decrypt(guild.name ?? ""), + icon: guild.icon, + features: guild.features, + permissions: permissionCheck.topMostPermissions, + }; + }), + ) + ).filter((val) => val !== null); + + const fetchedUser = await usersTable.get( + { + userId: Encryption.encrypt(user.id), + }, + { + fields: ["oauth2"], + }, + ); + + if (!fetchedUser) { + set.status = 500; + + return "Internal Server Error :("; + } + + return Encryption.completeDecryption({ + guilds, + bot: foundBot + ? ({ + avatar: foundBot.avatar, + bio: application.description, + flags: foundBot.flags ?? "0", + globalNickname: foundBot.globalNickname, + id: application.botId!, + publicFlags: foundBot.publicFlags ?? "0", + tag: foundBot.tag!, + username: foundBot.username!, + } satisfies BotUser) + : null, + application: { + avatar: application.avatar, + botId: application.botId, + flags: application.flags ?? "0", + name: application.name!, + }, + authorized: + fetchedUser.oauth2.find((val) => val.applicationId === Encryption.encrypt(query.client_id)) !== undefined, + } satisfies GetAuthorizeReturnType); + } + + @Method("post") + @Description("authorizes a application") + @ContentTypes("any") + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: ["User"], + }), + ) + public async postAuthorization({ + set, + user, + query, + }: CreateRoute< + "/oauth2/authorize", + any, + [UserMiddlewareType], + any, + { + client_id: string; + response_type?: string; + redirect_uri?: string; + scope: string; + permissions?: string; // ? permissions is a base64 encoded array of array of strings + guild_id?: string; + } + >) { + if (!query.client_id || !query.scope) { + const error = errorGen.InvalidQuery(); + + if (!query.client_id) { + error.addError({ + client_id: { + code: "InvalidQuery", + message: "client_id is required", + }, + }); + } + + if (!query.scope) { + error.addError({ + scope: { + code: "InvalidQuery", + message: "scope is required", + }, + }); + } + + set.status = 400; + + return error.toJSON(); + } + + if (query.response_type && query.response_type !== "code") { + const error = errorGen.InvalidQuery(); + + error.addError({ + response_type: { + code: "InvalidQuery", + message: "response_type must be code", + }, + }); + + set.status = 400; + + return error.toJSON(); + } + + if (query.response_type && !query.redirect_uri) { + const error = errorGen.InvalidQuery(); + + error.addError({ + redirect_uri: { + code: "InvalidQuery", + message: "redirect_uri is required", + }, + }); + + set.status = 400; + + return error.toJSON(); + } + + const splitScopes = query.scope.split(" "); + + // ? scopes is a enum, lets confirm the scopes provided are valid + const invalidScopes = splitScopes.filter((val) => !Object.values(Scopes).includes(val as Scopes)); + + if (invalidScopes.length > 0) { + const error = errorGen.InvalidScope(); + + error.addError({ + scope: { + code: "InvalidScope", + message: "The provided scopes are invalid", + invalidScopes, + }, + }); + + set.status = 400; + + return error.toJSON(); + } + + const application = await applicationsTable.get( + { + applicationId: Encryption.encrypt(query.client_id), + }, + { + fields: ["avatar", "botId", "flags", "name", "description", "allowedScopes", "ownerId", "redirectUris"], + }, + ); + + if (!application) { + const error = errorGen.UnknownApplication(); + + error.addError({ + client_id: { + code: "UnknownApplication", + message: "The provided client_id does not exist", + }, + }); + + set.status = 404; + + return error.toJSON(); + } + + // ? if they do not have a redirect_uri and they have more scopes then just bot, we should return an error (i.e they can have just bot and no redirect_uri) + if ((!query.redirect_uri && splitScopes.length > 1) || (!query.redirect_uri && !splitScopes.includes(Scopes.Bot))) { + const error = errorGen.InvalidQuery(); + + error.addError({ + redirect_uri: { + code: "InvalidQuery", + message: "redirect_uri is required", + }, + }); + + set.status = 400; + + return error.toJSON(); + } + + const scopesField = new FlagUtilsBInt(application.allowedScopes ?? "0", applicationScopes); + const applicationFields = new FlagUtilsBInt(application.flags ?? "0", applicationFlags); + + if (applicationFields.has("Disabled")) { + const disabledApplication = errorGen.ApplicationDisabled(); + + disabledApplication.addError({ + client_id: { + code: "ApplicationDisabled", + message: "The provided application is disabled", + }, + }); + + set.status = 403; + + return disabledApplication.toJSON(); + } + + if (applicationFields.has("Private") && application.ownerId !== Encryption.encrypt(user.id)) { + const privateApplication = errorGen.ApplicationPrivate(); + + privateApplication.addError({ + client_id: { + code: "ApplicationPrivate", + message: "The provided application is private", + }, + }); + + set.status = 403; + + return privateApplication.toJSON(); + } + + if (query.redirect_uri && !application.redirectUris.includes(Encryption.encrypt(query.redirect_uri))) { + const invalidRedirectUri = errorGen.InvalidQuery(); + + invalidRedirectUri.addError({ + redirect_uri: { + code: "InvalidQuery", + message: "The provided redirect_uri is invalid", + }, + }); + + set.status = 400; + + return invalidRedirectUri.toJSON(); + } + + if (splitScopes.includes(Scopes.Bot) && !query.guild_id) { + const error = errorGen.InvalidQuery(); + + error.addError({ + guild_id: { + code: "InvalidQuery", + message: "guild_id is required", + }, + }); + + set.status = 400; + + return error.toJSON(); + } + + const oauthParams = new URLSearchParams(); + + if ( + (splitScopes.includes(Scopes.MessageCreate) || + splitScopes.includes(Scopes.MessageDelete) || + splitScopes.includes(Scopes.MessageUpdate)) && + !scopesField.has("MessageBasedScopes") + ) { + oauthParams.append("error", "invalid_scope"); + oauthParams.append("error_description", "The provided scopes are malformed, unknown or invalid"); + + return { + location: `${decodeURIComponent(query.redirect_uri!)}?${oauthParams.toString()}`, + }; + } + + if (splitScopes.includes(Scopes.Bot) && query.guild_id) { + if (!user.guilds.includes(query.guild_id!)) { + const invalidGuild = errorGen.UnknownGuild(); + + invalidGuild.addError({ + guildId: { + code: "UnknownGuild", + message: "The provided guild does not exist, or you do not have access to it.", + }, + }); + + set.status = 404; + + return invalidGuild.toJSON(); + } + + const validatedPermissions = this.decodeAndValidatePermissions( + query.permissions ?? Buffer.from(JSON.stringify([])).toString("base64"), + ); + + const added = await this.addBotToGuild({ + guildId: query.guild_id, + permissions: validatedPermissions ?? [], + clientId: query.client_id, + set, + userId: user.id, + applicationName: Encryption.decrypt(application.name ?? "") + }) + + if (!added.success) { + return added.response + } + } + + if (!query.redirect_uri && splitScopes.includes(Scopes.Bot)) { + return { + // ? this is for our custom bot shit + location: `http${this.App.config.server.secure ? "s" : ""}://${this.App.config.server.domain}/oauth2/authorized`, + }; + } + + const generatedCode = Encryption.generateCode(); + + const expiresAt = Date.now() + 1000 * 60 + + await this.App.cache.set( + `oauth2:${Encryption.encrypt(query.client_id)}:${Encryption.encrypt(generatedCode)}:${expiresAt}`, // ? for easier deletion + { + applicationId: Encryption.encrypt(query.client_id), + expiresAt, + scopes: splitScopes, + userId: Encryption.encrypt(user.id), + redirectUri: Encryption.encrypt(query.redirect_uri!) + }, + ); + + oauthParams.append("code", generatedCode); + + // note: Unless the application uses the generated code to generate an access token / refresh token we do not add the authorized app to their array + // note: this is due to the fact that they might have authorized it but the code hasn't been used yet so if you deauthed it couldn't do anything + // ! could be seen as a security issue? where you authorize something by mistake and you want to quickly deauth it but in reality even if you could + // ! the code only lasts 60 seconds so by the time you get to settings to deauth it the code would be expired (if they did nothing with it) or already used + + return { + location: `${decodeURIComponent(query.redirect_uri!)}?${oauthParams.toString()}`, + }; + } + + /** + * Permissions for oauth2 are encoded in base64. When decoded they should return an array of arrays of strings (i.e [["1", "0"]]) + * + * This function decodes, and validates them and then returns the decoded permissions + * @param permissions Base64 encoded permissions + */ + private decodeAndValidatePermissions(permissions: string) { + const decoded = Buffer.from(permissions, "base64").toString("utf-8"); + + const parsed = safeParse(decoded); + + if (!parsed) { + return null; + } + + if (!Array.isArray(parsed)) { + return null; + } + + // ? The arrays can have a maximum of 2 elements per array + if (parsed.some((val) => !Array.isArray(val) || val.length > 2)) { + return null; + } + + const permissionHandler = new Permissions(parsed); + + return permissionHandler.normizedBits; + } + + private async addBotToGuild({ + guildId, + permissions, + set, + userId, + clientId, + applicationName + }: { + userId: string; + guildId: string; + permissions: [string, string][]; + clientId: string; + set: CreateRoute["set"]; + applicationName: string + }): Promise<{ + success: boolean; + response: unknown | null; + }> { + const guild = await guildsTable.get( + { + guildId: Encryption.encrypt(guildId), + }, + { + fields: ["name", "icon", "features", "maxMembers", "members"], + }, + ); + + if (!guild) { + set.status = 404; + + const invalidGuild = errorGen.UnknownGuild(); + + invalidGuild.addError({ + guildId: { + code: "UnknownGuild", + message: "The provided guild does not exist", + }, + }); + + return { + success: false, + response: invalidGuild.toJSON(), + }; + } + + const guildMember = await guildMembersTable.get({ + guildId: Encryption.encrypt(guildId), + userId: Encryption.encrypt(userId), + left: false, + }, { + fields: ["flags", "roles"] + }); + + if (!guildMember) { + set.status = 404; + + const invalidGuild = errorGen.UnknownGuild(); + + invalidGuild.addError({ + guildId: { + code: "UnknownGuild", + message: "The provided guild does not exist", + }, + }); + + return { + success: false, + response: invalidGuild.toJSON(), + }; + } + + const roles = ( + await Promise.all( + guildMember.roles.map(async (id) => + rolesTable.get( + { roleId: id, guildId: Encryption.encrypt(id) }, + { fields: ["roleId", "permissions", "position"] }, + ), + ), + ) + ).filter((val) => val !== null); + + const permissionCheck = new PermissionHandler( + userId, + guildMember.flags ?? 0, + roles.map((role) => ({ + id: role.roleId!, + permissions: Permissions.permissionFromDatabase(role.permissions), + position: role.position!, + })), + [], + ); + + if (!permissionCheck.hasAnyRole(["AddBots"])) { + set.status = 403; + + const invalidGuild = errorGen.MissingPermissions(); + + invalidGuild.addError({ + guildId: { + code: "MissingPermissions", + message: "You are missing the \"AddBots\" permission", + requiredPermissions: ["AddBots"] + }, + }); + + return { + success: false, + response: invalidGuild.toJSON(), + }; + } + + if (!permissionCheck.deepRoleCheck(permissions)) { + set.status = 403; + + const invalidGuild = errorGen.MissingPermissions(); + + invalidGuild.addError({ + guildId: { + code: "MissingPermissions", + message: "You are missing some permissions you are trying to grant.", + requiredPermissions: [] + }, + }); + + return { + success: false, + response: invalidGuild.toJSON(), + }; + } + + const alreadyInGuild = await botsGuildsTable.get({ + guildId: Encryption.encrypt(guildId), + botId: Encryption.encrypt(clientId) + }); + + if (alreadyInGuild) { + set.status = 400; + + const invalidGuild = errorGen.AlreadyInGuild(); + + invalidGuild.addError({ + guildId: { + code: "AlreadyInGuild", + message: "The bot is already in the guild" + }, + }); + + return { + success: false, + response: invalidGuild.toJSON(), + }; + } + + if (guild.members! >= guild.maxMembers!) { + const maxMembers = errorGen.LimitReached(); + + maxMembers.addError({ + guild: { + code: "MaxMembersReached", + message: "The guild has reached its maximum amount of members.", + }, + }); + + set.status = 403; + + return { + success: false, + response: maxMembers.toJSON() + } + } + + const newMember: NullifyStuff = { + flags: Constants.guildMemberFlags.In, + guildId: Encryption.encrypt(guildId), + guildMemberId: BigInt(this.App.snowflake.generate()), + joinedAt: new Date(), + nickname: null, + roles: [Encryption.encrypt(guildId)], + timeouts: [], + userId: Encryption.encrypt(clientId), + channelAcks: [], + left: false, + timeoutUntil: null, + }; + + if (permissions.length > 0) { + const role: NullifyStuff = { + allowedAgeRestricted: true, + color: 0, + deleteable: false, + guildId: Encryption.encrypt(guildId), + hoisted: false, + mentionable: false, + name: Encryption.encrypt(applicationName), + permissions: Permissions.permissionToDatabase(permissions), + position: 0, + roleId: Encryption.encrypt(String(newMember.guildMemberId)), + } + + newMember.roles.push(role.roleId!); + + // todo: update role positions + await rolesTable.create(role); + } + + await guildMembersTable.create(newMember); + + await botsGuildsTable.create({ + addedBy: Encryption.encrypt(userId), + botId: Encryption.encrypt(clientId), + guildId: Encryption.encrypt(guildId), + guildMemberId: Encryption.encrypt(String(newMember.guildMemberId)), + roleId: newMember.roles?.[1] ?? null, + }) + + await guildsTable.update({ + guildId: Encryption.encrypt(guildId) + }, { + members: guild.members! + 1 + }) + + this.App.rabbitMQForwarder("guildMember.add", { + userId: clientId, + guildId: guildId, + member: Encryption.completeDecryption({ + ...newMember, + owner: false, + }), + }); + + return { + success: true, + response: null + } + } +} diff --git a/src/Routes/oauth2/token/index.ts b/src/Routes/oauth2/token/index.ts new file mode 100644 index 00000000..70cd88ec --- /dev/null +++ b/src/Routes/oauth2/token/index.ts @@ -0,0 +1,324 @@ +import { bigintToBuffer, bufferToBigint } from "@/Utils/bigint.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; +import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; +import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; +import type { CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; +import Route from "@/Utils/Classes/Routing/Route.ts"; +import { applicationsTable } from "@/Utils/Cql/Tables/ApplicationTable.ts"; +import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; + +interface RedisStateStorage { + applicationId: string; + scopes: string[]; + expiresAt: number; // ? max is 10 minutes, though we do 60s + userId: string; + redirectUri: string; +} + +export default class FetchPatch extends Route { + @Method("post") + @Description("Take a code and turn it into a access token") + @ContentTypes("application/x-www-form-urlencoded") + public async postAuthorization({ + set, + body, + headers + }: CreateRoute< + "/oauth2/token", + { + grant_type: "authorization_code" | "refresh_token"; + code?: string; + refresh_token?: string; + redirect_uri: string; + client_id?: string; + client_secret?: string; + } + >) { + // ? we check if the headers contain HTTP Basic authentication of the client_id and client_secret + // ? or if the body contains the client_id and client_secret + // ? if not, we return an error + + if (!body.redirect_uri || !body.code && !body.refresh_token || !body.grant_type) { + set.status = 400; + + return { + error: "invalid_request", + error_description: "The redirect_uri, code, refresh_token, or grant_type were not provided", + }; + } + + const isBasic = headers.authorization?.toLowerCase().startsWith("basic "); + + let clientId: string | undefined = body.client_id; + let clientSecret: string | undefined = body.client_secret; + + if (isBasic) { + const basic = headers.authorization?.split(" ")?.[1]; + + if (basic) { + const decoded = Buffer.from(basic, "base64").toString("utf-8"); + const [id, secret] = decoded.split(":"); + + clientId = id; + clientSecret = secret; + } + } + + if (!clientId || !clientSecret) { + set.status = 400; + + return { + error: "invalid_request", + error_description: "The client_id and client_secret were not provided", + }; + } + + // ? check if the client_id and client_secret are valid + const application = await applicationsTable.get({ + applicationId: Encryption.encrypt(clientId), + }, { + fields: ["applicationId", "clientSecret", "redirectUris"] + }); + + if (!application || application.clientSecret !== Encryption.encrypt(clientSecret)) { + set.status = 401; + + return { + error: "invalid_client", + error_description: "The client_id and client_secret are invalid", + }; + } + + // ? check if the redirect_uri is valid + if (!application.redirectUris.includes(Encryption.encrypt(body.redirect_uri))) { + set.status = 400; + + return { + error: "invalid_request", + error_description: "The redirect_uri is invalid", + }; + } + + // ? check if the grant_type is valid + if (body.grant_type !== "authorization_code" && body.grant_type !== "refresh_token") { + set.status = 400; + + return { + error: "unsupported_grant_type", + error_description: "The grant_type is not supported", + }; + } + + switch (body.grant_type) { + case "authorization_code": { + + if (!body.code) { + set.status = 400; + + return { + error: "invalid_request", + error_description: "The code was not provided", + }; + } + + // ? check if the code is valid + const keys = await this.App.cache.keys(`oauth2:${Encryption.encrypt(clientId)}:${Encryption.encrypt(body.code)}:*`); + + if (keys.length === 0) { + set.status = 400; + + return { + error: "invalid_grant", + error_description: "The code is invalid", + }; + } + + // ? the key is like this oauth2:clientid:code:expiresAt + const [key] = keys; + + const [,,, expiresAt] = key!.split(":"); + + if (Date.now() > Number(expiresAt)) { + set.status = 400; + + return { + error: "invalid_grant", + error_description: "The code has expired", + }; + } + + const { applicationId, scopes, userId, redirectUri } = await this.App.cache.get(key as string) ?? {}; + + if (!applicationId || !scopes || !userId || !redirectUri) { + set.status = 400; + + return { + error: "invalid_grant", + error_description: "The code is invalid", + }; + } + + // ? check if the redirect_uri is valid + if (Encryption.decrypt(redirectUri) !== body.redirect_uri) { + set.status = 400; + + return { + error: "invalid_request", + error_description: "The redirect_uri is invalid", + }; + } + + // ? check if the user exists + const user = await usersTable.get({ + userId: userId, + }, { + fields: ["userId", "oauth2"], + }); + + if (!user) { + set.status = 400; + + return { + error: "invalid_grant", + error_description: "The user does not exist", + }; + } + + // ? now we can generate the access token and refresh token + const foundApplication = user.oauth2.find((app) => app.applicationId === Encryption.encrypt(applicationId)) ?? { + applicationId: Encryption.encrypt(applicationId), + authorizedAt: new Date(), + tokens: [] + }; + + const hex = bigintToBuffer(BigInt(Encryption.decrypt(userId))).toString("hex"); + const accessToken = Encryption.generateCode(24) + `-${hex}`; + const refreshToken = Encryption.generateCode(24) + `-${hex}`; // ? just for easier querying of the db + const accessTokenExpiresAt = Date.now() + 1000 * 60 * 60 * 24 * 7; // ? 7 days + + foundApplication.tokens.push({ + accessToken: Encryption.encrypt(accessToken), + expiresAt: new Date(accessTokenExpiresAt), + refreshToken: Encryption.encrypt(refreshToken), + scopes + }); + + const fixedOauth2 = user.oauth2.filter((app) => app.applicationId !== Encryption.encrypt(applicationId)); + + fixedOauth2.push(foundApplication); + + await usersTable.update({ + userId: userId, + }, { + oauth2: fixedOauth2 + }); + + // ? delete the code + await this.App.cache.delete(key as string); + + return { + access_token: accessToken, + token_type: "Bearer", + expires_in: Math.round((1000 * 60 * 60 * 24 * 7) / 1000), + refresh_token: refreshToken, + scope: scopes.join(" ") + }; + } + + case "refresh_token": { + + if (!body.refresh_token) { + set.status = 400; + + return { + error: "invalid_request", + error_description: "The refresh_token was not provided", + }; + } + + const [token, userId] = body.refresh_token.split("-"); + + if (!token || !userId) { + set.status = 400; + + this.App.logger.debug("TOKEN NOT FOUND v1") + + return { + error: "invalid_request", + error_description: "The token was not provided", + }; + } + + const parsedUserId = String(bufferToBigint(Buffer.from(userId, "hex"))); + + + // ? check if the refresh_token is valid + const fetchedUser = await usersTable.get({ + userId: Encryption.encrypt(parsedUserId), + }, { + fields: ["userId", "oauth2"], + }); + + if (!fetchedUser) { + set.status = 400; + + return { + error: "invalid_request", + error_description: "The user does not exist", + }; + } + + const oauth2 = fetchedUser.oauth2.find((o) => + o.tokens.find((t) => t.refreshToken === Encryption.encrypt(body.refresh_token!)) + ); + + const foundRefreshToken = oauth2?.tokens.find((t) => t.refreshToken === Encryption.encrypt(body.refresh_token!)); + + if (!foundRefreshToken || !oauth2) { + set.status = 400; + + return { + error: "invalid_request", + error_description: "The token does not exist", + }; + } + + const newTokens = oauth2.tokens.filter((t) => t.refreshToken !== Encryption.encrypt(body.refresh_token!)); + + const hex = bigintToBuffer(BigInt(Encryption.decrypt(fetchedUser.userId!))).toString("hex"); + const accessToken = Encryption.generateCode(24) + `-${hex}`; + const refreshToken = Encryption.generateCode(24) + `-${hex}`; // ? just for easier querying of the db + const accessTokenExpiresAt = Date.now() + 1000 * 60 * 60 * 24 * 7; // ? 7 days + + newTokens.push({ + accessToken: Encryption.encrypt(accessToken), + expiresAt: new Date(accessTokenExpiresAt), + refreshToken: Encryption.encrypt(refreshToken), + scopes: foundRefreshToken.scopes + }); + + const fixedOauth2 = fetchedUser.oauth2.filter((app) => app.applicationId !== oauth2.applicationId); + + fixedOauth2.push({ + ...oauth2, + tokens: newTokens, + }); + + await usersTable.update({ + userId: fetchedUser.userId!, + }, { + oauth2: fixedOauth2 + }); + + return { + access_token: accessToken, + token_type: "Bearer", + expires_in: Math.round((1000 * 60 * 60 * 24 * 7) / 1000), + refresh_token: refreshToken, + scope: foundRefreshToken.scopes.join(" ") + }; + } + } + } +} diff --git a/src/Routes/oauth2/token/revoke.ts b/src/Routes/oauth2/token/revoke.ts new file mode 100644 index 00000000..0d0e39ed --- /dev/null +++ b/src/Routes/oauth2/token/revoke.ts @@ -0,0 +1,169 @@ +import { bufferToBigint } from "@/Utils/bigint.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; +import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; +import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; +import type { CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; +import Route from "@/Utils/Classes/Routing/Route.ts"; +import { applicationsTable } from "@/Utils/Cql/Tables/ApplicationTable.ts"; +import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; + +export default class FetchPatch extends Route { + @Method("post") + @Description("Revokes a token") + @ContentTypes("application/x-www-form-urlencoded") + public async postAuthorization({ + set, + body, + headers, + }: CreateRoute< + "/oauth2/token/revoke", + { + client_id?: string; + client_secret?: string; + token: string; + token_type_hint: "access_token" | "refresh_token"; // ? this is the hint to tell us what type of token it is, not required tho + } + >) { + const isBasic = headers.authorization?.toLowerCase().startsWith("basic "); + + let clientId: string | undefined = body.client_id; + let clientSecret: string | undefined = body.client_secret; + + if (isBasic) { + const basic = headers.authorization?.split(" ")?.[1]; + + if (basic) { + const decoded = Buffer.from(basic, "base64").toString("utf-8"); + const [id, secret] = decoded.split(":"); + + clientId = id; + clientSecret = secret; + } + } + + if (!clientId || !clientSecret) { + set.status = 400; + + return { + error: "invalid_request", + error_description: "The client_id and client_secret were not provided", + }; + } + + // ? check if the client_id and client_secret are valid + const application = await applicationsTable.get( + { + applicationId: Encryption.encrypt(clientId), + }, + { + fields: ["applicationId", "clientSecret", "redirectUris"], + }, + ); + + if (!application || application.clientSecret !== Encryption.encrypt(clientSecret)) { + set.status = 401; + + return { + error: "invalid_client", + error_description: "The client_id and client_secret are invalid", + }; + } + + const [token, userId] = body.token.split("-"); + + if (!token || !userId) { + set.status = 400; + + this.App.logger.debug("TOKEN NOT FOUND v1") + + return { + error: "invalid_request", + error_description: "The token was not provided", + }; + } + + const parsedUserId = String(bufferToBigint(Buffer.from(userId, "hex"))); + + const fetchedUser = await usersTable.get( + { + userId: Encryption.encrypt(parsedUserId), + }, + { + fields: ["oauth2"], + }, + ); + + if (!fetchedUser) { + set.status = 400; + + return { + error: "invalid_request", + error_description: "The user does not exist", + }; + } + + const oauth2 = fetchedUser.oauth2.find((o) => + o.tokens.find((t) => { + if (body.token_type_hint === "access_token") { + return t.accessToken === Encryption.encrypt(body.token); + } else if (body.token_type_hint === "refresh_token") { + return t.refreshToken === Encryption.encrypt(body.token); + } + + return t.accessToken === Encryption.encrypt(body.token) || t.refreshToken === Encryption.encrypt(body.token); + }), + ); + + const foundAccessToken = oauth2?.tokens.find((t) => { + if (body.token_type_hint === "access_token") { + return t.accessToken === Encryption.encrypt(body.token); + } else if (body.token_type_hint === "refresh_token") { + return t.refreshToken === Encryption.encrypt(body.token); + } + + return t.accessToken === Encryption.encrypt(body.token) || t.refreshToken === Encryption.encrypt(body.token); + }); + + if (!foundAccessToken || !oauth2) { + set.status = 400; + + this.App.logger.debug("TOKEN NOT FOUND v2") + + return { + error: "invalid_request", + error_description: "The token does not exist", + }; + } + + const newTokens = oauth2.tokens.filter((t) => { + if (body.token_type_hint === "access_token") { + return t.accessToken !== Encryption.encrypt(body.token); + } else if (body.token_type_hint === "refresh_token") { + return t.refreshToken !== Encryption.encrypt(body.token); + } + + return t.accessToken !== Encryption.encrypt(body.token) && t.refreshToken !== Encryption.encrypt(body.token); + }); + + const fixedOauth2 = fetchedUser.oauth2.filter((app) => app.applicationId !== oauth2.applicationId); + + fixedOauth2.push({ + ...oauth2, + tokens: newTokens, + }); + + await usersTable.update( + { + userId: Encryption.encrypt(parsedUserId), + }, + { + oauth2: fixedOauth2, + }, + ); + + return { + success: true, + }; + } +} diff --git a/src/Routes/v1/applications/[applicationId]/bot/index.ts b/src/Routes/v1/applications/[applicationId]/bot/index.ts new file mode 100644 index 00000000..8f56dd73 --- /dev/null +++ b/src/Routes/v1/applications/[applicationId]/bot/index.ts @@ -0,0 +1,197 @@ +import type { UserMiddlewareType } from "@/Middleware/User.ts"; +import userMiddleware from "@/Middleware/User.ts"; +import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import errorGen from "@/Utils/Classes/ErrorGen.ts"; +import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; +import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; +import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; +import Middleware from "@/Utils/Classes/Routing/Decorators/Middleware.ts"; +import type { CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; +import Route from "@/Utils/Classes/Routing/Route.ts"; +import Token from "@/Utils/Classes/Token.ts"; +import { applicationsTable } from "@/Utils/Cql/Tables/ApplicationTable.ts"; +import { settingsTable } from "@/Utils/Cql/Tables/SettingsTable.ts"; +import { usersTable, type UserTable } from "@/Utils/Cql/Tables/UserTable.ts"; +import tagGenerator from "@/Utils/TagGenerator.ts"; + +interface CreatedBot { + user: { + avatar: string | null; + bio?: string | null; + flags: string; + globalNickname: string | null; + id: string; + publicFlags: string; + tag: string; + username: string; + }; + token: string; +} + +export default class FetchPatch extends Route { + @Method("post") + @Description("Creates a bot!") + @ContentTypes("any") + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: ["User"], + }), + ) + public async postBot({ + set, + user, + params + }: CreateRoute<"/applications/:applicationId/bot", any, [UserMiddlewareType]>) { + const application = await applicationsTable.get( + { + applicationId: Encryption.encrypt(params.applicationId), + }, + { + fields: ["botId", "ownerId", "name", "avatar", "description"], + }, + ); + + if (!application || application.ownerId !== Encryption.encrypt(user.id)) { + const notFound = errorGen.UnknownApplication(); + + notFound.addError({ + applicationId: { + code: "UnknownApplication", + message: "The requested application does not exist, or you do not have access to it.", + }, + }); + + set.status = 404; + + return notFound.toJSON(); + } + + if (application.botId) { + const failed = errorGen.FailedToRegister(); + + failed.addError({ + bot: { + code: "BotExists", + message: "This application already has a bot!", + }, + }); + + set.status = 400; + + return failed.toJSON(); + } + + const foundUsers = await this.fetchUser({ username: application.name! }, ["tag"]); + const tag = tagGenerator(foundUsers.map((usr) => usr.tag).filter((usr) => usr !== null)); + + if (!tag) { + const failed = errorGen.FailedToRegister(); + + failed.addError({ + username: { + code: "MaxUsernames", + message: `The maximum amount of users with the username ${Encryption.decrypt(application.name!)} has been reached :(`, + }, + }); + + set.status = 400; + + return failed.toJSON(); + } + + const botId = params.applicationId; + + const flags = new FlagFields("0", "0"); + + flags.PrivateFlags.add("Bot"); + + await usersTable.create({ + avatar: application.avatar, + email: Encryption.encrypt(`bot+${botId}@bots.kastelapp.com`), + flags: String(flags.PrivateFlags.bits), + globalNickname: application.name, + guilds: [], + ips: [], + password: null, + phoneNumber: null, + publicFlags: "0", + tag, + twoFaSecret: null, + userId: Encryption.encrypt(botId), + username: application.name, + usernameTag: Encryption.encrypt(`${Encryption.decrypt(application.name!)}#${tag}`), + }); + + const token = Token.generateToken(botId); + + await settingsTable.create({ + allowedInvites: 0, + bio: application.description, + customStatus: null, + emojiPack: "native", + guildOrder: [], + language: "en-US", + maxFileUploadSize: this.App.constants.settings.Max.MaxFileSize, + maxGuilds: 0, + navLocation: "bottom", + privacy: 0, + status: 1, + theme: "dark", + tokens: [{ + createdDate: new Date(), + flags: 0, + ip: null, + token: Encryption.encrypt(token), + tokenId: Encryption.encrypt(this.App.snowflake.generate()), + }], + userId: Encryption.encrypt(botId) + }) + + await applicationsTable.update( + { + applicationId: Encryption.encrypt(params.applicationId), + }, + { + botId: Encryption.encrypt(botId), + }, + ); + + set.status = 201; + + return Encryption.completeDecryption({ + user: { + id: botId, + avatar: application.avatar, + flags: String(flags.PrivateFlags.bits), + publicFlags: "0", + globalNickname: application.name, + tag, + username: application.name!, + bio: null, + }, + token + } satisfies CreatedBot) + } + + private async fetchUser( + opts: { + email?: string; + username?: string; + }, + fields: (keyof UserTable)[], + ) { + const fetched = await usersTable.find(opts, { + fields: fields, + }); + + return Encryption.completeDecryption( + fetched.toArray().map((usr) => ({ + ...usr, + flags: usr.flags ? String(usr.flags) : "0", + publicFlags: usr.flags ? String(usr.publicFlags) : "0", + })), + ); + } +} diff --git a/src/Routes/v1/applications/[applicationId]/index.ts b/src/Routes/v1/applications/[applicationId]/index.ts new file mode 100644 index 00000000..d54b46c1 --- /dev/null +++ b/src/Routes/v1/applications/[applicationId]/index.ts @@ -0,0 +1,144 @@ +import type { UserMiddlewareType } from "@/Middleware/User.ts"; +import userMiddleware from "@/Middleware/User.ts"; +import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import errorGen from "@/Utils/Classes/ErrorGen.ts"; +import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; +import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; +import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; +import Middleware from "@/Utils/Classes/Routing/Decorators/Middleware.ts"; +import type { CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; +import Route from "@/Utils/Classes/Routing/Route.ts"; +import { applicationsTable } from "@/Utils/Cql/Tables/ApplicationTable.ts"; +import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; + +interface ApplicationResponse { + id: string; + avatar: string | null; + bot: + | string + | null + | { + avatar: string | null; + bio?: string | null; + flags: string; + globalNickname: string | null; + id: string; + publicFlags: string; + tag: string; + username: string; + }; + name: string; + description: string | null; + flags: string; + allowedScopes: string; + owner: + | string + | { + avatar: string | null; + flags: string; + globalNickname: string | null; + id: string; + publicFlags: string; + tag: string; + username: string; + }; + oauth2: { + redirectUris: string[]; + clientSecret: string | null; + }; +} + +export default class FetchPatch extends Route { + @Method("get") + @Description("Fetch an application") + @ContentTypes("any") + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: "User", + }), + ) + public async getFetch({ + user, + params, + set, + }: CreateRoute<"/applications/:applicationId", any, [UserMiddlewareType], any>) { + const app = await applicationsTable.get({ + applicationId: Encryption.encrypt(params.applicationId), + }); + + if (!app || app.ownerId !== Encryption.encrypt(user.id)) { + const notFound = errorGen.UnknownApplication(); + + notFound.addError({ + applicationId: { + code: "UnknownApplication", + message: "The requested application does not exist, or you do not have access to it.", + }, + }); + + set.status = 404; + + return notFound.toJSON(); + } + + const botUser = app.botId + ? await usersTable.get( + { + userId: app.botId, + }, + { + fields: ["flags", "publicFlags", "userId", "username", "globalNickname", "tag", "avatar"], + }, + ) + : null; + + const owner = await usersTable.get( + { + userId: app.ownerId, + }, + { + fields: ["flags", "publicFlags", "userId", "username", "globalNickname", "tag", "avatar"], + }, + ); + const botFlags = botUser ? new FlagFields(botUser.flags ?? "0", botUser?.publicFlags ?? "0") : null; + const ownerFlags = owner ? new FlagFields(owner.flags ?? "0", owner?.publicFlags ?? "0") : null; + + return Encryption.completeDecryption({ + allowedScopes: app.allowedScopes ?? "0", + avatar: app.avatar, + bot: botUser + ? { + avatar: botUser.avatar, + bio: app.description, + flags: String(botFlags!.cleanedPrivateFlags), + globalNickname: botUser.globalNickname, + id: botUser.userId ?? "", + publicFlags: String(botFlags!.PublicFlags.cleaned), + tag: botUser.tag ?? "0000", + username: botUser.username ?? "", + } + : app.botId ?? null, + description: app.description, + flags: app.flags ?? "0", + id: Encryption.decrypt(app.applicationId!), + name: Encryption.decrypt(app.name ?? ""), + owner: owner + ? { + avatar: owner.avatar, + flags: String(ownerFlags!.cleanedPrivateFlags), + globalNickname: owner.globalNickname, + id: owner.userId ?? "", + publicFlags: String(ownerFlags!.PublicFlags.cleaned), + tag: owner.tag ?? "0000", + username: owner.username ?? "", + } + : app.ownerId!, + oauth2: { + clientSecret: app.clientSecret, + redirectUris: app.redirectUris, + }, + } satisfies ApplicationResponse); + } +} diff --git a/src/Routes/v1/applications/[applicationId]/reset.ts b/src/Routes/v1/applications/[applicationId]/reset.ts new file mode 100644 index 00000000..63bf74f7 --- /dev/null +++ b/src/Routes/v1/applications/[applicationId]/reset.ts @@ -0,0 +1,85 @@ +import bodyValidator from "@/Middleware/BodyValidator.ts"; +import type { UserMiddlewareType } from "@/Middleware/User.ts"; +import userMiddleware from "@/Middleware/User.ts"; +import { type Infer, string } from "@/Types/BodyValidation.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import errorGen from "@/Utils/Classes/ErrorGen.ts"; +import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; +import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; +import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; +import Middleware from "@/Utils/Classes/Routing/Decorators/Middleware.ts"; +import type { CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; +import Route from "@/Utils/Classes/Routing/Route.ts"; +import { applicationsTable } from "@/Utils/Cql/Tables/ApplicationTable.ts"; + +const resetClientSecretBody = { + password: string().min(4).max(72), +} + +export default class FetchPatch extends Route { + @Method("post") + @Description("Fetch all your applications") + @ContentTypes("application/json") + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: "User", + }), + ) + @Middleware( + bodyValidator(resetClientSecretBody), + ) + public async getFetch({ + user, + params, + set, + body + }: CreateRoute<"/applications/:applicationId/reset", Infer, [UserMiddlewareType]>) { + const app = await applicationsTable.get({ + applicationId: Encryption.encrypt(params.applicationId), + }); + + if (!app || app.ownerId !== Encryption.encrypt(user.id)) { + const notFound = errorGen.UnknownApplication(); + + notFound.addError({ + applicationId: { + code: "UnknownApplication", + message: "The requested application does not exist, or you do not have access to it.", + }, + }); + + set.status = 404; + + return notFound.toJSON(); + } + + if (!await Bun.password.verify(body.password, user.password)) { + const invalidPassword = errorGen.InvalidCredentials(); + + invalidPassword.addError({ + password: { + code: "InvalidPassword", + message: "The provided password is incorrect.", + }, + }); + + set.status = 400; + + return invalidPassword.toJSON(); + } + + const newSecret = Encryption.generateCode(); + + await applicationsTable.update({ + applicationId: Encryption.encrypt(params.applicationId), + }, { + clientSecret: Encryption.encrypt(newSecret), + redirectUris: [] + }); + + return { + clientSecret: newSecret, + }; + } +} diff --git a/src/Routes/v1/applications/index.ts b/src/Routes/v1/applications/index.ts new file mode 100644 index 00000000..1c59bb4d --- /dev/null +++ b/src/Routes/v1/applications/index.ts @@ -0,0 +1,232 @@ +import Constants from "@/Constants.ts"; +import bodyValidator from "@/Middleware/BodyValidator.ts"; +import type { UserMiddlewareType } from "@/Middleware/User.ts"; +import userMiddleware from "@/Middleware/User.ts"; +import type { Infer } from "@/Types/BodyValidation.ts"; +import { string } from "@/Types/BodyValidation.ts"; +import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; +import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import errorGen from "@/Utils/Classes/ErrorGen.ts"; +import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; +import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; +import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; +import Middleware from "@/Utils/Classes/Routing/Decorators/Middleware.ts"; +import type { CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; +import Route from "@/Utils/Classes/Routing/Route.ts"; +import { applicationsTable, type ApplicationTable } from "@/Utils/Cql/Tables/ApplicationTable.ts"; +import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; + +const createApplication = { + username: string().min(3).max(72), + teamId: string().optional().nullable(), +}; + +interface ApplicationResponse { + id: string; + avatar: string | null; + bot: + | string + | null + | { + avatar: string | null; + bio?: string | null; + flags: string; + globalNickname: string | null; + id: string; + publicFlags: string; + tag: string; + username: string; + }; + name: string; + description: string | null; + flags: string; + allowedScopes: string; + owner: + | string + | { + avatar: string | null; + flags: string; + globalNickname: string | null; + id: string; + publicFlags: string; + tag: string; + username: string; + }; + oauth2: { + redirectUris: string[]; + clientSecret: string | null; + }; +} + +export default class FetchPatch extends Route { + @Method("get") + @Description("Fetch all your applications") + @ContentTypes("any") + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: ["User", "Bot"], + }), + ) + public async getFetch({ + user, + query, + }: CreateRoute< + "/applications", + any, + [UserMiddlewareType], + any, + { + include?: string; + } + >) { + const found = await applicationsTable.find({ + ownerId: Encryption.encrypt(user.id), + }); + + const splitQuery = query.include?.split(",") ?? []; + const includeUser = splitQuery.includes("bot"); + const includeOwner = splitQuery.includes("owner"); + + const data: ApplicationResponse[] = await Promise.all( + found.map(async (app) => { + const botUser = includeUser + ? await usersTable.get( + { + userId: app.botId!, + }, + { + fields: ["flags", "publicFlags", "userId", "username", "globalNickname", "tag", "avatar"], + }, + ) + : null; + + const owner = includeOwner + ? await usersTable.get( + { + userId: app.ownerId!, + }, + { + fields: ["flags", "publicFlags", "userId", "username", "globalNickname", "tag", "avatar"], + }, + ) + : null; + + const botFlags = botUser ? new FlagFields(botUser.flags ?? "0", botUser?.publicFlags ?? "0") : null; + const ownerFlags = owner ? new FlagFields(owner.flags ?? "0", owner?.publicFlags ?? "0") : null; + + return { + allowedScopes: app.allowedScopes ?? "0", + avatar: app.avatar, + bot: botUser + ? { + avatar: botUser.avatar, + bio: app.description, + flags: String(botFlags!.cleanedPrivateFlags), + globalNickname: botUser.globalNickname, + id: botUser.userId ?? "", + publicFlags: String(botFlags!.PublicFlags.cleaned), + tag: botUser.tag ?? "0000", + username: botUser.username ?? "", + } + : app.botId ?? null, + description: app.description, + flags: app.flags ?? "0", + id: Encryption.decrypt(app.applicationId!), + name: Encryption.decrypt(app.name ?? ""), + owner: owner + ? { + avatar: owner.avatar, + flags: String(ownerFlags!.cleanedPrivateFlags), + globalNickname: owner.globalNickname, + id: owner.userId ?? "", + publicFlags: String(ownerFlags!.PublicFlags.cleaned), + tag: owner.tag ?? "0000", + username: owner.username ?? "", + } + : app.ownerId!, + oauth2: { + clientSecret: app.clientSecret, + redirectUris: app.redirectUris, + }, + } satisfies ApplicationResponse; + }), + ); + + return Encryption.completeDecryption(data); + } + + @Method("post") + @Description("Create a new application") + @ContentTypes("application/json") + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: ["User"], + flags: ["Staff"], + }), + ) + @Middleware(bodyValidator(createApplication)) + public async postApplication({ + body, + set, + user, + }: CreateRoute<"/applications", Infer, [UserMiddlewareType]>) { + const found = await applicationsTable.find( + { + ownerId: Encryption.encrypt(user.id), + }, + { + fields: ["applicationId"], + }, + ); + + if (found.length >= Constants.settings.Max.Applications) { + const maxError = errorGen.LimitReached(); + + maxError.addError({ + applications: { + code: "LimitReached", + message: "You have reached the maximum amount of applications you can have.", + }, + }); + + set.status = 403; + + return maxError.toJSON(); + } + + const id = this.App.snowflake.generate(); + const clientSecret = Encryption.generateCode(); + + const data: NullifyStuff = { + allowedScopes: "0", + applicationId: Encryption.encrypt(id), + avatar: null, + botId: null, + description: null, + flags: "0", + name: Encryption.encrypt(body.username), + ownerId: Encryption.encrypt(user.id), + redirectUris: [], + clientSecret: Encryption.encrypt(clientSecret), + }; + + await applicationsTable.create(data); + + return { + id, + avatar: null, + bot: null, + name: body.username, + description: null, + flags: "0", + allowedScopes: "0", + oauth2: { + clientSecret, + redirectUris: [], + }, + }; + } +} diff --git a/src/Routes/v1/channels/[channelId]/ack/[messageId].ts b/src/Routes/v1/channels/[channelId]/ack/[messageId].ts index c2a2c49a..22d7aec8 100644 --- a/src/Routes/v1/channels/[channelId]/ack/[messageId].ts +++ b/src/Routes/v1/channels/[channelId]/ack/[messageId].ts @@ -2,7 +2,6 @@ import Constants from "@/Constants.ts"; import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; import type FetchCreateMessages from "@/Routes/v1/channels/[channelId]/messages/index.ts"; -import type API from "@/Utils/Classes/API.ts"; import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import { FlagUtils } from "@/Utils/Classes/BitFields/NewFlags.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; @@ -18,17 +17,13 @@ import { guildMembersTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; import { settingsTable } from "@/Utils/Cql/Tables/SettingsTable.ts"; export default class AckingIDBased extends Route { - public constructor(App: API) { - super(App); - } - @Method("post") @Description("Ack the messages in a channel") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async ack({ params, set, user }: CreateRoute<"/:channelId/ack/:messageId", any, [UserMiddlewareType]>) { diff --git a/src/Routes/v1/channels/[channelId]/attachments.ts b/src/Routes/v1/channels/[channelId]/attachments.ts new file mode 100644 index 00000000..861f411c --- /dev/null +++ b/src/Routes/v1/channels/[channelId]/attachments.ts @@ -0,0 +1,415 @@ +import Constants, { fileTypes } from "@/Constants.ts"; +import bodyValidator from "@/Middleware/BodyValidator.ts"; +import type { UserMiddlewareType } from "@/Middleware/User.ts"; +import userMiddleware from "@/Middleware/User.ts"; +import { type Infer, number, snowflake, string } from "@/Types/BodyValidation.ts"; +import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; +import { FlagUtils } from "@/Utils/Classes/BitFields/NewFlags.ts"; +import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import errorGen from "@/Utils/Classes/ErrorGen.ts"; +import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; +import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; +import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; +import Middleware from "@/Utils/Classes/Routing/Decorators/Middleware.ts"; +import type { CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; +import Route from "@/Utils/Classes/Routing/Route.ts"; +import { channelsTable, type ChannelTable } from "@/Utils/Cql/Tables/ChannelTable.ts"; +import { filesTable } from "@/Utils/Cql/Tables/FileTable.ts"; +import { guildMembersTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; +import { permissionsOverridesTable } from "@/Utils/Cql/Tables/PermissionsOverideTable.ts"; +import { rolesTable } from "@/Utils/Cql/Tables/RoleTable.ts"; +import PermissionHandler from "@/Utils/Versioning/v1/PermissionCheck.ts"; +import { DeleteObjectCommand, PutObjectCommand } from "@aws-sdk/client-s3"; +import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; +import mime from "mime"; + +const createAttachmentBody = { + filename: string().max(255).min(1), + size: number().min(1), +}; + +const deleteAttachmentBody = { + fileId: snowflake(), +}; + +export default class Attachments extends Route { + @Method("post") + @Description("Creates an attachment in the provided channel, returns the pre-signed url to upload the file to.") + @ContentTypes("any") + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: "User", + }), + ) + @Middleware(bodyValidator(createAttachmentBody)) + public async createAttachment({ + params, + set, + user, + body, + }: CreateRoute<"/channels/:channelId", Infer, [UserMiddlewareType]>) { + // ? we give users around a 10% buffer for file sizes mostly for metadata shit and just to be nice, you probably wouldn't like it if the site said "100MB" uploads but when you upload a 100MB file it fails due to a few bytes you can't see + if (body.size > user.settings.maxFileUploadSize * 1.1) { + set.status = 413; + + const fileTooLarge = errorGen.FileTooLarge(); + + this.App.logger.debug(`User tried to upload a file, but their max is ${user.settings.maxFileUploadSize}`) + + fileTooLarge.addError({ + size: { + code: "FileTooLarge", + message: "The file provided is too large.", + }, + }); + + return fileTooLarge.toJSON(); + } + + const channel = await channelsTable.get( + { + channelId: Encryption.encrypt(params.channelId), + }, + { + fields: ["type", "guildId", "permissionOverrides", "channelId"], + }, + ); + + const unknownChannel = errorGen.UnknownChannel(); + + if (!channel) { + set.status = 404; + + unknownChannel.addError({ + channel: { + code: "UnknownChannel", + message: "The provided channel does not exist or you do not have access to it.", + }, + }); + + return unknownChannel.toJSON(); + } + + const channelFlags = new FlagUtils(channel.type ?? Constants.channelTypes.GuildText, Constants.channelTypes); + + if (channelFlags.hasOneArray(["Dm", "GroupChat"])) { + // todo: other logic here later + + set.status = 500; + + return "Internal Server Error :("; + } else { + const permissionCheck = await this.permissionCheck(channel as ChannelTable, { user, set } as never); + + if (!permissionCheck.success) { + return permissionCheck.response; + } + } + + const fileId = this.App.snowflake.generate(); + + const command = new PutObjectCommand({ + Bucket: this.App.config.s3.buckets.files, + Key: `${Encryption.decrypt(channel.channelId!)}/${fileId}/${encodeURIComponent(body.filename)}`, + ContentType: mime.getType(body.filename) ?? "application/octet-stream", + ContentLength: body.size, + Metadata: { + "File-Id": Encryption.encrypt(fileId), + "Uploaded-By": Encryption.encrypt(user.id), + }, + }); + + const url = await getSignedUrl(this.App.s3, command, { + expiresIn: 3600, // 1 hour + signableHeaders: new Set(["content-type", "content-length"]), + }); + + await filesTable.create({ + deleted: false, + fileId: Encryption.encrypt(fileId), + type: fileTypes.File, + uploaded: false, + uploadedBy: Encryption.encrypt(user.id), + name: Encryption.encrypt(body.filename), + thumbHash: null, + }); + + // todo: a daily channel / server file limit. This would be more of a private thing and not a public thing but just putting in the idea here + + return { + fileId, + presignedUrl: url, + }; + } + + @Method("delete") + @Description("Delete's an attachment due to the fact pre-signed url's don't support DELETE requests.") + @ContentTypes("any") + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: "User", + }), + ) + @Middleware(bodyValidator(deleteAttachmentBody)) + public async deleteAttachment({ + params, + set, + user, + body, + }: CreateRoute<"/channels/:channelId", Infer, [UserMiddlewareType]>) { + const channel = await channelsTable.get( + { + channelId: Encryption.encrypt(params.channelId), + }, + { + fields: ["type", "guildId", "permissionOverrides", "channelId"], + }, + ); + + const unknownChannel = errorGen.UnknownChannel(); + + if (!channel) { + set.status = 404; + + unknownChannel.addError({ + channel: { + code: "UnknownChannel", + message: "The provided channel does not exist or you do not have access to it.", + }, + }); + + return unknownChannel.toJSON(); + } + + const channelFlags = new FlagUtils(channel.type ?? Constants.channelTypes.GuildText, Constants.channelTypes); + + if (channelFlags.hasOneArray(["Dm", "GroupChat"])) { + // todo: other logic here later + + set.status = 500; + + return "Internal Server Error :("; + } else { + const permissionCheck = await this.permissionCheck(channel as ChannelTable, { user, set } as never); + + if (!permissionCheck.success) { + return permissionCheck.response; + } + } + + const file = await filesTable.get( + { + fileId: Encryption.encrypt(body.fileId), + }, + { + fields: ["uploadedBy", "deleted", "name"], + }, + ); + + const unknownFile = errorGen.UnknownFile(); + + if (!file) { + set.status = 404; + + unknownFile.addError({ + file: { + code: "UnknownFile", + message: "The provided file does not exist.", + }, + }); + + return unknownFile.toJSON(); + } + + if (Encryption.decrypt(file.uploadedBy!) !== user.id) { + set.status = 403; + + const invalidFile = errorGen.InvalidFile(); + + invalidFile.addError({ + file: { + code: "InvalidFile", + message: "You do not have access to this file.", + }, + }); + + return invalidFile.toJSON(); + } + + if (file.deleted) { + set.status = 410; + + const invalidFile = errorGen.InvalidFile(); + + invalidFile.addError({ + file: { + code: "InvalidFile", + message: "The file has already been deleted.", + }, + }); + + return invalidFile.toJSON(); + } + + await filesTable.update( + { + fileId: Encryption.encrypt(body.fileId), + }, + { + deleted: true, + }, + ); + + const command = new DeleteObjectCommand({ + Bucket: this.App.config.s3.buckets.files, + Key: `${Encryption.decrypt(channel.channelId!)}/${body.fileId}/${encodeURIComponent(Encryption.decrypt(file.name!))}`, + }); + + await this.App.s3.send(command); + + set.status = 204; + + return; + } + + private async permissionCheck( + channel: ChannelTable, + { user, set }: CreateRoute<"/channels/:channelId", any, [UserMiddlewareType]>, + ): Promise<{ + success: boolean; + response: unknown + }> { + const unknownChannel = errorGen.UnknownChannel(); + + if (!user.guilds.includes(Encryption.decrypt(channel.guildId!))) { + const invalidGuild = errorGen.UnknownGuild(); + + invalidGuild.addError({ + guildId: { + code: "UnknownGuild", + message: "The provided guild does not exist, or you do not have access to it.", + }, + }); + + set.status = 404; + + return { + success: false, + response: invalidGuild.toJSON() + }; + } + + const guildMember = await guildMembersTable.get( + { + guildId: channel.guildId!, + userId: Encryption.encrypt(user.id), + left: false, + }, + { + fields: ["flags", "roles"], + }, + ); + + if (!guildMember) { + unknownChannel.addError({ + channel: { + code: "UnknownChannel", + message: "The provided channel does not exist or you do not have access to it.", + }, + }); + + set.status = 404; + + return { + success: false, + response: unknownChannel.toJSON() + }; + } + + const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); + + if (!guildMemberFlags.has("In")) { + set.status = 404; + + unknownChannel.addError({ + channel: { + code: "UnknownChannel", + message: "The provided channel does not exist or you do not have access to it.", + }, + }); + + return { + success: false, + response: unknownChannel.toJSON() + }; + } + + const permissionOverrides = channel.permissionOverrides + ? ( + await Promise.all( + channel.permissionOverrides.map(async (id) => + permissionsOverridesTable.get( + { permissionId: id }, + { fields: ["allow", "deny", "permissionId", "type"] }, + ), + ), + ) + ).filter((val) => val !== null) + : []; + + const roles = ( + await Promise.all( + guildMember.roles.map(async (id) => + rolesTable.get({ roleId: id, guildId: channel.guildId! }, { fields: ["roleId", "permissions", "position"] }), + ), + ) + ).filter((val) => val !== null); + + const permissionCheck = new PermissionHandler( + user.id, + guildMember.flags ?? 0, + roles.map((role) => ({ + id: role.roleId!, + permissions: Permissions.permissionFromDatabase(role.permissions), + position: role.position!, + })), + [ + { + id: channel.channelId!, + overrides: permissionOverrides.map((override) => ({ + allow: Permissions.permissionFromDatabase(override.allow), + deny: Permissions.permissionFromDatabase(override.deny), + id: override.permissionId!, + type: override.type === Constants.permissionOverrideTypes.Member ? "Member" : "Role", + })), + }, + ], + ); + if (!permissionCheck.hasChannelPermission(Encryption.decrypt(channel.channelId!), ["SendMessages"])) { + set.status = 403; + + const missingPermission = errorGen.MissingPermissions(); + + missingPermission.addError({ + channel: { + code: "MissingPermissions", + message: 'You are missing the "SendMessages" permission.', + requiredPermissions: ["SendMessages"], // ? note: this is a testing field, may be removed later + }, + }); + + return { + success: false, + response: missingPermission.toJSON() + }; + } + + return { + success: true, + response: null + }; + } +} diff --git a/src/Routes/v1/channels/[channelId]/index.ts b/src/Routes/v1/channels/[channelId]/index.ts index 950591cc..6ef50ecc 100644 --- a/src/Routes/v1/channels/[channelId]/index.ts +++ b/src/Routes/v1/channels/[channelId]/index.ts @@ -1,14 +1,9 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class FetchUpdateChannel extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Change this Description when working on this route") @ContentTypes("application/json") diff --git a/src/Routes/v1/channels/[channelId]/messages/[messageId]/index.ts b/src/Routes/v1/channels/[channelId]/messages/[messageId]/index.ts index 8e1a473f..118eb2b7 100644 --- a/src/Routes/v1/channels/[channelId]/messages/[messageId]/index.ts +++ b/src/Routes/v1/channels/[channelId]/messages/[messageId]/index.ts @@ -5,7 +5,6 @@ import userMiddleware from "@/Middleware/User.ts"; import { embedRules } from "@/Routes/v1/channels/[channelId]/messages/index.ts"; import { any, type Infer, string } from "@/Types/BodyValidation.ts"; import type { Embed } from "@/Types/Embed.ts"; -import type API from "@/Utils/Classes/API.ts"; import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import { FlagUtils } from "@/Utils/Classes/BitFields/NewFlags.ts"; @@ -33,17 +32,13 @@ const editMessageBody = { }; export default class DeleteEditGetMessage extends Route { - public constructor(App: API) { - super(App); - } - @Method("delete") @Description("Delete a message") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async deleteMessage({ @@ -287,8 +282,8 @@ export default class DeleteEditGetMessage extends Route { @ContentTypes("application/json") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) @Middleware(bodyValidator(editMessageBody)) @@ -564,8 +559,8 @@ export default class DeleteEditGetMessage extends Route { @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async getMessage({ diff --git a/src/Routes/v1/channels/[channelId]/messages/[messageId]/report.ts b/src/Routes/v1/channels/[channelId]/messages/[messageId]/report.ts index 0694a0f8..ae33d774 100644 --- a/src/Routes/v1/channels/[channelId]/messages/[messageId]/report.ts +++ b/src/Routes/v1/channels/[channelId]/messages/[messageId]/report.ts @@ -1,14 +1,9 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class ReportMessage extends Route { - public constructor(App: API) { - super(App); - } - @Method("post") @Description("Change this Description when working on this route") @ContentTypes("application/json") diff --git a/src/Routes/v1/channels/[channelId]/messages/index.ts b/src/Routes/v1/channels/[channelId]/messages/index.ts index 6cbe8500..f3c93a4a 100644 --- a/src/Routes/v1/channels/[channelId]/messages/index.ts +++ b/src/Routes/v1/channels/[channelId]/messages/index.ts @@ -1,13 +1,13 @@ -import Constants from "@/Constants.ts"; +import Constants, { Scopes } from "@/Constants.ts"; import bodyValidator from "@/Middleware/BodyValidator.ts"; import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; import FetchPatch from "@/Routes/v1/users/@me/index.ts"; -import { string, type Infer, snowflake, number, enums, any } from "@/Types/BodyValidation.ts"; +import { string, type Infer, snowflake, number, enums, any, array } from "@/Types/BodyValidation.ts"; import type API from "@/Utils/Classes/API.ts"; import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import { FlagUtils } from "@/Utils/Classes/BitFields/NewFlags.ts"; -import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; +import Permissions, { type PermissionKey } from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; @@ -26,14 +26,14 @@ import { request } from "undici"; import safePromise from "@/Utils/safePromise.ts"; import type { Embed } from "@/Types/Embed.ts"; import { type EmbedType, messagesTable, type MessageTable } from "@/Utils/Cql/Tables/MessageTable.ts"; -import { channelsTable } from "@/Utils/Cql/Tables/ChannelTable.ts"; +import { channelsTable, type ChannelTable } from "@/Utils/Cql/Tables/ChannelTable.ts"; import { guildMembersTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; -import { settingsTable } from "@/Utils/Cql/Tables/SettingsTable.ts"; import { permissionsOverridesTable } from "@/Utils/Cql/Tables/PermissionsOverideTable.ts"; import { rolesTable } from "@/Utils/Cql/Tables/RoleTable.ts"; import { parser, type EmbedToRules } from "@/Utils/EmbedChecker.ts"; import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; +import { filesTable } from "@/Utils/Cql/Tables/FileTable.ts"; const messageData = { content: string().optional().max(Constants.settings.Max.MessageLength), @@ -42,6 +42,11 @@ const messageData = { embeds: any().optional(), replyingTo: snowflake().optional(), allowedMentions: number().optional(), + attachments: array({ + id: snowflake(), + }) + .optional() + .max(Constants.settings.Max.Attachments), }; type LibChecker = Library<{ @@ -57,7 +62,12 @@ type LibChecker = Library<{ export interface ReturnMessage { allowedMentions: number; - attachments: never[]; + attachments: { + name: string; + url: string; + id: string; + thumbHash: string | null; + }[]; author: { avatar: string | null; flags: bigint | string; @@ -225,100 +235,13 @@ export default class FetchCreateMessages extends Route { } } - private removeNulls(obj: Record): Record { - const newObj: Record = {}; - - if (obj === null || obj === undefined || typeof obj !== "object") { - return obj; - } - - if (Array.isArray(obj)) { - return obj.map((item) => this.removeNulls(item)); - } - - for (const [key, value] of Object.entries(obj)) { - if (value !== null) { - if (Array.isArray(value)) { - newObj[key] = value.map((item) => this.removeNulls(item)); - - continue; - } - - newObj[key] = value; - } - } - - return newObj; - } - - private testMessage(input: string): Promise { - const fixedInput = Buffer.from(input); - - return new Promise((resolve, reject) => { - const resolveAnywaysTimeout = setTimeout(() => { - this.App.logger.warn("Phishing check took too long, resolving anyways"); - - resolve(JSON.stringify({ domain: null, phishing: false })); - }, 100); - - const callback = new JSCallback( - (result) => { - clearTimeout(resolveAnywaysTimeout); - - resolve(new CString(result).toString()); - - callback.close(); - }, - { - returns: "void", - args: [FFIType.cstring], - }, - ); - - try { - this.lib.symbols.check_message(ptr(fixedInput), callback); - } catch (error) { - reject(error); - - callback.close(); - } - }); - } - - public async checkMessage(message: string) { - if (!this.App.config.server.phishing?.enabled) { - return false; - } - - // ? using regex check if message even includes a domain if not we can skip the check - if (!/(https?:\/\/[^\s]+)/.test(message)) { - return false; - } - - this.App.logger.startTimer("Phishing check", true); - - const checked = await this.testMessage(message + "\0"); - - this.App.logger.stopTimer("Phishing check"); - - const parsed = JSON.parse(checked.toString()) as { domain: string; phishing: boolean }; - - if (this.App.config.server.phishing?.action === "alert") { - this.App.logger.warn(`Phishing domain detected: ${parsed.domain}`); - - return false; // ? since only alerting we don't want to block - } - - return parsed.phishing; - } - @Method("get") @Description("Fetches messages in a specific channel") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async getMessages({ @@ -337,168 +260,18 @@ export default class FetchCreateMessages extends Route { limit?: string; } >) { - const channel = await channelsTable.get( - { - channelId: Encryption.encrypt(params.channelId), - }, - { - fields: ["type", "guildId", "permissionOverrides", "channelId"], - }, - ); - - const unknownChannel = errorGen.UnknownChannel(); - - if (!channel) { - set.status = 404; - - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", - }, - }); - - return unknownChannel.toJSON(); - } - - const channelFlags = new FlagUtils(channel.type ?? Constants.channelTypes.GuildText, Constants.channelTypes); - - if (channelFlags.hasOneArray(["Dm", "GroupChat"])) { - // todo: other logic here later - - set.status = 500; - - return "Internal Server Error :("; - } else { - if (!user.guilds.includes(Encryption.decrypt(channel.guildId!))) { - // ? This is so we don't got to query guild members :3 - const invalidGuild = errorGen.UnknownGuild(); - - invalidGuild.addError({ - guildId: { - code: "UnknownGuild", - message: "The provided guild does not exist, or you do not have access to it.", - }, - }); - - set.status = 404; - - return invalidGuild.toJSON(); - } - - const guildMember = await guildMembersTable.get({ - guildId: channel.guildId!, - userId: Encryption.encrypt(user.id), - left: false, - }); - - if (!guildMember) { - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", - }, - }); - - set.status = 404; - - return unknownChannel.toJSON(); - } - - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - - if (!guildMemberFlags.has("In")) { - set.status = 404; - - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", - }, - }); - - return unknownChannel.toJSON(); - } - - // ? These are the possible text channels, if they aren't one of these they obv do not have messages you can fetch - if (!channelFlags.hasOneArray(["Dm", "GroupChat", "GuildNewMember", "GuildNews", "GuildRules", "GuildText"])) { - set.status = 403; - - const invalidChannel = errorGen.InvalidField(); - - invalidChannel.addError({ - channel: { - code: "InvalidChannel", - message: "The provided channel is not a text channel.", - }, - }); - - return invalidChannel.toJSON(); - } - - const permissionOverrides = channel.permissionOverrides - ? ( - await Promise.all( - channel.permissionOverrides.map(async (id) => - permissionsOverridesTable.get( - { permissionId: id }, - { fields: ["allow", "deny", "permissionId", "type"] }, - ), - ), - ) - ).filter((val) => val !== null) - : []; - - const roles = ( - await Promise.all( - guildMember.roles.map(async (id) => - rolesTable.get( - { roleId: id, guildId: channel.guildId! }, - { fields: ["roleId", "permissions", "position"] }, - ), - ), - ) - ).filter((val) => val !== null); - - const permissionCheck = new PermissionHandler( - user.id, - guildMember.flags ?? 0, - roles.map((role) => ({ - id: role.roleId!, - permissions: Permissions.permissionFromDatabase(role.permissions), - position: role.position!, - })), - [ - { - id: channel.channelId!, - overrides: permissionOverrides.map((override) => ({ - allow: Permissions.permissionFromDatabase(override.allow), - deny: Permissions.permissionFromDatabase(override.deny), - id: override.permissionId!, - type: override.type === Constants.permissionOverrideTypes.Member ? "Member" : "Role", - })), - }, - ], - ); - - if (!permissionCheck.hasChannelPermission(Encryption.decrypt(channel.channelId!), ["ViewMessageHistory"])) { - set.status = 403; - - const missingPermission = errorGen.MissingPermissions(); - - missingPermission.addError({ - channel: { - code: "MissingPermissions", - message: 'You are missing the "ViewMessageHistory" permission.', - requiredPermissions: ["ViewMessageHistory"], // ? note: this is a testing field, may be removed later - }, - }); + const { response, success } = await this.checkChannelAccess({ + params, + set, + user, + permissions: ["ViewMessageHistory", "ViewChannels"], + }); - return missingPermission.toJSON(); - } + if (!success) { + return response; } - const invalidRequest = errorGen.InvalidField(); + const invalidRequest = errorGen.InvalidQuery(); if ((query.limit && Number.isNaN(query.limit)) || Number(query.limit) < 1 || Number(query.limit) > 100) { invalidRequest.addError({ @@ -535,173 +308,25 @@ export default class FetchCreateMessages extends Route { const messages = await this.getMessageData(params.channelId, Number(query.limit), query.before, query.after); - const newMessages = []; + const newMessages = await Promise.all( + messages.map(async (message) => { + const parsed = await this.parseMessage(message); - for (const message of messages) { - newMessages.push(Encryption.completeDecryption(await this.parseMessage(message))); - } + return parsed ? Encryption.completeDecryption(parsed) : null; + }), + ); return newMessages as PreventInfiniteRecursion[]; } - public async fetchMessage(channelId: string, messageId: string, bucket: string) { - return messagesTable.get({ - channelId: Encryption.encrypt(channelId), - messageId: BigInt(messageId), - bucket, - }); - } - - public async tryMessage(channelId: string, messageId: string) { - const buckets = this.App.getBuckets(channelId); - - for (const bucket of buckets) { - const message = await this.fetchMessage(channelId, messageId, bucket); - - if (message) { - return message; - } - } - - return null; - } - - private async getMessageData( - channelId: string, - limit = 50, - before?: string, - after?: string, - fields?: (keyof MessageTable)[], - ): Promise { - const messages: MessageTable[] = []; - const possibleBuckets = this.App.getBuckets(channelId).reverse(); - - for (const bucket of possibleBuckets) { - const fetchedMessages = await messagesTable.find( - { - channelId: Encryption.encrypt(channelId), - bucket, - }, - { - orderBy: { - field: "messageId", - type: "DESC", - }, - fields: fields as never, - ...(before - ? { - before: { - messageId: BigInt(before), - }, - } - : {}), - ...(after - ? { - after: { - messageId: BigInt(after), - }, - } - : {}), - limit, - }, - ); - - messages.push( - ...(fetchedMessages.toArray().map((msg: MessageTable) => ({ - ...msg, - messageId: String(msg.messageId), - embeds: msg?.embeds ? msg.embeds.map((embed) => this.removeNulls(embed)) : [], - })) as unknown as MessageTable[]), - ); - - if (messages.length >= limit) { - break; - } - } - - return messages.slice(0, limit); - } - - public async getLastMessageId(channelId: string) { - return ( - (await this.getMessageData(channelId, 1, undefined, undefined, ["messageId"])) - .map((message) => message.messageId)[0] - ?.toString() ?? null - ); - } - - public async parseMessage(message: MessageTable | null, levelsDeep = 0): Promise { - if (!message) { - return null; - } - - const userData = await usersTable.get( - { - userId: message.authorId, - }, - { - fields: ["userId", "username", "globalNickname", "tag", "avatar", "publicFlags", "flags"], - }, - ); - - return { - id: message.messageId as bigint | string, - author: { - id: userData?.userId ?? "0", - username: userData?.username ?? "Unknown User", - globalNickname: userData?.globalNickname ?? null, - tag: userData?.tag ?? "0000", - avatar: userData?.avatar ?? null, - publicFlags: userData?.publicFlags ?? Constants.publicFlags.GhostBadge, - flags: userData?.flags ? FlagFields.cleanPrivateFlags(userData?.flags) : Constants.privateFlags.Ghost, - }, - content: message.content, - creationDate: new Date(this.App.snowflake.timeStamp(message.messageId.toString())).toISOString(), - editedDate: message.updatedDate?.toISOString() ?? null, - embeds: message.embeds as unknown as Embed[], - nonce: null, - replyingTo: message.replyingTo - ? levelsDeep < 3 - ? await this.parseMessage( - (await this.tryMessage( - Encryption.decrypt(message.channelId), - Encryption.decrypt(message.replyingTo), - )) as unknown as MessageTable, - levelsDeep + 1, - ) - : { - messageId: message.replyingTo, - channelId: message.channelId, - } - : null, - attachments: [], - flags: message.flags, - allowedMentions: message.allowedMentions, - mentions: { - channels: message.mentionChannels ?? [], - roles: [], - users: message.mentions ?? [], - }, - pinned: false, - deletable: true, - }; - } - - private isEmbed(data: unknown): data is Embed[] { - if (!Array.isArray(data)) { - return false; - } - - return true; - } - @Method("post") @Description("Create a new message in a specific channel") @ContentTypes("application/json") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: ["User", "Bot", "OAuth"], + oAuth2Scopes: [Scopes.MessageCreate], }), ) @Middleware(bodyValidator(messageData)) @@ -711,6 +336,21 @@ export default class FetchCreateMessages extends Route { set, user, }: CreateRoute<"/channels/:channelId/messages", Infer, [UserMiddlewareType]>) { + if (body.content && body.content.trim().length === 0) { + set.status = 400; + + const invalidContent = errorGen.EmptyMessage(); + + invalidContent.addError({ + message: { + code: "InvalidMessage", + message: "You cannot send an empty message", + }, + }); + + return invalidContent.toJSON(); + } + if (body.embeds && !this.isEmbed(body.embeds)) { const invalidEmbed = errorGen.InvalidField(); @@ -792,235 +432,133 @@ export default class FetchCreateMessages extends Route { return phishingMessage.toJSON(); } - const channel = await channelsTable.get( - { - channelId: Encryption.encrypt(params.channelId), - }, - { - fields: ["type", "guildId", "permissionOverrides", "channelId"], - }, - ); + const { response, success, permissionHandler } = await this.checkChannelAccess({ + params, + set, + user, + permissions: ["ViewChannels", "SendMessages"], + }); - const unknownChannel = errorGen.UnknownChannel(); + if (!success) { + return response; + } - if (!channel) { - set.status = 404; + if ( + permissionHandler && + !permissionHandler.hasChannelPermission(params.channelId, ["EmbedLinks"]) && + newEmbeds.length > 0 + ) { + newEmbeds = []; + canEmbed = false; + } - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", - }, - }); + if (body.nonce) { + const foundNonce = await this.App.cache.get( + `messageNonce:${Encryption.encrypt(user.id)}:${Encryption.encrypt(body.nonce)}`, + ); - return unknownChannel.toJSON(); - } + if (foundNonce) { + // @ts-expect-error -- this is fine + const fetchedMessage = await new DeleteEditGetMessage(this.App).getMessage({ + user, + params: { + channelId: params.channelId, + messageId: Encryption.decrypt(foundNonce), + }, + set, + }); - const channelFlags = new FlagUtils(channel.type ?? Constants.channelTypes.GuildText, Constants.channelTypes); + if (set.status === 200) { + return fetchedMessage; + } - if (channelFlags.hasOneArray(["Dm", "GroupChat"])) { - // todo: other logic here later + set.status = 200; // set it back to normal + } + } - set.status = 500; + if (body.replyingTo) { + const fetchedMessage = await this.tryMessage(params.channelId, body.replyingTo); - return "Internal Server Error :("; - } else { - if (!user.guilds.includes(Encryption.decrypt(channel.guildId!))) { - const invalidGuild = errorGen.UnknownGuild(); + if (!fetchedMessage) { + set.status = 404; - invalidGuild.addError({ - guildId: { - code: "UnknownGuild", - message: "The provided guild does not exist, or you do not have access to it.", + const unknownMessage = errorGen.UnknownMessage(); + + unknownMessage.addError({ + message: { + code: "UnknownMessage", + message: "The provided message does not exist or you do not have access to it.", }, }); - set.status = 404; - - return invalidGuild.toJSON(); + return unknownMessage.toJSON(); } + } - const guildMember = await guildMembersTable.get( - { - guildId: channel.guildId!, - userId: Encryption.encrypt(user.id), - left: false, - }, - { - fields: ["flags", "roles"], - }, - ); + const parsedAttachments: ReturnMessage["attachments"] = []; - if (!guildMember) { - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", + if (body.attachments && body.attachments?.length > 0) { + const invalidAttachments = errorGen.InvalidField(); + + for (const attachment of body.attachments) { + const foundAttachment = await filesTable.get( + { + fileId: Encryption.encrypt(attachment.id), }, - }); + { + fields: ["name", "thumbHash", "uploaded", "deleted"], + }, + ); - set.status = 404; + if (!foundAttachment || foundAttachment.deleted) { + invalidAttachments.addError({ + attachment: { + code: "InvalidAttachment", + message: "The provided attachment does not exist or you do not have access to it.", + }, + }); - return unknownChannel.toJSON(); - } + continue; + } - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); + if (!foundAttachment.uploaded) { + invalidAttachments.addError({ + attachment: { + code: "InvalidAttachment", + message: "The provided attachment has not finished uploading yet.", + }, + }); - if (!guildMemberFlags.has("In")) { - set.status = 404; + continue; + } - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", - }, + parsedAttachments.push({ + id: Encryption.decrypt(attachment.id), + name: Encryption.decrypt(foundAttachment.name ?? "Unknown File"), + url: `${this.App.config.server.cdnServer}/${this.App.config.s3.buckets.files}/${Encryption.decrypt(params.channelId)}/${Encryption.decrypt(attachment.id)}/${Encryption.decrypt(foundAttachment.name ?? "Unknown File")}`, + thumbHash: foundAttachment.thumbHash ?? null, }); - - return unknownChannel.toJSON(); } - // ? These are the possible text channels, if they aren't one of these they obv do not have messages you can fetch - if (!channelFlags.hasOneArray(["Dm", "GroupChat", "GuildNewMember", "GuildNews", "GuildRules", "GuildText"])) { + if (invalidAttachments.hasErrors()) { set.status = 403; - const invalidChannel = errorGen.InvalidField(); + return invalidAttachments; + } + } - invalidChannel.addError({ - channel: { - code: "InvalidChannel", - message: "The provided channel is not a text channel.", - }, - }); + const messageId = this.App.snowflake.generate(); + const mentions = fetchMentions(body.content ?? ""); - return invalidChannel.toJSON(); - } - - const permissionOverrides = channel.permissionOverrides - ? ( - await Promise.all( - channel.permissionOverrides.map(async (id) => - permissionsOverridesTable.get( - { permissionId: id }, - { fields: ["allow", "deny", "permissionId", "type"] }, - ), - ), - ) - ).filter((val) => val !== null) - : []; - - const roles = ( - await Promise.all( - guildMember.roles.map(async (id) => - rolesTable.get( - { roleId: id, guildId: channel.guildId! }, - { fields: ["roleId", "permissions", "position"] }, - ), - ), - ) - ).filter((val) => val !== null); - - const permissionCheck = new PermissionHandler( - user.id, - guildMember.flags ?? 0, - roles.map((role) => ({ - id: role.roleId!, - permissions: Permissions.permissionFromDatabase(role.permissions), - position: role.position!, - })), - [ - { - id: channel.channelId!, - overrides: permissionOverrides.map((override) => ({ - allow: Permissions.permissionFromDatabase(override.allow), - deny: Permissions.permissionFromDatabase(override.deny), - id: override.permissionId!, - type: override.type === Constants.permissionOverrideTypes.Member ? "Member" : "Role", - })), - }, - ], - ); - - if (!permissionCheck.hasChannelPermission(Encryption.decrypt(channel.channelId!), ["SendMessages"])) { - set.status = 403; - - const missingPermission = errorGen.MissingPermissions(); - - missingPermission.addError({ - channel: { - code: "MissingPermissions", - message: 'You are missing the "SendMessages" permission.', - requiredPermissions: ["SendMessages"], // ? note: this is a testing field, may be removed later - }, - }); - - return missingPermission.toJSON(); - } - - if ( - !permissionCheck.hasChannelPermission(Encryption.decrypt(channel.channelId!), ["EmbedLinks"]) && - newEmbeds.length > 0 - ) { - newEmbeds = []; - canEmbed = false; - } - } - - if (body.nonce) { - const foundNonce = await this.App.cache.get( - `messageNonce:${Encryption.encrypt(user.id)}:${Encryption.encrypt(body.nonce)}`, - ); - - if (foundNonce) { - // @ts-expect-error -- this is fine - const fetchedMessage = await new DeleteEditGetMessage(this.App).getMessage({ - user, - params: { - channelId: params.channelId, - messageId: Encryption.decrypt(foundNonce), - }, - set, - }); - - if (set.status === 200) { - return fetchedMessage; - } - - set.status = 200; // set it back to normal - } - } - - if (body.replyingTo) { - const fetchedMessage = await this.tryMessage(params.channelId, body.replyingTo); - - if (!fetchedMessage) { - set.status = 404; - - const unknownMessage = errorGen.UnknownMessage(); - - unknownMessage.addError({ - message: { - code: "UnknownMessage", - message: "The provided message does not exist or you do not have access to it.", - }, - }); - - return unknownMessage.toJSON(); - } - } - - const messageId = this.App.snowflake.generate(); - - const mentions = fetchMentions(body.content ?? ""); - - this.App.logger.debug(mentions); + this.App.logger.debug(mentions); const insertMsg: NullifyStuff = { - allowedMentions: body.allowedMentions ?? 0, - attachments: [], + allowedMentions: body.allowedMentions! ?? Constants.allowedMentions.All, + attachments: body.attachments ? body.attachments.map((attachment) => Encryption.encrypt(attachment.id)) : [], authorId: Encryption.encrypt(user.id), bucket: this.App.getBucket(params.channelId), channelId: Encryption.encrypt(params.channelId), - content: Encryption.encrypt(body.content ?? ""), + content: body.content ? Encryption.encrypt(body.content.trim() ?? "") : null, embeds: newEmbeds as unknown as EmbedType[], flags: body.flags ?? 0, mentionChannels: [], @@ -1031,52 +569,52 @@ export default class FetchCreateMessages extends Route { updatedDate: null, }; - const allowedMentionFlags = new FlagUtils(insertMsg.allowedMentions!, Constants.allowedMentions); - - if (allowedMentionFlags.hasOneArray(["Users", "All"])) { - for (const userMention of mentions.users) { - const fetchedUser = await usersTable.get( - { - userId: Encryption.encrypt(userMention), - }, - { - fields: ["userId", "flags", "publicFlags"], - }, - ); - - if (!fetchedUser) { - continue; - } - - insertMsg.mentions.push(Encryption.encrypt(userMention)); - - const settings = await settingsTable.get( - { - userId: Encryption.encrypt(userMention), - }, - { - fields: ["mentions"], - }, - ); - - if (!settings) { - continue; - } - - await settingsTable.update( - { - userId: Encryption.encrypt(userMention), - }, - { - mentions: (settings.mentions ?? []).concat({ - channelId: Encryption.encrypt(params.channelId), - messageId: Encryption.encrypt(messageId), - count: 1, - }) as never, - }, - ); - } - } + // const allowedMentionFlags = new FlagUtils(insertMsg.allowedMentions!, Constants.allowedMentions); + // todo: update this to the new system + // if (allowedMentionFlags.hasOneArray(["Users", "All"])) { + // for (const userMention of mentions.users) { + // const fetchedUser = await usersTable.get( + // { + // userId: Encryption.encrypt(userMention), + // }, + // { + // fields: ["userId", "flags", "publicFlags"], + // }, + // ); + + // if (!fetchedUser) { + // continue; + // } + + // insertMsg.mentions.push(Encryption.encrypt(userMention)); + + // const settings = await settingsTable.get( + // { + // userId: Encryption.encrypt(userMention), + // }, + // { + // fields: ["mentions"], + // }, + // ); + + // if (!settings) { + // continue; + // } + + // await settingsTable.update( + // { + // userId: Encryption.encrypt(userMention), + // }, + // { + // mentions: (settings.mentions ?? []).concat({ + // channelId: Encryption.encrypt(params.channelId), + // messageId: Encryption.encrypt(messageId), + // count: 1, + // }) as never, + // }, + // ); + // } + // } for (const channel of mentions.channels) { const channelExists = await channelsTable.get( @@ -1099,7 +637,7 @@ export default class FetchCreateMessages extends Route { allowedMentions: insertMsg.allowedMentions, authorId: insertMsg.authorId, bucket: insertMsg.bucket, - attachments: [], + attachments: insertMsg.attachments, channelId: insertMsg.channelId, content: insertMsg.content, embeds: insertMsg.embeds as never, @@ -1143,7 +681,7 @@ export default class FetchCreateMessages extends Route { publicFlags: fetchedUser.publicFlags, flags: fetchedUser.flags, }, - content: body.content ?? null, + content: body.content?.trim() ?? null, creationDate: new Date(this.App.snowflake.timeStamp(messageId)).toISOString(), editedDate: null, embeds: newEmbeds, @@ -1151,7 +689,7 @@ export default class FetchCreateMessages extends Route { replyingTo: body.replyingTo ? await this.parseMessage((await this.tryMessage(params.channelId, body.replyingTo)) as MessageTable) : null, - attachments: [], + attachments: parsedAttachments, flags: body.flags ?? 0, allowedMentions: body.allowedMentions ?? 0, mentions: { @@ -1169,13 +707,13 @@ export default class FetchCreateMessages extends Route { }); if (message.content && canEmbed) { - this.handleMessage(message, insertMsg.bucket!, params.channelId); + this.handleEmbeds(message, insertMsg.bucket!, params.channelId); } return Encryption.completeDecryption>(message); } - private async handleMessage(message: ReturnMessage, bucket: string, channelId: string) { + private async handleEmbeds(message: ReturnMessage, bucket: string, channelId: string) { this.App.logger.startTimer("Message Scraping", true); const { content } = message; @@ -1191,7 +729,6 @@ export default class FetchCreateMessages extends Route { } interface MetaDataResponse { - // todo: update typings (they are out of date rn) mimetype: string; mediaUrl: string; embed: boolean; @@ -1341,4 +878,484 @@ export default class FetchCreateMessages extends Route { }, ); } + + private removeNulls(obj: Record): Record { + const newObj: Record = {}; + + if (obj === null || obj === undefined || typeof obj !== "object") { + return obj; + } + + if (Array.isArray(obj)) { + return obj.map((item) => this.removeNulls(item)); + } + + for (const [key, value] of Object.entries(obj)) { + if (value !== null) { + if (Array.isArray(value)) { + newObj[key] = value.map((item) => this.removeNulls(item)); + + continue; + } + + newObj[key] = value; + } + } + + return newObj; + } + + private testMessage(input: string): Promise { + const fixedInput = Buffer.from(input); + + return new Promise((resolve, reject) => { + const resolveAnywaysTimeout = setTimeout(() => { + this.App.logger.warn("Phishing check took too long, resolving anyways"); + + resolve(JSON.stringify({ domain: null, phishing: false })); + }, 100); + + const callback = new JSCallback( + (result) => { + clearTimeout(resolveAnywaysTimeout); + + resolve(new CString(result).toString()); + + callback.close(); + }, + { + returns: "void", + args: [FFIType.cstring], + }, + ); + + try { + this.lib.symbols.check_message(ptr(fixedInput), callback); + } catch (error) { + reject(error); + + callback.close(); + } + }); + } + + public async checkMessage(message: string) { + if (!this.App.config.server.phishing?.enabled) { + return false; + } + + // ? using regex check if message even includes a domain if not we can skip the check + if (!/(https?:\/\/[^\s]+)/.test(message)) { + return false; + } + + this.App.logger.startTimer("Phishing check", true); + + const checked = await this.testMessage(message + "\0"); + + this.App.logger.stopTimer("Phishing check"); + + const parsed = JSON.parse(checked.toString()) as { domain: string; phishing: boolean }; + + if (this.App.config.server.phishing?.action === "alert") { + this.App.logger.warn(`Phishing domain detected: ${parsed.domain}`); + + return false; // ? since only alerting we don't want to block + } + + return parsed.phishing; + } + + private async checkChannelAccess({ + params, + set, + user, + permissions, + }: { + user: UserMiddlewareType["user"]; + set: CreateRoute["set"]; + params: { channelId: string }; + permissions: PermissionKey[]; + }): Promise<{ + success: boolean; + response: unknown | null; + channel: ChannelTable | null; + permissionHandler: PermissionHandler | null; + }> { + const channel = await channelsTable.get( + { + channelId: Encryption.encrypt(params.channelId), + }, + { + fields: ["type", "guildId", "permissionOverrides", "channelId"], + }, + ); + + const unknownChannel = errorGen.UnknownChannel(); + + if (!channel) { + set.status = 404; + + unknownChannel.addError({ + channel: { + code: "UnknownChannel", + message: "The provided channel does not exist or you do not have access to it.", + }, + }); + + return { + success: false, + response: unknownChannel.toJSON(), + channel: null, + permissionHandler: null, + }; + } + + const channelFlags = new FlagUtils(channel.type ?? Constants.channelTypes.GuildText, Constants.channelTypes); + + if (channelFlags.hasOneArray(["Dm", "GroupChat"])) { + // todo: other logic here later + + set.status = 500; + + return { + success: false, + channel: null, + response: "Internal Server Error :(", + permissionHandler: null, + }; + } else { + if (!(await user.checkInGuild(Encryption.decrypt(channel.guildId!)))) { + // ? This is so we don't got to query guild members :3 + set.status = 404; + + unknownChannel.addError({ + channel: { + code: "UnknownChannel", + message: "The provided channel does not exist or you do not have access to it.", + }, + }); + + return { + success: false, + channel: null, + response: unknownChannel.toJSON(), + permissionHandler: null, + }; + } + + const guildMember = await guildMembersTable.get({ + guildId: channel.guildId!, + userId: Encryption.encrypt(user.id), + left: false, + }); + + if (!guildMember) { + unknownChannel.addError({ + channel: { + code: "UnknownChannel", + message: "The provided channel does not exist or you do not have access to it.", + }, + }); + + set.status = 404; + + return { + success: false, + channel: null, + response: unknownChannel.toJSON(), + permissionHandler: null, + }; + } + + const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); + + if (!guildMemberFlags.has("In")) { + set.status = 404; + + unknownChannel.addError({ + channel: { + code: "UnknownChannel", + message: "The provided channel does not exist or you do not have access to it.", + }, + }); + + return { + success: false, + channel: null, + response: unknownChannel.toJSON(), + permissionHandler: null, + }; + } + + // ? These are the possible text channels, if they aren't one of these they obv do not have messages you can fetch + if (!channelFlags.hasOneArray(["Dm", "GroupChat", "GuildNewMember", "GuildNews", "GuildRules", "GuildText"])) { + set.status = 403; + + const invalidChannel = errorGen.InvalidField(); + + invalidChannel.addError({ + channel: { + code: "InvalidChannel", + message: "The provided channel is not a text channel.", + }, + }); + + return { + success: false, + channel: null, + response: invalidChannel.toJSON(), + permissionHandler: null, + }; + } + + const permissionOverrides = channel.permissionOverrides + ? ( + await Promise.all( + channel.permissionOverrides.map(async (id) => + permissionsOverridesTable.get( + { permissionId: id }, + { fields: ["allow", "deny", "permissionId", "type"] }, + ), + ), + ) + ).filter((val) => val !== null) + : []; + + const roles = ( + await Promise.all( + guildMember.roles.map(async (id) => + rolesTable.get( + { roleId: id, guildId: channel.guildId! }, + { fields: ["roleId", "permissions", "position"] }, + ), + ), + ) + ).filter((val) => val !== null); + + const permissionCheck = new PermissionHandler( + user.id, + guildMember.flags ?? 0, + roles.map((role) => ({ + id: role.roleId!, + permissions: Permissions.permissionFromDatabase(role.permissions), + position: role.position!, + })), + [ + { + id: channel.channelId!, + overrides: permissionOverrides.map((override) => ({ + allow: Permissions.permissionFromDatabase(override.allow), + deny: Permissions.permissionFromDatabase(override.deny), + id: override.permissionId!, + type: override.type === Constants.permissionOverrideTypes.Member ? "Member" : "Role", + })), + }, + ], + ); + + if (!permissionCheck.hasChannelPermission(Encryption.decrypt(channel.channelId!), permissions)) { + set.status = 403; + + const missingPermission = errorGen.MissingPermissions(); + + missingPermission.addError({ + channel: { + code: "MissingPermissions", + message: `You are missing the "${permissions.join(", ")}" permissions.`, + requiredPermissions: permissions, // ? note: this is a testing field, may be removed later + }, + }); + + return { + success: false, + channel: null, + response: missingPermission.toJSON(), + permissionHandler: null, + }; + } + + return { + success: true, + channel: channel as ChannelTable, + response: null, + permissionHandler: permissionCheck, + }; + } + } + + public async fetchMessage(channelId: string, messageId: string, bucket: string) { + return messagesTable.get({ + channelId: Encryption.encrypt(channelId), + messageId: BigInt(messageId), + bucket, + }); + } + + public async tryMessage(channelId: string, messageId: string) { + const buckets = this.App.getBuckets(channelId); + + for (const bucket of buckets) { + const message = await this.fetchMessage(channelId, messageId, bucket); + + if (message) { + return message; + } + } + + return null; + } + + private async getMessageData( + channelId: string, + limit = 50, + before?: string, + after?: string, + fields?: (keyof MessageTable)[], + ): Promise { + const messages: MessageTable[] = []; + const possibleBuckets = this.App.getBuckets(channelId).reverse(); + + for (const bucket of possibleBuckets) { + const fetchedMessages = await messagesTable.find( + { + channelId: Encryption.encrypt(channelId), + bucket, + }, + { + orderBy: { + field: "messageId", + type: "DESC", + }, + fields: fields as never, + ...(before + ? { + before: { + messageId: BigInt(before), + }, + } + : {}), + ...(after + ? { + after: { + messageId: BigInt(after), + }, + } + : {}), + limit, + }, + ); + + messages.push( + ...(fetchedMessages.toArray().map((msg: MessageTable) => ({ + ...msg, + messageId: String(msg.messageId), + embeds: msg?.embeds ? msg.embeds.map((embed) => this.removeNulls(embed)) : [], + })) as unknown as MessageTable[]), + ); + + if (messages.length >= limit) { + break; + } + } + + return messages.slice(0, limit); + } + + public async getLastMessageId(channelId: string) { + return ( + (await this.getMessageData(channelId, 1, undefined, undefined, ["messageId"])) + .map((message) => message.messageId)[0] + ?.toString() ?? null + ); + } + + public async parseMessage(message: MessageTable | null, levelsDeep = 0): Promise { + if (!message) { + return null; + } + + const userData = await usersTable.get( + { + userId: message.authorId, + }, + { + fields: ["userId", "username", "globalNickname", "tag", "avatar", "publicFlags", "flags"], + }, + ); + + const newAttachments: { id: string; name: string; url: string; thumbHash: string | null }[] = []; + + for (const attachment of message.attachments) { + const foundAttachment = await filesTable.get( + { + fileId: attachment, + }, + { + fields: ["name", "thumbHash"], + }, + ); + + if (!foundAttachment) { + continue; + } + + newAttachments.push({ + id: Encryption.decrypt(attachment), + name: Encryption.decrypt(foundAttachment.name ?? "Unknown File"), + url: `${this.App.config.server.cdnServer}/${this.App.config.s3.buckets.files}/${Encryption.decrypt(message.channelId)}/${Encryption.decrypt(attachment)}/${Encryption.decrypt(foundAttachment.name ?? "Unknown File")}`, + thumbHash: foundAttachment.thumbHash ?? null, + }); + } + + return { + id: message.messageId as bigint | string, + author: { + id: userData?.userId, + username: userData?.username ?? "Unknown User", + globalNickname: userData?.globalNickname ?? null, + tag: userData?.tag ?? "0000", + avatar: userData?.avatar ?? null, + publicFlags: userData?.publicFlags ?? Constants.publicFlags.GhostBadge, + flags: userData?.flags ? FlagFields.cleanPrivateFlags(userData?.flags) : Constants.privateFlags.Ghost, + } as ReturnMessage["author"], + content: message.content, + creationDate: new Date(this.App.snowflake.timeStamp(message.messageId.toString())).toISOString(), + editedDate: message.updatedDate?.toISOString() ?? null, + embeds: message.embeds as unknown as Embed[], + nonce: null, + replyingTo: message.replyingTo + ? levelsDeep < 3 + ? await this.parseMessage( + (await this.tryMessage( + Encryption.decrypt(message.channelId), + Encryption.decrypt(message.replyingTo), + )) as unknown as MessageTable, + levelsDeep + 1, + ) + : { + messageId: message.replyingTo, + channelId: message.channelId, + } + : null, + attachments: newAttachments, + flags: message.flags, + allowedMentions: message.allowedMentions, + mentions: { + channels: message.mentionChannels ?? [], + roles: [], + users: message.mentions ?? [], + }, + pinned: false, + deletable: true, + }; + } + + private isEmbed(data: unknown): data is Embed[] { + if (!Array.isArray(data)) { + return false; + } + + return true; + } } diff --git a/src/Routes/v1/channels/[channelId]/typing.ts b/src/Routes/v1/channels/[channelId]/typing.ts index 6fa32d0e..b0386188 100644 --- a/src/Routes/v1/channels/[channelId]/typing.ts +++ b/src/Routes/v1/channels/[channelId]/typing.ts @@ -1,7 +1,6 @@ import Constants from "@/Constants.ts"; import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; -import type API from "@/Utils/Classes/API.ts"; import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import { FlagUtils } from "@/Utils/Classes/BitFields/NewFlags.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; @@ -20,10 +19,6 @@ import { rolesTable } from "@/Utils/Cql/Tables/RoleTable.ts"; import PermissionHandler from "@/Utils/Versioning/v1/PermissionCheck.ts"; export default class Typing extends Route { - public constructor(App: API) { - super(App); - } - @Method("post") @Description( "Tell other clients when you are typing, clients should send this every 10 seconds, it should also last for 15 seconds", @@ -31,8 +26,8 @@ export default class Typing extends Route { @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async sendTyping({ params, set, user }: CreateRoute<"/channels/:channelId", any, [UserMiddlewareType]>) { diff --git a/src/Routes/v1/guilds/[guildId]/bans/index.ts b/src/Routes/v1/guilds/[guildId]/bans/index.ts index 1cf5ce99..bab87367 100644 --- a/src/Routes/v1/guilds/[guildId]/bans/index.ts +++ b/src/Routes/v1/guilds/[guildId]/bans/index.ts @@ -1,14 +1,9 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class FetchCreateRemoveBan extends Route { - public constructor(App: API) { - super(App); - } - @Method("delete") @Description("Change this Description when working on this route") @ContentTypes("application/json") diff --git a/src/Routes/v1/guilds/[guildId]/channels.ts b/src/Routes/v1/guilds/[guildId]/channels.ts index 05f2eea1..4dbcc565 100644 --- a/src/Routes/v1/guilds/[guildId]/channels.ts +++ b/src/Routes/v1/guilds/[guildId]/channels.ts @@ -2,9 +2,9 @@ import Constants from "@/Constants.ts"; import bodyValidator from "@/Middleware/BodyValidator.ts"; import userMiddleware, { type UserMiddlewareType } from "@/Middleware/User.ts"; import { any, boolean, enums, type Infer, number, object, snowflake, string } from "@/Types/BodyValidation.ts"; -import type API from "@/Utils/Classes/API.ts"; import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; +import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; @@ -12,11 +12,17 @@ import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Middleware from "@/Utils/Classes/Routing/Decorators/Middleware.ts"; import Route, { type CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; -import { channelsTable } from "@/Utils/Cql/Tables/ChannelTable.ts"; +import { channelsTable, type ChannelTable } from "@/Utils/Cql/Tables/ChannelTable.ts"; import { guildMembersTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; -import { permissionsOverridesTable } from "@/Utils/Cql/Tables/PermissionsOverideTable.ts"; +import { + type PermissionsOverridesTable, + permissionsOverridesTable, +} from "@/Utils/Cql/Tables/PermissionsOverideTable.ts"; import { rolesTable } from "@/Utils/Cql/Tables/RoleTable.ts"; +import { fixChannelPositions } from "@/Utils/Versioning/v1/FixChannelPositions.ts"; +import { getEditedChannels } from "@/Utils/Versioning/v1/GetEditedChannels.ts"; import PermissionHandler from "@/Utils/Versioning/v1/PermissionCheck.ts"; +import permissionOverrideType from "@/Utils/Versioning/v1/permissionOverrideType.ts"; const postChannel = { name: string().max(32).min(2), @@ -30,8 +36,8 @@ const postChannel = { permissionOverrides: object( { type: enums([Constants.permissionOverrideTypes.Member, Constants.permissionOverrideTypes.Role]), - allow: any().optional().nullable(), - deny: any().optional().nullable(), + allow: any(), + deny: any(), slowmode: number().min(0).max(86_400).optional(), // ? In seconds // TODO: other stuff }, @@ -40,18 +46,101 @@ const postChannel = { slowmode: number().min(0).max(86_400).optional(), // ? In seconds ageRestricted: boolean().optional(), position: number().optional(), -}; + allowedMentions: number().optional(), + children: any().optional(), +} satisfies { [key in keyof Omit]: unknown }; export default class FetchCreateChannels extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") - @Description("Change this Description when working on this route") + @Description("Fetch channels in a guild") @ContentTypes("any") - public getChannels() { - return {}; + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: "User", + }), + ) + public async getChannels({ user, params, set }: CreateRoute<"/guilds/:guildId/channels", any, [UserMiddlewareType]>) { + const invalidGuild = errorGen.UnknownGuild(); + + invalidGuild.addError({ + guildId: { + code: "UnknownGuild", + message: "The provided guild does not exist, or you do not have access to it.", + }, + }); + + if (!user.guilds.includes(params.guildId)) { + set.status = 404; + + return invalidGuild.toJSON(); + } + + const guildMember = await guildMembersTable.get( + { + guildId: Encryption.encrypt(params.guildId), + userId: Encryption.encrypt(user.id), + left: false, + }, + { fields: ["flags", "roles"] }, + ); + + if (!guildMember) { + set.status = 404; + + return invalidGuild.toJSON(); + } + + const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); + + if (!guildMemberFlags.has("In")) { + set.status = 404; + + return invalidGuild.toJSON(); + } + + const channels = await channelsTable.find({ + guildId: Encryption.encrypt(params.guildId), + }); + + return Encryption.completeDecryption( + ( + await Promise.all( + channels.map(async (channel) => { + const fetchedOverrides = ( + await Promise.all( + channel.permissionOverrides.map((id) => + permissionsOverridesTable.get({ permissionId: Encryption.encrypt(id) }), + ), + ) + ).filter((perm) => perm !== null); + + return { + name: channel.name, + id: channel.channelId, + parentId: channel.parentId, + description: channel.description, + ageRestricted: channel.ageRestricted, + slowmode: channel.slowmode, + type: channel.type, + children: channel.children, + permissionOverrides: Object.fromEntries( + fetchedOverrides.map((perm) => [ + Encryption.decrypt(perm.permissionId!), + { + allow: Permissions.permissionFromDatabase(perm!.allow), + deny: Permissions.permissionFromDatabase(perm!.deny), + type: perm!.type, + slowmode: perm!.slowmode, + }, + ]), + ), + position: channel.position, + }; + }), + ) + ).filter((channel) => channel !== null), + ); } @Method("post") @@ -59,8 +148,8 @@ export default class FetchCreateChannels extends Route { @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) @Middleware(bodyValidator(postChannel)) @@ -70,6 +159,68 @@ export default class FetchCreateChannels extends Route { params, set, }: CreateRoute<"/guilds/:guildId/channels", Infer, [UserMiddlewareType]>) { + if (body.children !== undefined) { + if (!Array.isArray(body.children)) { + set.status = 400; + + const invalidField = errorGen.InvalidField(); + + invalidField.addError({ + children: { + code: "InvalidType", + message: "The children field must be an array.", + }, + }); + + return invalidField.toJSON(); + } + + if (body.children.some((child) => typeof child !== "string")) { + set.status = 400; + + const invalidField = errorGen.InvalidField(); + + invalidField.addError({ + children: { + code: "InvalidType", + message: "The children field must be an array of strings.", + }, + }); + + return invalidField.toJSON(); + } + } + + if (body.permissionOverrides !== undefined) { + const invalidField = errorGen.InvalidField(); + + for (const [key, value] of Object.entries(body.permissionOverrides)) { + if (!permissionOverrideType(value.allow)) { + invalidField.addError({ + [`permissionOverrides.${key}.allow`]: { + code: "InvalidType", + message: "The allow field must be an array of arrays of strings.", + }, + }); + } + + if (!permissionOverrideType(value.deny)) { + invalidField.addError({ + [`permissionOverrides.${key}.deny`]: { + code: "InvalidType", + message: "The deny field must be an array of arrays of strings.", + }, + }); + } + } + + if (invalidField.hasErrors()) { + set.status = 400; + + return invalidField.toJSON(); + } + } + const invalidGuild = errorGen.UnknownGuild(); invalidGuild.addError({ @@ -205,103 +356,169 @@ export default class FetchCreateChannels extends Route { }); } - for (const [key, value] of Object.entries(body.permissionOverrides ?? {})) { - // ? allow / deny are arrays of arrays of strings (string[][]) - if (value.allow) { - if (!Array.isArray(value.allow)) { - set.status = 400; - - invalidField.addError({ - [`permissionOverrides.${key}.allow`]: { - code: "InvalidType", - message: "The allow field must be an array of arrays of strings.", - }, - }); - - continue; - } - - if ( - !value.allow.every((arr) => Array.isArray(arr)) || - !value.allow.every((arr) => arr.every((str) => typeof str === "string")) - ) { - set.status = 400; - - invalidField.addError({ - [`permissionOverrides.${key}.allow`]: { - code: "InvalidType", - message: "The allow field must be an array of arrays of strings.", - }, - }); - - continue; - } + if (invalidField.hasErrors()) { + return invalidField.toJSON(); + } - if (value.allow.some((arr) => arr.length !== 2)) { - set.status = 400; + const channels = await channelsTable.find({ + guildId: Encryption.encrypt(params.guildId), + }); - invalidField.addError({ - [`permissionOverrides.${key}.allow`]: { - code: "InvalidType", - message: "The allow field must be an array of arrays of strings with 2 elements.", - }, - }); + if (channels.length >= Constants.settings.Max.ChannelCount) { + set.status = 403; - continue; - } - } + const maxChannels = errorGen.LimitReached(); - if (value.deny) { - if (!Array.isArray(value.deny)) { - set.status = 400; + maxChannels.addError({ + channel: { + code: "LimitReached", + message: `The maximum amount of channels for this guild has been reached (${Constants.settings.Max.ChannelCount}).`, + }, + }); - invalidField.addError({ - [`permissionOverrides.${key}.deny`]: { - code: "InvalidType", - message: "The deny field must be an array of arrays of strings.", - }, - }); + return maxChannels.toJSON(); + } - continue; - } + const data: NullifyStuff = { + ageRestricted: body.ageRestricted ?? false, + channelId: Encryption.encrypt(this.App.snowflake.generate()), + description: body.description ?? null, + guildId: Encryption.encrypt(params.guildId), + name: body.name, + parentId: body.parentId ? Encryption.encrypt(body.parentId) : null, + position: body.position ?? 0, + slowmode: body.slowmode ?? 0, + type: body.type, + allowedMentions: body.allowedMentions ?? 0, + children: body.children ? body.children.map(Encryption.encrypt) : [], + permissionOverrides: [], + }; + + const permissions: NullifyStuff[] = []; - if ( - !value.deny.every((arr) => Array.isArray(arr)) || - !value.deny.every((arr) => arr.every((str) => typeof str === "string")) - ) { - set.status = 400; + for (const [key, value] of Object.entries(body.permissionOverrides ?? {})) { + const permId = this.App.snowflake.generate(); + + permissions.push({ + allow: Permissions.permissionToDatabase(value.allow as [string, string][]), + deny: Permissions.permissionToDatabase(value.deny as [string, string][]), + editable: true, + id: Encryption.encrypt(key), + permissionId: Encryption.encrypt(permId), + slowmode: value.slowmode ?? 0, + type: key === params.guildId ? Constants.permissionOverrideTypes.Everyone : value.type, + }); - invalidField.addError({ - [`permissionOverrides.${key}.deny`]: { - code: "InvalidType", - message: "The deny field must be an array of arrays of strings.", - }, - }); + data.permissionOverrides.push(Encryption.encrypt(permId)); + } - continue; - } + await Promise.all(permissions.map((perm) => permissionsOverridesTable.create(perm))); - if (value.deny.some((arr) => arr.length !== 2)) { - set.status = 400; + const fixedChannels = fixChannelPositions( + Encryption.completeDecryption(data) as ChannelTable, + Encryption.completeDecryption(channels.toArray()) as ChannelTable[], + ); - invalidField.addError({ - [`permissionOverrides.${key}.deny`]: { - code: "InvalidType", - message: "The deny field must be an array of arrays of strings with 2 elements.", - }, - }); + const changedChannels = getEditedChannels( + Encryption.completeDecryption(channels.toArray()) as ChannelTable[], + Encryption.completeDecryption(fixedChannels), + ); - continue; - } - } - } + await channelsTable.create(data); + + await Promise.all( + changedChannels.map(async (channel) => { + const fetchedOverrides = ( + await Promise.all( + channel.permissionOverrides.map((id) => + permissionsOverridesTable.get({ permissionId: Encryption.encrypt(id) }), + ), + ) + ).filter((perm) => perm !== null); + + this.App.rabbitMQForwarder("channel.update", { + guildId: params.guildId, + name: channel.name, + id: channel.channelId, + parentId: channel.parentId, + description: channel.description, + ageRestricted: channel.ageRestricted, + slowmode: channel.slowmode, + type: channel.type, + children: channel.children, + position: channel.position, + permissionOverrides: Object.fromEntries( + fetchedOverrides.map((perm) => [ + Encryption.decrypt(perm.permissionId!), + { + allow: Permissions.permissionFromDatabase(perm!.allow), + deny: Permissions.permissionFromDatabase(perm!.deny), + type: perm!.type, + slowmode: perm!.slowmode, + }, + ]), + ), + }); + + await channelsTable.update( + { + channelId: Encryption.encrypt(channel.channelId), + guildId: Encryption.encrypt(channel.guildId), + }, + { + position: channel.position, + }, + ); + }), + ); - if (invalidField.hasErrors()) { - return invalidField.toJSON(); - } + this.App.rabbitMQForwarder("channel.create", { + guildId: params.guildId, + name: data.name, + id: data.channelId, + parentId: data.parentId, + description: data.description, + ageRestricted: data.ageRestricted, + slowmode: data.slowmode, + type: data.type, + children: data.children, + position: data.position, + permissionOverrides: Object.fromEntries( + permissions.map((perm) => [ + Encryption.decrypt(perm.permissionId!), + { + allow: Permissions.permissionFromDatabase(perm.allow), + deny: Permissions.permissionFromDatabase(perm.deny), + type: perm.type, + slowmode: perm.slowmode, + }, + ]), + ), + }); - const channels = await channelsTable.find({ - guildId: Encryption.encrypt(params.guildId), + set.status = 201; + + return Encryption.completeDecryption({ + name: data.name, + id: data.channelId, + parentId: data.parentId, + description: data.description, + ageRestricted: data.ageRestricted, + slowmode: data.slowmode, + type: data.type, + children: data.children, + position: data.position, + permissionOverrides: Object.fromEntries( + permissions.map((perm) => [ + Encryption.decrypt(perm.permissionId!), + { + allow: Permissions.permissionFromDatabase(perm.allow), + deny: Permissions.permissionFromDatabase(perm.deny), + type: perm.type, + slowmode: perm.slowmode, + }, + ]), + ), }); } } diff --git a/src/Routes/v1/guilds/[guildId]/index.ts b/src/Routes/v1/guilds/[guildId]/index.ts index 5ddcee82..045b2fd1 100644 --- a/src/Routes/v1/guilds/[guildId]/index.ts +++ b/src/Routes/v1/guilds/[guildId]/index.ts @@ -1,6 +1,5 @@ import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; -import type API from "@/Utils/Classes/API.ts"; import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; @@ -13,7 +12,7 @@ import type { CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; import { fixChannelPositionsWithoutNewChannel } from "@/Utils/Versioning/v1/FixChannelPositions.ts"; import FetchCreateMessages from "../../channels/[channelId]/messages/index.ts"; -import type { finishedGuild, rawGuild } from "../index.ts"; +import type { FinishedGuild, RawGuild } from "../index.ts"; import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; import { type PermissionsOverridesTable, @@ -25,20 +24,14 @@ import { channelsTable, type ChannelTable } from "@/Utils/Cql/Tables/ChannelTabl import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; import { guildMembersTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; -// TODO: Emit when the guild is deleted - export default class FetchEditGuild extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Fetch a guild") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async getGuild({ @@ -90,7 +83,7 @@ export default class FetchEditGuild extends Route { }) : null; - const rawGuild: rawGuild = { + const rawGuild: RawGuild = { guild: fetchedGuild as GuildTable, roles: rawRoles ? (rawRoles.toArray() as RoleTable[]) : [], channels: rawChannels @@ -109,7 +102,7 @@ export default class FetchEditGuild extends Route { if (!found) { this.App.logger.warn( - `Failed to fetch permission override ${perm} for channel ${channel.channel.channelId} in guild ${params.guildId}`, + `Failed to fetch permission override ${perm} | ${Encryption.decrypt(perm)} for channel ${channel.channel.channelId} in guild ${params.guildId}`, ); continue; @@ -123,7 +116,7 @@ export default class FetchEditGuild extends Route { } } - const guild: Partial = { + const guild: Partial = { name: Encryption.decrypt(rawGuild.guild.name), description: rawGuild.guild.description ? Encryption.decrypt(rawGuild.guild.description) : null, id: Encryption.decrypt(rawGuild.guild.guildId), @@ -202,18 +195,20 @@ export default class FetchEditGuild extends Route { guild.roles?.push({ name: Encryption.decrypt(role.name), color: role.color, - hoist: role.hoisted, + hoisted: role.hoisted, id: Encryption.decrypt(role.roleId), permissions: Permissions.permissionFromBigint(role.permissions).normizedBits, position: role.position, allowedAgeRestricted: role.allowedAgeRestricted, + deleteable: role.deleteable, + mentionable: role.mentionable, }); } return guild; } - @Method("post") + @Method("patch") @Description("Change this Description when working on this route") @ContentTypes("application/json") public postGuild() { @@ -225,8 +220,8 @@ export default class FetchEditGuild extends Route { @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async deleteGuild({ user, params, set }: CreateRoute<"/:guildId", any, [UserMiddlewareType]>) { @@ -279,8 +274,7 @@ export default class FetchEditGuild extends Route { return noPermission.toJSON(); } - // ? why aren't we using the tables here? - // todo: use tables + // todo: put this into a queue rather then doing it all at once await this.App.cassandra.execute("DELETE FROM channels WHERE guild_id = ?", [Encryption.encrypt(params.guildId)]); await this.App.cassandra.execute("DELETE FROM guild_members WHERE guild_id = ? AND left = false", [ Encryption.encrypt(params.guildId), diff --git a/src/Routes/v1/guilds/[guildId]/invites/@me.ts b/src/Routes/v1/guilds/[guildId]/invites/@me.ts index 7cb147e8..e8129589 100644 --- a/src/Routes/v1/guilds/[guildId]/invites/@me.ts +++ b/src/Routes/v1/guilds/[guildId]/invites/@me.ts @@ -1,25 +1,13 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class MyInvites extends Route { - public constructor(App: API) { - super(App); - } - @Method("delete") @Description("Change this Description when working on this route") @ContentTypes("application/json") public deleteInvite() { return {}; } - - @Method("get") - @Description("Change this Description when working on this route") - @ContentTypes("application/json") - public getInvites() { - return {}; - } } diff --git a/src/Routes/v1/guilds/[guildId]/invites/[inviteCode].ts b/src/Routes/v1/guilds/[guildId]/invites/[inviteCode].ts index e5c62e85..a35b2086 100644 --- a/src/Routes/v1/guilds/[guildId]/invites/[inviteCode].ts +++ b/src/Routes/v1/guilds/[guildId]/invites/[inviteCode].ts @@ -1,14 +1,9 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class FetchDeleteInvite extends Route { - public constructor(App: API) { - super(App); - } - @Method("delete") @Description("Change this Description when working on this route") @ContentTypes("application/json") diff --git a/src/Routes/v1/guilds/[guildId]/invites/index.ts b/src/Routes/v1/guilds/[guildId]/invites/index.ts index 52ccb2f8..a8d0954a 100644 --- a/src/Routes/v1/guilds/[guildId]/invites/index.ts +++ b/src/Routes/v1/guilds/[guildId]/invites/index.ts @@ -4,7 +4,6 @@ import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { number, snowflake } from "@/Types/BodyValidation.ts"; -import type API from "@/Utils/Classes/API.ts"; import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; @@ -33,17 +32,13 @@ const createInviteBody = { }; export default class FetchInvite extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Fetch invites from a guild") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async getInvites({ user, params, set }: CreateRoute<"/guilds/:guildId/invites", any, [UserMiddlewareType]>) { @@ -156,8 +151,8 @@ export default class FetchInvite extends Route { @Middleware(bodyValidator(createInviteBody)) @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async createInvite({ diff --git a/src/Routes/v1/guilds/[guildId]/leave.ts b/src/Routes/v1/guilds/[guildId]/leave.ts index 8410bb50..665e8f54 100644 --- a/src/Routes/v1/guilds/[guildId]/leave.ts +++ b/src/Routes/v1/guilds/[guildId]/leave.ts @@ -1,7 +1,6 @@ import Constants from "@/Constants.ts"; import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; -import type API from "@/Utils/Classes/API.ts"; import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; @@ -15,17 +14,13 @@ import { guildMembersTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; export default class LeaveGuild extends Route { - public constructor(App: API) { - super(App); - } - @Method("delete") @Description("Change this Description when working on this route") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async deleteGuild({ user, params, set }: CreateRoute<"/:guildId", any, [UserMiddlewareType]>) { diff --git a/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts b/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts index 6406dee9..188ad20a 100644 --- a/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts +++ b/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts @@ -1,14 +1,9 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class BanMember extends Route { - public constructor(App: API) { - super(App); - } - @Method("delete") @Description("Change this Description when working on this route") @ContentTypes("application/json") diff --git a/src/Routes/v1/guilds/[guildId]/members/[memberId]/index.ts b/src/Routes/v1/guilds/[guildId]/members/[memberId]/index.ts index f08d1eb8..2b0dde71 100644 --- a/src/Routes/v1/guilds/[guildId]/members/[memberId]/index.ts +++ b/src/Routes/v1/guilds/[guildId]/members/[memberId]/index.ts @@ -1,7 +1,6 @@ import bodyValidator from "@/Middleware/BodyValidator.ts"; import userMiddleware, { type UserMiddlewareType } from "@/Middleware/User.ts"; import { any, type Infer, string } from "@/Types/BodyValidation.ts"; -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; @@ -14,10 +13,6 @@ const modifyMemberBody = { }; export default class FetchPatchMember extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Change this Description when working on this route") @ContentTypes("application/json") @@ -30,8 +25,8 @@ export default class FetchPatchMember extends Route { @ContentTypes("application/json") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) @Middleware(bodyValidator(modifyMemberBody)) diff --git a/src/Routes/v1/guilds/[guildId]/members/[memberId]/kick.ts b/src/Routes/v1/guilds/[guildId]/members/[memberId]/kick.ts index 3874e507..81dcb343 100644 --- a/src/Routes/v1/guilds/[guildId]/members/[memberId]/kick.ts +++ b/src/Routes/v1/guilds/[guildId]/members/[memberId]/kick.ts @@ -1,14 +1,9 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class KickMember extends Route { - public constructor(App: API) { - super(App); - } - @Method("delete") @Description("Change this Description when working on this route") @ContentTypes("application/json") diff --git a/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/[roleId].ts b/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/[roleId].ts index 3a87c63d..c50a250e 100644 --- a/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/[roleId].ts +++ b/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/[roleId].ts @@ -1,5 +1,4 @@ import userMiddleware, { type UserMiddlewareType } from "@/Middleware/User.ts"; -import type API from "@/Utils/Classes/API.ts"; import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; @@ -14,17 +13,13 @@ import { rolesTable } from "@/Utils/Cql/Tables/RoleTable.ts"; import PermissionHandler from "@/Utils/Versioning/v1/PermissionCheck.ts"; export default class AddRemoveRole extends Route { - public constructor(App: API) { - super(App); - } - @Method("put") @Description("Add a role to a member") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async putRole({ @@ -32,14 +27,14 @@ export default class AddRemoveRole extends Route { params, set, }: CreateRoute<"/:guildId/members/:memberId/roles/:roleId", any, [UserMiddlewareType]>) { - const member = await this.permissionChecker({ set, params, user } as CreateRoute< + const { member, response, success } = await this.permissionChecker({ set, params, user } as CreateRoute< "/:guildId/members/:memberId/roles/:roleId", any, [UserMiddlewareType] >); - if (set.status !== 200 || "code" in member) { - return member; + if (!success || !member) { + return response; } if (member.roles.includes(Encryption.encrypt(params.roleId))) { @@ -63,6 +58,7 @@ export default class AddRemoveRole extends Route { set.status = 204; + // todo: guild member update // this.App.rabbitMQForwarder("guildMember.update", {}); return; @@ -73,8 +69,8 @@ export default class AddRemoveRole extends Route { @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async deleteRole({ @@ -82,14 +78,14 @@ export default class AddRemoveRole extends Route { params, set, }: CreateRoute<"/:guildId/members/:memberId/roles/:roleId", any, [UserMiddlewareType]>) { - const member = await this.permissionChecker({ set, params, user } as CreateRoute< + const { member, response, success } = await this.permissionChecker({ set, params, user } as CreateRoute< "/:guildId/members/:memberId/roles/:roleId", any, [UserMiddlewareType] >); - if (set.status !== 200 || "code" in member) { - return member; + if (!success || !member) { + return response; } if (params.roleId === params.guildId) { @@ -128,6 +124,7 @@ export default class AddRemoveRole extends Route { set.status = 204; + // todo: guild member update // this.App.rabbitMQForwarder("guildMember.update", {}); return; @@ -137,13 +134,11 @@ export default class AddRemoveRole extends Route { set, params, user, - }: CreateRoute<"/:guildId/members/:memberId/roles/:roleId", any, [UserMiddlewareType]>): Promise< - | { - code: number; - errors: Record; - } - | GuildMemberTable - > { + }: CreateRoute<"/:guildId/members/:memberId/roles/:roleId", any, [UserMiddlewareType]>): Promise<{ + success: boolean; + response: unknown; + member: GuildMemberTable | null; + }> { const invalidGuild = errorGen.UnknownGuild(); invalidGuild.addError({ @@ -158,7 +153,11 @@ export default class AddRemoveRole extends Route { this.App.logger.debug("Not in array"); - return invalidGuild.toJSON(); + return { + success: false, + response: invalidGuild.toJSON(), + member: null, + }; } const guildMember = await guildMembersTable.get( @@ -175,7 +174,11 @@ export default class AddRemoveRole extends Route { this.App.logger.debug("Guild member not found"); - return invalidGuild.toJSON(); + return { + success: false, + response: invalidGuild.toJSON(), + member: null, + }; } const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); @@ -185,7 +188,11 @@ export default class AddRemoveRole extends Route { this.App.logger.debug("Not in guild", guildMember); - return invalidGuild.toJSON(); + return { + success: false, + response: invalidGuild.toJSON(), + member: null, + }; } const usersRoles = ( @@ -223,7 +230,11 @@ export default class AddRemoveRole extends Route { }, }); - return missingPermission.toJSON(); + return { + success: false, + response: missingPermission.toJSON(), + member: null, + } } const member = await guildMembersTable.get( @@ -247,7 +258,11 @@ export default class AddRemoveRole extends Route { }, }); - return notFound.toJSON(); + return { + success: false, + response: notFound.toJSON(), + member: null, + } } const foundRole = await rolesTable.get( @@ -270,7 +285,11 @@ export default class AddRemoveRole extends Route { }, }); - return notFound.toJSON(); + return { + success: false, + response: notFound.toJSON(), + member: null, + } } if ( @@ -294,9 +313,17 @@ export default class AddRemoveRole extends Route { }, }); - return missingPermission.toJSON(); + return { + success: false, + response: missingPermission.toJSON(), + member: null + } } - return member as GuildMemberTable; + return { + member: member as GuildMemberTable, + response: null, + success: true, + }; } } diff --git a/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/index.ts b/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/index.ts index 48b51d42..d61b3333 100644 --- a/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/index.ts +++ b/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/index.ts @@ -1,14 +1,9 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class AddRemoveRole extends Route { - public constructor(App: API) { - super(App); - } - @Method("put") @Description("Change this Description when working on this route") @ContentTypes("application/json") diff --git a/src/Routes/v1/guilds/[guildId]/members/index.ts b/src/Routes/v1/guilds/[guildId]/members/index.ts index 39f3576b..3d3d9f88 100644 --- a/src/Routes/v1/guilds/[guildId]/members/index.ts +++ b/src/Routes/v1/guilds/[guildId]/members/index.ts @@ -1,14 +1,9 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class FetchMembers extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Change this Description when working on this route") @ContentTypes("application/json") diff --git a/src/Routes/v1/guilds/[guildId]/report.ts b/src/Routes/v1/guilds/[guildId]/report.ts index cdabaf91..7aa823a5 100644 --- a/src/Routes/v1/guilds/[guildId]/report.ts +++ b/src/Routes/v1/guilds/[guildId]/report.ts @@ -1,14 +1,9 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class Report extends Route { - public constructor(App: API) { - super(App); - } - @Method("post") @Description("Change this Description when working on this route") @ContentTypes("application/json") diff --git a/src/Routes/v1/guilds/[guildId]/role/[roleId].ts b/src/Routes/v1/guilds/[guildId]/roles/[roleId].ts similarity index 90% rename from src/Routes/v1/guilds/[guildId]/role/[roleId].ts rename to src/Routes/v1/guilds/[guildId]/roles/[roleId].ts index 55280080..539d0d2c 100644 --- a/src/Routes/v1/guilds/[guildId]/role/[roleId].ts +++ b/src/Routes/v1/guilds/[guildId]/roles/[roleId].ts @@ -1,5 +1,4 @@ import userMiddleware, { type UserMiddlewareType } from "@/Middleware/User.ts"; -import type API from "@/Utils/Classes/API.ts"; import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; @@ -12,28 +11,26 @@ import Route, { type CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; import { guildMembersTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; import { rolesTable } from "@/Utils/Cql/Tables/RoleTable.ts"; -interface rawRole { - allowedAgeRestricted: boolean; - color: number; - hoist: boolean; +interface ReturnRoles { id: string; name: string; + allowedAgeRestricted: boolean; + hoisted: boolean; + deleteable: boolean; + mentionable: boolean; + color: number | null; permissions: [string, string][]; position: number; } export default class FetchDeleteRole extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Get a specific role in a guild") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "Bot", + accessType: "LoggedIn", + allowedRequesters: "Bot", }), ) public async getRole({ user, params, set }: CreateRoute<"/:guildId/roles/:roleId", any, [UserMiddlewareType], any>) { @@ -114,12 +111,14 @@ export default class FetchDeleteRole extends Route { return { allowedAgeRestricted: rawRole.allowedAgeRestricted ?? false, color: rawRole.color ?? 0, - hoist: rawRole.hoisted ?? false, + hoisted: rawRole.hoisted ?? false, id: Encryption.decrypt(rawRole.roleId!), name: rawRole.name ? Encryption.decrypt(rawRole.name) : "", permissions: Permissions.permissionFromDatabase(rawRole.permissions ?? []), position: rawRole.position ?? 0, - } satisfies rawRole; + deleteable: rawRole.deleteable ?? false, + mentionable: rawRole.mentionable ?? false, + } satisfies ReturnRoles; } @Method("delete") diff --git a/src/Routes/v1/guilds/[guildId]/role/index.ts b/src/Routes/v1/guilds/[guildId]/roles/index.ts similarity index 80% rename from src/Routes/v1/guilds/[guildId]/role/index.ts rename to src/Routes/v1/guilds/[guildId]/roles/index.ts index 5b94504e..cb4ef3a8 100644 --- a/src/Routes/v1/guilds/[guildId]/role/index.ts +++ b/src/Routes/v1/guilds/[guildId]/roles/index.ts @@ -3,7 +3,6 @@ import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { any, boolean, number, string } from "@/Types/BodyValidation.ts"; -import type API from "@/Utils/Classes/API.ts"; import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; @@ -18,12 +17,14 @@ import { guildMembersTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; import { guildsTable } from "@/Utils/Cql/Tables/GuildTable.ts"; import { rolesTable } from "@/Utils/Cql/Tables/RoleTable.ts"; -interface rawRole { - allowedAgeRestricted: boolean; - color: number; - hoist: boolean; +interface ReturnRoles { id: string; name: string; + allowedAgeRestricted: boolean; + hoisted: boolean; + deleteable: boolean; + mentionable: boolean; + color: number | null; permissions: [string, string][]; position: number; } @@ -38,17 +39,13 @@ const createRoleBody = { }; export default class FetchCreateRoles extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Get all the roles in a guild") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: ["Bot", "User"], + accessType: "LoggedIn", + allowedRequesters: ["Bot", "User"], }), ) public async getRoles({ user, params, set }: CreateRoute<"/:guildId/roles", any, [UserMiddlewareType], any>) { @@ -102,23 +99,21 @@ export default class FetchCreateRoles extends Route { return invalidGuild.toJSON(); } - const rawRoles = await rolesTable.find({ - guildId: Encryption.encrypt(params.guildId), - }); - - const roles: rawRole[] = []; - - for (const role of rawRoles) { - roles.push({ - allowedAgeRestricted: role.allowedAgeRestricted ?? false, - color: role.color ?? 0, - hoist: role.hoisted ?? false, - id: Encryption.decrypt(role.roleId!), - name: role.name ? Encryption.decrypt(role.name) : "", - permissions: Permissions.permissionFromDatabase(role.permissions ?? []), - position: role.position ?? 0, - }); - } + const roles = ( + await rolesTable.find({ + guildId: Encryption.encrypt(params.guildId), + }) + ).map((role) => ({ + name: Encryption.decrypt(role.name ?? ""), + color: role.color, + hoisted: role.hoisted ?? false, + id: Encryption.decrypt(role.roleId ?? ""), + permissions: Permissions.permissionFromBigint(role.permissions).normizedBits, + position: role.position ?? 0, + allowedAgeRestricted: role.allowedAgeRestricted ?? false, + deleteable: role.deleteable ?? false, + mentionable: role.mentionable ?? false, + } satisfies ReturnRoles)); return roles; } @@ -128,8 +123,8 @@ export default class FetchCreateRoles extends Route { @ContentTypes("application/json") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) @Middleware(bodyValidator(createRoleBody)) diff --git a/src/Routes/v1/guilds/index.ts b/src/Routes/v1/guilds/index.ts index 1efc4d2b..195b1e23 100644 --- a/src/Routes/v1/guilds/index.ts +++ b/src/Routes/v1/guilds/index.ts @@ -4,7 +4,6 @@ import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { any, array, boolean, enums, number, object, snowflake, string } from "@/Types/BodyValidation.ts"; -import type API from "@/Utils/Classes/API.ts"; import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; @@ -45,8 +44,8 @@ const postGuild = { permissionOverrides: object( { type: enums([Constants.permissionOverrideTypes.Member, Constants.permissionOverrideTypes.Role]), - allow: any().optional().nullable(), - deny: any().optional().nullable(), + allow: any().optional(), + deny: any().optional(), slowmode: number().min(0).max(86_400).optional(), // ? In seconds // TODO: other stuff }, @@ -78,7 +77,7 @@ const postGuild = { ).array(), }; -export interface finishedGuild { +export interface FinishedGuild { channels?: { ageRestricted: boolean; children: string[]; @@ -118,18 +117,20 @@ export interface finishedGuild { } | null; ownerId?: string; roles?: { - allowedAgeRestricted: boolean; - color: number; - hoist: boolean; id: string; name: string; + allowedAgeRestricted: boolean; + hoisted: boolean; + deleteable: boolean; + mentionable: boolean; + color: number | null; permissions: [string, string][]; position: number; }[]; memberCount?: number; } -export interface rawGuild { +export interface RawGuild { channels: { channel: ChannelTable; overrides: PermissionsOverridesTable[]; @@ -139,21 +140,16 @@ export interface rawGuild { } export default class FetchGuilds extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Fetch the guilds the current user is in") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: ["User"] }), ) public async getGuilds({ user, query }: CreateRoute<"/guilds", any, [UserMiddlewareType], any, { include: string }>) { - const rawFinishedGuild: rawGuild[] = []; const invalidGuildIds: string[] = []; const include: ("channels" | "owners" | "roles")[] = query.include ? (query.include.split(",") as ("channels" | "owners" | "roles")[]) @@ -161,190 +157,203 @@ export default class FetchGuilds extends Route { this.App.logger.startTimer("Guild Fetching", true); - for (const guild of user.guilds) { - const fetchedGuild = await guildsTable.get( - { - guildId: Encryption.encrypt(guild), - }, - { - fields: ["coOwners", "description", "features", "flags", "icon", "maxMembers", "name", "ownerId", "guildId"], - }, - ); - - if (!fetchedGuild) { - this.App.logger.warn(`Failed to fetch guild ${guild} for user ${user.id}`); + const rawFinishedGuild: RawGuild[] = ( + await Promise.all( + user.guilds.map(async (guild) => { + const fetchedGuild = await guildsTable.get( + { + guildId: Encryption.encrypt(guild), + }, + { + fields: [ + "coOwners", + "description", + "features", + "flags", + "icon", + "maxMembers", + "name", + "ownerId", + "guildId", + ], + }, + ); - invalidGuildIds.push(guild); + if (!fetchedGuild) { + this.App.logger.warn(`Failed to fetch guild ${guild} for user ${user.id}`); - continue; - } + invalidGuildIds.push(guild); - const rawChannels = include.includes("channels") - ? await channelsTable.find({ - guildId: Encryption.encrypt(guild), - }) - : null; - - const rawRoles = include.includes("roles") - ? await rolesTable.find({ - guildId: Encryption.encrypt(guild), - }) - : null; - - const raw: rawGuild = { - guild: fetchedGuild as GuildTable, - roles: rawRoles ? (rawRoles.toArray() as RoleTable[]) : [], - channels: rawChannels - ? (fixChannelPositionsWithoutNewChannel(rawChannels.toArray() as ChannelTable[]).map((channel) => ({ - channel, - overrides: [], - })) as { - channel: ChannelTable; - overrides: PermissionsOverridesTable[]; - }[]) - : [], - }; + return null; + } - for (const channel of raw.channels) { - for (const perm of channel.channel.permissionOverrides ?? []) { - const found = await permissionsOverridesTable.get({ - id: perm, // ? already encrypted - }); + const rawChannels = include.includes("channels") + ? await channelsTable.find({ + guildId: Encryption.encrypt(guild), + }) + : null; + + const rawRoles = include.includes("roles") + ? await rolesTable.find({ + guildId: Encryption.encrypt(guild), + }) + : null; + + const raw: RawGuild = { + guild: fetchedGuild as GuildTable, + roles: rawRoles ? (rawRoles.toArray() as RoleTable[]) : [], + channels: rawChannels + ? (fixChannelPositionsWithoutNewChannel(rawChannels.toArray() as ChannelTable[]).map((channel) => ({ + channel, + overrides: [], + })) as { + channel: ChannelTable; + overrides: PermissionsOverridesTable[]; + }[]) + : [], + }; + + // todo: promise.all it + for (const channel of raw.channels) { + for (const perm of channel.channel.permissionOverrides ?? []) { + const found = await permissionsOverridesTable.get({ + permissionId: perm, + }); - if (!found) { - this.App.logger.warn( - `Failed to fetch permission override ${perm} for channel ${channel.channel.channelId} in guild ${guild}`, - ); + if (!found) { + this.App.logger.warn( + `Failed to fetch permission override ${perm} | ${Encryption.decrypt(perm)} for channel ${channel.channel.channelId} in guild ${guild}`, + ); - continue; - } + continue; + } - channel.overrides.push(found as PermissionsOverridesTable); - } + channel.overrides.push(found as PermissionsOverridesTable); + } - if (!channel.overrides) { - channel.overrides = []; - } - } + if (!channel.overrides) { + channel.overrides = []; + } + } - rawFinishedGuild.push(raw); - } + return raw; + }), + ) + ).filter((guild) => guild !== null); this.App.logger.stopTimer("Guild Fetching"); - for (const guild of invalidGuildIds) { - const index = user.guilds.indexOf(guild); - - if (index !== -1) { - user.guilds.splice(index, 1); - } + const newGuilds = user.guilds.filter((guild) => !invalidGuildIds.includes(guild)); - await usersTable.update( - { - userId: Encryption.encrypt(user.id), - }, - { - guilds: Encryption.completeEncryption(user.guilds), - }, - ); - } - - const guilds: finishedGuild[] = []; + await usersTable.update( + { + userId: Encryption.encrypt(user.id), + }, + { + guilds: Encryption.completeEncryption(newGuilds), + }, + ); this.App.logger.startTimer("Guild Message Fetching", true); const messageFetcher = this.App.routeCache.get(this.App.router.match("/v1/channels/123/messages")!.filePath) ?.routeClass as FetchCreateMessages; - for (const rawGuild of rawFinishedGuild) { - const guild: Partial = { - name: Encryption.decrypt(rawGuild.guild.name), - description: rawGuild.guild.description ? Encryption.decrypt(rawGuild.guild.description) : null, - id: Encryption.decrypt(rawGuild.guild.guildId), - features: rawGuild.guild.features, - icon: rawGuild.guild.icon ? Encryption.decrypt(rawGuild.guild.icon) : null, - flags: rawGuild.guild.flags, - maxMembers: rawGuild.guild.maxMembers, - channels: [], - roles: [], - coOwners: [], - }; - - if (include.includes("owners")) { - const fetchedUser = await usersTable.get( - { - userId: rawGuild.guild.ownerId, - }, - { - fields: ["avatar", "flags", "publicFlags", "globalNickname", "tag", "username", "userId"], - }, - ); - - if (!fetchedUser) { - guild.owner = null; + const guilds: FinishedGuild[] = await Promise.all( + rawFinishedGuild.map(async (rawGuild) => { + const guild: Partial = { + name: Encryption.decrypt(rawGuild.guild.name), + description: rawGuild.guild.description ? Encryption.decrypt(rawGuild.guild.description) : null, + id: Encryption.decrypt(rawGuild.guild.guildId), + features: rawGuild.guild.features, + icon: rawGuild.guild.icon ? Encryption.decrypt(rawGuild.guild.icon) : null, + flags: rawGuild.guild.flags, + maxMembers: rawGuild.guild.maxMembers, + channels: [], + roles: [], + coOwners: [], + }; - this.App.logger.warn( - `Failed to fetch owner ${Encryption.decrypt(rawGuild.guild.ownerId)} for guild ${Encryption.decrypt(rawGuild.guild.guildId)}`, + if (include.includes("owners")) { + const fetchedUser = await usersTable.get( + { + userId: rawGuild.guild.ownerId, + }, + { + fields: ["avatar", "flags", "publicFlags", "globalNickname", "tag", "username", "userId"], + }, ); - continue; - } + if (fetchedUser) { + guild.owner = { + avatar: fetchedUser.avatar ? Encryption.decrypt(fetchedUser.avatar) : null, + flags: FlagFields.cleanPrivateFlags(fetchedUser.flags ?? "0"), + globalNickname: fetchedUser.globalNickname ? Encryption.decrypt(fetchedUser.globalNickname) : null, + id: Encryption.decrypt(fetchedUser.userId!), + publicFlags: fetchedUser.publicFlags ?? "0", + tag: fetchedUser.tag ?? "0000", + username: Encryption.decrypt(fetchedUser.username ?? ""), + }; + } else { + guild.owner = null; - guild.owner = { - avatar: fetchedUser.avatar ? Encryption.decrypt(fetchedUser.avatar) : null, - flags: FlagFields.cleanPrivateFlags(fetchedUser.flags ?? "0"), - globalNickname: fetchedUser.globalNickname ? Encryption.decrypt(fetchedUser.globalNickname) : null, - id: Encryption.decrypt(fetchedUser.userId!), - publicFlags: fetchedUser.publicFlags ?? "0", - tag: fetchedUser.tag ?? "0000", - username: Encryption.decrypt(fetchedUser.username ?? ""), - }; - } else { - guild.ownerId = Encryption.decrypt(rawGuild.guild.ownerId); - } + this.App.logger.warn( + `Failed to fetch owner ${Encryption.decrypt(rawGuild.guild.ownerId)} for guild ${Encryption.decrypt(rawGuild.guild.guildId)}`, + ); + } + } else { + guild.ownerId = Encryption.decrypt(rawGuild.guild.ownerId); + } - for (const channel of rawGuild.channels) { - guild.channels?.push({ - name: Encryption.decrypt(channel.channel.name), - description: channel.channel.description ? Encryption.decrypt(channel.channel.description) : null, - id: Encryption.decrypt(channel.channel.channelId), - parentId: channel.channel.parentId ? Encryption.decrypt(channel.channel.parentId) : null, - ageRestricted: channel.channel.ageRestricted, - slowmode: channel.channel.slowmode, - type: channel.channel.type, - children: channel.channel.children ? Encryption.completeDecryption(channel.channel.children) : [], - permissionOverrides: Object.fromEntries( - channel.overrides.map((override) => { - return [ - Encryption.decrypt(override.permissionId), - { - allow: Permissions.permissionFromBigint(override.allow).normizedBits, - deny: Permissions.permissionFromBigint(override.deny).normizedBits, - slowmode: override.slowmode, - type: override.type, - }, - ]; - }), - ), - position: channel.channel.position, - lastMessageId: await messageFetcher.getLastMessageId(Encryption.decrypt(channel.channel.channelId)), - }); - } + await Promise.all( + rawGuild.channels.map(async (channel) => { + const lastMessageId = await messageFetcher.getLastMessageId(Encryption.decrypt(channel.channel.channelId)); + + guild.channels!.push({ + name: Encryption.decrypt(channel.channel.name), + description: channel.channel.description ? Encryption.decrypt(channel.channel.description) : null, + id: Encryption.decrypt(channel.channel.channelId), + parentId: channel.channel.parentId ? Encryption.decrypt(channel.channel.parentId) : null, + ageRestricted: channel.channel.ageRestricted, + slowmode: channel.channel.slowmode, + type: channel.channel.type, + children: channel.channel.children ? Encryption.completeDecryption(channel.channel.children) : [], + permissionOverrides: Object.fromEntries( + channel.overrides.map((override) => { + return [ + Encryption.decrypt(override.id), + { + allow: Permissions.permissionFromBigint(override.allow).normizedBits, + deny: Permissions.permissionFromBigint(override.deny).normizedBits, + slowmode: override.slowmode, + type: override.type, + }, + ]; + }), + ), + position: channel.channel.position, + lastMessageId, + }); + }), + ); - for (const role of rawGuild.roles) { - guild.roles?.push({ - name: Encryption.decrypt(role.name), - color: role.color, - hoist: role.hoisted, - id: Encryption.decrypt(role.roleId), - permissions: Permissions.permissionFromBigint(role.permissions).normizedBits, - position: role.position, - allowedAgeRestricted: role.allowedAgeRestricted, - }); - } + for (const role of rawGuild.roles) { + guild.roles!.push({ + name: Encryption.decrypt(role.name), + color: role.color, + hoisted: role.hoisted, + id: Encryption.decrypt(role.roleId), + permissions: Permissions.permissionFromBigint(role.permissions).normizedBits, + position: role.position, + allowedAgeRestricted: role.allowedAgeRestricted, + deleteable: role.deleteable, + mentionable: role.mentionable, + }); + } - guilds.push(guild as finishedGuild); - } + return guild as FinishedGuild; + }), + ); this.App.logger.stopTimer("Guild Message Fetching"); @@ -356,8 +365,8 @@ export default class FetchGuilds extends Route { @ContentTypes("application/json") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) @Middleware(bodyValidator(postGuild)) @@ -505,15 +514,22 @@ export default class FetchGuilds extends Route { } const permId = this.App.snowflake.generate(); + + const foundChannelOrRole = newChannels.find((c) => c.oldId === id) ?? newRoles.find((r) => r.oldId === id); + // ? if the role or channel does not exist, and the permission type is a role, we silently ignore it + if (!foundChannelOrRole) { + continue; + } + permissionOverrides.push({ allow: new Permissions(permission.allow ?? []).bitsForDatabase, deny: new Permissions(permission.deny ?? []).bitsForDatabase, editable: true, - id: Encryption.encrypt(permId), - permissionId: Encryption.encrypt(foundParent?.id ?? this.App.snowflake.generate()), + id: Encryption.encrypt(foundChannelOrRole.id!), + permissionId: Encryption.encrypt(permId), slowmode: permission.slowmode ?? 0, - type: permId === guildId ? Constants.permissionOverrideTypes.Everyone : permission.type, + type: foundChannelOrRole.id === guildId ? Constants.permissionOverrideTypes.Everyone : permission.type, }); perms.push(permId); @@ -647,14 +663,14 @@ export default class FetchGuilds extends Route { parentId: channel.parentId ?? null, permissionOverrides: Object.fromEntries( channel.permissionOverrides.map((id) => { - const found = permissionOverrides.find((p) => p.id === id); + const found = permissionOverrides.find((p) => p.permissionId === id); if (!found) { return []; } return [ - Encryption.decrypt(found.permissionId), + Encryption.decrypt(found.id), { allow: Permissions.permissionFromBigint(found.allow).normizedBits, deny: Permissions.permissionFromBigint(found.deny).normizedBits, diff --git a/src/Routes/v1/invites/[inviteCode].ts b/src/Routes/v1/invites/[inviteCode].ts index 23beabfd..d87ca532 100644 --- a/src/Routes/v1/invites/[inviteCode].ts +++ b/src/Routes/v1/invites/[inviteCode].ts @@ -4,7 +4,6 @@ import { presenceTypes, statusTypes } from "@/Constants.example.ts"; import Constants from "@/Constants.ts"; import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; -import type API from "@/Utils/Classes/API.ts"; import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; @@ -15,8 +14,8 @@ import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Middleware from "@/Utils/Classes/Routing/Decorators/Middleware.ts"; import type { CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; -import type { finishedGuild } from "../guilds/index.ts"; -import { guildsTable } from "@/Utils/Cql/Tables/GuildTable.ts"; +import type { FinishedGuild } from "../guilds/index.ts"; +import { guildsTable, type GuildTable } from "@/Utils/Cql/Tables/GuildTable.ts"; import { channelsTable } from "@/Utils/Cql/Tables/ChannelTable.ts"; import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; import { invitesTable } from "@/Utils/Cql/Tables/InviteTable.ts"; @@ -26,10 +25,6 @@ import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; export default class FetchJoinInvite extends Route { public randomKey = generateKeySync("aes", { length: 256 }); - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Fetch the invite code") @ContentTypes("any") @@ -111,7 +106,7 @@ export default class FetchJoinInvite extends Route { guildId: inviteExists.guildId!, }, { - fields: ["members", "ownerId", "name", "icon", "features"], + fields: ["members", "ownerId", "name", "icon", "features", "maxMembers"], }, ); @@ -157,7 +152,7 @@ export default class FetchJoinInvite extends Route { icon: fetchedGuild.icon, ownerId: fetchedGuild.ownerId, features: fetchedGuild.features ?? [], - memberCount: fetchedGuild.members, + memberCount: fetchedGuild.members }, channel: { id: inviteExists.channelId, @@ -187,8 +182,8 @@ export default class FetchJoinInvite extends Route { @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async postInviteCode({ params, user, set }: CreateRoute<"/invites/:inviteCode", any, [UserMiddlewareType]>) { @@ -322,7 +317,41 @@ export default class FetchJoinInvite extends Route { }); } } + + // @ts-expect-error -- This is fine + const fetchedInvite = await this.getInviteCode({ + params, + set, + key: this.randomKey, + }); + if (set.status !== 200 || typeof fetchedInvite === "string") { + return fetchedInvite; + } + + const guild = "guild" in fetchedInvite ? fetchedInvite.guild as GuildTable : null; + + if (!guild) { + set.status = 500; + + return "Internal Server Error :("; // ? its a user, not the server + } + + if (guild.members >= guild.maxMembers) { + const maxMembers = errorGen.LimitReached(); + + maxMembers.addError({ + guild: { + code: "MaxMembersReached", + message: "The guild has reached its maximum amount of members.", + }, + }); + + set.status = 403; + + return maxMembers.toJSON + } + const newMember: NullifyStuff = { flags: Constants.guildMemberFlags.In, guildId: inviteExists.guildId!, @@ -358,20 +387,9 @@ export default class FetchJoinInvite extends Route { }, ); - // @ts-expect-error -- This is fine - const fetchedInvite = await this.getInviteCode({ - params, - set, - key: this.randomKey, - }); - - if (set.status !== 200 || typeof fetchedInvite === "string") { - return fetchedInvite; - } - this.App.rabbitMQForwarder("guild.create", { userId: user.id, - guild: Encryption.completeDecryption((fetchedInvite as { guild: finishedGuild }).guild), + guild: Encryption.completeDecryption((fetchedInvite as { guild: FinishedGuild }).guild), member: Encryption.completeDecryption(newMember), }); @@ -391,7 +409,7 @@ export default class FetchJoinInvite extends Route { ) ).toArray(); - const finishedGuild = (fetchedInvite as { guild: finishedGuild }).guild; + const finishedGuild = (fetchedInvite as { guild: FinishedGuild }).guild; const members: unknown[] = []; @@ -450,10 +468,10 @@ export default class FetchJoinInvite extends Route { guild: { // ? it should be the same as if they didn't provide the key id: Encryption.decrypt(inviteExists.guildId!), - name: (fetchedInvite as { guild: finishedGuild }).guild.name, - icon: (fetchedInvite as { guild: finishedGuild }).guild.icon, - ownerId: (fetchedInvite as { guild: finishedGuild }).guild.ownerId, - features: (fetchedInvite as { guild: finishedGuild }).guild.features ?? [], + name: (fetchedInvite as { guild: FinishedGuild }).guild.name, + icon: (fetchedInvite as { guild: FinishedGuild }).guild.icon, + ownerId: (fetchedInvite as { guild: FinishedGuild }).guild.ownerId, + features: (fetchedInvite as { guild: FinishedGuild }).guild.features ?? [], }, }; } diff --git a/src/Routes/v1/users/@me/channels/[channelId].ts b/src/Routes/v1/users/@me/channels/[channelId].ts index a6721669..50acf0a3 100644 --- a/src/Routes/v1/users/@me/channels/[channelId].ts +++ b/src/Routes/v1/users/@me/channels/[channelId].ts @@ -1,14 +1,9 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class Channels extends Route { - public constructor(App: API) { - super(App); - } - @Method("delete") @Description("Change this Description when working on this route") @ContentTypes("application/json") diff --git a/src/Routes/v1/users/@me/channels/index.ts b/src/Routes/v1/users/@me/channels/index.ts index 91155801..54aeb927 100644 --- a/src/Routes/v1/users/@me/channels/index.ts +++ b/src/Routes/v1/users/@me/channels/index.ts @@ -1,14 +1,9 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class Channels extends Route { - public constructor(App: API) { - super(App); - } - @Method("post") @Description("Change this Description when working on this route") @ContentTypes("application/json") diff --git a/src/Routes/v1/users/@me/index.ts b/src/Routes/v1/users/@me/index.ts index 8e640cc3..92101532 100644 --- a/src/Routes/v1/users/@me/index.ts +++ b/src/Routes/v1/users/@me/index.ts @@ -1,10 +1,11 @@ +import { Scopes } from "@/Constants.ts"; import bodyValidator from "@/Middleware/BodyValidator.ts"; import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { string } from "@/Types/BodyValidation.ts"; -import type API from "@/Utils/Classes/API.ts"; import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; +import type { NullifyStuff, UnNullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; @@ -16,6 +17,7 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; import Token from "@/Utils/Classes/Token.ts"; import { settingsTable } from "@/Utils/Cql/Tables/SettingsTable.ts"; import { usersTable, type UserTable } from "@/Utils/Cql/Tables/UserTable.ts"; +import { PutObjectCommand } from "@aws-sdk/client-s3"; export interface User { allowedInvites?: number; @@ -47,18 +49,14 @@ const patchSelf = { }; export default class FetchPatch extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Fetch the current user") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: ["User", "OAuth"], - OAuth2Scopes: ["user.identity"], + accessType: "LoggedIn", + allowedRequesters: ["User", "OAuth", "Bot"], + oAuth2Scopes: [Scopes.UserIdentity], }), ) public async getFetch({ @@ -95,23 +93,31 @@ export default class FetchPatch extends Route { const flags = new FlagFields(fetchedUser.flags ?? "0", fetchedUser.publicFlags ?? "0"); const include = query.include?.split(",") ?? []; - - const userObject: User = { + + const userObject: NullifyStuff = { id: fetchedUser.userId!, - email: fetchedUser.email ?? "", // TODO: If its oauth, check if they got the user.indentity.email scope + email: null, emailVerified: flags.has("EmailVerified"), username: fetchedUser.username ?? "", globalNickname: fetchedUser.globalNickname, tag: fetchedUser.tag ?? "", avatar: fetchedUser.avatar, publicFlags: String(flags.PublicFlags.cleaned), - flags: String(flags.PrivateFlags.cleaned), - phoneNumber: fetchedUser.phoneNumber, + flags: String(flags.cleanedPrivateFlags), + phoneNumber: null, mfaEnabled: flags.has("TwoFaEnabled"), mfaVerified: flags.has("TwoFaVerified"), }; - if (include.includes("bio")) { + if (user.oauth2.scopes.includes(Scopes.UserIdentityEmail) || (!user.oauth2.isOauth2 && !user.bot)) { + userObject.email = fetchedUser.email; + } + + if (!user.oauth2.isOauth2 && !user.bot) { + userObject.phoneNumber = fetchedUser.phoneNumber; + } + + if (include.includes("bio") && !user.bot && !user.oauth2.isOauth2) { const settings = await settingsTable.get( { userId: Encryption.encrypt(user.id), @@ -126,15 +132,17 @@ export default class FetchPatch extends Route { } } - if (include.includes("invites")) { + if (include.includes("invites") && !user.bot && !user.oauth2.isOauth2) { userObject.allowedInvites = user.settings?.allowedInvites ?? null; } - return Encryption.completeDecryption(userObject); + return Encryption.completeDecryption(userObject as UnNullifyStuff); } public passwordRequiredFields: (keyof typeof patchSelf)[] = ["phoneNumber", "email", "newPassword"]; + public fieldsBotsCannotUpdate: (keyof typeof patchSelf)[] = ["email", "phoneNumber", "newPassword", "password"]; + public maxUsernames = 8_500; @Method("patch") @@ -142,14 +150,21 @@ export default class FetchPatch extends Route { @ContentTypes("application/json") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: ["User"], + accessType: "LoggedIn", + allowedRequesters: ["User", "Bot"], }), ) @Middleware(bodyValidator(patchSelf)) public async patchFetch({ body, set, user, ip }: CreateRoute<"/@me", Infer, [UserMiddlewareType]>) { const failedToUpdateSelf = errorGen.FailedToPatchUser(); + if (user.bot) { + // ? we remove the fields that bots cannot update just to make this easier + for (const field of this.fieldsBotsCannotUpdate) { + delete body[field]; + } + } + if (!body.password && this.passwordRequiredFields.some((field) => body[field])) { failedToUpdateSelf.addError({ user: { @@ -313,6 +328,54 @@ export default class FetchPatch extends Route { } } + if (body.avatar !== undefined) { + if (body.avatar === null) { + stuffToUpdate.avatar = null; + } + + if (typeof body.avatar === "string") { + // ? its a base64 string, we got to validate that its an actual base64 string and its a valid image and not a gif or something + const base64Regex = + /^data:image\/(png|jpeg|jpg);base64,([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)*$/; + + if (base64Regex.test(body.avatar)) { + // ? we want to generate a special hash for the avatar, so we don't store the entire image + const hash = Buffer.from(Bun.SHA256.hash(body.avatar).buffer).toString("hex"); + const matched = body.avatar.match(base64Regex)![1]!; + + const buffered = Buffer.from(body.avatar.replace(/^data:image\/(png|jpeg|jpg);base64,/, ""), "base64"); + + if (buffered.length > 1024 * 1024 * 8) { + failedToUpdateSelf.addError({ + avatar: { + code: "TooLarge", + message: "The avatar provided was too large, it must be less than 8MB", + }, + }); + } else { + // ? now we want to store the actual image buffer in the S3 bucket + const command = new PutObjectCommand({ + Bucket: this.App.config.s3.buckets.avatars, + Key: `${user.id}/${hash}`, + Body: buffered, + ContentType: `image/${matched}`, + }); + + await this.App.s3.send(command); + + stuffToUpdate.avatar = hash; + } + } else { + failedToUpdateSelf.addError({ + avatar: { + code: "InvalidBase64", + message: "The avatar provided was invalid, it must be a valid base64 string", + }, + }); + } + } + } + if (body.phoneNumber) { stuffToUpdate.phoneNumber = Encryption.encrypt(body.phoneNumber); } @@ -350,7 +413,10 @@ export default class FetchPatch extends Route { return fetched; } - this.App.rabbitMQForwarder("user.update", fetched); + this.App.rabbitMQForwarder("user.update", { + self: true, + user: fetched, + }); return { ...fetched, diff --git a/src/Routes/v1/users/@me/invites.ts b/src/Routes/v1/users/@me/invites.ts index 8a1c33d6..b1a15879 100644 --- a/src/Routes/v1/users/@me/invites.ts +++ b/src/Routes/v1/users/@me/invites.ts @@ -1,14 +1,9 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class Invites extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Fetch all the invites you've created (guilds)") @ContentTypes("application/json") diff --git a/src/Routes/v1/users/@me/platform-invites.ts b/src/Routes/v1/users/@me/platform-invites.ts index dbcb1d6c..68030567 100644 --- a/src/Routes/v1/users/@me/platform-invites.ts +++ b/src/Routes/v1/users/@me/platform-invites.ts @@ -3,7 +3,6 @@ import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { string } from "@/Types/BodyValidation.ts"; -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; @@ -22,17 +21,13 @@ const deleteInviteBody = { export default class PlatformInvites extends Route { public override KillSwitched = true; - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Fetch the invites for Kastel") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: ["User"], + accessType: "LoggedIn", + allowedRequesters: ["User"], }), ) public async getInvites(_opts: CreateRoute<"/platform-invites", any, [UserMiddlewareType]>) { @@ -44,8 +39,8 @@ export default class PlatformInvites extends Route { @ContentTypes("application/json") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: ["User"], + accessType: "LoggedIn", + allowedRequesters: ["User"], }), ) @Middleware(bodyValidator(deleteInviteBody)) @@ -60,8 +55,8 @@ export default class PlatformInvites extends Route { @ContentTypes("application/json") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: ["User"], + accessType: "LoggedIn", + allowedRequesters: ["User"], }), ) @Middleware(bodyValidator(createInviteBody)) diff --git a/src/Routes/v1/users/@me/relationships/[relationshipId].ts b/src/Routes/v1/users/@me/relationships/[relationshipId].ts index 427c29c7..01ea2e23 100644 --- a/src/Routes/v1/users/@me/relationships/[relationshipId].ts +++ b/src/Routes/v1/users/@me/relationships/[relationshipId].ts @@ -3,7 +3,6 @@ import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { enums, string } from "@/Types/BodyValidation.ts"; -import type API from "@/Utils/Classes/API.ts"; import { FlagUtils } from "@/Utils/Classes/BitFields/NewFlags.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; @@ -27,17 +26,13 @@ const patchRelationshipBody = { }; export default class RelationshipUser extends Route { - public constructor(App: API) { - super(App); - } - @Method("patch") @Description("modify the relationship") @ContentTypes("application/json") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: ["User"], + accessType: "LoggedIn", + allowedRequesters: ["User"], }), ) public async postRelationships({ diff --git a/src/Routes/v1/users/@me/relationships/index.ts b/src/Routes/v1/users/@me/relationships/index.ts index fb6a415f..9bc46696 100644 --- a/src/Routes/v1/users/@me/relationships/index.ts +++ b/src/Routes/v1/users/@me/relationships/index.ts @@ -4,7 +4,6 @@ import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { enums, snowflake, string } from "@/Types/BodyValidation.ts"; -import type API from "@/Utils/Classes/API.ts"; import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; import { FlagUtils } from "@/Utils/Classes/BitFields/NewFlags.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; @@ -25,17 +24,13 @@ const postRelationshipBody = { }; export default class Relationships extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Get your relationships") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: ["User"], + accessType: "LoggedIn", + allowedRequesters: ["User"], }), ) public async getRelationships({ @@ -155,8 +150,8 @@ export default class Relationships extends Route { @ContentTypes("application/json") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: ["User"], + accessType: "LoggedIn", + allowedRequesters: ["User"], }), ) @Middleware(bodyValidator(postRelationshipBody)) diff --git a/src/Routes/v1/users/@me/sessions.ts b/src/Routes/v1/users/@me/sessions.ts index 6e94b0b1..d4752f4b 100644 --- a/src/Routes/v1/users/@me/sessions.ts +++ b/src/Routes/v1/users/@me/sessions.ts @@ -1,7 +1,9 @@ +import bodyValidator from "@/Middleware/BodyValidator.ts"; import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; -import type API from "@/Utils/Classes/API.ts"; +import { any, type Infer, string } from "@/Types/BodyValidation.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; +import errorGen from "@/Utils/Classes/ErrorGen.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; @@ -10,18 +12,19 @@ import type { CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; import { settingsTable } from "@/Utils/Cql/Tables/SettingsTable.ts"; -export default class Sessions extends Route { - public constructor(App: API) { - super(App); - } +const deleteSessionsBody = { + sessions: any(), + password: string().min(4).max(72), +} +export default class Sessions extends Route { @Method("get") @Description("Fetch the current sessions") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async getSessions({ user }: CreateRoute<"/@me/sessions", any, [UserMiddlewareType]>) { @@ -50,7 +53,76 @@ export default class Sessions extends Route { @Method("delete") @Description("Delete an existing session") @ContentTypes("application/json") - public deleteSessions() { - return {}; + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: "User", + }) + ) + @Middleware(bodyValidator(deleteSessionsBody)) + public async deleteSessions({ + user, + body, + set + }: CreateRoute<"/@me/sessions", Infer, [UserMiddlewareType]>) { + if (!Array.isArray(body.sessions) || body.sessions.length === 0 || body.sessions.some((session) => typeof session !== "string")) { + const error = errorGen.InvalidField(); + + error.addError({ + sessions: { + code: "InvalidField", + message: "The provided sessions is not an array of strings.", + }, + }); + + set.status = 400; + + return error.toJSON(); + } + + if (! + await Bun.password.verify(body.password, user.password) + ) { + const error = errorGen.InvalidCredentials(); + + error.addError({ + password: { + code: "BadPassword", + message: "The provided password is incorrect.", + }, + }); + + set.status = 401; + + return error.toJSON(); + } + + const fetchedSessions = await settingsTable.get( + { + userId: Encryption.encrypt(user.id), + }, + { + fields: ["tokens"], + }, + ); + + if (!fetchedSessions) { // ? how'd we even get here + set.status = 500; + + return "Internal Server Error :("; + } + + const newTokens = fetchedSessions.tokens.filter((token) => !(body.sessions as string[]).includes(Encryption.decrypt(token.tokenId!))); + + await settingsTable.update( + { + userId: Encryption.encrypt(user.id), + }, + { + tokens: newTokens, + }, + ); + + return; } } diff --git a/src/Routes/v1/users/@me/settings.ts b/src/Routes/v1/users/@me/settings.ts index a28be758..75ceebc1 100644 --- a/src/Routes/v1/users/@me/settings.ts +++ b/src/Routes/v1/users/@me/settings.ts @@ -4,7 +4,6 @@ import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { enums, array, number, snowflake, string } from "@/Types/BodyValidation.ts"; -import type API from "@/Utils/Classes/API.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; @@ -32,17 +31,13 @@ const patchSettings = { }; export default class UserSettings extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Fetch the current users settings") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) public async getSettings({ user }: CreateRoute<"/@me/settings", {}, [UserMiddlewareType]>) { @@ -54,8 +49,8 @@ export default class UserSettings extends Route { @ContentTypes("application/json") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: "User", + accessType: "LoggedIn", + allowedRequesters: "User", }), ) @Middleware(bodyValidator(patchSettings)) @@ -158,7 +153,7 @@ export default class UserSettings extends Route { username: user.username, avatar: usr!.avatar, publicFlags: user.flagsUtil.PublicFlags.cleaned, - flags: user.flagsUtil.PrivateFlags.cleaned, + flags: user.flagsUtil.cleanedPrivateFlags, }, guildId: guild, presences: parsedPresence, diff --git a/src/Routes/v1/users/@me/verify.ts b/src/Routes/v1/users/@me/verify.ts new file mode 100644 index 00000000..19882a91 --- /dev/null +++ b/src/Routes/v1/users/@me/verify.ts @@ -0,0 +1,165 @@ +import Constants, { verificationFlags } from "@/Constants.ts"; +import registration from "@/Emails/Registration.tsx"; +import type { UserMiddlewareType } from "@/Middleware/User.ts"; +import userMiddleware from "@/Middleware/User.ts"; +import ForgotPassword from "@/Routes/auth/forgot.ts"; +import type { Infer } from "@/Types/BodyValidation.ts"; +import { snowflake, string } from "@/Types/BodyValidation.ts"; +import FlagUtilsBInt from "@/Utils/Classes/BitFields/NewFlags.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import errorGen from "@/Utils/Classes/ErrorGen.ts"; +import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; +import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; +import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; +import Middleware from "@/Utils/Classes/Routing/Decorators/Middleware.ts"; +import type { CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; +import Route from "@/Utils/Classes/Routing/Route.ts"; +import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; +import { verificationLinksTable } from "@/Utils/Cql/Tables/VerificationLinkTable.ts"; +import { render } from "@react-email/render"; + +const verifyEmailBody = { + token: string().min(16), + id: snowflake(), +}; + +export default class FetchPatch extends Route { + @Method("post") + @Description("Resend the verification email") + @ContentTypes("any") + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: ["User"], + }), + ) + public async patchFetch({ set, user, ip }: CreateRoute<"/@me/verify", any, [UserMiddlewareType]>) { + if (user.flagsUtil.has("EmailVerified")) { + const failed = errorGen.FailedToRegister(); + + failed.addError({ + email: { + code: "AlreadyVerified", + message: "This email is already verified.", + }, + }); + + set.status = 400; + + return failed.toJSON(); + } + + const generatedToken = ForgotPassword.generateEmailToken(user.email, this.App); + + await verificationLinksTable.create({ + code: Encryption.encrypt(generatedToken.token), + createdDate: new Date(), + expireDate: new Date(Date.now() + 1_000 * 60 * 60 * 24 * 3), // ? 3 days + userId: Encryption.encrypt(user.id), + flags: Constants.verificationFlags.VerifyEmail, + id: Encryption.encrypt(generatedToken.id), + ip: Encryption.encrypt(ip), + }); + + const renderedEmail = await render( + registration( + Encryption.decrypt(user.username ?? "Unknown User"), + `http${this.App.config.server.secure ? "s" : ""}://${this.App.config.server.domain}/verify/${generatedToken.id}/${generatedToken.token}`, + ), + { + pretty: false, + }, + ); + + const renderedText = await render( + registration( + Encryption.decrypt(user.username ?? "Unknown User"), + `http${this.App.config.server.secure ? "s" : ""}://${this.App.config.server.domain}/verify/${generatedToken.id}/${generatedToken.token}`, + ), + { + pretty: false, + plainText: true, + }, + ); + + this.App.sendEmail("NoReply", user.email, "Welcome to Kastel!", renderedEmail, renderedText); + + set.status = 204; + + return; + } + + @Method("patch") + @Description("Verify your email") + @ContentTypes("any") + public async patchVerify({ set, body, ip }: CreateRoute<"/@me/verify", Infer>) { + const fetchedVerification = await verificationLinksTable.get( + { + code: Encryption.encrypt(body.token), + id: Encryption.encrypt(body.id), + }, + { fields: ["expireDate", "userId", "ip", "flags"] }, + ); + + if ( + !fetchedVerification || + (fetchedVerification.expireDate?.getTime() ?? 0) < Date.now() || + verificationFlags.VerifyEmail !== fetchedVerification.flags + ) { + this.App.logger.debug("Invalid reset token or expired token.", fetchedVerification); + + set.status = 404; + + if (fetchedVerification) { + await verificationLinksTable.remove({ + code: Encryption.encrypt(body.token), + id: Encryption.encrypt(body.id), + userId: fetchedVerification.userId!, + }); + } + + return; + } + + const user = await usersTable.get({ userId: fetchedVerification.userId! }, { fields: ["email", "flags"] }); + + if (!user) { + this.App.logger.debug("User not found."); + + set.status = 404; + + return; + } + + if (Encryption.encrypt(ip) !== fetchedVerification.ip) { + this.App.logger.debug("IP does not match."); + + set.status = 404; + + return; + } + + const flags = new FlagUtilsBInt(user.flags ?? 0, Constants.privateFlags); + + flags.add("EmailVerified"); + + await usersTable.update( + { + userId: fetchedVerification.userId!, + }, + { + flags: String(flags.bits) + }, + ); + + await verificationLinksTable.remove({ + code: Encryption.encrypt(body.token), + id: Encryption.encrypt(body.id), + userId: fetchedVerification.userId!, + }); + + set.status = 204; + + return; + } +} diff --git a/src/Routes/v1/users/[userId]/index.ts b/src/Routes/v1/users/[userId]/index.ts index 1de33fe1..d5c2fc22 100644 --- a/src/Routes/v1/users/[userId]/index.ts +++ b/src/Routes/v1/users/[userId]/index.ts @@ -1,6 +1,5 @@ import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; -import type API from "@/Utils/Classes/API.ts"; import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; @@ -25,17 +24,13 @@ interface User { } export default class Fetch extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Fetch a user by their ID") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: ["User"], + accessType: "LoggedIn", + allowedRequesters: ["User"], }), ) public async getProfile({ params, query, set }: CreateRoute<"/users/:userId", any, [UserMiddlewareType]>) { @@ -74,7 +69,7 @@ export default class Fetch extends Route { tag: fetchedUser.tag ?? "0000", avatar: fetchedUser.avatar, publicFlags: String(flags.PublicFlags.cleaned), - flags: String(flags.PrivateFlags.cleaned), + flags: String(flags.cleanedPrivateFlags), }; if (include.includes("bio")) { diff --git a/src/Routes/v1/users/[userId]/profile.ts b/src/Routes/v1/users/[userId]/profile.ts index 70e3f038..0586b710 100644 --- a/src/Routes/v1/users/[userId]/profile.ts +++ b/src/Routes/v1/users/[userId]/profile.ts @@ -1,6 +1,5 @@ import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; -import type API from "@/Utils/Classes/API.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; @@ -25,17 +24,13 @@ interface ProfileResponse { } export default class Profile extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Fetch a users profile") @ContentTypes("any") @Middleware( userMiddleware({ - AccessType: "LoggedIn", - AllowedRequesters: ["User"], + accessType: "LoggedIn", + allowedRequesters: ["User"], }), ) public async getProfile({ params, set, user }: CreateRoute<"/users/:userId/profile", any, [UserMiddlewareType]>) { diff --git a/src/Routes/v1/users/[userId]/report.ts b/src/Routes/v1/users/[userId]/report.ts index cdabaf91..7aa823a5 100644 --- a/src/Routes/v1/users/[userId]/report.ts +++ b/src/Routes/v1/users/[userId]/report.ts @@ -1,14 +1,9 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class Report extends Route { - public constructor(App: API) { - super(App); - } - @Method("post") @Description("Change this Description when working on this route") @ContentTypes("application/json") diff --git a/src/Routes/v1/webhooks/[token]/[id]/github.ts b/src/Routes/v1/webhooks/[token]/[id]/github.ts index d675cb0b..b805fdcd 100644 --- a/src/Routes/v1/webhooks/[token]/[id]/github.ts +++ b/src/Routes/v1/webhooks/[token]/[id]/github.ts @@ -1,14 +1,9 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class GithubWebhook extends Route { - public constructor(App: API) { - super(App); - } - @Method("post") @Description("Change this Description when working on this route") @ContentTypes("application/json") diff --git a/src/Routes/v1/webhooks/[token]/[id]/index.ts b/src/Routes/v1/webhooks/[token]/[id]/index.ts index 954978c6..39d3dcdf 100644 --- a/src/Routes/v1/webhooks/[token]/[id]/index.ts +++ b/src/Routes/v1/webhooks/[token]/[id]/index.ts @@ -1,14 +1,9 @@ -import type API from "@/Utils/Classes/API.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; export default class FetchPostWebhook extends Route { - public constructor(App: API) { - super(App); - } - @Method("get") @Description("Change this Description when working on this route") @ContentTypes("application/json") diff --git a/src/Types/ConfigTypes.ts b/src/Types/ConfigTypes.ts deleted file mode 100644 index 245d3272..00000000 --- a/src/Types/ConfigTypes.ts +++ /dev/null @@ -1,96 +0,0 @@ -// Features for the API (So the frontend knows what to show) -export type Features = - | "DisableChannelCreation" - | "DisableEmailVerification" - | "DisableGuildCreation" - | "DisableLogin" - | "DisablePasswordReset" - | "DisableRegistration" - | "MulitSocketMode"; // if there's multiple API's and WS's - -// omit the features thats already in the array - -export interface Server { - bucketInterval: number; - bucketRnd: number; - cache: { - clearInterval: number; - clearOnStart: boolean; - }; - // cloudflare turnstile secret (for captchas) - captchaEnabled: boolean; - cloudflareAccessOnly: boolean; - domain: string; - features: Features[]; - localIps?: string[]; - port: number | string; - secure: boolean; - // if true then some routes will require captcha (register, login, etc) - sentry: { - dsn: string; - enabled: boolean; - tracesSampleRate: number; - }; - strictRouting: boolean; - // if true then you cannot do like /users/@me/ you have to do /users/@me - turnstileSecret: string | null; - workerId?: number; - phishing?: { - enabled: boolean; - domainsPath: string; - action: "block" | "alert"; - }; - scraper?: { - enabled: boolean; - url: string; - authHeader?: string; - }; -} - -export interface Encryption { - algorithm: string; - initVector: string; - securityKey: string; - tokenKey: string; -} - -export interface Ws { - password: string; - url: string; - version?: number; // not required as most likely will be 0 -} - -export interface Redis { - db: number; - host: string; - password: string; - port: number; - username: string; -} - -export interface ScyllaDB { - durableWrites: boolean; - keyspace: string; - networkTopologyStrategy: { - [DataCenter: string]: number; - }; - nodes: string[]; - password: string; - username: string; -} - -type ShortCode = "NoReply" | "Support"; - -interface User { - host: string; - password: string | undefined; - port: number; - secure: boolean; - shortCode: ShortCode; - username: string; -} - -export interface MailServer { - enabled: boolean; - users: [User, User]; -} diff --git a/src/Types/JsonSchemaType.ts b/src/Types/JsonSchemaType.ts index a9eb9aae..fd0e0535 100644 --- a/src/Types/JsonSchemaType.ts +++ b/src/Types/JsonSchemaType.ts @@ -17,6 +17,7 @@ export interface MySchema { scyllaDB: ScyllaDB; server: Server; ws: Ws; + s3: Minio; } export interface Encryption { algorithm: string; @@ -87,6 +88,8 @@ export interface Server { url: string; authHeader?: string; }; + mediaServer?: string; + cdnServer?: string; } interface Interval { @@ -113,3 +116,22 @@ export interface RabbitMQ { username: string; vhost: string; } + +export interface S3Buckets { + avatars: string; + banners: string; + files: string; + guildAvatars: string; + guildBanners: string; + guildIcons: string; + guildEmojis: string; +} + +export interface Minio { + accessKey: string; + buckets: S3Buckets; + endPoint: string; + secretKey: string; + port: number; + useSSL: boolean; +} diff --git a/src/Types/Routes.ts b/src/Types/Routes.ts index 644ea99b..6d2cb69f 100644 --- a/src/Types/Routes.ts +++ b/src/Types/Routes.ts @@ -1,4 +1,4 @@ -import type { permissions, privateFlags } from "../Constants.ts"; +import type { privateFlags, Scopes } from "../Constants.ts"; export type Methods = | "ALL" @@ -20,36 +20,29 @@ export type Methods = | "PUT" | "put"; -type Requesters = "All" | "Bot" | "OAuth" | "User" | "Webhook"; - -export type OAuth2Scopes = "user.guilds" | "user.identity.email" | "user.identity"; +export type Requesters = "All" | "Bot" | "OAuth" | "User" | "Webhook"; export interface UserMiddleware { // The flags required to access the endpoint (Default: null) // If you need to be logged in to access the endpoint - AccessType: "All" | "LoggedIn" | "LoggedOut"; - AllowedRequesters: Requesters | Requesters[]; + accessType: "All" | "LoggedIn" | "LoggedOut"; + allowedRequesters: Requesters | Requesters[]; // The flags that are not allowed to access the endpoint (Default: null) - DisallowedFlags?: (keyof typeof privateFlags)[]; + disallowedFlags?: (keyof typeof privateFlags)[]; // The type of user that can access the endpoint (Default: 'All') - Flags?: (keyof typeof privateFlags)[]; - OAuth2Scopes?: OAuth2Scopes[]; -} - -export interface GuildMiddleware { - PermissionsRequired?: (keyof typeof permissions | "Owner")[]; - Required: boolean; + flags?: (keyof typeof privateFlags)[]; + oAuth2Scopes?: Scopes[]; } export interface Captcha { // The expected cdata of the captcha (done client side) (session id stuffs) - BodyTrigger?: string[]; + bodyTrigger?: string[]; // If the captcha is enabled - Enabled: boolean; + enabled: boolean; // The expected action of the captcha (login, register, etc.) (done client side) - ExpectedAction?: string; + expectedAction?: string; // The body key that triggers the captcha (like the username field or password field etc) - ExpectedCData?: string; + expectedCData?: string; } type GetParam = T extends `${infer _}/${infer _2}:${infer Param}/${infer _3}` diff --git a/src/Types/config.template.json b/src/Types/config.template.json index 00cd87df..ebaf4e7f 100644 --- a/src/Types/config.template.json +++ b/src/Types/config.template.json @@ -104,6 +104,57 @@ "type": "object", "required": ["durableWrites", "keyspace", "networkTopologyStrategy", "nodes", "password", "username"] }, + "S3Buckets": { + "properties": { + "avatars": { + "type": "string" + }, + "banners": { + "type": "string" + }, + "guildIcons": { + "type": "string" + }, + "guildAvatars": { + "type": "string" + }, + "guildBanners": { + "type": "string" + }, + "files": { + "type": "string" + }, + "guildEmojis": { + "type": "string" + } + }, + "type": "object", + "required": ["avatars", "banners", "guildIcons", "guildAvatars", "guildBanners", "files", "guildEmojis"] + }, + "S3": { + "properties": { + "accessKey": { + "type": "string" + }, + "endPoint": { + "type": "string" + }, + "port": { + "type": "number" + }, + "secretKey": { + "type": "string" + }, + "useSSL": { + "type": "boolean" + }, + "buckets": { + "$ref": "#/definitions/S3Buckets" + } + }, + "type": "object", + "required": ["accessKey", "endPoint", "port", "secretKey", "useSSL", "buckets"] + }, "Server": { "properties": { "bucketInterval": { @@ -133,6 +184,12 @@ "domain": { "type": "string" }, + "mediaServer": { + "type": "string" + }, + "cdnServer": { + "type": "string" + }, "features": { "items": { "$ref": "#/definitions/Features" @@ -220,7 +277,10 @@ "strictRouting", "turnstileSecret", "workerId", - "phishing" + "phishing", + "scraper", + "mediaServer", + "cdnServer" ] }, "ShortCode": { @@ -250,63 +310,6 @@ }, "type": "object" }, - "Ws": { - "properties": { - "port": { - "type": ["string", "number"] - }, - "maxConnections": { - "type": ["string", "number"] - }, - "maxConnectionsPerMinute": { - "type": ["string", "number"] - }, - "maxConnectionsPerIp": { - "type": ["string", "number"] - }, - "intervals": { - "type": "object", - "properties": { - "unAuthedTimeout": { - "type": "object", - "properties": { - "interval": { - "type": ["string", "number"] - }, - "leeway": { - "type": ["string", "number"] - } - } - }, - "closeTimeout": { - "type": "object", - "properties": { - "interval": { - "type": ["string", "number"] - }, - "leeway": { - "type": ["string", "number"] - } - } - }, - "heartbeat": { - "type": "object", - "properties": { - "interval": { - "type": ["string", "number"] - }, - "leeway": { - "type": ["string", "number"] - } - } - } - }, - "required": ["unAuthedTimeout", "closeTimeout", "heartbeat"] - } - }, - "type": "object", - "required": ["port", "maxConnections", "maxConnectionsPerMinute", "maxConnectionsPerIp", "intervals"] - }, "RabbitMQ": { "properties": { "host": { @@ -345,13 +348,13 @@ "server": { "$ref": "#/definitions/Server" }, - "ws": { - "$ref": "#/definitions/Ws" - }, "rabbitMQ": { "$ref": "#/definitions/RabbitMQ" + }, + "s3": { + "$ref": "#/definitions/S3" } }, "type": "object", - "required": ["encryption", "redis", "scyllaDB", "server", "ws", "rabbitMQ"] + "required": ["encryption", "redis", "scyllaDB", "server", "rabbitMQ", "s3"] } diff --git a/src/Types/index.ts b/src/Types/index.ts index 46fe37cf..f710c62d 100644 --- a/src/Types/index.ts +++ b/src/Types/index.ts @@ -1 +1,3 @@ export type PreventInfiniteRecursion = T extends object ? { [K in keyof T]: PreventInfiniteRecursion } : T; + +export type StringLike = string & {}; diff --git a/src/Utils/Classes/API.ts b/src/Utils/Classes/API.ts index e00e1feb..435d13e2 100644 --- a/src/Utils/Classes/API.ts +++ b/src/Utils/Classes/API.ts @@ -17,6 +17,11 @@ import FileSystemRouter from "./FileSystemRouter.ts"; import { IpUtils } from "./IpUtils.ts"; import type { ContentTypes } from "./Routing/Route.ts"; import RouteBuilder from "./Routing/Route.ts"; +import { S3Client } from "@aws-sdk/client-s3"; +import put, { type PutType } from "@/Utils/S3Events/put.ts"; +import deletee, { type DeleteType } from "@/Utils/S3Events/delete.ts"; +import RateLimit from "@/Utils/Classes/RateLimit.ts"; +import RateLimits from "@/RateLimits.ts"; class API extends App { private routeDirectory: string = join(import.meta.dirname, "../../Routes"); @@ -38,6 +43,10 @@ class API extends App { public noReplyEmail!: Transporter; + public s3!: S3Client; + + public globalRatelimit = new RateLimit(this, RateLimits.global); + public constructor() { super("API"); @@ -91,11 +100,54 @@ class API extends App { return "version" in data && typeof data.version === "number"; } + private isData(data: unknown): data is PutType | DeleteType { + return typeof data === "object" && data !== null && "EventName" in data; + } + public override async init(): Promise { await super.init(); + this.rabbitMQ.on("data", (data) => { + if (data.type !== "minio") { + return; + } + + console.log( + Bun.inspect(data, { + colors: true, + depth: 5000, + }), + this.isData(data.data), + ); + + if (this.isData(data.data)) { + switch (data.data.EventName) { + case "s3:ObjectCreated:Put": { + put(data.data, this); + + break; + } + + case "s3:ObjectRemoved:Delete": { + deletee(data.data, this); + + break; + } + } + } + }); + this.turnstile = new Turnstile(this.config.server.captchaEnabled, this.config.server.turnstileSecret ?? "secret"); + this.s3 = new S3Client({ + region: "us-west-2", + credentials: { + accessKeyId: this.config.s3.accessKey, + secretAccessKey: this.config.s3.secretKey, + }, + endpoint: `${this.config.s3.useSSL ? "https" : "http"}://${this.config.s3.endPoint}:${this.config.s3.port}`, + }); + if (this.config.mailServer?.enabled) { const noReply = this.config.mailServer?.users.find((x) => x.shortCode === "NoReply"); @@ -194,217 +246,279 @@ class API extends App { this.logger.info(`Loaded ${Object.keys(this.router.routes).length} routes`); - this.elysiaApp.all("*", async ({ body, headers, path, query, request, set, store }) => { - if (this.args.includes("debug")) { - this.logger.startTimer(`[Request] ${path}`); - } + this.elysiaApp.all( + "*", + async ({ body, headers, path, query, request, set, store }) => { + if (this.args.includes("debug")) { + this.logger.startTimer(`[Request] ${path}`); + } - const ip = IpUtils.getIp(request, this.elysiaApp.server) ?? ""; - const isLocalIp = IpUtils.isLocalIp(ip); - const snf = this.snowflake.generate(); + // todo: store is not secure stop using it + const ip = store.ip; + const isLocalIp = IpUtils.isLocalIp(ip); + const snf = this.snowflake.generate(); - set.headers["x-request-id"] = snf; + set.headers["x-request-id"] = snf; - if (isLocalIp && process.env.NODE_ENV !== "development") { - this.logger.warn(`Local IP ${ip} tried to access ${path}`); + if (isLocalIp && process.env.NODE_ENV !== "development") { + this.logger.warn(`Local IP ${ip} tried to access ${path}`); - set.status = 403; + set.status = 403; - return "Forbidden"; - } + return "Forbidden"; + } - const matched = this.router.match(request); + const matched = this.router.match(request); - if (!matched) { - const error = errorGen.NotFound(); + if (!matched) { + const error = errorGen.NotFound(); - error.addError({ - notFound: { - code: "NotFound", - message: `Could not find route for ${request.method} ${path}`, - }, - }); + error.addError({ + notFound: { + code: "NotFound", + message: `Could not find route for ${request.method} ${path}`, + }, + }); - set.status = 404; + set.status = 404; - return error.toJSON(); - } + return error.toJSON(); + } - const route = this.routeCache.get(matched.filePath); + const route = this.routeCache.get(matched.filePath); - if (!route) { - this.logger.error(`Could not find route for ${request.method} ${path} but it was successfully matched`); + if (!route) { + this.logger.error(`Could not find route for ${request.method} ${path} but it was successfully matched`); - set.status = 500; + set.status = 500; - return "Internal Server Error :("; - } + return "Internal Server Error :("; + } - this.logger.info(`Request to "${route.route}" [${request.method}]`); + this.logger.info(`Request to "${route.route}" [${request.method}] | ${snf} | ${ip} | ${headers["user-agent"]}`); - if (route.routeClass.KillSwitched) { - this.logger.info(`Request to "${route.route}" [${request.method}] finished with status 403 from killswitch`); + if (route.routeClass.KillSwitched) { + this.logger.info( + `Request to "${route.route}" [${request.method}] | ${snf} | finished with status 403 from killswitch`, + ); - set.status = 403; + set.status = 403; - return "Oop's, seems you made the wrong turn into the boss's office."; // ? Staff or kill switched error message. No I'm not changing it do not ask. - } + return "Oop's, seems you made the wrong turn into the boss's office."; // ? Staff or kill switched error message. No I'm not changing it do not ask. + } - const foundMethod = route.routeClass.__methods?.find((method) => method.method === request.method.toLowerCase()); + const foundMethod = route.routeClass.__methods?.find( + (method) => method.method === request.method.toLowerCase(), + ); - if (!foundMethod) { - const error = errorGen.MethodNotAllowed(); + if (!foundMethod) { + const error = errorGen.MethodNotAllowed(); + + error.addError({ + method: { + code: "MethodNotAllowed", + message: `Method "${ + request.method + }" is not allowed for "${path}", allowed methods are [${route.routeClass.__methods + .map((method) => method.method.toUpperCase()) + .join(", ")}]`, + }, + }); - error.addError({ - method: { - code: "MethodNotAllowed", - message: `Method "${ - request.method - }" is not allowed for "${path}", allowed methods are [${route.routeClass.__methods - .map((method) => method.method.toUpperCase()) - .join(", ")}]`, - }, - }); + set.status = 405; - set.status = 405; + return error.toJSON(); + } - return error.toJSON(); - } + const middleware = route.routeClass.__middlewares?.filter((middleware) => middleware.name === foundMethod.name); + const contentTypes = route.routeClass.__contentTypes?.find( + (contentType) => contentType.name === foundMethod.name, + ); - const middleware = route.routeClass.__middlewares?.filter((middleware) => middleware.name === foundMethod.name); - const contentTypes = route.routeClass.__contentTypes?.find( - (contentType) => contentType.name === foundMethod.name, - ); + // @ts-expect-error -- I know what I'm doing + if (route.routeClass[foundMethod.name] === undefined) { + this.logger.error(`Could not find function for ${request.method} ${path} but it was successfully matched`); - // @ts-expect-error -- I know what I'm doing - if (route.routeClass[foundMethod.name] === undefined) { - this.logger.error(`Could not find function for ${request.method} ${path} but it was successfully matched`); + set.status = 500; - set.status = 500; + return "Internal Server Error :("; + } - return "Internal Server Error :("; - } + // @ts-expect-error -- I know what I'm doing + const routeClassFunction = route.routeClass[foundMethod.name].bind(route.routeClass); + const finishedMiddlewares = []; - // @ts-expect-error -- I know what I'm doing - const routeClassFunction = route.routeClass[foundMethod.name].bind(route.routeClass); - const finishedMiddlewares = []; + if (!routeClassFunction) { + this.logger.error(`Could not find function for ${request.method} ${path} but it was successfully matched`); - if (!routeClassFunction) { - this.logger.error(`Could not find function for ${request.method} ${path} but it was successfully matched`); + set.status = 500; - set.status = 500; + return "Internal Server Error :("; + } - return "Internal Server Error :("; - } + if ( + contentTypes && + contentTypes.type.length > 0 && + !contentTypes.type.includes((headers["content-type"] ?? "text/plain") as ContentTypes) && + !contentTypes.type.includes("any") + ) { + const error = errorGen.InvalidContentType(); + + error.addError({ + contentType: { + code: "InvalidContentType", + message: `Invalid Content-Type header, Expected (${contentTypes.type.join(", ")}), Got (${ + headers["content-type"] + })`, + }, + }); - if ( - contentTypes && - contentTypes.type.length > 0 && - !contentTypes.type.includes((headers["content-type"] ?? "text/plain") as ContentTypes) && - !contentTypes.type.includes("any") - ) { - const error = errorGen.InvalidContentType(); - - error.addError({ - contentType: { - code: "InvalidContentType", - message: `Invalid Content-Type header, Expected (${contentTypes.type.join(", ")}), Got (${ - headers["content-type"] - })`, - }, - }); - - set.status = 400; - set.headers["Content-Type"] = "application/json"; + set.status = 400; + set.headers["Content-Type"] = "application/json"; - this.logger.info( - `Request to "${route.route}" [${request.method}] finished with status ${set.status} from invalid content type`, - ); + this.logger.info( + `Request to "${route.route}" [${request.method}] finished with status ${set.status} from invalid content type`, + ); - return error.toJSON(); - } + return error.toJSON(); + } - if (this.args.includes("debug")) { - this.logger.startTimer(`[Request] Middleware ${snf}`); - } + if (this.args.includes("debug")) { + this.logger.startTimer(`[Request] Middleware ${snf}`); + } - if (middleware && middleware.length > 0) { - for (const middle of middleware) { - const finished = await middle.ware({ - app: this, - body: body as {}, - headers, - params: matched.params, - path, - query, - request, - set, - store, - ip, - }); + if (middleware && middleware.length > 0) { + for (const middle of middleware) { + const finished = await middle.ware({ + app: this, + body: body as {}, + headers, + params: matched.params, + path, + query, + request, + set, + store, + ip, + }); + + if (set.status !== 200) { + this.logger.info( + `Request to "${route.route}" [${request.method}] | ${snf} | finished with status ${set.status} from middleware ${middle.ware.name}`, + ); + + return this.repairObject(finished); + } + + if (finished) { + finishedMiddlewares.push(finished); + } + } + } - if (set.status !== 200) { - this.logger.info( - `Request to "${route.route}" [${request.method}] finished with status ${set.status} from middleware ${middle.ware.name}`, - ); + if (this.args.includes("debug")) { + this.logger.stopTimer(`[Request] Middleware ${snf}`); + } + if (this.args.includes("debug")) { + this.logger.startTimer(`[Request] Route ${snf}`); + } - return this.repairObject(finished); + const requested = (await routeClassFunction({ + app: this, + body: body as {}, + headers, + params: matched.params, + path, + query, + request, + set, + store, + ip, + ...finishedMiddlewares.reduce((a, b) => ({ ...a, ...b }), {}), + })) as Promise; + + if (typeof requested === "object") { + // Go through requested, we want to alert the console when we detect an "email, phone number, password" field in the response + // There will be whitelisted paths, such as /auth/register, /users/@me etc + // If we detect one we warn it to the console then return a 500 error + const whitelistedPaths = ["/auth/register", "/users/@me"]; + + const checked = this.checkObjectForBlacklistedFields(requested, ["email", "phoneNumber", "password"]); + + if (checked && !(whitelistedPaths.includes(path) || whitelistedPaths.includes(path.slice(3)))) { + set.status = 500; + + this.logger.warn(`Blacklisted field detected in response for ${path}`); + + return "Internal Server Error :("; } + } - finishedMiddlewares.push(finished); + if (this.args.includes("debug")) { + this.logger.stopTimer(`[Request] Route ${snf}`); } - } - if (this.args.includes("debug")) { - this.logger.stopTimer(`[Request] Middleware ${snf}`); - } - if (this.args.includes("debug")) { - this.logger.startTimer(`[Request] Route ${snf}`); - } + this.logger.info( + `Request to "${route.route}" [${request.method}] | ${snf} | finished with status ${set.status}`, + ); - const requested = (await routeClassFunction({ - app: this, - body: body as {}, - headers, - params: matched.params, - path, - query, - request, - set, - store, - ip, - ...finishedMiddlewares.reduce((a, b) => ({ ...a, ...b }), {}), - })) as Promise; - - if (typeof requested === "object") { - // Go through requested, we want to alert the console when we detect an "email, phone number, password" field in the response - // There will be whitelisted paths, such as /auth/register, /users/@me etc - // If we detect one we warn it to the console then return a 500 error - const whitelistedPaths = ["/auth/register", "/users/@me"]; - - const checked = this.checkObjectForBlacklistedFields(requested, ["email", "phoneNumber", "password"]); - - if (checked && !(whitelistedPaths.includes(path) || whitelistedPaths.includes(path.slice(3)))) { - set.status = 500; + if (this.args.includes("debug")) { + this.logger.stopTimer(`[Request] ${path}`); + } - this.logger.warn(`Blacklisted field detected in response for ${path}`); + return this.repairObject(requested); + }, + { + afterHandle: async ({ set, request, headers, store }) => { + if (set.status === 429) { + return; + } - return "Internal Server Error :("; - } - } + await this.globalRatelimit.consume({ + identifier: store.ip, + request: { + headers, + ip: store.ip, + request, + set, + }, + }); + }, + beforeHandle: async ({ set, request, headers, store }) => { + const ip = IpUtils.getIp(request, this.elysiaApp.server) ?? ""; + + store.ip = ip; + + const checked = await this.globalRatelimit.check({ + identifier: ip, + request: { + headers, + ip, + request, + set, + }, + }); - if (this.args.includes("debug")) { - this.logger.stopTimer(`[Request] Route ${snf}`); - } + if (!checked.canContinue) { + const error = errorGen.TooManyRequests(); - this.logger.info(`Request to "${route.route}" [${request.method}] finished with status ${set.status}`); + error.addError({ + ratelimit: { + code: "TooManyRequests", + message: `You are being rate limited, please try again in ${(checked.headers.reset - Date.now()) / 1000} seconds`, + tryAgainAfter: (checked.headers.reset - Date.now()) / 1000, + }, + }); - if (this.args.includes("debug")) { - this.logger.stopTimer(`[Request] ${path}`); - } + set.status = 429; - return this.repairObject(requested); - }); + return error.toJSON(); + } + + return; + }, + }, + ); this.elysiaApp.listen(this.config.server.port, () => { if (isMainThread) { @@ -415,8 +529,12 @@ class API extends App { }); this.rabbitMQ.on("data", (data) => { - if (this.isInternalRoutingRequest(data)) { - this.handleRouting(data); + if (data.type !== "data") { + return; + } + + if (this.isInternalRoutingRequest(data.data)) { + this.handleRouting(data.data); return; } @@ -643,7 +761,15 @@ class API extends App { set, store: {}, ip: "", - user: data.user ?? null, + user: data.user ? { + ...data.user, + oauth2: { + accessToken: null, + isOauth2: false, + refreshToken: null, + scopes: [] + } + } : null, }); this.logger.info( diff --git a/src/Utils/Classes/App.ts b/src/Utils/Classes/App.ts index f1e5e524..5684fc71 100644 --- a/src/Utils/Classes/App.ts +++ b/src/Utils/Classes/App.ts @@ -79,6 +79,10 @@ class App { } public async init(): Promise { + const githubInfo = await App.githubInfo(); + + this.logger.who = `git:(${githubInfo.Branch})`; + await this.setupDebug(this.args.includes("debug")); const loaded = await App.configManager.load(); @@ -202,11 +206,9 @@ class App { `Status: ${ this.clean ? "Clean" : "Dirty - You will not be given support if something breaks with a dirty instance" }`, - this.clean ? "" : "=".repeat(40), + "=".repeat(40), ]; - strings.push("=".repeat(40)); - if (Log) { for (const string of strings) { this.logger.importantDebug(string); diff --git a/src/Utils/Classes/BitFields/Flags.ts b/src/Utils/Classes/BitFields/Flags.ts index 5bed0cb1..2f2820ed 100644 --- a/src/Utils/Classes/BitFields/Flags.ts +++ b/src/Utils/Classes/BitFields/Flags.ts @@ -21,6 +21,10 @@ class FlagFields { public static cleanPrivateFlags(flags: string | bigint | number) { return String(new FlagUtilsBInt(flags, privateFlags).clean(publicPrivateFlags)); } + + public get cleanedPrivateFlags() { + return FlagFields.cleanPrivateFlags(this.PrivateFlags.bits); + } public has(bit: bigint | number | keyof typeof privateFlags | keyof typeof publicFlags) { return ( diff --git a/src/Utils/Classes/BitFields/Permissions.ts b/src/Utils/Classes/BitFields/Permissions.ts index 2af52a1f..419282c3 100644 --- a/src/Utils/Classes/BitFields/Permissions.ts +++ b/src/Utils/Classes/BitFields/Permissions.ts @@ -8,10 +8,11 @@ * ? PermissionOverrides still will have "allow" and "deny" properties, but they now will be an array of arrays of strings (BigInts) */ -import { permissions } from "@/Constants.ts"; +import Constants, { permissions } from "@/Constants.ts"; import FlagUtilsBInt from "./NewFlags.ts"; import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; import type { BigintPair } from "@/Utils/Cql/Tables/RoleTable.ts"; +import safeBigInt from "@/Utils/safeBigInt.ts"; type hasType = "all" | "some"; @@ -19,7 +20,7 @@ type PermissionKeys = { [K in keyof typeof permissions]: keyof (typeof permissions)[K]["subPermissions"]; }; -type PermissionKey = PermissionKeys[keyof PermissionKeys]; +type PermissionKey = PermissionKeys[keyof PermissionKeys] | "Administrator" type DumbBigIntPair = NullifyStuff; @@ -27,7 +28,7 @@ class Permissions { public bits: [bigint | string, FlagUtilsBInt<(typeof permissions)[keyof typeof permissions]["subPermissions"]>][]; public constructor(bits: [bigint | string, bigint | string][]) { - this.bits = bits.map(([group, subPermission]) => [ + this.bits = Permissions.removeInvalidBits(bits).map(([group, subPermission]) => [ BigInt(group), new FlagUtilsBInt<(typeof permissions)[keyof typeof permissions]["subPermissions"]>( subPermission, @@ -35,21 +36,51 @@ class Permissions { ), ]); } + + public static removeInvalidBits(bits: [bigint | string, bigint | string][]) { + return bits.filter(([group, subPermission]) => { + if (typeof group === "string" && safeBigInt(group) === null) { + return false; + } + + if (typeof subPermission === "string" && safeBigInt(subPermission) === null) { + return false; + } + + if (BigInt(group) === permissions.Administrator.int && subPermission === "0") { + return true; + } + + if (!Object.values(permissions).some((permission) => permission.int === BigInt(group))) { + return false; + } + + const groupCheck = Object.values(permissions).find((permission) => permission.int === BigInt(group))?.subPermissions + + if (!groupCheck) { + return false; + } + + const allBits = Object.values(groupCheck).reduce((acc, curr) => acc | curr, 0n); + const invalidRemoved = BigInt(subPermission) & allBits; + + if (invalidRemoved !== BigInt(subPermission)) { + return false; + } + + return true; + }); + } public has(perms: T[], ignoreAdmin?: boolean, type?: HT): boolean { - if ( - // @ts-expect-error idc - perms.includes("Administrator") && - !ignoreAdmin && - this.bits.some(([bits]) => BigInt(bits) === permissions.Administrator.int) - ) { + if (!ignoreAdmin && this.bits.some(([bits]) => BigInt(bits) === permissions.Administrator.int)) { return true; } - + for (const perm of perms) { const group = this.getGroupFromSubPermission(perm)!; - const index = this.bits.findIndex(([bits]) => BigInt(bits) === permissions[group].int); + const index = this.bits.findIndex(([bits]) => BigInt(bits) === permissions[group]?.int); if (index === -1) { return false; @@ -144,6 +175,14 @@ class Permissions { const obj: Record> = {}; for (const [group, stuff] of Object.entries(permissions)) { + if (stuff.int === Constants.permissions.Administrator.int) { + obj[group] = { + Administrator: this.has(["Administrator"], false, "some"), + }; + + continue; + } + for (const [subPermission] of Object.entries(stuff.subPermissions)) { if (!obj[group]) { obj[group] = {}; @@ -169,15 +208,24 @@ class Permissions { }); } - public static permissionFromBigint(permissions: BigintPair[] | DumbBigIntPair[]) { + public static permissionFromBigint(permissions: (BigintPair | DumbBigIntPair)[]) { return Array.isArray(permissions) ? new Permissions(permissions.map((bits) => [bits.first!.toString(), bits.second!.toString()])) : new Permissions([]); } - public static permissionFromDatabase(permissions: BigintPair[] | DumbBigIntPair[]) { + public static permissionFromDatabase(permissions: (BigintPair | DumbBigIntPair)[]) { return this.permissionFromBigint(permissions).normizedBits; } + + public static permissionToDatabase(permissions: [string, string][]): (BigintPair | DumbBigIntPair)[] { + return permissions.map((bits) => { + return { + first: BigInt(bits[0]), + second: BigInt(bits[1]), + }; + }); + } } export default Permissions; diff --git a/src/Utils/Classes/DB/Client.ts b/src/Utils/Classes/DB/Client.ts index 6c4500b3..7121b73b 100644 --- a/src/Utils/Classes/DB/Client.ts +++ b/src/Utils/Classes/DB/Client.ts @@ -91,7 +91,7 @@ class Client extends EventEmitter { } createKeySpace += ` AND DURABLE_WRITES = ${options.db?.durableWrites ?? false};`; - + const [, keyspaceError] = await safePromise(this.connection.execute(createKeySpace)); if (keyspaceError) { @@ -134,9 +134,9 @@ class Client extends EventEmitter { throw new Error(`Failed to get table metadata: ${error?.message}`); } - if (data.rows.length === 0) { - const cmd = table.toCQLCommand(); + const cmd = table.toCQLCommand(); + if (data.rows.length === 0) { for (const type of cmd.types) { const [, error] = await safePromise(this.connection.execute(type)); @@ -172,10 +172,16 @@ class Client extends EventEmitter { // ? We return due to the fact there's nothing else for us to do return; } + + for (const type of cmd.types) { + const [,error] = await safePromise(this.connection.execute(type)); - const [columns, columnsError] = await safePromise(this.connection.execute(columnsCommand)); + if (error) { + throw new Error(`Failed to create type: ${error.message}`); + } + } - // console.log(Bun.inspect(columns, { colors: true, depth: 50 })); + const [columns, columnsError] = await safePromise(this.connection.execute(columnsCommand)); if (columnsError || !columns) { throw new Error(`Failed to get columns metadata: ${columnsError?.message}`); @@ -301,7 +307,7 @@ class Client extends EventEmitter { } } } - + if (table.options.indexes) { for (const [name, target] of table.options.indexes.map((idx) => Array.isArray(idx) @@ -437,6 +443,60 @@ class Client extends EventEmitter { App.staticLogger.info(`Added column ${found}`); } } + + if (table.options.types) { + // ? check all the types, see if they are missing a column in the type and edit it if so + for (const [name, type] of Object.entries(table.options.types)) { + const [typeData, typeError] = await safePromise( + this.connection.execute( + `SELECT * FROM system_schema.types WHERE keyspace_name = '${keyspace}' AND type_name = '${table.snakeifyString(name)}'`, + ), + ); + + if (typeError || !typeData) { + throw new Error(`Failed to get type metadata: ${typeError?.message}`); + } + + const typeColumns: { + name: string; + type: string; + }[] = typeData.rows?.[0]?.field_names?.map((row: string, i: number) => ({ + name: row, + type: typeData.rows?.[0]?.field_types[i], + })) ?? []; + + const missingTypeColumns = Object.keys(type).filter( + (column) => !typeColumns.some((col) => col.name === table.snakeifyString(column)), + ); + + for (const column of missingTypeColumns) { + const answer = await rl.question( + `[${table.options.tableName}] The column ${column} is not in the remote type ${name}, would you like to add it? [y/n] `, + ); + + if (possibleYes.includes(answer)) { + const [, error] = await safePromise( + this.connection.execute( + `ALTER TYPE ${table.snakeifyString(name)} ADD ${table.snakeifyString(column)} ${table.extractTypeName(type[column]!)}`, + ), + ); + + if (error) { + throw new Error(`Failed to add column ${table.snakeifyString(column)} to type ${table.snakeifyString(name)}: ${error.message}`); + } + + App.staticLogger.info(`Added column ${table.snakeifyString(column)} to type ${name}`); + } + } + + const extraColumns = typeColumns.filter((column) => !Object.keys(type).map((col) => table.snakeifyString(col)).includes(column.name)); + + for (const column of extraColumns) { + App.staticLogger.debug(`[${table.options.tableName}] The column ${column.name} is in the remote type ${name}, but not in the local type sadly you cannot remove columns from a type`); + } + } + } + rl.close(); } diff --git a/src/Utils/Classes/DB/Finder.ts b/src/Utils/Classes/DB/Finder.ts index 5d1cdb75..f0c730a3 100644 --- a/src/Utils/Classes/DB/Finder.ts +++ b/src/Utils/Classes/DB/Finder.ts @@ -19,6 +19,14 @@ class Finder { public get length() { return this.data.length; } + + public get first() { + return this.data[0]; + } + + public map(callback: (value: Data, index: number, array: Data[]) => T) { + return this.data.map(callback); + } } export default Finder; diff --git a/src/Utils/Classes/DB/Table.ts b/src/Utils/Classes/DB/Table.ts index 89f8be6e..36c30ad4 100644 --- a/src/Utils/Classes/DB/Table.ts +++ b/src/Utils/Classes/DB/Table.ts @@ -1088,6 +1088,10 @@ class Table { types, }; } + + public extractTypeName(type: AllTypes): string { + return ExtractValueName(type); + } public get columns() { return Object.entries(this.options.columns).map(([key, value]) => { diff --git a/src/Utils/Classes/DB/createTableTypes.ts b/src/Utils/Classes/DB/createTableTypes.ts index b387054a..fa8b9a6e 100644 --- a/src/Utils/Classes/DB/createTableTypes.ts +++ b/src/Utils/Classes/DB/createTableTypes.ts @@ -342,6 +342,16 @@ export type NullifyStuff = { : T[K] | null; }; +export type UnNullifyStuff = { + [K in keyof T]: T[K] extends string | number | boolean | Date | bigint | null + ? Exclude + : T[K] extends (infer U)[] + ? UnNullifyStuff[] + : T[K] extends object + ? UnNullifyStuff + : Exclude; +} + export type PublicGetReturnType = Fields extends "*" ? NullifyStuff : NullifyStuff>>; diff --git a/src/Utils/Classes/Encryption.ts b/src/Utils/Classes/Encryption.ts index 9f8c8717..c77b5222 100644 --- a/src/Utils/Classes/Encryption.ts +++ b/src/Utils/Classes/Encryption.ts @@ -178,6 +178,31 @@ class Encryption { public static encryptedSnowflake() { return Encryption.encrypt(App.snowflake.generate()); } + + public static randomNumber(min: number, max: number) { + return (min + ((max - min + 1) * crypto.getRandomValues(new Uint32Array(1))[0]!) / 2 ** 32) | 0; + } + + /** + * Generate a code for oauth2 or other purposes + * @param length The length of the code to generate + * @param special Include special characters (i.e - _) + */ + public static generateCode(length = 32, special = false) { + let chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + + if (special) { + chars += "-_"; + } + + let result = ""; + + for (let i = 0; i < length; i++) { + result += chars.charAt(this.randomNumber(0, chars.length - 1)); + } + + return result; + } } export default Encryption; diff --git a/src/Utils/Classes/ErrorGen.ts b/src/Utils/Classes/ErrorGen.ts index 410c5549..c7aea1c3 100644 --- a/src/Utils/Classes/ErrorGen.ts +++ b/src/Utils/Classes/ErrorGen.ts @@ -44,9 +44,9 @@ const errorGen = { return new HTTPErrors(4_006); }, /* - * When the client is being rate limited + * Invalid Query options */ - RateLimited: () => { + InvalidQuery: () => { return new HTTPErrors(4_007); }, /* @@ -193,6 +193,60 @@ const errorGen = { InvalidRole: () => { return new HTTPErrors(4_030); }, + /* + * The file you are trying to upload is too large + */ + FileTooLarge: () => { + return new HTTPErrors(4_031); + }, + /* + * The file you are trying to do an action on is invalid + */ + InvalidFile: () => { + return new HTTPErrors(4_032); + }, + /* + * The file you tried to access does not exist + */ + UnknownFile: () => { + return new HTTPErrors(4_033); + }, + /* + * Too many requests, i.e ratelimited + */ + TooManyRequests: () => { + return new HTTPErrors(4_290); + }, + /* + * The application you tried to access does not exist or you cannot manage it + */ + UnknownApplication: () => { + return new HTTPErrors(4_034); + }, + /* + * One or more of the scopes you've provided are invalid + */ + InvalidScope: () => { + return new HTTPErrors(4_035); + }, + /* + * The application is disabled + */ + ApplicationDisabled: () => { + return new HTTPErrors(4_036); + }, + /* + * The application is private + */ + ApplicationPrivate: () => { + return new HTTPErrors(4_037); + }, + /* + * The application you are trying to add is already in the guild + */ + AlreadyInGuild: () => { + return new HTTPErrors(4_038); + } }; export default errorGen; diff --git a/src/Utils/Classes/IpUtils.ts b/src/Utils/Classes/IpUtils.ts index 33429d68..ddced984 100644 --- a/src/Utils/Classes/IpUtils.ts +++ b/src/Utils/Classes/IpUtils.ts @@ -1,3 +1,4 @@ +import type { StringLike } from "@/Types/index.ts"; import type { Server } from "bun"; export type IPHeaders = @@ -13,7 +14,7 @@ export type IPHeaders = | "x-forwarded" | "x-forwarded" | "x-real-ip" - | (string & {}); + | StringLike; export const headersToCheck: IPHeaders[] = [ "x-real-ip", // Nginx proxy/FastCGI diff --git a/src/Utils/Classes/Logger.ts b/src/Utils/Classes/Logger.ts index 3e0564cb..052a0376 100644 --- a/src/Utils/Classes/Logger.ts +++ b/src/Utils/Classes/Logger.ts @@ -1,13 +1,23 @@ -import { createWriteStream, createReadStream } from "node:fs"; -import { writeFile, mkdir, exists, readdir, rm } from "node:fs/promises"; +import { createWriteStream } from "node:fs"; import { join } from "node:path"; import { setInterval } from "node:timers"; import * as Sentry from "@sentry/bun"; import * as ark from "archiver"; -import { isMainThread } from "bun"; +import type { BunFile, FileSink } from "bun"; import processArgs from "../ProcessArgs.ts"; -type Logtypes = "debug" | "error" | "fatal" | "importantDebug" | "info" | "timer" | "trace" | "verbose" | "warn"; +type Logtypes = + | "who" + | "date" + | "debug" + | "error" + | "fatal" + | "importantDebug" + | "info" + | "timer" + | "trace" + | "verbose" + | "warn"; const args = processArgs(["debug", "noverbose", "no-console", "super-debug"]); @@ -50,6 +60,16 @@ class Logger { } >; + public latestLogFile!: BunFile; + + public latestLogFileWriter!: FileSink; + + public errorLogFile!: BunFile; + + public errorLogFileWriter!: FileSink; + + private inited = false; + public constructor( options: { Colors?: { @@ -66,6 +86,13 @@ class Logger { this.errorLogs = join(this.logDirectory, "errors.log"); + Bun.write(this.latestLog, " "); + Bun.write(this.errorLogs, " "); + + this.errorLogFile = Bun.file(this.errorLogs); + + this.latestLogFile = Bun.file(this.latestLog); + void this.init(); this.prevDate = new Date(); @@ -103,6 +130,10 @@ class Logger { }, 25); setInterval(() => { + if (!this.inited) { + return; + } + this.next(); }, 25); @@ -117,44 +148,40 @@ class Logger { timer: "#026C7C", // important debug should be bright, catch the eye importantDebug: "#5d6af0", + date: "#4acc16", + who: "#cf5f04", ...options.Colors, }; } private async init(): Promise { - if (!isMainThread) { - return; - } + await this.compress(); - if (!(await exists(this.logDirectory))) { - await mkdir(this.logDirectory); - } - - const compressed = await this.compress(); + if (!(await this.errorLogFile.exists())) { + await Bun.write(this.errorLogFile, ""); - if (compressed) { - this.supersecretdebug("Compressed logs"); - } else { - this.supersecretdebug("No logs to compress"); + this.supersecretdebug("Created error log file"); } - if (!(await exists(this.latestLog))) { - this.supersecretdebug("Latest log does not exist, creating it"); + if (!(await this.latestLogFile.exists())) { + await Bun.write(this.latestLogFile, ""); - await writeFile(this.latestLog, ""); - - this.supersecretdebug("Created latest log"); + this.supersecretdebug("Created latest log file"); } - if (!(await exists(this.errorLogs))) { - this.supersecretdebug("Error log does not exist, creating it"); - - await writeFile(this.errorLogs, ""); + this.errorLogFileWriter = this.errorLogFile.writer({ + // 256kb + highWaterMark: 256 * 1024, + }); - this.supersecretdebug("Created error log"); - } + this.latestLogFileWriter = this.latestLogFile.writer({ + // 256kb + highWaterMark: 256 * 1024, + }); this.supersecretdebug("Logger initialized"); + + this.inited = true; } public static hexToAnsi(hex: string): { @@ -175,65 +202,43 @@ class Logger { }; } - private async compress(): Promise { - if (!isMainThread) { - return false; - } - + private async compress() { this.compressing = true; - const files = await readdir(this.logDirectory); + const glob = new Bun.Glob("**/*.log"); + const todaysDateGlob = new Bun.Glob(`${new Date().toISOString().slice(0, 10)}-*.log.zip`); - const currentDate = new Date(); - - const logFiles = files.filter((file) => file.endsWith(".log")); - - return new Promise((resolve) => { - const gzipFiles = files.filter( - (file) => file.startsWith(`${currentDate.toISOString().slice(0, 10)}-`) && file.endsWith(".log.zip"), - ); - - if (logFiles.length === 0) { - this.supersecretdebug("No log files to compress"); + const scanned = await Array.fromAsync(todaysDateGlob.scan(this.logDirectory)); - resolve(false); - - return; - } - - const archive = ark.default.create("zip", { - zlib: { level: 9 }, - }); + const currentDate = new Date(); - const output = createWriteStream( - join(this.logDirectory, `${currentDate.toISOString().slice(0, 10)}-${gzipFiles.length + 1}.log.zip`), - ); + const archive = ark.default.create("zip", { + zlib: { level: 9 }, + }); - archive.pipe(output); + const output = createWriteStream( + join(this.logDirectory, `${currentDate.toISOString().slice(0, 10)}-${scanned.length + 1}.log.zip`), + ); - for (const file of logFiles) { - archive.append(createReadStream(join(this.logDirectory, file)), { name: file }); - this.supersecretdebug(`Added ${file} to archive`); - } + archive.pipe(output); - archive.on("finish", async () => { - for (const file of logFiles) { - await rm(join(this.logDirectory, file)).catch(() => {}); + for await (const file of glob.scan(this.logDirectory)) { + const read = await Bun.file(join(this.logDirectory, file)).text(); - this.supersecretdebug(`Deleted ${file}`); - } + archive.append(read, { name: file }); - this.supersecretdebug("Deleted old log files"); + this.supersecretdebug(`Added ${file} to archive`); - this.compressing = false; + await Bun.$`rm ${join(this.logDirectory, file)}`; + } - resolve(true); - }); + archive.on("finish", async () => { + this.compressing = false; + }); - void archive.finalize(); + await archive.finalize(); - this.supersecretdebug("Finalized archive"); - }); + this.supersecretdebug("Finalized archive"); } private supersecretdebug(...msg: string[]) { @@ -243,6 +248,10 @@ class Logger { } private next(): boolean { + if (!this.inited) { + return false; + } + if (this.writingQueue.length === 0) { return true; } @@ -255,25 +264,12 @@ class Logger { return true; } - if (!isMainThread) { - postMessage({ - type: "log", - data: message, - }); - - return true; - } - if (message.file === "latest") { this.supersecretdebug("Writing to latest log"); - writeFile(this.latestLog, `${message.message.join("\n")}\n`, { flag: "a" }).catch((error) => - Sentry.captureException(error), - ); + this.latestLogFileWriter.write(`${message.message.join("\n")}\n`); } else if (message.file === "error") { this.supersecretdebug("Writing to crash log"); - writeFile(this.errorLogs, `${message.message.join("\n")}\n`, { flag: "a" }).catch((error) => - Sentry.captureException(error), - ); + this.errorLogFileWriter.write(`${message.message.join("\n")}\n`); } else { throw new Error(`Unknown file ${message.file}`); } @@ -305,11 +301,11 @@ class Logger { return; } - const newWho = options.who ?? this.who; + const newWho = (options.who ?? this.who) ?? "" - const message = `[${options.date.toLocaleTimeString()}]${newWho.length > 0 ? ` [${newWho}]` : ""} [${ + const message = `[${options.date.toLocaleTimeString()}] [${ options.toShow ? options.toShow.toUpperCase() : options.type.toUpperCase() - }]:`; + }]${newWho?.length > 0 ? ` ${newWho}` : ""}:`; const messages = []; @@ -342,7 +338,7 @@ class Logger { const newMessages = messages.map((msg) => { if (typeof msg === "string" || msg === null || msg === undefined) { - return `${message} ${msg}`.trim(); + return msg.trim(); } else { const stringified = JSON.stringify( msg, @@ -358,22 +354,28 @@ class Logger { return stringified .split("\n") - .map((line) => `${message} ${line}`.trim()) + .map((line) => line.trim()) .join("\n"); } }); this.writingQueue.push({ file: options.file, - message: newMessages, + message: newMessages.map((msg) => `${message} ${msg}`), }); if (options.console) { const color = Logger.hexToAnsi(this.colorTypes[options.type]); + const dateColor = Logger.hexToAnsi(this.colorTypes.date); + const whoColor = Logger.hexToAnsi(this.colorTypes.who); if (color) { for (const msg of newMessages) { - console.log(`${color.rgb}${msg}${color.end}`); + console.log( + `[${dateColor.rgb}${options.date.toLocaleTimeString()}${dateColor.end}] [${color.rgb}${ + options.toShow ? options.toShow.toUpperCase() : options.type.toUpperCase() + }${color.end}]${newWho.length > 0 ? ` ${whoColor.rgb}${newWho}${whoColor.end}` : ""}: ${color.rgb}${msg}${color.end}`, + ); } } } diff --git a/src/Utils/Classes/RateLimit.ts b/src/Utils/Classes/RateLimit.ts new file mode 100644 index 00000000..554d28f7 --- /dev/null +++ b/src/Utils/Classes/RateLimit.ts @@ -0,0 +1,360 @@ +import type API from "@/Utils/Classes/API.ts"; +import type { StatusMap } from "elysia"; + +export interface RateLimitOptions { + /** + * The bucket key, this is also hashed with the worker id + the current time interval (This is so we can have a single bucket that lasts a week or so) + */ + bucket: string; + /** + * If the ratelimit class is the global one or not + */ + global?: boolean; + /** + * This is only used when its the global ratelimit class, limits the max amount of 4xx errors before we hit them with a "permanent" ratelimit + */ + max4xx?: number | null; + /** + * Same as above but for 5xx errors + */ + max5xx?: number | null; + /** + * If dynamic, if you hit lets say the ratelimit 20 times in a single hour, we may lower your max tokens permanently for the rest of the day, hour etc etc. + */ + dynamic?: boolean; + /** + * The max amount of tokens the user can have. Note when the bucket is shared, the max tokens is shared as well. (we take the highest max tokens) + */ + maxTokens: number; + /** + * The interval in which the bucket resets + */ + interval: number; + /** + * The mode of the ratelimiting + */ + mode?: "automatic" | "manual"; + /** + * The interval for getting a new bucket hash. Defaults to 7 days though it hardly matters. + */ + bucketInterval?: number; + /** + * The amount of ratelimits before reduction starts. This defaults to 15 + */ + reductionStart?: number; + /** + * The reduction rate, defaults to 0.1 (i.e 10% reduction) + */ + reductionRate?: number; + /** + * Only consume on success + */ + consumeOnSuccess?: boolean; + /** + * Hide headers. Useful for auth endpoints + */ + hideHeaders?: boolean; +} + +export interface RateLimitHeaders { + /** + * The ratelimit remaining + */ + remaining: number; + /** + * The ratelimit reset time + */ + reset: number; + /** + * The ratelimit limit + */ + limit: number; + /** + * The hashed bucket key + */ + bucket: string; +} + +export interface RateLimitConsumeOptions { + /** + * Just the request + */ + request: { + request: globalThis.Request; + set: { + headers: Record + redirect?: string; + status?: number | keyof StatusMap; + }; + ip: string; + headers: Record; + }; + /** + * The identifier is a bit hard to explain; there's two types of identifiers, the user's ID (for when they are authenticated) and the IP address (for when they are not authenticated) or possibly a fingerprint if provided. + */ + identifier: string; +} + +/** + * NOTE: since we do not deep clone {@link RateLimitOptions} we can modify those which in turn means we can just return the ratelimit error message since we have modified the headers and status already + */ +export interface RateLimitConsumeResponse { + /** + * If the user can continue + */ + canContinue: boolean; + /** + * The "headers" which are left + */ + headers: RateLimitHeaders; +} + +/** + * How stuff is stored in redis. The key is "identifier:bucket" + */ +export interface RateLimitStorage { + bucket: string; + /** + * The last time the user hit the ratelimit (this is for dynamic ratelimiting) + */ + lastRatelimit: number; + /** + * The amount of times the user has been rate limited in the past 24 hours + */ + rateLimited: number; + /** + * The initial time they were ratelimited + */ + initialRateLimited: number; + /** + * How many tokens are left over + */ + tokens: number; + /** + * The next time the user's tokens get reset + */ + nextReset: number; + /** + * The amount of 400's the user has gotten in the past 24 hours + */ + errors4xx: number; + /** + * The amount of 500's the user has gotten in the past 24 hours + */ + errors5xx: number; +} + +/** + * I love ratelimiting (not really lol). This class is responsible for handling rate limits. We have two modes + * + * 1) global rate limit + * 2) per bucket rate limit + * + * The global ratelimit is for the entire server, so for example we may limit 50 requests per minute. The per bucket ratelimit is for specific resources / endpoints. + * + * For example, creating and fetching messages may share the same bucket ratelimit, while creating a guild may have a different bucket ratelimit. + * + * The global ratelimit also can have a max 4xx & 5xx error count (i.e if you make 500 requests which result in a 4xx or 5xx error, you will be hard ratelimited). + * + * The ratelimit module does have two modes besides global & bucket which is manual and automatic. Manual ratelimiting makes it where the person working on an API route will need to call some methods. i.e .consume and .check etc. when you run .check it returns a boolean if you can continue, and .consume returns a boolean if you can continue (and sets the headers and such) + * + * Automatic ratelimiting is simple, when the request is ran it checks if the user is ratelimited, it also sets the headers automatically and consumes stuff when needed. + * + * Ratelimiting as a whole is via the leaky bucket algorithm. With a few twists. We have a bucket interval which is when the bucket resets. + * When you make a request it takes a token from the bucket, if there are no tokens left it will return a 429 error. BUT we also keep track on how often the user is hitting the ratelimit. If for example they hit the ratelimit 20 times in a span of 1 hour, we may lower their max tokens permanently for the rest of the day, hour etc etc. + * This basically allows for a more dynamic ratelimiting system. + * + * Everything is stored in redis. + */ +class RateLimit { + private app: API; + + public options: RateLimitOptions; + + public constructor(app: API, options: RateLimitOptions) { + this.app = app; + + this.options = { + global: options.global ?? false, + bucket: options.bucket, + interval: options.interval, + bucketInterval: options.bucketInterval ?? 7 * 24 * 60 * 60 * 1000, // 7 days + dynamic: options.dynamic ?? false, + maxTokens: options.maxTokens, + max4xx: options.max4xx ?? null, + max5xx: options.max5xx ?? null, + mode: options.mode ?? "automatic", + reductionStart: options.reductionStart ?? 15, + reductionRate: options.reductionRate ?? 0.1, + consumeOnSuccess: options.consumeOnSuccess ?? false, + }; + } + + private get hash() { + const now = Date.now(); + const intervalsSinceEpoch = Math.floor( + (now - Number(this.app.constants.snowflake.Epoch)) / this.options.bucketInterval!, + ); + + return Buffer.from(Bun.SHA256.hash(Buffer.from(`${this.options.bucket}-${intervalsSinceEpoch}`)).buffer).toString( + "hex", + ); + } + + /** + * Consume a very yummy token + */ + public async consume(options: RateLimitConsumeOptions): Promise { + const foundUser = await this.app.cache.get(`ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`); + + if (!foundUser) { + await this.app.cache.set(`ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`, { + bucket: this.options.bucket, + lastRatelimit: Date.now(), + tokens: this.options.maxTokens, + nextReset: Date.now() + this.options.interval, + errors4xx: + options.request.set.status && (options.request.set.status as number) >= 400 && (options.request.set.status as number) < 500 ? 1 : 0, + errors5xx: + options.request.set.status && (options.request.set.status as number) >= 500 && (options.request.set.status as number) < 600 ? 1 : 0, + initialRateLimited: 0, + rateLimited: 0, + }); + + return { + canContinue: true, + headers: { + remaining: this.options.maxTokens, + reset: Date.now() + this.options.interval, + limit: this.options.maxTokens, + bucket: this.hash, + }, + }; + } + + const now = Date.now(); + + if (foundUser.nextReset < now) { + foundUser.tokens = this.options.maxTokens; + foundUser.nextReset = now + this.options.interval; + + if (this.options.reductionStart && foundUser.rateLimited >= this.options.reductionStart) { + const reductionFactor = Math.max( + 0.5, + 1 - (this.options.reductionRate! * Math.floor((foundUser.rateLimited - this.options.reductionStart) / 5)), + ); + + foundUser.tokens = Math.floor(foundUser.tokens * reductionFactor); + } + } + + if (now - foundUser.initialRateLimited >= 24 * 60 * 60 * 1000) { + // ? been 24 hours since the initial ratelimit + foundUser.initialRateLimited = 0; + } + + if (foundUser.tokens === 0) { + foundUser.lastRatelimit = now; + + await this.app.cache.set(`ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`, foundUser); + + return { + canContinue: false, + headers: { + remaining: 0, + reset: foundUser.nextReset, + limit: this.options.maxTokens, + bucket: this.hash, + }, + }; + } + + foundUser.tokens -= 1; + + if (foundUser.tokens === 0) { + foundUser.rateLimited += 1; + + foundUser.initialRateLimited = foundUser.initialRateLimited || now; + } + + if (options.request.set.status && (options.request.set.status as number) >= 400 && (options.request.set.status as number) < 500) { + foundUser.errors4xx += 1; + } + + if (options.request.set.status && (options.request.set.status as number) >= 500 && (options.request.set.status as number) < 600) { + foundUser.errors5xx += 1; + } + + if ( + (this.options.max4xx && foundUser.errors4xx >= this.options.max4xx) || + (this.options.max5xx && foundUser.errors5xx >= this.options.max5xx) + ) { + foundUser.tokens = 0; + foundUser.nextReset = now + this.options.interval; + } + + await this.app.cache.set(`ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`, foundUser); + + return { + canContinue: true, + headers: { + remaining: foundUser.tokens, + reset: foundUser.nextReset, + limit: this.options.maxTokens, + bucket: this.hash, + }, + }; + } + + /** + * Check if a user is ratelimited or not + */ + public async check(options: RateLimitConsumeOptions): Promise { + const foundUser = await this.app.cache.get(`ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`); + + if (!foundUser) { + return { + canContinue: true, + headers: { + remaining: this.options.maxTokens, + reset: Date.now() + this.options.interval, + limit: this.options.maxTokens, + bucket: this.hash, + }, + }; + } + + const now = Date.now(); + + if (foundUser.nextReset < now) { + foundUser.tokens = this.options.maxTokens; + foundUser.nextReset = now + this.options.interval; + } + + if (foundUser.tokens === 0) { + return { + canContinue: false, + headers: { + remaining: 0, + reset: foundUser.nextReset, + limit: this.options.maxTokens, + bucket: this.hash, + }, + }; + } + + await this.app.cache.set(`ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`, foundUser); + + return { + canContinue: true, + headers: { + remaining: foundUser.tokens, + reset: foundUser.nextReset, + limit: this.options.maxTokens, + bucket: this.hash, + } + }; + } +} + +export default RateLimit; diff --git a/src/Utils/Classes/Ratelimiting.ts b/src/Utils/Classes/Ratelimiting.ts deleted file mode 100644 index f50720aa..00000000 --- a/src/Utils/Classes/Ratelimiting.ts +++ /dev/null @@ -1,3 +0,0 @@ -class Ratelimiting {} - -export default Ratelimiting; diff --git a/src/Utils/Classes/Routing/Route.ts b/src/Utils/Classes/Routing/Route.ts index 8571f049..58b07b89 100644 --- a/src/Utils/Classes/Routing/Route.ts +++ b/src/Utils/Classes/Routing/Route.ts @@ -27,7 +27,7 @@ type ContentTypes = | "video/quicktime" | "video/webm"; -type CreateMiddleware | string = Record> = ExtraOptions; +type CreateMiddleware | string = Record> = ExtraOptions | undefined; interface CreateRouteOptions< Route extends string, diff --git a/src/Utils/Classes/Shared/RabbitMQ.ts b/src/Utils/Classes/Shared/RabbitMQ.ts index 1cb0efaf..0a5f4ba1 100644 --- a/src/Utils/Classes/Shared/RabbitMQ.ts +++ b/src/Utils/Classes/Shared/RabbitMQ.ts @@ -2,6 +2,8 @@ import { Buffer } from "node:buffer"; import { TextEncoder, TextDecoder } from "node:util"; import amqplib from "amqplib"; import type { MySchema } from "@/Types/JsonSchemaType.ts"; +import type { StringLike } from "@/Types/index.ts"; +import App from "@/Utils/Classes/App.ts"; // ! Whats the point in this class? // ? Instead of the API directly sending data via the WebSocket, it will send it to the RabbitMQ server which will then send it to all the WebSockets to THEN send it to the client. @@ -31,15 +33,25 @@ type GetChannelTypes = { }[keyof T]; interface opts { + type: "data" | StringLike; data: unknown; - topic: string; - type: string; - workerId: number; } type func = (opt: opts) => void; type events = "data"; +interface Config { + exchange: string; + type: "direct" | "topic" | "headers" | "fanout" | "match" | StringLike; + /** + * If not provided defaults to {@link Config.exchange exchange} + */ + source?: string; + emitType: "data" | StringLike; + durable?: boolean; + exclusive?: boolean; +} + class RabbitMQ { public rabbit!: amqplib.Connection; @@ -74,25 +86,54 @@ class RabbitMQ { for (const [topic, types] of Object.entries(channels)) { for (const type of types) { - await this.channel.assertExchange(`${topic}.${type}`, "fanout", { durable: false }); + await this.startListening({ + exchange: `${topic}.${type}`, + type: "fanout", + emitType: "data", + durable: false, + exclusive: true, + }); + } + } - const { queue } = await this.channel.assertQueue("", { exclusive: true }); + await this.startListening({ + emitType: "minio", + exchange: "miniofiles", + type: "direct", + durable: true, + exclusive: false, + source: "miniofiles", + }); + } - await this.channel.bindQueue(queue, `${topic}.${type}`, ""); + public async startListening(config: Config) { + await this.channel.assertExchange( + config.exchange, + config.type, + config.durable !== undefined ? { durable: config.durable } : {}, + ); + + const { queue } = await this.channel.assertQueue( + "", + config.exclusive !== undefined ? { exclusive: config.exclusive } : {}, + ); - await this.channel.consume(queue, (msg) => { - if (msg) { - const parsed = this.decompress(msg.content); + await this.channel.bindQueue(queue, config.exchange ?? config.source, ""); - this.emit("data", parsed); + await this.channel.consume(queue, (msg) => { + if (msg) { + const parsed = this.decompress(msg.content); - this.channel.ack(msg); - } else { - postMessage({ type: "newLog", message: [`RabbitMQ Message was null for ${topic}.${type}`] }); - } + this.emit("data", { + type: config.emitType, + data: parsed, }); + + this.channel.ack(msg); + } else { + App.logger.error("No message found in RabbitMQ queue."); } - } + }); } public send(topic: GetChannelTypes, data: unknown, raw = false) { @@ -127,7 +168,11 @@ class RabbitMQ { return JSON.parse(uint8ArrayToString); } catch { - return data.toString(); + try { + return JSON.parse(data.toString()); + } catch { + return data.toString(); + } } } diff --git a/src/Utils/Cql b/src/Utils/Cql index 97fc1802..82be9404 160000 --- a/src/Utils/Cql +++ b/src/Utils/Cql @@ -1 +1 @@ -Subproject commit 97fc180220d300bd444e55b857ac056d0fc4cfa9 +Subproject commit 82be94045728a18aeb90844351bd63b42062f2b4 diff --git a/src/Utils/EmbedChecker.ts b/src/Utils/EmbedChecker.ts index ff71bb29..e1b00f9b 100644 --- a/src/Utils/EmbedChecker.ts +++ b/src/Utils/EmbedChecker.ts @@ -1,6 +1,5 @@ import type { Embed } from "@/Types/Embed.ts"; - -type StringAlike = string & {}; +import type { StringLike } from "@/Types/index.ts"; type DeepRequired = T extends object ? { @@ -13,7 +12,7 @@ type PossibleTypes = "string" | "number" | "boolean" | "enum" | "array"; interface EmbedRules { type: PossibleTypes; required: boolean; - values?: (StringAlike | PossibleTypes | ExtraValues)[]; + values?: (StringLike | PossibleTypes | ExtraValues)[]; nullable: boolean; maxLength?: number; minLength?: number; diff --git a/src/Utils/S3Events/delete.ts b/src/Utils/S3Events/delete.ts new file mode 100644 index 00000000..498c716d --- /dev/null +++ b/src/Utils/S3Events/delete.ts @@ -0,0 +1,114 @@ +import type App from "@/Utils/Classes/App.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import { filesTable } from "@/Utils/Cql/Tables/FileTable.ts"; + +export interface DeleteType { + EventName: "s3:ObjectRemoved:Delete"; + Key: string; + Records: Record[]; +} + +export interface Record { + eventVersion: string; + eventSource: string; + awsRegion: string; + eventTime: string; + eventName: string; + userIdentity: UserIdentity; + requestParameters: RequestParameters; + responseElements: ResponseElements; + s3: S3; + source: Source; +} + +export interface UserIdentity { + principalId: string; +} + +export interface RequestParameters { + principalId: string; + region: string; + sourceIPAddress: string; +} + +export interface ResponseElements { + "content-length": string; + "x-amz-id-2": string; + "x-amz-request-id": string; + "x-minio-deployment-id": string; + "x-minio-origin-endpoint": string; +} + +export interface S3 { + s3SchemaVersion: string; + configurationId: string; + bucket: Bucket; + object: Object; +} + +export interface Bucket { + name: string; + ownerIdentity: OwnerIdentity; + arn: string; +} + +export interface OwnerIdentity { + principalId: string; +} + +export interface Object { + key: string; + sequencer: string; +} + +export interface Source { + host: string; + port: string; + userAgent: string; +} + +const deletee = async (event: DeleteType, app: App) => { + app.logger.debug("DELETE S3 EVENT"); + + const [bucket, channelId, id, fileName] = event.Key.split("/"); + + if (!bucket || !channelId || !id || !fileName) { + app.logger.debug("Invalid S3 event key", event.Key); + + return; + } + + const foundFile = await filesTable.get( + { + fileId: Encryption.encrypt(id!), + }, + { + fields: ["fileId", "deleted", "uploaded"], + }, + ); + + if (!foundFile) { + app.logger.debug("File not found in db", id); + + return; + } + + if (foundFile.deleted) { + app.logger.debug("File is already deleted"); + + return; + } + + await filesTable.update( + { + fileId: Encryption.encrypt(id!), + }, + { + deleted: true, + }, + ); + + app.logger.debug("File deleted", id); +}; + +export default deletee; diff --git a/src/Utils/S3Events/put.ts b/src/Utils/S3Events/put.ts new file mode 100644 index 00000000..65bba8c0 --- /dev/null +++ b/src/Utils/S3Events/put.ts @@ -0,0 +1,155 @@ +import type App from "@/Utils/Classes/App.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import { filesTable } from "@/Utils/Cql/Tables/FileTable.ts"; +import safePromise from "@/Utils/safePromise.ts"; +import { request } from "undici"; + +export interface PutType { + EventName: "s3:ObjectCreated:Put"; + Key: string; + Records: Record[]; +} + +export interface Record { + eventVersion: string; + eventSource: string; + awsRegion: string; + eventTime: string; + eventName: string; + userIdentity: UserIdentity; + requestParameters: RequestParameters; + responseElements: ResponseElements; + s3: S3; + source: Source; +} + +export interface UserIdentity { + principalId: string; +} + +export interface RequestParameters { + principalId: string; + region: string; + sourceIPAddress: string; +} + +export interface ResponseElements { + "x-amz-id-2": string; + "x-amz-request-id": string; + "x-minio-deployment-id": string; + "x-minio-origin-endpoint": string; +} + +export interface S3 { + s3SchemaVersion: string; + configurationId: string; + bucket: Bucket; + object: Object; +} + +export interface Bucket { + name: string; + ownerIdentity: OwnerIdentity; + arn: string; +} + +export interface OwnerIdentity { + principalId: string; +} + +export interface Object { + key: string; + size: number; + eTag: string; + contentType: string; + userMetadata: UserMetadata; + sequencer: string; +} + +export interface UserMetadata { + "content-type": string; + "x-amz-meta-file-id": string; + "x-amz-meta-uploaded-by": string; +} + +export interface Source { + host: string; + port: string; + userAgent: string; +} + +const put = async (event: PutType, app: App): Promise => { + app.logger.debug("PUT S3 EVENT"); + + const [bucket, channelId, id, fileName] = event.Key.split("/"); + + if (!bucket || !channelId || !id || !fileName) { + app.logger.debug("Invalid S3 event key", event.Key); + + return; + } + + const initialRecord = event.Records[0]; + + let thumbhash: string | null = null; + + if ( + initialRecord?.s3.object.contentType.startsWith("image") && + !initialRecord?.s3.object.contentType.endsWith("gif") + ) { + const builtUrl = encodeURIComponent( + `${app.config.server.cdnServer}/${bucket}/${channelId}/${id}/${fileName}`.replace(/(https?):\/\//g, "$1:/"), + ); + + const url = new URL(app.config.server.mediaServer!); + + url.pathname = `thumbhash/${builtUrl}`; + + const [response, responseError] = await safePromise( + request(url.toString(), { + method: "GET", + }), + ); + + if (response && !responseError) { + const body = (await response.body.json()) as { thumbhash: string }; + + thumbhash = body.thumbhash; + } + } + + const foundFile = await filesTable.get( + { + fileId: Encryption.encrypt(id!), + }, + { + fields: ["fileId", "deleted", "uploaded"], + }, + ); + + if (!foundFile) { + app.logger.debug("File not found in db", id); + + return; + } + + if (foundFile.deleted || foundFile.uploaded) { + app.logger.debug("File is deleted or already uploaded"); + + return; + } + + await filesTable.update( + { + fileId: Encryption.encrypt(id!), + }, + { + uploaded: true, + thumbHash: thumbhash, + }, + ); + + app.logger.info("Uploaded file", fileName, id, Encryption.encrypt(id!)); +}; + +export default put; diff --git a/src/Utils/Versioning/v1/FixChannelPositions.ts b/src/Utils/Versioning/v1/FixChannelPositions.ts index 197e0524..ef5d3260 100644 --- a/src/Utils/Versioning/v1/FixChannelPositions.ts +++ b/src/Utils/Versioning/v1/FixChannelPositions.ts @@ -1,13 +1,51 @@ import type { ChannelTable } from "@/Utils/Cql/Tables/ChannelTable.ts"; export const fixChannelPositionsWithoutNewChannel = (channels: ChannelTable[]): ChannelTable[] => { - const parentlessChannels = channels.filter((channel) => !channel.parentId).sort((a, b) => a.position - b.position); - const parentChannels = channels.filter((channel) => channel.parentId).sort((a, b) => a.position - b.position); + // ? We bubble up the non-child channels to the top + const nonCategories = channels + .filter((channel) => channel.parentId === null && channel.type !== 1) + .sort((a, b) => a.position - b.position) + .map((channel, index) => { + channel.position = index; + return channel; + }); - return parentlessChannels.flatMap((channel) => { - const children = parentChannels.filter((child) => child.parentId === channel.channelId); - return children.length ? [channel, ...children] : channel; - }); + const parents = channels + .filter((channel) => channel.parentId === null && channel.type === 1) + .sort((a, b) => a.position - b.position); + + // ? we want to turn parents into an object where the key is the parent channel id and the value is an array of children, just for easier sorting (maybe theres a better way? idk) + const parentMap = parents.reduce( + (acc, parent) => { + acc[parent.channelId] = channels + .filter((channel) => channel.parentId === parent.channelId) + .sort((a, b) => a.position - b.position) + .map((channel, index) => { + channel.position = index; + return channel; + }); + return acc; + }, + {} as Record, + ); + + const fixed = [...nonCategories]; + + for (const [parentId, children] of Object.entries(parentMap)) { + const foundParent = parents.find((parent) => parent.channelId === parentId); + + if (!foundParent) { + continue; + } + + fixed.push(foundParent); + + for (const child of children) { + fixed.push(child); + } + } + + return fixed; }; export const fixChannelPositions = (channel: ChannelTable, existingChannels: ChannelTable[]): ChannelTable[] => { diff --git a/src/Utils/Versioning/v1/PermissionCheck.ts b/src/Utils/Versioning/v1/PermissionCheck.ts index f12edadd..13329c5a 100644 --- a/src/Utils/Versioning/v1/PermissionCheck.ts +++ b/src/Utils/Versioning/v1/PermissionCheck.ts @@ -1,3 +1,4 @@ +import Constants from "@/Constants.ts"; import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import type { PermissionKey } from "@/Utils/Classes/BitFields/Permissions.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; @@ -134,6 +135,67 @@ class PermissionHandler { return allow && !deny; } + + /** + * This basically gets all the permissions a user has in the guild, useful for a few endpoints (mainly for the oauth2 endpoint) + */ + public get topMostPermissions(): [string, string][] { + const finishedPermissions = new Permissions([]); + + if (this.hasAnyRole(["Administrator"], true, true)) { + finishedPermissions.add(["Administrator"]); + + return finishedPermissions.normizedBits; + } + + for (const key of PermissionHandler.permissionKeys) { + if (this.hasAnyRole([key], true, true)) { + finishedPermissions.add([key]); + } + } + + return finishedPermissions.normizedBits; + } + + /** + * This takes in an array of permissions and checks to make sure you have permission to all of them. This is used for adding bots + * @param permissions The permissions you want to check + */ + public deepRoleCheck(permissions: [string, string][]): boolean { + if (this.hasAnyRole(["Administrator"], true, true)) { + return true; + } + + const finishedPermissions = new Permissions(permissions).toJSON(); + + const subValues = Object.values(finishedPermissions) + .map((sub) => + Object.entries(sub) + .filter(([, value]) => value) + .map(([key]) => key), + ) + .reduce((a, b) => a.concat(b), []) as PermissionKey[]; + + for (const value of subValues) { + if (!this.hasAnyRole([value], true, true)) { + return false; + } + } + + return true; + } + + public static get permissionKeys() { + const keys: PermissionKey[] = []; + + for (const permission of Object.keys(Constants.permissions)) { + const sub = Constants.permissions[permission as keyof typeof Constants.permissions].subPermissions; + + keys.push(...(Object.keys(sub) as PermissionKey[])); + } + + return keys; + } } export default PermissionHandler; diff --git a/src/Utils/bigint.ts b/src/Utils/bigint.ts new file mode 100644 index 00000000..070877e5 --- /dev/null +++ b/src/Utils/bigint.ts @@ -0,0 +1,22 @@ +/** + * Convert a bigint to a buffer + * @param bigint The bigint to convert to a buffer + * @returns The buffer + */ +const bigintToBuffer = (bigint: bigint): Buffer => { + const hexString = bigint.toString(16); + const evenHexString = hexString.length % 2 === 0 ? hexString : "0" + hexString; + return Buffer.from(evenHexString, "hex"); +}; + +/** + * Convert a buffer back into a bigint + * @param buffer The buffer to convert back to a bigint + * @returns The bigint + */ +const bufferToBigint = (buffer: Buffer): bigint => { + const hexString = buffer.toString("hex"); + return BigInt(`0x${hexString}`); +}; + +export { bigintToBuffer, bufferToBigint }; diff --git a/src/Utils/safeBigInt.ts b/src/Utils/safeBigInt.ts new file mode 100644 index 00000000..c92a333a --- /dev/null +++ b/src/Utils/safeBigInt.ts @@ -0,0 +1,14 @@ +/** + * Safely converts a value to a BigInt + * @param value The value to convert to a BigInt + * @returns The BigInt value, or null if it failed to convert + */ +const safeBigInt = (value: string | number | bigint): bigint | null => { + try { + return BigInt(value); + } catch { + return null; + } +} + +export default safeBigInt; diff --git a/src/Utils/safeParse.ts b/src/Utils/safeParse.ts new file mode 100644 index 00000000..fa55098b --- /dev/null +++ b/src/Utils/safeParse.ts @@ -0,0 +1,14 @@ +/** + * Safely parse JSON data without throwing an error + * @param data The data to parse + * @returns The parsed data, or null if it failed to parse + */ +const safeParse = (data: unknown): T | null => { + try { + return JSON.parse(data as string); + } catch { + return null; + } +}; + +export default safeParse; diff --git a/src/configs/example.json b/src/configs/example.json index e832d476..fdd79859 100644 --- a/src/configs/example.json +++ b/src/configs/example.json @@ -1,6 +1,5 @@ { "$schema": "../Types/config.template.json", - "$comment": "Stuff like database logins will not be hot-reloadable. You will need to restart the server for them to take effect. Though stuff like \"features\" will be hot-reloadable.", "encryption": { "algorithm": "", "initVector": "", @@ -8,17 +7,17 @@ "tokenKey": "" }, "redis": { - "db": 1, - "port": 0, - "host": "", + "db": 6, + "port": 6379, + "host": "localhost", "username": "", "password": "" }, "scyllaDB": { - "keyspace": "", + "keyspace": "kastel", "username": "", "password": "", - "nodes": [], + "nodes": ["localhost"], "durableWrites": true, "networkTopologyStrategy": {} }, @@ -27,49 +26,78 @@ "bucketRnd": 0, "cache": { "clearInterval": 0, - "clearOnStart": true + "clearOnStart": false }, "captchaEnabled": false, "cloudflareAccessOnly": false, - "domain": "", - "features": ["DisableRegistration"], + "domain": "localhost:3000", + "features": [], "localIps": [], "port": "62250", "secure": true, "sentry": { "dsn": "", "enabled": true, - "tracesSampleRate": 0.1 + "tracesSampleRate": 1 }, "strictRouting": true, "turnstileSecret": "", - "workerId": 0 + "workerId": 0, + "phishing": { + "action": "block", + "domainsPath": "${configDirectory}/tiny.domains.json", + "enabled": true + }, + "scraper": { + "enabled": true, + "url": "http://localhost:5959", + "authHeader": "" + }, + "mediaServer": "http://localhost:3030", + "cdnServer": "http://localhost:9000" }, - "ws": { - "maxConnections": "10000", - "port": "62240", - "maxConnectionsPerMinute": "5", - "maxConnectionsPerIp": "10000", - "intervals": { - "closeTimeout": { - "interval": "1000", - "leeway": "15000" - }, - "heartbeat": { - "interval": "1000", - "leeway": "5000" + "rabbitMQ": { + "host": "localhost", + "password": "", + "port": 5672, + "username": "", + "vhost": "/" + }, + "mailServer": { + "enabled": true, + "users": [ + { + "host": "localhost", + "port": 1025, + "secure": false, + "shortCode": "Support", + "username": "", + "password": "" }, - "unAuthedTimeout": { - "interval": "1000", - "leeway": "25000" + { + "host": "localhost", + "port": 1025, + "secure": false, + "shortCode": "NoReply", + "username": "", + "password": "" } - } + ] }, - "rabbitMQ": { - "host": "", - "port": 0, - "username": "", - "password": "", - "vhost": "" + "s3": { + "buckets": { + "avatars": "avatars", + "banners": "banners", + "files": "files", + "guildAvatars": "guild-avatar", + "guildBanners": "guild-banners", + "guildIcons": "guild-icons", + "guildEmojis": "guild-emojis" + }, + "accessKey": "", + "secretKey": "", + "endPoint": "", + "port": 9000, + "useSSL": false } } diff --git a/src/rust/domain_checker/src/lib.rs b/src/rust/domain_checker/src/lib.rs index ef5da830..e90b027a 100644 --- a/src/rust/domain_checker/src/lib.rs +++ b/src/rust/domain_checker/src/lib.rs @@ -24,7 +24,6 @@ fn load_domains(file_path: &str) -> Result, std::io::Error> { pub extern "C" fn init_domains(file_path: *const c_char) -> bool { unsafe { let c_str = CStr::from_ptr(file_path); - println!("Initializing domains {}", c_str.to_string_lossy()); let path_str = match c_str.to_str() { Ok(v) => v, Err(_) => { diff --git a/src/tableMigration.ts b/src/tableMigration.ts index 8b52488e..ade44f1c 100644 --- a/src/tableMigration.ts +++ b/src/tableMigration.ts @@ -1,6 +1,6 @@ import App from "./Utils/Classes/App.ts"; -new App("MIG"); +new App("womp"); import Client from "./Utils/Classes/DB/Client.ts"; @@ -24,6 +24,8 @@ await Client.getInstance().connect({ }, }); -console.log("Done", tables); +if (tables) { + console.log("Done!") +} process.exit(); From b7c008c2ca8a4d3b798afc0dd568a5387360b4e9 Mon Sep 17 00:00:00 2001 From: Darker-Ink Date: Tue, 10 Sep 2024 15:54:38 -0500 Subject: [PATCH 2/7] chore: formatting --- src/Emails/RecentLogin.tsx | 236 ++++++++-------- src/Emails/Registration.tsx | 20 +- src/ExampleRateLimit.ts | 25 +- src/Middleware/RateLimit.ts | 124 +++++---- src/Routes/auth/forgot.ts | 2 +- src/Routes/auth/login.ts | 4 +- src/Routes/auth/register.ts | 6 +- src/Routes/oauth2/authorize.ts | 142 +++++----- src/Routes/oauth2/token/index.ts | 193 +++++++------ src/Routes/oauth2/token/revoke.ts | 10 +- .../applications/[applicationId]/bot/index.ts | 262 +++++++++--------- .../v1/applications/[applicationId]/reset.ts | 61 ++-- .../v1/channels/[channelId]/attachments.ts | 16 +- .../members/[memberId]/roles/[roleId].ts | 10 +- src/Routes/v1/guilds/[guildId]/roles/index.ts | 25 +- src/Routes/v1/guilds/index.ts | 11 +- src/Routes/v1/invites/[inviteCode].ts | 24 +- src/Routes/v1/users/@me/index.ts | 2 +- src/Routes/v1/users/@me/sessions.ts | 45 +-- src/Routes/v1/users/@me/verify.ts | 62 ++--- src/Utils/Classes/API.ts | 20 +- src/Utils/Classes/BitFields/Flags.ts | 2 +- src/Utils/Classes/BitFields/Permissions.ts | 28 +- src/Utils/Classes/DB/Client.ts | 43 +-- src/Utils/Classes/DB/Table.ts | 2 +- src/Utils/Classes/DB/createTableTypes.ts | 2 +- src/Utils/Classes/Encryption.ts | 12 +- src/Utils/Classes/ErrorGen.ts | 14 +- src/Utils/Classes/Logger.ts | 2 +- src/Utils/Classes/RateLimit.ts | 156 ++++++----- src/Utils/Classes/Routing/Route.ts | 4 +- src/Utils/safeBigInt.ts | 12 +- src/tableMigration.ts | 2 +- 33 files changed, 819 insertions(+), 760 deletions(-) diff --git a/src/Emails/RecentLogin.tsx b/src/Emails/RecentLogin.tsx index 1a0f6908..fbf8a37c 100644 --- a/src/Emails/RecentLogin.tsx +++ b/src/Emails/RecentLogin.tsx @@ -1,128 +1,118 @@ // ? Note: This is when theres a new login with an IP that has not been used before, or has not been used in a while -import { - Body, - Container, - Head, - Heading, - Hr, - Html, - Img, - Preview, - Text, -} from "@react-email/components"; +import { Body, Container, Head, Heading, Hr, Html, Img, Preview, Text } from "@react-email/components"; interface RecursiveTypes { - [key: string]: RecursiveTypes | React.CSSProperties; + [key: string]: RecursiveTypes | React.CSSProperties; } const styles = { - main: { - backgroundColor: "#161922", - fontFamily: "sans-serif", - }, - container: { - backgroundColor: "#101319", - color: "#CFDBFF", - padding: "20px 20px 20px", - margin: "0 auto", - }, - logo: { - icon: { - width: "50px", - height: "50px", - borderRadius: "50%", - }, - text: { - fontSize: "2rem", - fontWeight: "bold", - marginLeft: "1rem", - }, - container: { - display: "flex", - alignItems: "center", - }, - }, - header: { - fontSize: "1.2rem", - lineHeight: "1.5rem", - }, - paragraph: { - fontSize: "1rem", - lineHeight: "1.5rem", - }, - locationContainer: { - width: "auto", - margin: "12px" - }, - btnContainer: { - margin: "27px auto", - width: "auto", - marginBottom: "0px" - }, - btn: { - textAlign: "center" as const, - margin: "0 auto", - backgroundColor: "#9AA9E0", - color: "#161922", - padding: "1rem", - borderRadius: "1rem", - textDecoration: "none", - fontWeight: "bold", - fontSize: ".8rem", - }, - btnText: { - textAlign: "center", - fontSize: "0.8rem", - color: "#CFDBFF", - }, - hr: { - borderColor: "#262F40", - margin: "15px 0", - }, - footer: { - fontSize: ".7rem", - textAlign: "center", - }, + main: { + backgroundColor: "#161922", + fontFamily: "sans-serif", + }, + container: { + backgroundColor: "#101319", + color: "#CFDBFF", + padding: "20px 20px 20px", + margin: "0 auto", + }, + logo: { + icon: { + width: "50px", + height: "50px", + borderRadius: "50%", + }, + text: { + fontSize: "2rem", + fontWeight: "bold", + marginLeft: "1rem", + }, + container: { + display: "flex", + alignItems: "center", + }, + }, + header: { + fontSize: "1.2rem", + lineHeight: "1.5rem", + }, + paragraph: { + fontSize: "1rem", + lineHeight: "1.5rem", + }, + locationContainer: { + width: "auto", + margin: "12px", + }, + btnContainer: { + margin: "27px auto", + width: "auto", + marginBottom: "0px", + }, + btn: { + textAlign: "center" as const, + margin: "0 auto", + backgroundColor: "#9AA9E0", + color: "#161922", + padding: "1rem", + borderRadius: "1rem", + textDecoration: "none", + fontWeight: "bold", + fontSize: ".8rem", + }, + btnText: { + textAlign: "center", + fontSize: "0.8rem", + color: "#CFDBFF", + }, + hr: { + borderColor: "#262F40", + margin: "15px 0", + }, + footer: { + fontSize: ".7rem", + textAlign: "center", + }, } satisfies RecursiveTypes; const recentLogin = (username: string, formattedDate: string, device: string, platform: string, ip: string) => { - return ( - - - Someone logged into your account from a new location - - -
    - Kastel Logo - Kastel -
    - Hey {username}, - - We've detected a login to your account from a new location. If this was you, feel free to disregard this message. - Below you can find the details of the login: - -
    -
    - - Time: - {formattedDate} - - - Device: - {/* i.e macbook, windows, mobile etc */} - {device} - - - Platform: - {/* what platform they logged in by, i.e the web, desktop app, mobile app etc */} - {platform} - - - IP: - {ip} - - {/* + + Someone logged into your account from a new location + + +
    + Kastel Logo + Kastel +
    + Hey {username}, + + We've detected a login to your account from a new location. If this was you, feel free to disregard this + message. Below you can find the details of the login: + +
    +
    + + Time: + {formattedDate} + + + Device: + {/* i.e macbook, windows, mobile etc */} + {device} + + + Platform: + {/* what platform they logged in by, i.e the web, desktop app, mobile app etc */} + {platform} + + + IP: + {ip} + + {/* *Approximate geographic location based on IP address: test */} -
    - {/*
    +
    + {/*
    */} - - If this was not you please reset your password immediately. - -
    - - - ); + If this was not you please reset your password immediately. + + + + ); }; export default recentLogin; diff --git a/src/Emails/Registration.tsx b/src/Emails/Registration.tsx index 753e4d75..f97efca0 100644 --- a/src/Emails/Registration.tsx +++ b/src/Emails/Registration.tsx @@ -1,18 +1,6 @@ // ? Note: This is for when you have registered an account, it welcomes you and has a link to verify your email -import { - Body, - Button, - Container, - Head, - Heading, - Hr, - Html, - Img, - Preview, - Section, - Text, -} from "@react-email/components"; +import { Body, Button, Container, Head, Heading, Hr, Html, Img, Preview, Section, Text } from "@react-email/components"; const styles = { main: { @@ -52,7 +40,7 @@ const styles = { btnContainer: { margin: "27px auto", width: "auto", - marginBottom: "0px" + marginBottom: "0px", }, btn: { textAlign: "center" as const, @@ -106,9 +94,7 @@ const registration = (username: string, verifyUrl: string) => { Verify Email - - If you did not sign up for kastel, please ignore this email!{" "} - + If you did not sign up for kastel, please ignore this email! diff --git a/src/ExampleRateLimit.ts b/src/ExampleRateLimit.ts index 96295af2..7f5947fa 100644 --- a/src/ExampleRateLimit.ts +++ b/src/ExampleRateLimit.ts @@ -4,13 +4,13 @@ export default { global: { bucket: "global", interval: 1 * 60 * 1000, // 1 minute - maxTokens: 100, + maxTokens: 100, dynamic: true, global: true, max4xx: 1000, max5xx: 1000, reductionStart: 8, - reductionRate: 0.2 + reductionRate: 0.2, }, home: { get: { @@ -18,8 +18,8 @@ export default { interval: 1 * 60 * 1000, // 1 minute maxTokens: 20, dynamic: false, - mode: "automatic" - } + mode: "automatic", + }, }, auth: { register: { @@ -27,17 +27,18 @@ export default { interval: 24 * 60 * 60 * 1000, // 1 day maxTokens: 25, mode: "manual", - }, login: { bucket: "auth-login", interval: 6 * 60 * 60 * 1000, // 6 hours maxTokens: 25, - consumeOnSuccess: true - } - } + consumeOnSuccess: true, + }, + }, } satisfies { - [key: string]: RateLimitOptions | { - [key: string]: RateLimitOptions - } -} + [key: string]: + | RateLimitOptions + | { + [key: string]: RateLimitOptions; + }; +}; diff --git a/src/Middleware/RateLimit.ts b/src/Middleware/RateLimit.ts index 4cdf9df0..c60c86ee 100644 --- a/src/Middleware/RateLimit.ts +++ b/src/Middleware/RateLimit.ts @@ -5,78 +5,80 @@ import RateLimit from "@/Utils/Classes/RateLimit.ts"; import type { CreateMiddleware, CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; export interface RateLimitMiddlewareOptions { - ratelimit: RateLimit; - setHeaders: (headers: RateLimitHeaders) => void; + ratelimit: RateLimit; + setHeaders: (headers: RateLimitHeaders) => void; } /** * NOTE: MAKE SURE THIS IS UNDER USER MIDDLEWARE, otherwise automatic mode will use the user's ip instead of the user's id */ const ratelimitMiddleware = (ratelimitOptions: RateLimitOptions) => { - return async ({ + return async ({ headers, set, app, - user, - ip, - request - }: CreateRoute]>): Promise | string> | RateLimitMiddlewareOptions> => { - const ratelimit = new RateLimit(app, ratelimitOptions); - - if (ratelimit.options.mode === "manual") { - return { - ratelimit, - setHeaders: (headers: RateLimitHeaders) => { - set.headers = { - "X-RateLimit-Limit": String(headers.limit), - "X-RateLimit-Remaining": String(headers.remaining), - "X-RateLimit-Bucket": headers.bucket, - "X-RateLimit-Global": "true", - "X-RateLimit-Reset-At": String(headers.reset), - } - } - } - } - - const checked = await ratelimit.check({ - identifier: user?.id ?? ip, - request: { - headers, - ip, - request, - set - } - }); - - if (!checked.canContinue) { - const error = errorGen.TooManyRequests(); + user, + ip, + request, + }: CreateRoute]>): Promise< + CreateMiddleware | string> | RateLimitMiddlewareOptions + > => { + const ratelimit = new RateLimit(app, ratelimitOptions); - error.addError({ - ratelimit: { - code: "TooManyRequests", - message: `You are being rate limited, please try again in ${(checked.headers.reset - Date.now()) / 1000} seconds`, - tryAgainAfter: (checked.headers.reset - Date.now()) / 1000, - }, - }); + if (ratelimit.options.mode === "manual") { + return { + ratelimit, + setHeaders: (headers: RateLimitHeaders) => { + set.headers = { + "X-RateLimit-Limit": String(headers.limit), + "X-RateLimit-Remaining": String(headers.remaining), + "X-RateLimit-Bucket": headers.bucket, + "X-RateLimit-Global": "true", + "X-RateLimit-Reset-At": String(headers.reset), + }; + }, + }; + } - set.status = 429; + const checked = await ratelimit.check({ + identifier: user?.id ?? ip, + request: { + headers, + ip, + request, + set, + }, + }); - return error.toJSON(); - } - - return { - ratelimit, - setHeaders: (headers: RateLimitHeaders) => { - set.headers = { - "X-RateLimit-Limit": String(headers.limit), - "X-RateLimit-Remaining": String(headers.remaining), - "X-RateLimit-Bucket": headers.bucket, - "X-RateLimit-Global": "true", - "X-RateLimit-Reset-At": String(headers.reset), - } - } - } - } -} + if (!checked.canContinue) { + const error = errorGen.TooManyRequests(); + + error.addError({ + ratelimit: { + code: "TooManyRequests", + message: `You are being rate limited, please try again in ${(checked.headers.reset - Date.now()) / 1000} seconds`, + tryAgainAfter: (checked.headers.reset - Date.now()) / 1000, + }, + }); + + set.status = 429; + + return error.toJSON(); + } + + return { + ratelimit, + setHeaders: (headers: RateLimitHeaders) => { + set.headers = { + "X-RateLimit-Limit": String(headers.limit), + "X-RateLimit-Remaining": String(headers.remaining), + "X-RateLimit-Bucket": headers.bucket, + "X-RateLimit-Global": "true", + "X-RateLimit-Reset-At": String(headers.reset), + }; + }, + }; + }; +}; export default ratelimitMiddleware; diff --git a/src/Routes/auth/forgot.ts b/src/Routes/auth/forgot.ts index c7cdc83d..68740e0d 100644 --- a/src/Routes/auth/forgot.ts +++ b/src/Routes/auth/forgot.ts @@ -41,7 +41,7 @@ export default class ForgotPassword extends Route { return; } - + const flags = new FlagFields(user.flags ?? "0", "0"); if (flags.has("Bot")) { diff --git a/src/Routes/auth/login.ts b/src/Routes/auth/login.ts index a874999f..f757ca34 100644 --- a/src/Routes/auth/login.ts +++ b/src/Routes/auth/login.ts @@ -50,9 +50,9 @@ export default class Login extends Route { return error.toJSON(); } - + const flags = new FlagFields(fetchedUser.flags ?? "0", fetchedUser.publicFlags ?? "0"); - + if (flags.has("Bot")) { const error = errorGen.InvalidCredentials(); diff --git a/src/Routes/auth/register.ts b/src/Routes/auth/register.ts index 0afb6770..86a15ca7 100644 --- a/src/Routes/auth/register.ts +++ b/src/Routes/auth/register.ts @@ -123,7 +123,7 @@ export default class Register extends Route { userId: Encryption.encryptedSnowflake(), username: Encryption.encrypt(body.username), usernameTag: Encryption.encrypt(`${body.username}#${tag}`), - oauth2: [] + oauth2: [], }; const token = Token.generateToken(Encryption.decrypt(userObject.userId!)); @@ -180,7 +180,7 @@ export default class Register extends Route { ip: Encryption.encrypt(ip), }), ]); - + const renderedEmail = await render( registration( Encryption.decrypt(userObject.username ?? "Unknown User"), @@ -201,7 +201,7 @@ export default class Register extends Route { plainText: true, }, ); - + this.App.sendEmail("NoReply", body.email, "Welcome to Kastel!", renderedEmail, renderedText); return { diff --git a/src/Routes/oauth2/authorize.ts b/src/Routes/oauth2/authorize.ts index 19c92483..9f8ecdf7 100644 --- a/src/Routes/oauth2/authorize.ts +++ b/src/Routes/oauth2/authorize.ts @@ -530,35 +530,35 @@ export default class FetchPatch extends Route { return invalidGuild.toJSON(); } - + const validatedPermissions = this.decodeAndValidatePermissions( query.permissions ?? Buffer.from(JSON.stringify([])).toString("base64"), ); - + const added = await this.addBotToGuild({ guildId: query.guild_id, permissions: validatedPermissions ?? [], clientId: query.client_id, set, userId: user.id, - applicationName: Encryption.decrypt(application.name ?? "") - }) - + applicationName: Encryption.decrypt(application.name ?? ""), + }); + if (!added.success) { - return added.response + return added.response; } } - + if (!query.redirect_uri && splitScopes.includes(Scopes.Bot)) { return { // ? this is for our custom bot shit location: `http${this.App.config.server.secure ? "s" : ""}://${this.App.config.server.domain}/oauth2/authorized`, }; } - + const generatedCode = Encryption.generateCode(); - - const expiresAt = Date.now() + 1000 * 60 + + const expiresAt = Date.now() + 1000 * 60; await this.App.cache.set( `oauth2:${Encryption.encrypt(query.client_id)}:${Encryption.encrypt(generatedCode)}:${expiresAt}`, // ? for easier deletion @@ -567,7 +567,7 @@ export default class FetchPatch extends Route { expiresAt, scopes: splitScopes, userId: Encryption.encrypt(user.id), - redirectUri: Encryption.encrypt(query.redirect_uri!) + redirectUri: Encryption.encrypt(query.redirect_uri!), }, ); @@ -611,21 +611,21 @@ export default class FetchPatch extends Route { return permissionHandler.normizedBits; } - + private async addBotToGuild({ guildId, permissions, set, userId, clientId, - applicationName + applicationName, }: { userId: string; guildId: string; permissions: [string, string][]; clientId: string; set: CreateRoute["set"]; - applicationName: string + applicationName: string; }): Promise<{ success: boolean; response: unknown | null; @@ -641,42 +641,45 @@ export default class FetchPatch extends Route { if (!guild) { set.status = 404; - + const invalidGuild = errorGen.UnknownGuild(); - + invalidGuild.addError({ guildId: { code: "UnknownGuild", message: "The provided guild does not exist", }, }); - + return { success: false, response: invalidGuild.toJSON(), }; } - const guildMember = await guildMembersTable.get({ - guildId: Encryption.encrypt(guildId), - userId: Encryption.encrypt(userId), - left: false, - }, { - fields: ["flags", "roles"] - }); + const guildMember = await guildMembersTable.get( + { + guildId: Encryption.encrypt(guildId), + userId: Encryption.encrypt(userId), + left: false, + }, + { + fields: ["flags", "roles"], + }, + ); if (!guildMember) { set.status = 404; - + const invalidGuild = errorGen.UnknownGuild(); - + invalidGuild.addError({ guildId: { code: "UnknownGuild", message: "The provided guild does not exist", }, }); - + return { success: false, response: invalidGuild.toJSON(), @@ -704,20 +707,20 @@ export default class FetchPatch extends Route { })), [], ); - + if (!permissionCheck.hasAnyRole(["AddBots"])) { set.status = 403; - + const invalidGuild = errorGen.MissingPermissions(); - + invalidGuild.addError({ guildId: { code: "MissingPermissions", - message: "You are missing the \"AddBots\" permission", - requiredPermissions: ["AddBots"] + message: 'You are missing the "AddBots" permission', + requiredPermissions: ["AddBots"], }, }); - + return { success: false, response: invalidGuild.toJSON(), @@ -726,64 +729,64 @@ export default class FetchPatch extends Route { if (!permissionCheck.deepRoleCheck(permissions)) { set.status = 403; - + const invalidGuild = errorGen.MissingPermissions(); - + invalidGuild.addError({ guildId: { code: "MissingPermissions", message: "You are missing some permissions you are trying to grant.", - requiredPermissions: [] + requiredPermissions: [], }, }); - + return { success: false, response: invalidGuild.toJSON(), }; } - + const alreadyInGuild = await botsGuildsTable.get({ guildId: Encryption.encrypt(guildId), - botId: Encryption.encrypt(clientId) + botId: Encryption.encrypt(clientId), }); - + if (alreadyInGuild) { set.status = 400; - + const invalidGuild = errorGen.AlreadyInGuild(); - + invalidGuild.addError({ guildId: { code: "AlreadyInGuild", - message: "The bot is already in the guild" + message: "The bot is already in the guild", }, }); - + return { success: false, response: invalidGuild.toJSON(), }; } - + if (guild.members! >= guild.maxMembers!) { const maxMembers = errorGen.LimitReached(); - + maxMembers.addError({ guild: { code: "MaxMembersReached", message: "The guild has reached its maximum amount of members.", }, }); - + set.status = 403; - + return { success: false, - response: maxMembers.toJSON() - } + response: maxMembers.toJSON(), + }; } - + const newMember: NullifyStuff = { flags: Constants.guildMemberFlags.In, guildId: Encryption.encrypt(guildId), @@ -797,7 +800,7 @@ export default class FetchPatch extends Route { left: false, timeoutUntil: null, }; - + if (permissions.length > 0) { const role: NullifyStuff = { allowedAgeRestricted: true, @@ -810,30 +813,33 @@ export default class FetchPatch extends Route { permissions: Permissions.permissionToDatabase(permissions), position: 0, roleId: Encryption.encrypt(String(newMember.guildMemberId)), - } - + }; + newMember.roles.push(role.roleId!); - + // todo: update role positions await rolesTable.create(role); } - + await guildMembersTable.create(newMember); - + await botsGuildsTable.create({ addedBy: Encryption.encrypt(userId), botId: Encryption.encrypt(clientId), guildId: Encryption.encrypt(guildId), guildMemberId: Encryption.encrypt(String(newMember.guildMemberId)), - roleId: newMember.roles?.[1] ?? null, - }) - - await guildsTable.update({ - guildId: Encryption.encrypt(guildId) - }, { - members: guild.members! + 1 - }) - + roleId: newMember.roles?.[1] ?? null, + }); + + await guildsTable.update( + { + guildId: Encryption.encrypt(guildId), + }, + { + members: guild.members! + 1, + }, + ); + this.App.rabbitMQForwarder("guildMember.add", { userId: clientId, guildId: guildId, @@ -845,7 +851,7 @@ export default class FetchPatch extends Route { return { success: true, - response: null - } + response: null, + }; } } diff --git a/src/Routes/oauth2/token/index.ts b/src/Routes/oauth2/token/index.ts index 70cd88ec..3235c298 100644 --- a/src/Routes/oauth2/token/index.ts +++ b/src/Routes/oauth2/token/index.ts @@ -22,8 +22,8 @@ export default class FetchPatch extends Route { @ContentTypes("application/x-www-form-urlencoded") public async postAuthorization({ set, - body, - headers + body, + headers, }: CreateRoute< "/oauth2/token", { @@ -38,8 +38,8 @@ export default class FetchPatch extends Route { // ? we check if the headers contain HTTP Basic authentication of the client_id and client_secret // ? or if the body contains the client_id and client_secret // ? if not, we return an error - - if (!body.redirect_uri || !body.code && !body.refresh_token || !body.grant_type) { + + if (!body.redirect_uri || (!body.code && !body.refresh_token) || !body.grant_type) { set.status = 400; return { @@ -47,24 +47,24 @@ export default class FetchPatch extends Route { error_description: "The redirect_uri, code, refresh_token, or grant_type were not provided", }; } - + const isBasic = headers.authorization?.toLowerCase().startsWith("basic "); - + let clientId: string | undefined = body.client_id; let clientSecret: string | undefined = body.client_secret; - + if (isBasic) { const basic = headers.authorization?.split(" ")?.[1]; - + if (basic) { const decoded = Buffer.from(basic, "base64").toString("utf-8"); const [id, secret] = decoded.split(":"); - + clientId = id; clientSecret = secret; } } - + if (!clientId || !clientSecret) { set.status = 400; @@ -73,14 +73,17 @@ export default class FetchPatch extends Route { error_description: "The client_id and client_secret were not provided", }; } - + // ? check if the client_id and client_secret are valid - const application = await applicationsTable.get({ - applicationId: Encryption.encrypt(clientId), - }, { - fields: ["applicationId", "clientSecret", "redirectUris"] - }); - + const application = await applicationsTable.get( + { + applicationId: Encryption.encrypt(clientId), + }, + { + fields: ["applicationId", "clientSecret", "redirectUris"], + }, + ); + if (!application || application.clientSecret !== Encryption.encrypt(clientSecret)) { set.status = 401; @@ -89,7 +92,7 @@ export default class FetchPatch extends Route { error_description: "The client_id and client_secret are invalid", }; } - + // ? check if the redirect_uri is valid if (!application.redirectUris.includes(Encryption.encrypt(body.redirect_uri))) { set.status = 400; @@ -99,7 +102,7 @@ export default class FetchPatch extends Route { error_description: "The redirect_uri is invalid", }; } - + // ? check if the grant_type is valid if (body.grant_type !== "authorization_code" && body.grant_type !== "refresh_token") { set.status = 400; @@ -109,10 +112,9 @@ export default class FetchPatch extends Route { error_description: "The grant_type is not supported", }; } - + switch (body.grant_type) { case "authorization_code": { - if (!body.code) { set.status = 400; @@ -121,10 +123,12 @@ export default class FetchPatch extends Route { error_description: "The code was not provided", }; } - + // ? check if the code is valid - const keys = await this.App.cache.keys(`oauth2:${Encryption.encrypt(clientId)}:${Encryption.encrypt(body.code)}:*`); - + const keys = await this.App.cache.keys( + `oauth2:${Encryption.encrypt(clientId)}:${Encryption.encrypt(body.code)}:*`, + ); + if (keys.length === 0) { set.status = 400; @@ -133,12 +137,12 @@ export default class FetchPatch extends Route { error_description: "The code is invalid", }; } - + // ? the key is like this oauth2:clientid:code:expiresAt const [key] = keys; - - const [,,, expiresAt] = key!.split(":"); - + + const [, , , expiresAt] = key!.split(":"); + if (Date.now() > Number(expiresAt)) { set.status = 400; @@ -147,9 +151,10 @@ export default class FetchPatch extends Route { error_description: "The code has expired", }; } - - const { applicationId, scopes, userId, redirectUri } = await this.App.cache.get(key as string) ?? {}; - + + const { applicationId, scopes, userId, redirectUri } = + (await this.App.cache.get(key as string)) ?? {}; + if (!applicationId || !scopes || !userId || !redirectUri) { set.status = 400; @@ -158,7 +163,7 @@ export default class FetchPatch extends Route { error_description: "The code is invalid", }; } - + // ? check if the redirect_uri is valid if (Encryption.decrypt(redirectUri) !== body.redirect_uri) { set.status = 400; @@ -168,14 +173,17 @@ export default class FetchPatch extends Route { error_description: "The redirect_uri is invalid", }; } - + // ? check if the user exists - const user = await usersTable.get({ - userId: userId, - }, { - fields: ["userId", "oauth2"], - }); - + const user = await usersTable.get( + { + userId: userId, + }, + { + fields: ["userId", "oauth2"], + }, + ); + if (!user) { set.status = 400; @@ -184,50 +192,52 @@ export default class FetchPatch extends Route { error_description: "The user does not exist", }; } - + // ? now we can generate the access token and refresh token const foundApplication = user.oauth2.find((app) => app.applicationId === Encryption.encrypt(applicationId)) ?? { applicationId: Encryption.encrypt(applicationId), authorizedAt: new Date(), - tokens: [] + tokens: [], }; const hex = bigintToBuffer(BigInt(Encryption.decrypt(userId))).toString("hex"); const accessToken = Encryption.generateCode(24) + `-${hex}`; const refreshToken = Encryption.generateCode(24) + `-${hex}`; // ? just for easier querying of the db const accessTokenExpiresAt = Date.now() + 1000 * 60 * 60 * 24 * 7; // ? 7 days - + foundApplication.tokens.push({ accessToken: Encryption.encrypt(accessToken), expiresAt: new Date(accessTokenExpiresAt), refreshToken: Encryption.encrypt(refreshToken), - scopes + scopes, }); - + const fixedOauth2 = user.oauth2.filter((app) => app.applicationId !== Encryption.encrypt(applicationId)); - + fixedOauth2.push(foundApplication); - - await usersTable.update({ - userId: userId, - }, { - oauth2: fixedOauth2 - }); - + + await usersTable.update( + { + userId: userId, + }, + { + oauth2: fixedOauth2, + }, + ); + // ? delete the code await this.App.cache.delete(key as string); - + return { access_token: accessToken, token_type: "Bearer", expires_in: Math.round((1000 * 60 * 60 * 24 * 7) / 1000), refresh_token: refreshToken, - scope: scopes.join(" ") + scope: scopes.join(" "), }; } - + case "refresh_token": { - if (!body.refresh_token) { set.status = 400; @@ -236,30 +246,32 @@ export default class FetchPatch extends Route { error_description: "The refresh_token was not provided", }; } - + const [token, userId] = body.refresh_token.split("-"); if (!token || !userId) { set.status = 400; - - this.App.logger.debug("TOKEN NOT FOUND v1") - + + this.App.logger.debug("TOKEN NOT FOUND v1"); + return { error: "invalid_request", error_description: "The token was not provided", }; } - + const parsedUserId = String(bufferToBigint(Buffer.from(userId, "hex"))); - - + // ? check if the refresh_token is valid - const fetchedUser = await usersTable.get({ - userId: Encryption.encrypt(parsedUserId), - }, { - fields: ["userId", "oauth2"], - }); - + const fetchedUser = await usersTable.get( + { + userId: Encryption.encrypt(parsedUserId), + }, + { + fields: ["userId", "oauth2"], + }, + ); + if (!fetchedUser) { set.status = 400; @@ -268,13 +280,15 @@ export default class FetchPatch extends Route { error_description: "The user does not exist", }; } - + const oauth2 = fetchedUser.oauth2.find((o) => - o.tokens.find((t) => t.refreshToken === Encryption.encrypt(body.refresh_token!)) + o.tokens.find((t) => t.refreshToken === Encryption.encrypt(body.refresh_token!)), + ); + + const foundRefreshToken = oauth2?.tokens.find( + (t) => t.refreshToken === Encryption.encrypt(body.refresh_token!), ); - - const foundRefreshToken = oauth2?.tokens.find((t) => t.refreshToken === Encryption.encrypt(body.refresh_token!)); - + if (!foundRefreshToken || !oauth2) { set.status = 400; @@ -283,40 +297,43 @@ export default class FetchPatch extends Route { error_description: "The token does not exist", }; } - + const newTokens = oauth2.tokens.filter((t) => t.refreshToken !== Encryption.encrypt(body.refresh_token!)); - + const hex = bigintToBuffer(BigInt(Encryption.decrypt(fetchedUser.userId!))).toString("hex"); const accessToken = Encryption.generateCode(24) + `-${hex}`; const refreshToken = Encryption.generateCode(24) + `-${hex}`; // ? just for easier querying of the db const accessTokenExpiresAt = Date.now() + 1000 * 60 * 60 * 24 * 7; // ? 7 days - + newTokens.push({ accessToken: Encryption.encrypt(accessToken), expiresAt: new Date(accessTokenExpiresAt), refreshToken: Encryption.encrypt(refreshToken), - scopes: foundRefreshToken.scopes + scopes: foundRefreshToken.scopes, }); - + const fixedOauth2 = fetchedUser.oauth2.filter((app) => app.applicationId !== oauth2.applicationId); - + fixedOauth2.push({ ...oauth2, tokens: newTokens, }); - - await usersTable.update({ - userId: fetchedUser.userId!, - }, { - oauth2: fixedOauth2 - }); - + + await usersTable.update( + { + userId: fetchedUser.userId!, + }, + { + oauth2: fixedOauth2, + }, + ); + return { access_token: accessToken, token_type: "Bearer", expires_in: Math.round((1000 * 60 * 60 * 24 * 7) / 1000), refresh_token: refreshToken, - scope: foundRefreshToken.scopes.join(" ") + scope: foundRefreshToken.scopes.join(" "), }; } } diff --git a/src/Routes/oauth2/token/revoke.ts b/src/Routes/oauth2/token/revoke.ts index 0d0e39ed..ddb30d91 100644 --- a/src/Routes/oauth2/token/revoke.ts +++ b/src/Routes/oauth2/token/revoke.ts @@ -74,9 +74,9 @@ export default class FetchPatch extends Route { if (!token || !userId) { set.status = 400; - - this.App.logger.debug("TOKEN NOT FOUND v1") - + + this.App.logger.debug("TOKEN NOT FOUND v1"); + return { error: "invalid_request", error_description: "The token was not provided", @@ -127,8 +127,8 @@ export default class FetchPatch extends Route { if (!foundAccessToken || !oauth2) { set.status = 400; - - this.App.logger.debug("TOKEN NOT FOUND v2") + + this.App.logger.debug("TOKEN NOT FOUND v2"); return { error: "invalid_request", diff --git a/src/Routes/v1/applications/[applicationId]/bot/index.ts b/src/Routes/v1/applications/[applicationId]/bot/index.ts index 8f56dd73..c320da49 100644 --- a/src/Routes/v1/applications/[applicationId]/bot/index.ts +++ b/src/Routes/v1/applications/[applicationId]/bot/index.ts @@ -16,17 +16,17 @@ import { usersTable, type UserTable } from "@/Utils/Cql/Tables/UserTable.ts"; import tagGenerator from "@/Utils/TagGenerator.ts"; interface CreatedBot { - user: { - avatar: string | null; - bio?: string | null; - flags: string; - globalNickname: string | null; - id: string; - publicFlags: string; - tag: string; - username: string; - }; - token: string; + user: { + avatar: string | null; + bio?: string | null; + flags: string; + globalNickname: string | null; + id: string; + publicFlags: string; + tag: string; + username: string; + }; + token: string; } export default class FetchPatch extends Route { @@ -42,11 +42,11 @@ export default class FetchPatch extends Route { public async postBot({ set, user, - params + params, }: CreateRoute<"/applications/:applicationId/bot", any, [UserMiddlewareType]>) { const application = await applicationsTable.get( { - applicationId: Encryption.encrypt(params.applicationId), + applicationId: Encryption.encrypt(params.applicationId), }, { fields: ["botId", "ownerId", "name", "avatar", "description"], @@ -54,128 +54,130 @@ export default class FetchPatch extends Route { ); if (!application || application.ownerId !== Encryption.encrypt(user.id)) { - const notFound = errorGen.UnknownApplication(); - - notFound.addError({ - applicationId: { - code: "UnknownApplication", - message: "The requested application does not exist, or you do not have access to it.", - }, - }); - - set.status = 404; - - return notFound.toJSON(); - } - - if (application.botId) { - const failed = errorGen.FailedToRegister(); - - failed.addError({ - bot: { - code: "BotExists", - message: "This application already has a bot!", - }, - }); - - set.status = 400; - - return failed.toJSON(); - } - - const foundUsers = await this.fetchUser({ username: application.name! }, ["tag"]); + const notFound = errorGen.UnknownApplication(); + + notFound.addError({ + applicationId: { + code: "UnknownApplication", + message: "The requested application does not exist, or you do not have access to it.", + }, + }); + + set.status = 404; + + return notFound.toJSON(); + } + + if (application.botId) { + const failed = errorGen.FailedToRegister(); + + failed.addError({ + bot: { + code: "BotExists", + message: "This application already has a bot!", + }, + }); + + set.status = 400; + + return failed.toJSON(); + } + + const foundUsers = await this.fetchUser({ username: application.name! }, ["tag"]); const tag = tagGenerator(foundUsers.map((usr) => usr.tag).filter((usr) => usr !== null)); - if (!tag) { - const failed = errorGen.FailedToRegister(); + if (!tag) { + const failed = errorGen.FailedToRegister(); - failed.addError({ - username: { - code: "MaxUsernames", + failed.addError({ + username: { + code: "MaxUsernames", message: `The maximum amount of users with the username ${Encryption.decrypt(application.name!)} has been reached :(`, - }, - }); - - set.status = 400; - - return failed.toJSON(); - } - - const botId = params.applicationId; - - const flags = new FlagFields("0", "0"); - - flags.PrivateFlags.add("Bot"); - - await usersTable.create({ - avatar: application.avatar, - email: Encryption.encrypt(`bot+${botId}@bots.kastelapp.com`), - flags: String(flags.PrivateFlags.bits), - globalNickname: application.name, - guilds: [], - ips: [], - password: null, - phoneNumber: null, - publicFlags: "0", - tag, - twoFaSecret: null, - userId: Encryption.encrypt(botId), - username: application.name, - usernameTag: Encryption.encrypt(`${Encryption.decrypt(application.name!)}#${tag}`), - }); - - const token = Token.generateToken(botId); - - await settingsTable.create({ - allowedInvites: 0, - bio: application.description, - customStatus: null, - emojiPack: "native", - guildOrder: [], - language: "en-US", - maxFileUploadSize: this.App.constants.settings.Max.MaxFileSize, - maxGuilds: 0, - navLocation: "bottom", - privacy: 0, - status: 1, - theme: "dark", - tokens: [{ - createdDate: new Date(), - flags: 0, - ip: null, - token: Encryption.encrypt(token), - tokenId: Encryption.encrypt(this.App.snowflake.generate()), - }], - userId: Encryption.encrypt(botId) - }) - - await applicationsTable.update( - { - applicationId: Encryption.encrypt(params.applicationId), - }, - { - botId: Encryption.encrypt(botId), - }, - ); - - set.status = 201; - - return Encryption.completeDecryption({ - user: { - id: botId, - avatar: application.avatar, - flags: String(flags.PrivateFlags.bits), - publicFlags: "0", - globalNickname: application.name, - tag, - username: application.name!, - bio: null, - }, - token - } satisfies CreatedBot) + }, + }); + + set.status = 400; + + return failed.toJSON(); + } + + const botId = params.applicationId; + + const flags = new FlagFields("0", "0"); + + flags.PrivateFlags.add("Bot"); + + await usersTable.create({ + avatar: application.avatar, + email: Encryption.encrypt(`bot+${botId}@bots.kastelapp.com`), + flags: String(flags.PrivateFlags.bits), + globalNickname: application.name, + guilds: [], + ips: [], + password: null, + phoneNumber: null, + publicFlags: "0", + tag, + twoFaSecret: null, + userId: Encryption.encrypt(botId), + username: application.name, + usernameTag: Encryption.encrypt(`${Encryption.decrypt(application.name!)}#${tag}`), + }); + + const token = Token.generateToken(botId); + + await settingsTable.create({ + allowedInvites: 0, + bio: application.description, + customStatus: null, + emojiPack: "native", + guildOrder: [], + language: "en-US", + maxFileUploadSize: this.App.constants.settings.Max.MaxFileSize, + maxGuilds: 0, + navLocation: "bottom", + privacy: 0, + status: 1, + theme: "dark", + tokens: [ + { + createdDate: new Date(), + flags: 0, + ip: null, + token: Encryption.encrypt(token), + tokenId: Encryption.encrypt(this.App.snowflake.generate()), + }, + ], + userId: Encryption.encrypt(botId), + }); + + await applicationsTable.update( + { + applicationId: Encryption.encrypt(params.applicationId), + }, + { + botId: Encryption.encrypt(botId), + }, + ); + + set.status = 201; + + return Encryption.completeDecryption({ + user: { + id: botId, + avatar: application.avatar, + flags: String(flags.PrivateFlags.bits), + publicFlags: "0", + globalNickname: application.name, + tag, + username: application.name!, + bio: null, + }, + token, + } satisfies CreatedBot); } - - private async fetchUser( + + private async fetchUser( opts: { email?: string; username?: string; diff --git a/src/Routes/v1/applications/[applicationId]/reset.ts b/src/Routes/v1/applications/[applicationId]/reset.ts index 63bf74f7..a4877554 100644 --- a/src/Routes/v1/applications/[applicationId]/reset.ts +++ b/src/Routes/v1/applications/[applicationId]/reset.ts @@ -14,7 +14,7 @@ import { applicationsTable } from "@/Utils/Cql/Tables/ApplicationTable.ts"; const resetClientSecretBody = { password: string().min(4).max(72), -} +}; export default class FetchPatch extends Route { @Method("post") @@ -26,14 +26,12 @@ export default class FetchPatch extends Route { allowedRequesters: "User", }), ) - @Middleware( - bodyValidator(resetClientSecretBody), - ) + @Middleware(bodyValidator(resetClientSecretBody)) public async getFetch({ user, params, set, - body + body, }: CreateRoute<"/applications/:applicationId/reset", Infer, [UserMiddlewareType]>) { const app = await applicationsTable.get({ applicationId: Encryption.encrypt(params.applicationId), @@ -53,33 +51,36 @@ export default class FetchPatch extends Route { return notFound.toJSON(); } - - if (!await Bun.password.verify(body.password, user.password)) { - const invalidPassword = errorGen.InvalidCredentials(); - invalidPassword.addError({ - password: { - code: "InvalidPassword", - message: "The provided password is incorrect.", - }, - }); + if (!(await Bun.password.verify(body.password, user.password))) { + const invalidPassword = errorGen.InvalidCredentials(); + + invalidPassword.addError({ + password: { + code: "InvalidPassword", + message: "The provided password is incorrect.", + }, + }); + + set.status = 400; + + return invalidPassword.toJSON(); + } + + const newSecret = Encryption.generateCode(); - set.status = 400; + await applicationsTable.update( + { + applicationId: Encryption.encrypt(params.applicationId), + }, + { + clientSecret: Encryption.encrypt(newSecret), + redirectUris: [], + }, + ); - return invalidPassword.toJSON(); - } - - const newSecret = Encryption.generateCode(); - - await applicationsTable.update({ - applicationId: Encryption.encrypt(params.applicationId), - }, { - clientSecret: Encryption.encrypt(newSecret), - redirectUris: [] - }); - - return { - clientSecret: newSecret, - }; + return { + clientSecret: newSecret, + }; } } diff --git a/src/Routes/v1/channels/[channelId]/attachments.ts b/src/Routes/v1/channels/[channelId]/attachments.ts index 861f411c..4e0352b7 100644 --- a/src/Routes/v1/channels/[channelId]/attachments.ts +++ b/src/Routes/v1/channels/[channelId]/attachments.ts @@ -55,8 +55,8 @@ export default class Attachments extends Route { set.status = 413; const fileTooLarge = errorGen.FileTooLarge(); - - this.App.logger.debug(`User tried to upload a file, but their max is ${user.settings.maxFileUploadSize}`) + + this.App.logger.debug(`User tried to upload a file, but their max is ${user.settings.maxFileUploadSize}`); fileTooLarge.addError({ size: { @@ -280,7 +280,7 @@ export default class Attachments extends Route { { user, set }: CreateRoute<"/channels/:channelId", any, [UserMiddlewareType]>, ): Promise<{ success: boolean; - response: unknown + response: unknown; }> { const unknownChannel = errorGen.UnknownChannel(); @@ -298,7 +298,7 @@ export default class Attachments extends Route { return { success: false, - response: invalidGuild.toJSON() + response: invalidGuild.toJSON(), }; } @@ -325,7 +325,7 @@ export default class Attachments extends Route { return { success: false, - response: unknownChannel.toJSON() + response: unknownChannel.toJSON(), }; } @@ -343,7 +343,7 @@ export default class Attachments extends Route { return { success: false, - response: unknownChannel.toJSON() + response: unknownChannel.toJSON(), }; } @@ -403,13 +403,13 @@ export default class Attachments extends Route { return { success: false, - response: missingPermission.toJSON() + response: missingPermission.toJSON(), }; } return { success: true, - response: null + response: null, }; } } diff --git a/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/[roleId].ts b/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/[roleId].ts index c50a250e..1b640a01 100644 --- a/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/[roleId].ts +++ b/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/[roleId].ts @@ -234,7 +234,7 @@ export default class AddRemoveRole extends Route { success: false, response: missingPermission.toJSON(), member: null, - } + }; } const member = await guildMembersTable.get( @@ -262,7 +262,7 @@ export default class AddRemoveRole extends Route { success: false, response: notFound.toJSON(), member: null, - } + }; } const foundRole = await rolesTable.get( @@ -289,7 +289,7 @@ export default class AddRemoveRole extends Route { success: false, response: notFound.toJSON(), member: null, - } + }; } if ( @@ -316,8 +316,8 @@ export default class AddRemoveRole extends Route { return { success: false, response: missingPermission.toJSON(), - member: null - } + member: null, + }; } return { diff --git a/src/Routes/v1/guilds/[guildId]/roles/index.ts b/src/Routes/v1/guilds/[guildId]/roles/index.ts index cb4ef3a8..76353846 100644 --- a/src/Routes/v1/guilds/[guildId]/roles/index.ts +++ b/src/Routes/v1/guilds/[guildId]/roles/index.ts @@ -103,17 +103,20 @@ export default class FetchCreateRoles extends Route { await rolesTable.find({ guildId: Encryption.encrypt(params.guildId), }) - ).map((role) => ({ - name: Encryption.decrypt(role.name ?? ""), - color: role.color, - hoisted: role.hoisted ?? false, - id: Encryption.decrypt(role.roleId ?? ""), - permissions: Permissions.permissionFromBigint(role.permissions).normizedBits, - position: role.position ?? 0, - allowedAgeRestricted: role.allowedAgeRestricted ?? false, - deleteable: role.deleteable ?? false, - mentionable: role.mentionable ?? false, - } satisfies ReturnRoles)); + ).map( + (role) => + ({ + name: Encryption.decrypt(role.name ?? ""), + color: role.color, + hoisted: role.hoisted ?? false, + id: Encryption.decrypt(role.roleId ?? ""), + permissions: Permissions.permissionFromBigint(role.permissions).normizedBits, + position: role.position ?? 0, + allowedAgeRestricted: role.allowedAgeRestricted ?? false, + deleteable: role.deleteable ?? false, + mentionable: role.mentionable ?? false, + }) satisfies ReturnRoles, + ); return roles; } diff --git a/src/Routes/v1/guilds/index.ts b/src/Routes/v1/guilds/index.ts index 195b1e23..72712166 100644 --- a/src/Routes/v1/guilds/index.ts +++ b/src/Routes/v1/guilds/index.ts @@ -146,7 +146,7 @@ export default class FetchGuilds extends Route { @Middleware( userMiddleware({ accessType: "LoggedIn", - allowedRequesters: ["User"] + allowedRequesters: ["User"], }), ) public async getGuilds({ user, query }: CreateRoute<"/guilds", any, [UserMiddlewareType], any, { include: string }>) { @@ -212,7 +212,7 @@ export default class FetchGuilds extends Route { }[]) : [], }; - + // todo: promise.all it for (const channel of raw.channels) { for (const perm of channel.channel.permissionOverrides ?? []) { @@ -514,14 +514,15 @@ export default class FetchGuilds extends Route { } const permId = this.App.snowflake.generate(); - - const foundChannelOrRole = newChannels.find((c) => c.oldId === id) ?? newRoles.find((r) => r.oldId === id); + + const foundChannelOrRole = + newChannels.find((c) => c.oldId === id) ?? newRoles.find((r) => r.oldId === id); // ? if the role or channel does not exist, and the permission type is a role, we silently ignore it if (!foundChannelOrRole) { continue; } - + permissionOverrides.push({ allow: new Permissions(permission.allow ?? []).bitsForDatabase, deny: new Permissions(permission.deny ?? []).bitsForDatabase, diff --git a/src/Routes/v1/invites/[inviteCode].ts b/src/Routes/v1/invites/[inviteCode].ts index d87ca532..8b06b5b6 100644 --- a/src/Routes/v1/invites/[inviteCode].ts +++ b/src/Routes/v1/invites/[inviteCode].ts @@ -152,7 +152,7 @@ export default class FetchJoinInvite extends Route { icon: fetchedGuild.icon, ownerId: fetchedGuild.ownerId, features: fetchedGuild.features ?? [], - memberCount: fetchedGuild.members + memberCount: fetchedGuild.members, }, channel: { id: inviteExists.channelId, @@ -317,7 +317,7 @@ export default class FetchJoinInvite extends Route { }); } } - + // @ts-expect-error -- This is fine const fetchedInvite = await this.getInviteCode({ params, @@ -328,30 +328,30 @@ export default class FetchJoinInvite extends Route { if (set.status !== 200 || typeof fetchedInvite === "string") { return fetchedInvite; } - - const guild = "guild" in fetchedInvite ? fetchedInvite.guild as GuildTable : null; - + + const guild = "guild" in fetchedInvite ? (fetchedInvite.guild as GuildTable) : null; + if (!guild) { set.status = 500; - + return "Internal Server Error :("; // ? its a user, not the server } - + if (guild.members >= guild.maxMembers) { const maxMembers = errorGen.LimitReached(); - + maxMembers.addError({ guild: { code: "MaxMembersReached", message: "The guild has reached its maximum amount of members.", }, }); - + set.status = 403; - - return maxMembers.toJSON + + return maxMembers.toJSON; } - + const newMember: NullifyStuff = { flags: Constants.guildMemberFlags.In, guildId: inviteExists.guildId!, diff --git a/src/Routes/v1/users/@me/index.ts b/src/Routes/v1/users/@me/index.ts index 92101532..9fa91fa9 100644 --- a/src/Routes/v1/users/@me/index.ts +++ b/src/Routes/v1/users/@me/index.ts @@ -93,7 +93,7 @@ export default class FetchPatch extends Route { const flags = new FlagFields(fetchedUser.flags ?? "0", fetchedUser.publicFlags ?? "0"); const include = query.include?.split(",") ?? []; - + const userObject: NullifyStuff = { id: fetchedUser.userId!, email: null, diff --git a/src/Routes/v1/users/@me/sessions.ts b/src/Routes/v1/users/@me/sessions.ts index d4752f4b..2f28b895 100644 --- a/src/Routes/v1/users/@me/sessions.ts +++ b/src/Routes/v1/users/@me/sessions.ts @@ -15,7 +15,7 @@ import { settingsTable } from "@/Utils/Cql/Tables/SettingsTable.ts"; const deleteSessionsBody = { sessions: any(), password: string().min(4).max(72), -} +}; export default class Sessions extends Route { @Method("get") @@ -57,32 +57,34 @@ export default class Sessions extends Route { userMiddleware({ accessType: "LoggedIn", allowedRequesters: "User", - }) + }), ) @Middleware(bodyValidator(deleteSessionsBody)) - public async deleteSessions({ + public async deleteSessions({ user, body, - set + set, }: CreateRoute<"/@me/sessions", Infer, [UserMiddlewareType]>) { - if (!Array.isArray(body.sessions) || body.sessions.length === 0 || body.sessions.some((session) => typeof session !== "string")) { + if ( + !Array.isArray(body.sessions) || + body.sessions.length === 0 || + body.sessions.some((session) => typeof session !== "string") + ) { const error = errorGen.InvalidField(); - + error.addError({ sessions: { code: "InvalidField", message: "The provided sessions is not an array of strings.", }, }); - + set.status = 400; - + return error.toJSON(); } - - if (! - await Bun.password.verify(body.password, user.password) - ) { + + if (!(await Bun.password.verify(body.password, user.password))) { const error = errorGen.InvalidCredentials(); error.addError({ @@ -96,7 +98,7 @@ export default class Sessions extends Route { return error.toJSON(); } - + const fetchedSessions = await settingsTable.get( { userId: Encryption.encrypt(user.id), @@ -105,15 +107,18 @@ export default class Sessions extends Route { fields: ["tokens"], }, ); - - if (!fetchedSessions) { // ? how'd we even get here + + if (!fetchedSessions) { + // ? how'd we even get here set.status = 500; - + return "Internal Server Error :("; } - - const newTokens = fetchedSessions.tokens.filter((token) => !(body.sessions as string[]).includes(Encryption.decrypt(token.tokenId!))); - + + const newTokens = fetchedSessions.tokens.filter( + (token) => !(body.sessions as string[]).includes(Encryption.decrypt(token.tokenId!)), + ); + await settingsTable.update( { userId: Encryption.encrypt(user.id), @@ -122,7 +127,7 @@ export default class Sessions extends Route { tokens: newTokens, }, ); - + return; } } diff --git a/src/Routes/v1/users/@me/verify.ts b/src/Routes/v1/users/@me/verify.ts index 19882a91..8a2201e0 100644 --- a/src/Routes/v1/users/@me/verify.ts +++ b/src/Routes/v1/users/@me/verify.ts @@ -34,21 +34,21 @@ export default class FetchPatch extends Route { }), ) public async patchFetch({ set, user, ip }: CreateRoute<"/@me/verify", any, [UserMiddlewareType]>) { - if (user.flagsUtil.has("EmailVerified")) { - const failed = errorGen.FailedToRegister(); - - failed.addError({ - email: { - code: "AlreadyVerified", - message: "This email is already verified.", - }, - }); - - set.status = 400; - - return failed.toJSON(); - } - + if (user.flagsUtil.has("EmailVerified")) { + const failed = errorGen.FailedToRegister(); + + failed.addError({ + email: { + code: "AlreadyVerified", + message: "This email is already verified.", + }, + }); + + set.status = 400; + + return failed.toJSON(); + } + const generatedToken = ForgotPassword.generateEmailToken(user.email, this.App); await verificationLinksTable.create({ @@ -138,28 +138,28 @@ export default class FetchPatch extends Route { return; } - - const flags = new FlagUtilsBInt(user.flags ?? 0, Constants.privateFlags); - - flags.add("EmailVerified"); + + const flags = new FlagUtilsBInt(user.flags ?? 0, Constants.privateFlags); + + flags.add("EmailVerified"); await usersTable.update( { userId: fetchedVerification.userId!, }, { - flags: String(flags.bits) - }, + flags: String(flags.bits), + }, ); - - await verificationLinksTable.remove({ - code: Encryption.encrypt(body.token), - id: Encryption.encrypt(body.id), - userId: fetchedVerification.userId!, - }); - - set.status = 204; - - return; + + await verificationLinksTable.remove({ + code: Encryption.encrypt(body.token), + id: Encryption.encrypt(body.id), + userId: fetchedVerification.userId!, + }); + + set.status = 204; + + return; } } diff --git a/src/Utils/Classes/API.ts b/src/Utils/Classes/API.ts index 435d13e2..bcada4a1 100644 --- a/src/Utils/Classes/API.ts +++ b/src/Utils/Classes/API.ts @@ -761,15 +761,17 @@ class API extends App { set, store: {}, ip: "", - user: data.user ? { - ...data.user, - oauth2: { - accessToken: null, - isOauth2: false, - refreshToken: null, - scopes: [] - } - } : null, + user: data.user + ? { + ...data.user, + oauth2: { + accessToken: null, + isOauth2: false, + refreshToken: null, + scopes: [], + }, + } + : null, }); this.logger.info( diff --git a/src/Utils/Classes/BitFields/Flags.ts b/src/Utils/Classes/BitFields/Flags.ts index 2f2820ed..d8202115 100644 --- a/src/Utils/Classes/BitFields/Flags.ts +++ b/src/Utils/Classes/BitFields/Flags.ts @@ -21,7 +21,7 @@ class FlagFields { public static cleanPrivateFlags(flags: string | bigint | number) { return String(new FlagUtilsBInt(flags, privateFlags).clean(publicPrivateFlags)); } - + public get cleanedPrivateFlags() { return FlagFields.cleanPrivateFlags(this.PrivateFlags.bits); } diff --git a/src/Utils/Classes/BitFields/Permissions.ts b/src/Utils/Classes/BitFields/Permissions.ts index 419282c3..ed4924d0 100644 --- a/src/Utils/Classes/BitFields/Permissions.ts +++ b/src/Utils/Classes/BitFields/Permissions.ts @@ -20,7 +20,7 @@ type PermissionKeys = { [K in keyof typeof permissions]: keyof (typeof permissions)[K]["subPermissions"]; }; -type PermissionKey = PermissionKeys[keyof PermissionKeys] | "Administrator" +type PermissionKey = PermissionKeys[keyof PermissionKeys] | "Administrator"; type DumbBigIntPair = NullifyStuff; @@ -36,7 +36,7 @@ class Permissions { ), ]); } - + public static removeInvalidBits(bits: [bigint | string, bigint | string][]) { return bits.filter(([group, subPermission]) => { if (typeof group === "string" && safeBigInt(group) === null) { @@ -46,28 +46,30 @@ class Permissions { if (typeof subPermission === "string" && safeBigInt(subPermission) === null) { return false; } - + if (BigInt(group) === permissions.Administrator.int && subPermission === "0") { return true; } - + if (!Object.values(permissions).some((permission) => permission.int === BigInt(group))) { return false; } - - const groupCheck = Object.values(permissions).find((permission) => permission.int === BigInt(group))?.subPermissions - + + const groupCheck = Object.values(permissions).find( + (permission) => permission.int === BigInt(group), + )?.subPermissions; + if (!groupCheck) { return false; } - + const allBits = Object.values(groupCheck).reduce((acc, curr) => acc | curr, 0n); const invalidRemoved = BigInt(subPermission) & allBits; - + if (invalidRemoved !== BigInt(subPermission)) { return false; } - + return true; }); } @@ -76,7 +78,7 @@ class Permissions { if (!ignoreAdmin && this.bits.some(([bits]) => BigInt(bits) === permissions.Administrator.int)) { return true; } - + for (const perm of perms) { const group = this.getGroupFromSubPermission(perm)!; @@ -179,10 +181,10 @@ class Permissions { obj[group] = { Administrator: this.has(["Administrator"], false, "some"), }; - + continue; } - + for (const [subPermission] of Object.entries(stuff.subPermissions)) { if (!obj[group]) { obj[group] = {}; diff --git a/src/Utils/Classes/DB/Client.ts b/src/Utils/Classes/DB/Client.ts index 7121b73b..ba4e6723 100644 --- a/src/Utils/Classes/DB/Client.ts +++ b/src/Utils/Classes/DB/Client.ts @@ -91,7 +91,7 @@ class Client extends EventEmitter { } createKeySpace += ` AND DURABLE_WRITES = ${options.db?.durableWrites ?? false};`; - + const [, keyspaceError] = await safePromise(this.connection.execute(createKeySpace)); if (keyspaceError) { @@ -172,9 +172,9 @@ class Client extends EventEmitter { // ? We return due to the fact there's nothing else for us to do return; } - + for (const type of cmd.types) { - const [,error] = await safePromise(this.connection.execute(type)); + const [, error] = await safePromise(this.connection.execute(type)); if (error) { throw new Error(`Failed to create type: ${error.message}`); @@ -307,7 +307,7 @@ class Client extends EventEmitter { } } } - + if (table.options.indexes) { for (const [name, target] of table.options.indexes.map((idx) => Array.isArray(idx) @@ -443,7 +443,7 @@ class Client extends EventEmitter { App.staticLogger.info(`Added column ${found}`); } } - + if (table.options.types) { // ? check all the types, see if they are missing a column in the type and edit it if so for (const [name, type] of Object.entries(table.options.types)) { @@ -460,15 +460,16 @@ class Client extends EventEmitter { const typeColumns: { name: string; type: string; - }[] = typeData.rows?.[0]?.field_names?.map((row: string, i: number) => ({ - name: row, - type: typeData.rows?.[0]?.field_types[i], - })) ?? []; + }[] = + typeData.rows?.[0]?.field_names?.map((row: string, i: number) => ({ + name: row, + type: typeData.rows?.[0]?.field_types[i], + })) ?? []; const missingTypeColumns = Object.keys(type).filter( (column) => !typeColumns.some((col) => col.name === table.snakeifyString(column)), ); - + for (const column of missingTypeColumns) { const answer = await rl.question( `[${table.options.tableName}] The column ${column} is not in the remote type ${name}, would you like to add it? [y/n] `, @@ -480,23 +481,31 @@ class Client extends EventEmitter { `ALTER TYPE ${table.snakeifyString(name)} ADD ${table.snakeifyString(column)} ${table.extractTypeName(type[column]!)}`, ), ); - + if (error) { - throw new Error(`Failed to add column ${table.snakeifyString(column)} to type ${table.snakeifyString(name)}: ${error.message}`); + throw new Error( + `Failed to add column ${table.snakeifyString(column)} to type ${table.snakeifyString(name)}: ${error.message}`, + ); } App.staticLogger.info(`Added column ${table.snakeifyString(column)} to type ${name}`); } } - - const extraColumns = typeColumns.filter((column) => !Object.keys(type).map((col) => table.snakeifyString(col)).includes(column.name)); - + + const extraColumns = typeColumns.filter( + (column) => + !Object.keys(type) + .map((col) => table.snakeifyString(col)) + .includes(column.name), + ); + for (const column of extraColumns) { - App.staticLogger.debug(`[${table.options.tableName}] The column ${column.name} is in the remote type ${name}, but not in the local type sadly you cannot remove columns from a type`); + App.staticLogger.debug( + `[${table.options.tableName}] The column ${column.name} is in the remote type ${name}, but not in the local type sadly you cannot remove columns from a type`, + ); } } } - rl.close(); } diff --git a/src/Utils/Classes/DB/Table.ts b/src/Utils/Classes/DB/Table.ts index 36c30ad4..fe898fc8 100644 --- a/src/Utils/Classes/DB/Table.ts +++ b/src/Utils/Classes/DB/Table.ts @@ -1088,7 +1088,7 @@ class Table { types, }; } - + public extractTypeName(type: AllTypes): string { return ExtractValueName(type); } diff --git a/src/Utils/Classes/DB/createTableTypes.ts b/src/Utils/Classes/DB/createTableTypes.ts index fa8b9a6e..a3b2a2e1 100644 --- a/src/Utils/Classes/DB/createTableTypes.ts +++ b/src/Utils/Classes/DB/createTableTypes.ts @@ -350,7 +350,7 @@ export type UnNullifyStuff = { : T[K] extends object ? UnNullifyStuff : Exclude; -} +}; export type PublicGetReturnType = Fields extends "*" ? NullifyStuff diff --git a/src/Utils/Classes/Encryption.ts b/src/Utils/Classes/Encryption.ts index c77b5222..9dcb990a 100644 --- a/src/Utils/Classes/Encryption.ts +++ b/src/Utils/Classes/Encryption.ts @@ -178,11 +178,11 @@ class Encryption { public static encryptedSnowflake() { return Encryption.encrypt(App.snowflake.generate()); } - + public static randomNumber(min: number, max: number) { return (min + ((max - min + 1) * crypto.getRandomValues(new Uint32Array(1))[0]!) / 2 ** 32) | 0; } - + /** * Generate a code for oauth2 or other purposes * @param length The length of the code to generate @@ -190,17 +190,17 @@ class Encryption { */ public static generateCode(length = 32, special = false) { let chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - + if (special) { chars += "-_"; } - + let result = ""; - + for (let i = 0; i < length; i++) { result += chars.charAt(this.randomNumber(0, chars.length - 1)); } - + return result; } } diff --git a/src/Utils/Classes/ErrorGen.ts b/src/Utils/Classes/ErrorGen.ts index c7aea1c3..7fbc8cd7 100644 --- a/src/Utils/Classes/ErrorGen.ts +++ b/src/Utils/Classes/ErrorGen.ts @@ -212,7 +212,7 @@ const errorGen = { return new HTTPErrors(4_033); }, /* - * Too many requests, i.e ratelimited + * Too many requests, i.e ratelimited */ TooManyRequests: () => { return new HTTPErrors(4_290); @@ -221,32 +221,32 @@ const errorGen = { * The application you tried to access does not exist or you cannot manage it */ UnknownApplication: () => { - return new HTTPErrors(4_034); + return new HTTPErrors(4_034); }, /* - * One or more of the scopes you've provided are invalid + * One or more of the scopes you've provided are invalid */ InvalidScope: () => { return new HTTPErrors(4_035); }, /* - * The application is disabled + * The application is disabled */ ApplicationDisabled: () => { return new HTTPErrors(4_036); }, /* - * The application is private + * The application is private */ ApplicationPrivate: () => { return new HTTPErrors(4_037); }, /* - * The application you are trying to add is already in the guild + * The application you are trying to add is already in the guild */ AlreadyInGuild: () => { return new HTTPErrors(4_038); - } + }, }; export default errorGen; diff --git a/src/Utils/Classes/Logger.ts b/src/Utils/Classes/Logger.ts index 052a0376..f750801c 100644 --- a/src/Utils/Classes/Logger.ts +++ b/src/Utils/Classes/Logger.ts @@ -301,7 +301,7 @@ class Logger { return; } - const newWho = (options.who ?? this.who) ?? "" + const newWho = options.who ?? this.who ?? ""; const message = `[${options.date.toLocaleTimeString()}] [${ options.toShow ? options.toShow.toUpperCase() : options.type.toUpperCase() diff --git a/src/Utils/Classes/RateLimit.ts b/src/Utils/Classes/RateLimit.ts index 554d28f7..71fbad35 100644 --- a/src/Utils/Classes/RateLimit.ts +++ b/src/Utils/Classes/RateLimit.ts @@ -42,18 +42,18 @@ export interface RateLimitOptions { * The amount of ratelimits before reduction starts. This defaults to 15 */ reductionStart?: number; - /** - * The reduction rate, defaults to 0.1 (i.e 10% reduction) - */ - reductionRate?: number; - /** - * Only consume on success - */ - consumeOnSuccess?: boolean; - /** - * Hide headers. Useful for auth endpoints - */ - hideHeaders?: boolean; + /** + * The reduction rate, defaults to 0.1 (i.e 10% reduction) + */ + reductionRate?: number; + /** + * Only consume on success + */ + consumeOnSuccess?: boolean; + /** + * Hide headers. Useful for auth endpoints + */ + hideHeaders?: boolean; } export interface RateLimitHeaders { @@ -82,7 +82,7 @@ export interface RateLimitConsumeOptions { request: { request: globalThis.Request; set: { - headers: Record + headers: Record; redirect?: string; status?: number | keyof StatusMap; }; @@ -185,8 +185,8 @@ class RateLimit { max5xx: options.max5xx ?? null, mode: options.mode ?? "automatic", reductionStart: options.reductionStart ?? 15, - reductionRate: options.reductionRate ?? 0.1, - consumeOnSuccess: options.consumeOnSuccess ?? false, + reductionRate: options.reductionRate ?? 0.1, + consumeOnSuccess: options.consumeOnSuccess ?? false, }; } @@ -205,21 +205,34 @@ class RateLimit { * Consume a very yummy token */ public async consume(options: RateLimitConsumeOptions): Promise { - const foundUser = await this.app.cache.get(`ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`); + const foundUser = await this.app.cache.get( + `ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`, + ); if (!foundUser) { - await this.app.cache.set(`ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`, { - bucket: this.options.bucket, - lastRatelimit: Date.now(), - tokens: this.options.maxTokens, - nextReset: Date.now() + this.options.interval, - errors4xx: - options.request.set.status && (options.request.set.status as number) >= 400 && (options.request.set.status as number) < 500 ? 1 : 0, - errors5xx: - options.request.set.status && (options.request.set.status as number) >= 500 && (options.request.set.status as number) < 600 ? 1 : 0, - initialRateLimited: 0, - rateLimited: 0, - }); + await this.app.cache.set( + `ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`, + { + bucket: this.options.bucket, + lastRatelimit: Date.now(), + tokens: this.options.maxTokens, + nextReset: Date.now() + this.options.interval, + errors4xx: + options.request.set.status && + (options.request.set.status as number) >= 400 && + (options.request.set.status as number) < 500 + ? 1 + : 0, + errors5xx: + options.request.set.status && + (options.request.set.status as number) >= 500 && + (options.request.set.status as number) < 600 + ? 1 + : 0, + initialRateLimited: 0, + rateLimited: 0, + }, + ); return { canContinue: true, @@ -241,7 +254,7 @@ class RateLimit { if (this.options.reductionStart && foundUser.rateLimited >= this.options.reductionStart) { const reductionFactor = Math.max( 0.5, - 1 - (this.options.reductionRate! * Math.floor((foundUser.rateLimited - this.options.reductionStart) / 5)), + 1 - this.options.reductionRate! * Math.floor((foundUser.rateLimited - this.options.reductionStart) / 5), ); foundUser.tokens = Math.floor(foundUser.tokens * reductionFactor); @@ -256,7 +269,10 @@ class RateLimit { if (foundUser.tokens === 0) { foundUser.lastRatelimit = now; - await this.app.cache.set(`ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`, foundUser); + await this.app.cache.set( + `ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`, + foundUser, + ); return { canContinue: false, @@ -277,11 +293,19 @@ class RateLimit { foundUser.initialRateLimited = foundUser.initialRateLimited || now; } - if (options.request.set.status && (options.request.set.status as number) >= 400 && (options.request.set.status as number) < 500) { + if ( + options.request.set.status && + (options.request.set.status as number) >= 400 && + (options.request.set.status as number) < 500 + ) { foundUser.errors4xx += 1; } - if (options.request.set.status && (options.request.set.status as number) >= 500 && (options.request.set.status as number) < 600) { + if ( + options.request.set.status && + (options.request.set.status as number) >= 500 && + (options.request.set.status as number) < 600 + ) { foundUser.errors5xx += 1; } @@ -293,7 +317,10 @@ class RateLimit { foundUser.nextReset = now + this.options.interval; } - await this.app.cache.set(`ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`, foundUser); + await this.app.cache.set( + `ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`, + foundUser, + ); return { canContinue: true, @@ -306,22 +333,24 @@ class RateLimit { }; } - /** - * Check if a user is ratelimited or not - */ + /** + * Check if a user is ratelimited or not + */ public async check(options: RateLimitConsumeOptions): Promise { - const foundUser = await this.app.cache.get(`ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`); + const foundUser = await this.app.cache.get( + `ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`, + ); if (!foundUser) { return { - canContinue: true, - headers: { - remaining: this.options.maxTokens, - reset: Date.now() + this.options.interval, - limit: this.options.maxTokens, - bucket: this.hash, - }, - }; + canContinue: true, + headers: { + remaining: this.options.maxTokens, + reset: Date.now() + this.options.interval, + limit: this.options.maxTokens, + bucket: this.hash, + }, + }; } const now = Date.now(); @@ -333,27 +362,30 @@ class RateLimit { if (foundUser.tokens === 0) { return { - canContinue: false, - headers: { - remaining: 0, - reset: foundUser.nextReset, - limit: this.options.maxTokens, - bucket: this.hash, - }, - }; + canContinue: false, + headers: { + remaining: 0, + reset: foundUser.nextReset, + limit: this.options.maxTokens, + bucket: this.hash, + }, + }; } - await this.app.cache.set(`ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`, foundUser); + await this.app.cache.set( + `ratelimit:${Buffer.from(options.identifier).toString("base64")}:${this.hash}`, + foundUser, + ); return { - canContinue: true, - headers: { - remaining: foundUser.tokens, - reset: foundUser.nextReset, - limit: this.options.maxTokens, - bucket: this.hash, - } - }; + canContinue: true, + headers: { + remaining: foundUser.tokens, + reset: foundUser.nextReset, + limit: this.options.maxTokens, + bucket: this.hash, + }, + }; } } diff --git a/src/Utils/Classes/Routing/Route.ts b/src/Utils/Classes/Routing/Route.ts index 58b07b89..084e5868 100644 --- a/src/Utils/Classes/Routing/Route.ts +++ b/src/Utils/Classes/Routing/Route.ts @@ -27,7 +27,9 @@ type ContentTypes = | "video/quicktime" | "video/webm"; -type CreateMiddleware | string = Record> = ExtraOptions | undefined; +type CreateMiddleware | string = Record> = + | ExtraOptions + | undefined; interface CreateRouteOptions< Route extends string, diff --git a/src/Utils/safeBigInt.ts b/src/Utils/safeBigInt.ts index c92a333a..bdfb3a0e 100644 --- a/src/Utils/safeBigInt.ts +++ b/src/Utils/safeBigInt.ts @@ -4,11 +4,11 @@ * @returns The BigInt value, or null if it failed to convert */ const safeBigInt = (value: string | number | bigint): bigint | null => { - try { - return BigInt(value); - } catch { - return null; - } -} + try { + return BigInt(value); + } catch { + return null; + } +}; export default safeBigInt; diff --git a/src/tableMigration.ts b/src/tableMigration.ts index ade44f1c..e44b58c4 100644 --- a/src/tableMigration.ts +++ b/src/tableMigration.ts @@ -25,7 +25,7 @@ await Client.getInstance().connect({ }); if (tables) { - console.log("Done!") + console.log("Done!"); } process.exit(); From 52228601dd618e8da394b98263f667436f2eec29 Mon Sep 17 00:00:00 2001 From: Darker-Ink Date: Sat, 14 Sep 2024 20:53:10 -0500 Subject: [PATCH 3/7] feat: start of banner stuff and banning / kicking --- src/Middleware/BodyValidator.ts | 2 +- src/Middleware/User.ts | 2 +- src/Routes/auth/register.ts | 3 +- src/Routes/auth/reset.ts | 2 +- src/Routes/oauth2/authorize.ts | 18 +- .../applications/[applicationId]/bot/index.ts | 2 + .../v1/applications/[applicationId]/index.ts | 8 +- src/Routes/v1/applications/index.ts | 10 +- .../channels/[channelId]/ack/[messageId].ts | 79 +- .../v1/channels/[channelId]/attachments.ts | 7 +- .../[channelId]/messages/[messageId]/index.ts | 59 +- .../v1/channels/[channelId]/messages/index.ts | 129 +- src/Routes/v1/channels/[channelId]/typing.ts | 5 +- src/Routes/v1/guilds/[guildId]/channels.ts | 47 +- src/Routes/v1/guilds/[guildId]/index.ts | 19 +- .../v1/guilds/[guildId]/invites/index.ts | 43 +- src/Routes/v1/guilds/[guildId]/leave.ts | 36 +- .../[guildId]/members/[memberId]/ban.ts | 301 +++- .../[guildId]/members/[memberId]/index.ts | 398 +++++- .../[guildId]/members/[memberId]/kick.ts | 255 +++- .../members/[memberId]/roles/[roleId].ts | 41 +- .../v1/guilds/[guildId]/roles/[roleId].ts | 15 +- src/Routes/v1/guilds/[guildId]/roles/index.ts | 13 +- src/Routes/v1/guilds/index.ts | 22 +- src/Routes/v1/invites/[inviteCode].ts | 41 +- src/Routes/v1/users/@me/index.ts | 6 +- .../v1/users/@me/relationships/index.ts | 4 +- src/Routes/v1/users/[userId]/index.ts | 4 +- src/Routes/v1/users/[userId]/profile.ts | 4 - src/Utils/Classes/App.ts | 9 +- src/Utils/Classes/BitFields/Permissions.ts | 2 +- src/Utils/Classes/DB/Client.ts | 518 ------- src/Utils/Classes/DB/Finder.ts | 32 - src/Utils/Classes/DB/Table.ts | 1212 ----------------- src/Utils/Classes/DB/createTable.ts | 15 - src/Utils/Classes/DB/createTableTypes.ts | 473 ------- src/Utils/Classes/DB/tableToCql.ts | 118 -- src/Utils/Classes/ErrorGen.ts | 12 + src/Utils/Cql | 2 +- src/Utils/Versioning/v1/PermissionCheck.ts | 31 + src/tableMigration.ts | 2 +- 41 files changed, 1200 insertions(+), 2801 deletions(-) delete mode 100644 src/Utils/Classes/DB/Client.ts delete mode 100644 src/Utils/Classes/DB/Finder.ts delete mode 100644 src/Utils/Classes/DB/Table.ts delete mode 100644 src/Utils/Classes/DB/createTable.ts delete mode 100644 src/Utils/Classes/DB/createTableTypes.ts delete mode 100644 src/Utils/Classes/DB/tableToCql.ts diff --git a/src/Middleware/BodyValidator.ts b/src/Middleware/BodyValidator.ts index fa958645..11a98ac3 100644 --- a/src/Middleware/BodyValidator.ts +++ b/src/Middleware/BodyValidator.ts @@ -33,7 +33,7 @@ const validate = ( ), ); } else if ("validate" in validator) { - const validated = validator.validate(body[key]); + const validated = validator.validate!(body[key]); if (!validated.valid) { if (validated.multiErrors) { diff --git a/src/Middleware/User.ts b/src/Middleware/User.ts index 49858889..06623eaf 100644 --- a/src/Middleware/User.ts +++ b/src/Middleware/User.ts @@ -3,7 +3,7 @@ import type { Requesters, UserMiddleware } from "@/Types/Routes.ts"; import { bufferToBigint } from "@/Utils/bigint.ts"; import type API from "@/Utils/Classes/API.ts"; import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; -import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; +import type { NullifyStuff } from "@/Utils/Cql/DB/createTableTypes"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; import type { CreateMiddleware, CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; diff --git a/src/Routes/auth/register.ts b/src/Routes/auth/register.ts index 86a15ca7..26e8fee7 100644 --- a/src/Routes/auth/register.ts +++ b/src/Routes/auth/register.ts @@ -5,7 +5,7 @@ import userMiddleware from "@/Middleware/User.ts"; import ForgotPassword from "@/Routes/auth/forgot.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { string } from "@/Types/BodyValidation.ts"; -import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; +import type { NullifyStuff } from "@/Utils/Cql/DB/createTableTypes"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; @@ -124,6 +124,7 @@ export default class Register extends Route { username: Encryption.encrypt(body.username), usernameTag: Encryption.encrypt(`${body.username}#${tag}`), oauth2: [], + banner: null, }; const token = Token.generateToken(Encryption.decrypt(userObject.userId!)); diff --git a/src/Routes/auth/reset.ts b/src/Routes/auth/reset.ts index e4dcc588..f969114e 100644 --- a/src/Routes/auth/reset.ts +++ b/src/Routes/auth/reset.ts @@ -2,7 +2,7 @@ import { statusTypes, verificationFlags } from "@/Constants.ts"; import bodyValidator from "@/Middleware/BodyValidator.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { snowflake, string } from "@/Types/BodyValidation.ts"; -import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; +import type { NullifyStuff } from "@/Utils/Cql/DB/createTableTypes"; import Encryption from "@/Utils/Classes/Encryption.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; diff --git a/src/Routes/oauth2/authorize.ts b/src/Routes/oauth2/authorize.ts index 9f8ecdf7..bfa752e4 100644 --- a/src/Routes/oauth2/authorize.ts +++ b/src/Routes/oauth2/authorize.ts @@ -3,7 +3,7 @@ import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; import FlagUtilsBInt from "@/Utils/Classes/BitFields/NewFlags.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; -import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; +import type { NullifyStuff } from "@/Utils/Cql/DB/createTableTypes"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; @@ -23,6 +23,7 @@ import PermissionHandler from "@/Utils/Versioning/v1/PermissionCheck.ts"; interface BotUser { avatar: string | null; + banner: string | null; bio?: string | null; flags: string; globalNickname: string | null; @@ -173,7 +174,7 @@ export default class FetchPatch extends Route { userId: application.botId, }, { - fields: ["avatar", "flags", "globalNickname", "publicFlags", "tag", "username"], + fields: ["avatar", "flags", "globalNickname", "publicFlags", "tag", "username", "banner"], }, ) : null; @@ -212,10 +213,9 @@ export default class FetchPatch extends Route { const guildMember = await guildMembersTable.get({ guildId: Encryption.encrypt(guildId), userId: Encryption.encrypt(user.id), - left: false, }); - if (!guildMember) { + if (!guildMember || guildMember.left) { return null; } @@ -272,6 +272,7 @@ export default class FetchPatch extends Route { bot: foundBot ? ({ avatar: foundBot.avatar, + banner: foundBot.banner, bio: application.description, flags: foundBot.flags ?? "0", globalNickname: foundBot.globalNickname, @@ -661,14 +662,13 @@ export default class FetchPatch extends Route { { guildId: Encryption.encrypt(guildId), userId: Encryption.encrypt(userId), - left: false, }, { - fields: ["flags", "roles"], + fields: ["flags", "roles", "left"], }, ); - if (!guildMember) { + if (!guildMember || guildMember.left) { set.status = 404; const invalidGuild = errorGen.UnknownGuild(); @@ -788,7 +788,7 @@ export default class FetchPatch extends Route { } const newMember: NullifyStuff = { - flags: Constants.guildMemberFlags.In, + flags: Constants.guildMemberFlags.None, guildId: Encryption.encrypt(guildId), guildMemberId: BigInt(this.App.snowflake.generate()), joinedAt: new Date(), @@ -796,7 +796,6 @@ export default class FetchPatch extends Route { roles: [Encryption.encrypt(guildId)], timeouts: [], userId: Encryption.encrypt(clientId), - channelAcks: [], left: false, timeoutUntil: null, }; @@ -813,6 +812,7 @@ export default class FetchPatch extends Route { permissions: Permissions.permissionToDatabase(permissions), position: 0, roleId: Encryption.encrypt(String(newMember.guildMemberId)), + managed: true, }; newMember.roles.push(role.roleId!); diff --git a/src/Routes/v1/applications/[applicationId]/bot/index.ts b/src/Routes/v1/applications/[applicationId]/bot/index.ts index c320da49..403fc15d 100644 --- a/src/Routes/v1/applications/[applicationId]/bot/index.ts +++ b/src/Routes/v1/applications/[applicationId]/bot/index.ts @@ -18,6 +18,7 @@ import tagGenerator from "@/Utils/TagGenerator.ts"; interface CreatedBot { user: { avatar: string | null; + banner: string | null; bio?: string | null; flags: string; globalNickname: string | null; @@ -166,6 +167,7 @@ export default class FetchPatch extends Route { user: { id: botId, avatar: application.avatar, + banner: null, flags: String(flags.PrivateFlags.bits), publicFlags: "0", globalNickname: application.name, diff --git a/src/Routes/v1/applications/[applicationId]/index.ts b/src/Routes/v1/applications/[applicationId]/index.ts index d54b46c1..70b665b5 100644 --- a/src/Routes/v1/applications/[applicationId]/index.ts +++ b/src/Routes/v1/applications/[applicationId]/index.ts @@ -20,6 +20,7 @@ interface ApplicationResponse { | null | { avatar: string | null; + banner: string | null; bio?: string | null; flags: string; globalNickname: string | null; @@ -36,6 +37,7 @@ interface ApplicationResponse { | string | { avatar: string | null; + banner: string | null; flags: string; globalNickname: string | null; id: string; @@ -89,7 +91,7 @@ export default class FetchPatch extends Route { userId: app.botId, }, { - fields: ["flags", "publicFlags", "userId", "username", "globalNickname", "tag", "avatar"], + fields: ["flags", "publicFlags", "userId", "username", "globalNickname", "tag", "avatar", "banner"], }, ) : null; @@ -99,7 +101,7 @@ export default class FetchPatch extends Route { userId: app.ownerId, }, { - fields: ["flags", "publicFlags", "userId", "username", "globalNickname", "tag", "avatar"], + fields: ["flags", "publicFlags", "userId", "username", "globalNickname", "tag", "avatar", "banner"], }, ); const botFlags = botUser ? new FlagFields(botUser.flags ?? "0", botUser?.publicFlags ?? "0") : null; @@ -111,6 +113,7 @@ export default class FetchPatch extends Route { bot: botUser ? { avatar: botUser.avatar, + banner: botUser.banner, bio: app.description, flags: String(botFlags!.cleanedPrivateFlags), globalNickname: botUser.globalNickname, @@ -127,6 +130,7 @@ export default class FetchPatch extends Route { owner: owner ? { avatar: owner.avatar, + banner: owner.banner, flags: String(ownerFlags!.cleanedPrivateFlags), globalNickname: owner.globalNickname, id: owner.userId ?? "", diff --git a/src/Routes/v1/applications/index.ts b/src/Routes/v1/applications/index.ts index 1c59bb4d..83829e1f 100644 --- a/src/Routes/v1/applications/index.ts +++ b/src/Routes/v1/applications/index.ts @@ -5,7 +5,7 @@ import userMiddleware from "@/Middleware/User.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { string } from "@/Types/BodyValidation.ts"; import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; -import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; +import type { NullifyStuff } from "@/Utils/Cql/DB/createTableTypes"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; @@ -30,6 +30,7 @@ interface ApplicationResponse { | null | { avatar: string | null; + banner: string | null; bio?: string | null; flags: string; globalNickname: string | null; @@ -46,6 +47,7 @@ interface ApplicationResponse { | string | { avatar: string | null; + banner: string | null; flags: string; globalNickname: string | null; id: string; @@ -97,7 +99,7 @@ export default class FetchPatch extends Route { userId: app.botId!, }, { - fields: ["flags", "publicFlags", "userId", "username", "globalNickname", "tag", "avatar"], + fields: ["flags", "publicFlags", "userId", "username", "globalNickname", "tag", "avatar", "banner"], }, ) : null; @@ -108,7 +110,7 @@ export default class FetchPatch extends Route { userId: app.ownerId!, }, { - fields: ["flags", "publicFlags", "userId", "username", "globalNickname", "tag", "avatar"], + fields: ["flags", "publicFlags", "userId", "username", "globalNickname", "tag", "avatar", "banner"], }, ) : null; @@ -122,6 +124,7 @@ export default class FetchPatch extends Route { bot: botUser ? { avatar: botUser.avatar, + banner: botUser.banner, bio: app.description, flags: String(botFlags!.cleanedPrivateFlags), globalNickname: botUser.globalNickname, @@ -138,6 +141,7 @@ export default class FetchPatch extends Route { owner: owner ? { avatar: owner.avatar, + banner: owner.banner, flags: String(ownerFlags!.cleanedPrivateFlags), globalNickname: owner.globalNickname, id: owner.userId ?? "", diff --git a/src/Routes/v1/channels/[channelId]/ack/[messageId].ts b/src/Routes/v1/channels/[channelId]/ack/[messageId].ts index 22d7aec8..ba33ede0 100644 --- a/src/Routes/v1/channels/[channelId]/ack/[messageId].ts +++ b/src/Routes/v1/channels/[channelId]/ack/[messageId].ts @@ -2,7 +2,6 @@ import Constants from "@/Constants.ts"; import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; import type FetchCreateMessages from "@/Routes/v1/channels/[channelId]/messages/index.ts"; -import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import { FlagUtils } from "@/Utils/Classes/BitFields/NewFlags.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; @@ -14,7 +13,7 @@ import type { CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; import Route from "@/Utils/Classes/Routing/Route.ts"; import { channelsTable } from "@/Utils/Cql/Tables/ChannelTable.ts"; import { guildMembersTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; -import { settingsTable } from "@/Utils/Cql/Tables/SettingsTable.ts"; +import { readStatesTable } from "@/Utils/Cql/Tables/ReadStatesTable.ts"; export default class AckingIDBased extends Route { @Method("post") @@ -65,14 +64,13 @@ export default class AckingIDBased extends Route { { guildId: channel.guildId!, userId: Encryption.encrypt(user.id), - left: false, }, { - fields: ["flags", "channelAcks", "guildMemberId"], + fields: ["flags", "guildMemberId", "left"], }, ); - if (!guildMember) { + if (!guildMember || guildMember.left) { set.status = 404; unknownChannel.addError({ @@ -85,20 +83,6 @@ export default class AckingIDBased extends Route { return unknownChannel.toJSON(); } - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - - if (!guildMemberFlags.has("In")) { - set.status = 404; - - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", - }, - }); - - return unknownChannel.toJSON(); - } let lastAckedMessageId: string | null = params?.messageId; @@ -109,57 +93,46 @@ export default class AckingIDBased extends Route { lastAckedMessageId = await messageFetcher.getLastMessageId(params.channelId); } - const userSettings = await settingsTable.get( - { - userId: Encryption.encrypt(user.id), - }, - { - fields: ["mentions"], - }, - ); + const fetchedChannelState = await readStatesTable.get({ + channelId: Encryption.encrypt(params.channelId), + userId: Encryption.encrypt(user.id), + }); + + if (fetchedChannelState) { + const decryptedMentions = Encryption.completeDecryption(fetchedChannelState.mentions); + + // ? we want to remove any mention in decryptedMentions which is older than lastAckedMessageId - if (userSettings?.mentions) { - await settingsTable.update( + const newMentions = decryptedMentions.filter((mention) => { + const timestamp = this.App.snowflake.timeStamp(mention.messageId!); + + return timestamp > this.App.snowflake.timeStamp(lastAckedMessageId!); + }); + + await readStatesTable.update( { + channelId: Encryption.encrypt(params.channelId), userId: Encryption.encrypt(user.id), }, { - mentions: userSettings.mentions.filter( - (mention) => mention.channelId !== Encryption.encrypt(params.messageId), - ) as { channelId: string; messageId: string; count: number }[], + mentions: Encryption.completeEncryption(newMentions), + messageId: Encryption.encrypt(lastAckedMessageId!), }, ); - } - - const acks = guildMember.channelAcks ?? []; - - const foundAck = acks.find((ack) => ack.channelId === Encryption.encrypt(params.channelId)); - - if (foundAck) { - foundAck.messageId = lastAckedMessageId ? Encryption.encrypt(lastAckedMessageId) : null; } else { - acks.push({ + await readStatesTable.create({ channelId: Encryption.encrypt(params.channelId), - messageId: lastAckedMessageId ? Encryption.encrypt(lastAckedMessageId) : null, + userId: Encryption.encrypt(user.id), + messageId: Encryption.encrypt(lastAckedMessageId!), }); } this.App.rabbitMQForwarder("message.ack", { channelId: params.channelId, messageId: lastAckedMessageId, + userId: user.id, }); - await guildMembersTable.update( - { - guildId: channel.guildId!, - left: false, - guildMemberId: guildMember.guildMemberId!, - }, - { - channelAcks: acks as { channelId: string; messageId: string }[], - }, - ); - set.status = 204; return; diff --git a/src/Routes/v1/channels/[channelId]/attachments.ts b/src/Routes/v1/channels/[channelId]/attachments.ts index 4e0352b7..3818b67d 100644 --- a/src/Routes/v1/channels/[channelId]/attachments.ts +++ b/src/Routes/v1/channels/[channelId]/attachments.ts @@ -284,7 +284,7 @@ export default class Attachments extends Route { }> { const unknownChannel = errorGen.UnknownChannel(); - if (!user.guilds.includes(Encryption.decrypt(channel.guildId!))) { + if (!(await user.checkInGuild(Encryption.decrypt(channel.guildId!)))) { const invalidGuild = errorGen.UnknownGuild(); invalidGuild.addError({ @@ -306,14 +306,13 @@ export default class Attachments extends Route { { guildId: channel.guildId!, userId: Encryption.encrypt(user.id), - left: false, }, { - fields: ["flags", "roles"], + fields: ["flags", "roles", "left"], }, ); - if (!guildMember) { + if (!guildMember || guildMember.left) { unknownChannel.addError({ channel: { code: "UnknownChannel", diff --git a/src/Routes/v1/channels/[channelId]/messages/[messageId]/index.ts b/src/Routes/v1/channels/[channelId]/messages/[messageId]/index.ts index 118eb2b7..9c35495f 100644 --- a/src/Routes/v1/channels/[channelId]/messages/[messageId]/index.ts +++ b/src/Routes/v1/channels/[channelId]/messages/[messageId]/index.ts @@ -6,7 +6,6 @@ import { embedRules } from "@/Routes/v1/channels/[channelId]/messages/index.ts"; import { any, type Infer, string } from "@/Types/BodyValidation.ts"; import type { Embed } from "@/Types/Embed.ts"; import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; -import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import { FlagUtils } from "@/Utils/Classes/BitFields/NewFlags.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; @@ -116,14 +115,13 @@ export default class DeleteEditGetMessage extends Route { { guildId: channel.guildId!, userId: Encryption.encrypt(user.id), - left: false, }, { - fields: ["flags", "roles"], + fields: ["flags", "roles", "left"], }, ); - if (!guildMember) { + if (!guildMember || guildMember.left) { unknownChannel.addError({ channel: { code: "UnknownChannel", @@ -136,21 +134,6 @@ export default class DeleteEditGetMessage extends Route { return unknownChannel.toJSON(); } - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - - if (!guildMemberFlags.has("In")) { - set.status = 404; - - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", - }, - }); - - return unknownChannel.toJSON(); - } - const message = await this.tryMessage(params.channelId, params.messageId); if (!message) { @@ -405,7 +388,8 @@ export default class DeleteEditGetMessage extends Route { const guildMember = await guildMembersTable.get({ guildId: channel.guildId!, userId: Encryption.encrypt(user.id), - left: false, + }, { + fields: ["left", "roles", "flags"] }); if (!guildMember) { @@ -421,21 +405,6 @@ export default class DeleteEditGetMessage extends Route { return unknownChannel.toJSON(); } - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - - if (!guildMemberFlags.has("In")) { - set.status = 404; - - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", - }, - }); - - return unknownChannel.toJSON(); - } - const permissionOverrides = channel.permissionOverrides ? ( await Promise.all( @@ -604,14 +573,13 @@ export default class DeleteEditGetMessage extends Route { { guildId: channel.guildId!, userId: Encryption.encrypt(user.id), - left: false, }, { - fields: ["flags", "roles"], + fields: ["flags", "roles", "left"], }, ); - if (!guildMember) { + if (!guildMember || guildMember.left) { unknownChannel.addError({ channel: { code: "UnknownChannel", @@ -624,21 +592,6 @@ export default class DeleteEditGetMessage extends Route { return unknownChannel.toJSON(); } - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - - if (!guildMemberFlags.has("In")) { - set.status = 404; - - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", - }, - }); - - return unknownChannel.toJSON(); - } - const permissionOverrides = channel.permissionOverrides ? ( await Promise.all( diff --git a/src/Routes/v1/channels/[channelId]/messages/index.ts b/src/Routes/v1/channels/[channelId]/messages/index.ts index f3c93a4a..84439a2d 100644 --- a/src/Routes/v1/channels/[channelId]/messages/index.ts +++ b/src/Routes/v1/channels/[channelId]/messages/index.ts @@ -5,7 +5,6 @@ import userMiddleware from "@/Middleware/User.ts"; import FetchPatch from "@/Routes/v1/users/@me/index.ts"; import { string, type Infer, snowflake, number, enums, any, array } from "@/Types/BodyValidation.ts"; import type API from "@/Utils/Classes/API.ts"; -import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import { FlagUtils } from "@/Utils/Classes/BitFields/NewFlags.ts"; import Permissions, { type PermissionKey } from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; @@ -32,7 +31,7 @@ import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; import { permissionsOverridesTable } from "@/Utils/Cql/Tables/PermissionsOverideTable.ts"; import { rolesTable } from "@/Utils/Cql/Tables/RoleTable.ts"; import { parser, type EmbedToRules } from "@/Utils/EmbedChecker.ts"; -import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; +import type { NullifyStuff } from "@/Utils/Cql/DB/createTableTypes.ts"; import { filesTable } from "@/Utils/Cql/Tables/FileTable.ts"; const messageData = { @@ -70,6 +69,7 @@ export interface ReturnMessage { }[]; author: { avatar: string | null; + banner: string | null; flags: bigint | string; globalNickname: string | null; id: string; @@ -439,7 +439,7 @@ export default class FetchCreateMessages extends Route { permissions: ["ViewChannels", "SendMessages"], }); - if (!success) { + if (!success || !permissionHandler) { return response; } @@ -569,52 +569,49 @@ export default class FetchCreateMessages extends Route { updatedDate: null, }; - // const allowedMentionFlags = new FlagUtils(insertMsg.allowedMentions!, Constants.allowedMentions); - // todo: update this to the new system - // if (allowedMentionFlags.hasOneArray(["Users", "All"])) { - // for (const userMention of mentions.users) { - // const fetchedUser = await usersTable.get( - // { - // userId: Encryption.encrypt(userMention), - // }, - // { - // fields: ["userId", "flags", "publicFlags"], - // }, - // ); - - // if (!fetchedUser) { - // continue; - // } - - // insertMsg.mentions.push(Encryption.encrypt(userMention)); - - // const settings = await settingsTable.get( - // { - // userId: Encryption.encrypt(userMention), - // }, - // { - // fields: ["mentions"], - // }, - // ); - - // if (!settings) { - // continue; - // } - - // await settingsTable.update( - // { - // userId: Encryption.encrypt(userMention), - // }, - // { - // mentions: (settings.mentions ?? []).concat({ - // channelId: Encryption.encrypt(params.channelId), - // messageId: Encryption.encrypt(messageId), - // count: 1, - // }) as never, - // }, - // ); - // } - // } + const allowedMentionFlags = new FlagUtils(insertMsg.allowedMentions!, Constants.allowedMentions); + + if (allowedMentionFlags.hasOneArray(["All", "Roles"])) { + for (const role of mentions.roles) { + const roleExists = await rolesTable.get( + { + roleId: Encryption.encrypt(role), + }, + { + fields: ["roleId", "mentionable"], + }, + ); + + if (!roleExists) { + continue; + } + + if (!roleExists.mentionable && !permissionHandler.hasAnyRole(["CanMentionRoles"])) { + continue; + } + + insertMsg.mentionRoles.push(Encryption.encrypt(role)); + } + } + + if (allowedMentionFlags.hasOneArray(["Users", "All"])) { + for (const mention of mentions.users) { + const userExists = await usersTable.get( + { + userId: Encryption.encrypt(mention), + }, + { + fields: ["userId"], + }, + ); + + if (!userExists) { + continue; + } + + insertMsg.mentions.push(Encryption.encrypt(mention)); + } + } for (const channel of mentions.channels) { const channelExists = await channelsTable.get( @@ -643,7 +640,7 @@ export default class FetchCreateMessages extends Route { embeds: insertMsg.embeds as never, flags: insertMsg.flags, mentionChannels: insertMsg.mentionChannels, - mentionRoles: [], + mentionRoles: insertMsg.mentionRoles, mentions: insertMsg.mentions, messageId: BigInt(insertMsg.messageId!), replyingTo: insertMsg.replyingTo, @@ -678,6 +675,7 @@ export default class FetchCreateMessages extends Route { globalNickname: fetchedUser.globalNickname, tag: fetchedUser.tag, avatar: fetchedUser.avatar, + banner: fetchedUser.banner, publicFlags: fetchedUser.publicFlags, flags: fetchedUser.flags, }, @@ -694,7 +692,7 @@ export default class FetchCreateMessages extends Route { allowedMentions: body.allowedMentions ?? 0, mentions: { channels: insertMsg.mentionChannels, - roles: [], + roles: insertMsg.mentionRoles, users: insertMsg.mentions, }, pinned: false, @@ -710,6 +708,10 @@ export default class FetchCreateMessages extends Route { this.handleEmbeds(message, insertMsg.bucket!, params.channelId); } + if (allowedMentionFlags.hasArray(["All", "Users", "Roles", "Everyone", "Here"])) { + this.handleMentions(message, insertMsg.bucket!, params.channelId); + } + return Encryption.completeDecryption>(message); } @@ -879,6 +881,8 @@ export default class FetchCreateMessages extends Route { ); } + private async handleMentions(message: ReturnMessage, bucket: string, channelId: string) {} + private removeNulls(obj: Record): Record { const newObj: Record = {}; @@ -1047,10 +1051,9 @@ export default class FetchCreateMessages extends Route { const guildMember = await guildMembersTable.get({ guildId: channel.guildId!, userId: Encryption.encrypt(user.id), - left: false, }); - if (!guildMember) { + if (!guildMember || guildMember.left) { unknownChannel.addError({ channel: { code: "UnknownChannel", @@ -1068,26 +1071,6 @@ export default class FetchCreateMessages extends Route { }; } - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - - if (!guildMemberFlags.has("In")) { - set.status = 404; - - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", - }, - }); - - return { - success: false, - channel: null, - response: unknownChannel.toJSON(), - permissionHandler: null, - }; - } - // ? These are the possible text channels, if they aren't one of these they obv do not have messages you can fetch if (!channelFlags.hasOneArray(["Dm", "GroupChat", "GuildNewMember", "GuildNews", "GuildRules", "GuildText"])) { set.status = 403; diff --git a/src/Routes/v1/channels/[channelId]/typing.ts b/src/Routes/v1/channels/[channelId]/typing.ts index b0386188..f07f3eb8 100644 --- a/src/Routes/v1/channels/[channelId]/typing.ts +++ b/src/Routes/v1/channels/[channelId]/typing.ts @@ -83,14 +83,13 @@ export default class Typing extends Route { { guildId: channel.guildId!, userId: Encryption.encrypt(user.id), - left: false, }, { - fields: ["flags", "roles"], + fields: ["flags", "roles", "left"], }, ); - if (!guildMember) { + if (!guildMember || guildMember.left) { unknownChannel.addError({ channel: { code: "UnknownChannel", diff --git a/src/Routes/v1/guilds/[guildId]/channels.ts b/src/Routes/v1/guilds/[guildId]/channels.ts index 4dbcc565..1dce46d8 100644 --- a/src/Routes/v1/guilds/[guildId]/channels.ts +++ b/src/Routes/v1/guilds/[guildId]/channels.ts @@ -2,9 +2,8 @@ import Constants from "@/Constants.ts"; import bodyValidator from "@/Middleware/BodyValidator.ts"; import userMiddleware, { type UserMiddlewareType } from "@/Middleware/User.ts"; import { any, boolean, enums, type Infer, number, object, snowflake, string } from "@/Types/BodyValidation.ts"; -import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; -import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; +import type { NullifyStuff } from "@/Utils/Cql/DB/createTableTypes"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; @@ -80,24 +79,16 @@ export default class FetchCreateChannels extends Route { { guildId: Encryption.encrypt(params.guildId), userId: Encryption.encrypt(user.id), - left: false, }, - { fields: ["flags", "roles"] }, + { fields: ["flags", "roles", "left"] }, ); - if (!guildMember) { + if (!guildMember || guildMember.left) { set.status = 404; return invalidGuild.toJSON(); } - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - - if (!guildMemberFlags.has("In")) { - set.status = 404; - - return invalidGuild.toJSON(); - } const channels = await channelsTable.find({ guildId: Encryption.encrypt(params.guildId), @@ -240,20 +231,11 @@ export default class FetchCreateChannels extends Route { { guildId: Encryption.encrypt(params.guildId), userId: Encryption.encrypt(user.id), - left: false, }, - { fields: ["flags", "roles"] }, + { fields: ["flags", "roles", "left"] }, ); - if (!guildMember) { - set.status = 404; - - return invalidGuild.toJSON(); - } - - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - - if (!guildMemberFlags.has("In")) { + if (!guildMember || guildMember.left) { set.status = 404; return invalidGuild.toJSON(); @@ -474,26 +456,7 @@ export default class FetchCreateChannels extends Route { this.App.rabbitMQForwarder("channel.create", { guildId: params.guildId, - name: data.name, id: data.channelId, - parentId: data.parentId, - description: data.description, - ageRestricted: data.ageRestricted, - slowmode: data.slowmode, - type: data.type, - children: data.children, - position: data.position, - permissionOverrides: Object.fromEntries( - permissions.map((perm) => [ - Encryption.decrypt(perm.permissionId!), - { - allow: Permissions.permissionFromDatabase(perm.allow), - deny: Permissions.permissionFromDatabase(perm.deny), - type: perm.type, - slowmode: perm.slowmode, - }, - ]), - ), }); set.status = 201; diff --git a/src/Routes/v1/guilds/[guildId]/index.ts b/src/Routes/v1/guilds/[guildId]/index.ts index 045b2fd1..eacfc804 100644 --- a/src/Routes/v1/guilds/[guildId]/index.ts +++ b/src/Routes/v1/guilds/[guildId]/index.ts @@ -136,13 +136,14 @@ export default class FetchEditGuild extends Route { userId: rawGuild.guild.ownerId, }, { - fields: ["flags", "globalNickname", "avatar", "userId", "publicFlags", "tag", "username"], + fields: ["flags", "globalNickname", "avatar", "userId", "publicFlags", "tag", "username", "banner"], }, ); if (fetchedUser) { guild.owner = { avatar: fetchedUser.avatar ? Encryption.decrypt(fetchedUser.avatar) : null, + banner: fetchedUser.banner ? Encryption.decrypt(fetchedUser.banner) : null, flags: FlagFields.cleanPrivateFlags(fetchedUser.flags ?? 0), globalNickname: fetchedUser.globalNickname ? Encryption.decrypt(fetchedUser.globalNickname) : null, id: Encryption.decrypt(fetchedUser.userId!), @@ -245,17 +246,23 @@ export default class FetchEditGuild extends Route { { guildId: Encryption.encrypt(params.guildId), userId: Encryption.encrypt(user.id), - left: false, }, { - fields: ["flags", "roles", "guildId"], + fields: ["flags", "roles", "guildId", "left"], }, ); - if (!guildMember) { - set.status = 500; + if (!guildMember || guildMember.left) { + notFound.addError({ + guildId: { + code: "UnknownGuild", + message: "The provided guild does not exist, or you do not have access to it.", + }, + }); - return "Internal Server Error :("; + set.status = 404; + + return notFound.toJSON(); } const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); diff --git a/src/Routes/v1/guilds/[guildId]/invites/index.ts b/src/Routes/v1/guilds/[guildId]/invites/index.ts index a8d0954a..83c15a69 100644 --- a/src/Routes/v1/guilds/[guildId]/invites/index.ts +++ b/src/Routes/v1/guilds/[guildId]/invites/index.ts @@ -4,7 +4,6 @@ import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { number, snowflake } from "@/Types/BodyValidation.ts"; -import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; @@ -46,16 +45,15 @@ export default class FetchInvite extends Route { { guildId: Encryption.encrypt(params.guildId)!, userId: Encryption.encrypt(user.id), - left: false, }, { - fields: ["flags", "guildMemberId", "roles"], + fields: ["flags", "guildMemberId", "roles", "left"], }, ); const unknownGuild = errorGen.UnknownGuild(); - if (!guildMember) { + if (!guildMember || guildMember.left) { unknownGuild.addError({ guild: { code: "UnknownGuild", @@ -68,21 +66,6 @@ export default class FetchInvite extends Route { return unknownGuild.toJSON(); } - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - - if (!guildMemberFlags.has("In")) { - set.status = 404; - - unknownGuild.addError({ - guild: { - code: "UnknownGuild", - message: "The provided guild does not exist or you do not have access to it.", - }, - }); - - return unknownGuild.toJSON(); - } - const roles = ( await Promise.all( guildMember.roles.map(async (id) => @@ -164,17 +147,16 @@ export default class FetchInvite extends Route { const guildMember = await guildMembersTable.get( { guildId: Encryption.encrypt(params.guildId)!, - userId: Encryption.encrypt(user.id), - left: false, + userId: Encryption.encrypt(user.id) }, { - fields: ["flags", "roles"], + fields: ["flags", "roles", "left"], }, ); const unknownGuild = errorGen.UnknownGuild(); - if (!guildMember) { + if (!guildMember || guildMember.left) { unknownGuild.addError({ guild: { code: "UnknownGuild", @@ -187,21 +169,6 @@ export default class FetchInvite extends Route { return unknownGuild.toJSON(); } - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - - if (!guildMemberFlags.has("In")) { - set.status = 404; - - unknownGuild.addError({ - guild: { - code: "UnknownGuild", - message: "The provided guild does not exist or you do not have access to it.", - }, - }); - - return unknownGuild.toJSON(); - } - const channel = await channelsTable.get( { channelId: Encryption.encrypt(body.channelId), diff --git a/src/Routes/v1/guilds/[guildId]/leave.ts b/src/Routes/v1/guilds/[guildId]/leave.ts index 665e8f54..eb17f7a2 100644 --- a/src/Routes/v1/guilds/[guildId]/leave.ts +++ b/src/Routes/v1/guilds/[guildId]/leave.ts @@ -43,23 +43,13 @@ export default class LeaveGuild extends Route { { guildId: Encryption.encrypt(params.guildId), userId: Encryption.encrypt(user.id), - left: false, }, { - fields: ["flags", "guildMemberId", "joinedAt"], + fields: ["flags", "guildMemberId", "joinedAt", "left"], }, ); - if (!guildMember) { - set.status = 500; - - return "Internal Server Error :("; - } - - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - const noPermission = errorGen.MissingPermissions(); - - if (!guildMemberFlags.has("In")) { + if (!guildMember || guildMember.left) { notFound.addError({ guildId: { code: "UnknownGuild", @@ -72,6 +62,9 @@ export default class LeaveGuild extends Route { return notFound.toJSON(); } + const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); + const noPermission = errorGen.MissingPermissions(); + if (guildMemberFlags.has("Owner")) { noPermission.addError({ guildId: { @@ -86,23 +79,14 @@ export default class LeaveGuild extends Route { return noPermission.toJSON(); } - await guildMembersTable.create({ + await guildMembersTable.update({ guildId: Encryption.encrypt(params.guildId), - userId: Encryption.encrypt(user.id), - flags: Constants.guildMemberFlags.Left, guildMemberId: guildMember.guildMemberId!, - roles: [], + }, { left: true, - channelAcks: [], - joinedAt: guildMember.joinedAt, - nickname: null, - timeouts: [], - }); - - await guildMembersTable.remove({ - guildId: Encryption.encrypt(params.guildId), - guildMemberId: guildMember.guildMemberId!, - left: false, + flags: Constants.guildMemberFlags.None, + roles: [], + nickname: null }); await usersTable.update( diff --git a/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts b/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts index 188ad20a..6e3f4232 100644 --- a/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts +++ b/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts @@ -1,13 +1,308 @@ +import { guildMemberFlags } from "@/Constants.ts"; +import bodyValidator from "@/Middleware/BodyValidator.ts"; +import userMiddleware, { type UserMiddlewareType } from "@/Middleware/User.ts"; +import { type Infer, string } from "@/Types/BodyValidation.ts"; +import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; +import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import errorGen from "@/Utils/Classes/ErrorGen.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; -import Route from "@/Utils/Classes/Routing/Route.ts"; +import Middleware from "@/Utils/Classes/Routing/Decorators/Middleware.ts"; +import Route, { type CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; +import { bansTable } from "@/Utils/Cql/Tables/BanTable.ts"; +import { guildMembersTable, type GuildMemberTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; +import { rolesTable } from "@/Utils/Cql/Tables/RoleTable.ts"; +import PermissionHandler from "@/Utils/Versioning/v1/PermissionCheck.ts"; + +const banMemberBody = { + reason: string().max(200).optional(), + unbanAt: string().optional(), +} export default class BanMember extends Route { @Method("delete") @Description("Change this Description when working on this route") @ContentTypes("application/json") - public deleteMember() { - return {}; + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: "User", + }), + ) + @Middleware(bodyValidator(banMemberBody)) + public async deleteMember({ + user, + set, + params, + body, + }: CreateRoute<"/:guildId/members/:memberId", Infer, [UserMiddlewareType]>) { + + if (body.unbanAt !== undefined) { // ? we validate the date, and make sure its not in the past, and not more then 2 years in the future + const unbanAt = new Date(body.unbanAt); + const now = new Date(); + + if (unbanAt < now) { + const invalidDate = errorGen.InvalidField(); + + invalidDate.addError({ + unbanAt: { + code: "InvalidDate", + message: "The provided date is in the past.", + }, + }); + + set.status = 400; + + return invalidDate.toJSON(); + } + + if (unbanAt > new Date(now.getTime() + 1000 * 60 * 60 * 24 * 365 * 2)) { + const invalidDate = errorGen.InvalidField(); + + invalidDate.addError({ + unbanAt: { + code: "InvalidDate", + message: "The provided date is more than 2 years in the future.", + }, + }); + + set.status = 400; + + return invalidDate.toJSON(); + } + } + + if (user.id === params.memberId) { + const cannotBanSelf = errorGen.CannotInvokeSelf(); + + cannotBanSelf.addError({ + userId: { + code: "CannotBanSelf", + message: "You cannot ban yourself.", + }, + }); + + set.status = 403; + + return cannotBanSelf.toJSON(); + } + + const { success, response, permissions } = await this.permissionCheck(params.guildId, { + user, + set, + }); + + if (!success || !permissions) { + return response; + } + + if (!permissions.hasAnyRole(["BanMembers"])) { + const noPermission = errorGen.MissingPermissions(); + + noPermission.addError({ + permissions: { + code: "MissingPermissions", + message: "You are missing the \"BanMembers\" permission.", + requiredPermissions: ["BanMembers"], // ? testing field may be removed at any time + }, + }); + + set.status = 403; + + return noPermission.toJSON(); + } + + const member = await guildMembersTable.get({ + guildId: Encryption.encrypt(params.guildId), + userId: Encryption.encrypt(params.memberId) + }, { + fields: ["flags", "roles", "guildMemberId", "left"] + }); + + if (!member || member.left) { + const unknownUser = errorGen.UnknownMember(); + + unknownUser.addError({ + userId: { + code: "UnknownUser", + message: "The provided user does not exist or is not in the guild.", + }, + }); + + set.status = 404; + + return unknownUser.toJSON(); + } + + const membersFlags = new GuildMemberFlags(member.flags ?? 0); + + if (membersFlags.has("Owner") || membersFlags.has("CoOwner")) { + if (!permissions.isOwner) { + const cannotBanOwner = errorGen.FailedToKickBan(); + + cannotBanOwner.addError({ + userId: { + code: "CannotBanOwner", + message: "You cannot ban the owner of the guild.", + }, + }); + + set.status = 403; + + return cannotBanOwner.toJSON(); + } + } + + const memberRoles = ( + await Promise.all( + member.roles.map(async (id) => + rolesTable.get( + { roleId: id, guildId: Encryption.encrypt(params.guildId) }, + { fields: ["position", "roleId"] }, + ), + ), + ) + ).filter((val) => val !== null); + + if (!permissions.canBanKick(memberRoles.map((role) => ({ id: role.roleId!, position: role.position! })))) { + const cannotBan = errorGen.FailedToKickBan(); + + cannotBan.addError({ + userId: { + code: "CannotBan", + message: "You cannot ban this user.", + }, + }); + + set.status = 403; + + return cannotBan.toJSON(); + } + + await guildMembersTable.update({ + guildId: Encryption.encrypt(params.guildId), + userId: Encryption.encrypt(params.memberId) + }, { + left: true, + flags: guildMemberFlags.Banned, + roles: [], + nickname: null, + }); + + await bansTable.create({ + bannedDate: new Date(), + bannerId: Encryption.encrypt(user.id), + guildId: Encryption.encrypt(params.guildId), + reason: body.reason ?? null, + unbanDate: body.unbanAt ? new Date(body.unbanAt) : null, + userId: Encryption.encrypt(params.memberId), // ! maybe guild member id would be better? + }) + + this.App.rabbitMQForwarder("guildMember.ban", { + guildId: params.guildId, + userId: params.memberId, + kickedBy: user.id, + reason: body.reason, + }) + + set.status = 204; + + return; + } + + private async permissionCheck( + guildId: string, + { + user, + set, + }: { + user: UserMiddlewareType["user"]; + set: CreateRoute["set"]; + }, + ): Promise<{ + success: boolean; + response: unknown; + permissions: PermissionHandler | null; + guildMember: GuildMemberTable | null; + }> { + const unknownChannel = errorGen.UnknownChannel(); + + if (!(await user.checkInGuild(Encryption.decrypt(guildId)))) { + const invalidGuild = errorGen.UnknownGuild(); + + invalidGuild.addError({ + guildId: { + code: "UnknownGuild", + message: "The provided guild does not exist, or you do not have access to it.", + }, + }); + + set.status = 404; + + return { + success: false, + response: invalidGuild.toJSON(), + permissions: null, + guildMember: null, + }; + } + + const guildMember = await guildMembersTable.get( + { + guildId: Encryption.encrypt(guildId), + userId: Encryption.encrypt(user.id) + }, + { + fields: ["flags", "roles", "guildMemberId", "joinedAt", "nickname", "timeoutUntil", "left"], + }, + ); + + if (!guildMember || guildMember.left) { + unknownChannel.addError({ + channel: { + code: "UnknownChannel", + message: "The provided channel does not exist or you do not have access to it.", + }, + }); + + set.status = 404; + + return { + success: false, + response: unknownChannel.toJSON(), + permissions: null, + guildMember: null, + }; + } + + const roles = ( + await Promise.all( + guildMember.roles.map(async (id) => + rolesTable.get( + { roleId: id, guildId: Encryption.encrypt(guildId) }, + { fields: ["roleId", "permissions", "position"] }, + ), + ), + ) + ).filter((val) => val !== null); + + const permissionCheck = new PermissionHandler( + user.id, + guildMember.flags ?? 0, + roles.map((role) => ({ + id: role.roleId!, + permissions: Permissions.permissionFromDatabase(role.permissions), + position: role.position!, + })), + ); + + return { + success: true, + response: null, + permissions: permissionCheck, + guildMember: guildMember as GuildMemberTable, + }; } } diff --git a/src/Routes/v1/guilds/[guildId]/members/[memberId]/index.ts b/src/Routes/v1/guilds/[guildId]/members/[memberId]/index.ts index 2b0dde71..6247b0d7 100644 --- a/src/Routes/v1/guilds/[guildId]/members/[memberId]/index.ts +++ b/src/Routes/v1/guilds/[guildId]/members/[memberId]/index.ts @@ -1,27 +1,82 @@ import bodyValidator from "@/Middleware/BodyValidator.ts"; import userMiddleware, { type UserMiddlewareType } from "@/Middleware/User.ts"; import { any, type Infer, string } from "@/Types/BodyValidation.ts"; +import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; +import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; +import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import errorGen from "@/Utils/Classes/ErrorGen.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Middleware from "@/Utils/Classes/Routing/Decorators/Middleware.ts"; import Route, { type CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; +import { guildMembersTable, type GuildMemberTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; +import { rolesTable } from "@/Utils/Cql/Tables/RoleTable.ts"; +import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; +import PermissionHandler from "@/Utils/Versioning/v1/PermissionCheck.ts"; const modifyMemberBody = { nickname: string().optional().nullable().max(32), + /** + * Note: you do not need to provide the @everyone role id, it'll always be added to the user. + */ roles: any().optional(), + timeoutUntil: string().optional().nullable(), }; export default class FetchPatchMember extends Route { @Method("get") - @Description("Change this Description when working on this route") - @ContentTypes("application/json") - public getMember() { - return {}; + @Description("Fetch a member") + @ContentTypes("any") + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: "User", + }), + ) + public async getMember({ user, set, params }: CreateRoute<"/:guildId/members/:memberId", any, [UserMiddlewareType]>) { + const { permissions, response, success, guildMember } = await this.permissionCheck(params.guildId, { user, set }); + + if (!success || !permissions || !guildMember) { + return response; + } + + const guildUser = await usersTable.get( + { + userId: Encryption.encrypt(params.memberId), + }, + { + fields: ["avatar", "flags", "globalNickname", "publicFlags", "tag", "username"], + }, + ); + + const userFlags = new FlagFields(guildUser?.flags ?? "0", guildUser?.publicFlags ?? "0"); + const guildFlags = new GuildMemberFlags(guildMember.flags ?? 0); + + return Encryption.completeDecryption({ + avatar: null, // todo: guild specific avatars + // banner: null, // todo: guild specific banners + owner: guildFlags.has("Owner"), + roles: guildMember.roles, + nickname: guildMember.nickname, + user: guildUser + ? { + avatar: guildUser.avatar, + id: params.memberId, + globalNickname: guildUser.globalNickname, + username: guildUser.username, + tag: guildUser.tag, + flags: userFlags.cleanedPrivateFlags, + publicFlags: userFlags.PublicFlags.cleaned, + } + : null, + timedOutUntil: guildMember.timeoutUntil ? guildMember.timeoutUntil.toISOString() : null, + }); } @Method("patch") - @Description("Change this Description when working on this route") + @Description("Modify a member") @ContentTypes("application/json") @Middleware( userMiddleware({ @@ -30,9 +85,334 @@ export default class FetchPatchMember extends Route { }), ) @Middleware(bodyValidator(modifyMemberBody)) - public patchMember( - _opts: CreateRoute<"/:guildId/members/:memberId", Infer, [UserMiddlewareType]>, - ) { - return {}; + public async patchMember({ + user, + set, + params, + body, + }: CreateRoute<"/:guildId/members/:memberId", Infer, [UserMiddlewareType]>) { + if ( + body.roles !== undefined && + (!Array.isArray(body.roles) || body.roles.some((role) => typeof role !== "string")) + ) { + const invalidBody = errorGen.InvalidField(); + + invalidBody.addError({ + roles: { + code: "InvalidBody", + message: "The roles field must be an array of strings.", + }, + }); + + set.status = 400; + + return invalidBody.toJSON(); + } + + // ? make sure its not in the past as well + if ( + (body.timeoutUntil && !new Date(body.timeoutUntil).getTime()) || + new Date(body.timeoutUntil ?? "").getTime() < Date.now() + ) { + const invalidBody = errorGen.InvalidField(); + + invalidBody.addError({ + timeoutUntil: { + code: "InvalidBody", + message: "The timeoutUntil field must be a valid date in the future.", + }, + }); + + set.status = 400; + + return invalidBody.toJSON(); + } + + const { permissions, response, success, guildMember } = await this.permissionCheck(params.guildId, { user, set }); + + if (!success || !permissions || !guildMember) { + return response; + } + + if (user.id !== params.memberId) { + const missingPermissions = errorGen.MissingPermissions(); + + if (body.nickname !== undefined && !permissions.hasAnyRole(["ManageNickname"])) { + missingPermissions.addError({ + nickname: { + code: "MissingPermissions", + message: "You do not have permission to change the nickname of this user.", + }, + }); + } + + if (body.roles !== undefined && !permissions.hasAnyRole(["ManageMemberRoles"])) { + missingPermissions.addError({ + roles: { + code: "MissingPermissions", + message: "You do not have permission to change the roles of this user.", + }, + }); + } + + if (body.timeoutUntil !== undefined && !permissions.hasAnyRole(["TimeoutMembers"])) { + missingPermissions.addError({ + timeoutUntil: { + code: "MissingPermissions", + message: "You do not have permission to timeout this user.", + }, + }); + } + + if (missingPermissions.hasErrors()) { + set.status = 403; + + return missingPermissions.toJSON(); + } + } + + if (user.id === params.memberId) { + const missingPermissions = errorGen.MissingPermissions(); + + if (!permissions.hasAnyRole(["Nickname"])) { + missingPermissions.addError({ + nickname: { + code: "MissingPermissions", + message: "You do not have permission to change your own nickname.", + }, + }); + } + + if (!permissions.hasAnyRole(["ManageMemberRoles"])) { + missingPermissions.addError({ + roles: { + code: "MissingPermissions", + message: "You do not have permission to change your own roles.", + }, + }); + } + + if (missingPermissions.hasErrors()) { + set.status = 403; + + return missingPermissions.toJSON(); + } + } + + if (body.timeoutUntil !== undefined && user.id === params.memberId) { + // note: this is a bit of a hack, I cannot disable "exactOptionalPropertyTypes" as it breaks other stuff + // @ts-expect-error + body.timeoutUntil = undefined; + } + + let newRoles = body.roles ?? []; + + if (body.roles !== undefined) { + const mappedRoles = ( + await Promise.all( + body.roles.map(async (roleId) => { + const role = await rolesTable.get( + { + roleId: Encryption.encrypt(roleId), + guildId: Encryption.encrypt(params.guildId), + }, + { + fields: ["roleId", "permissions", "position"], + }, + ); + + if (!role) { + return null; + } + + return { + id: Encryption.decrypt(role.roleId!), + permissions: Permissions.permissionFromDatabase(role.permissions), + position: role.position!, + }; + }), + ) + ).filter((val) => val !== null); + + // ? "removes" any roles which do not exist + newRoles = mappedRoles.map((role) => role.id); + + const missingPermissions = errorGen.MissingPermissions(); + + for (const role of mappedRoles) { + if ( + !permissions.canManageRole({ + id: role.id, + permissions: role.permissions, + position: role.position, + }) + ) { + missingPermissions.addError({ + [`role.${body.roles.indexOf(role.id)}`]: { + code: "MissingPermissions", + message: "You do not have permission to assign this role.", + }, + }); + } + } + + if (missingPermissions.hasErrors()) { + set.status = 403; + + return missingPermissions.toJSON(); + } + } + + if (!newRoles.includes(params.guildId)) { + newRoles.push(params.guildId); + } + + await guildMembersTable.update( + { + guildId: Encryption.encrypt(params.guildId), + guildMemberId: guildMember!.guildMemberId, + }, + { + ...(body.nickname !== undefined ? { nickname: body.nickname ? Encryption.encrypt(body.nickname) : null } : {}), + ...(body.roles !== undefined ? { roles: newRoles.map((role) => Encryption.encrypt(role)) } : {}), + ...(body.timeoutUntil !== undefined + ? { timeoutUntil: body.timeoutUntil ? new Date(body.timeoutUntil) : null } + : {}), + }, + ); + + // todo: guild member update + + const guildUser = await usersTable.get( + { + userId: Encryption.encrypt(params.memberId), + }, + { + fields: ["avatar", "flags", "globalNickname", "publicFlags", "tag", "username"], + }, + ); + + this.App.rabbitMQForwarder("guildMember.update", { + guildId: params.guildId, + userId: params.memberId, + guildMemberId: String(guildMember.guildMemberId), + }); + + const userFlags = new FlagFields(guildUser?.flags ?? "0", guildUser?.publicFlags ?? "0"); + const guildFlags = new GuildMemberFlags(guildMember.flags ?? 0); + + return Encryption.completeDecryption({ + avatar: null, // todo: guild specific avatars + // banner: null, // todo: guild specific banners + nickname: body.nickname !== undefined ? body.nickname : guildMember.nickname, + owner: guildFlags.has("Owner"), + roles: newRoles, + user: guildUser + ? { + avatar: guildUser.avatar, + id: params.memberId, + globalNickname: guildUser.globalNickname, + username: guildUser.username, + tag: guildUser.tag, + flags: userFlags.cleanedPrivateFlags, + publicFlags: userFlags.PublicFlags.cleaned, + } + : null, + timedOutUntil: guildMember.timeoutUntil ? guildMember.timeoutUntil.toISOString() : null, + }); + } + + private async permissionCheck( + guildId: string, + { + user, + set, + }: { + user: UserMiddlewareType["user"]; + set: CreateRoute["set"]; + }, + ): Promise<{ + success: boolean; + response: unknown; + permissions: PermissionHandler | null; + guildMember: GuildMemberTable | null; + }> { + const unknownChannel = errorGen.UnknownChannel(); + + if (!(await user.checkInGuild(Encryption.decrypt(guildId)))) { + const invalidGuild = errorGen.UnknownGuild(); + + invalidGuild.addError({ + guildId: { + code: "UnknownGuild", + message: "The provided guild does not exist, or you do not have access to it.", + }, + }); + + set.status = 404; + + return { + success: false, + response: invalidGuild.toJSON(), + permissions: null, + guildMember: null, + }; + } + + const guildMember = await guildMembersTable.get( + { + guildId: Encryption.encrypt(guildId), + userId: Encryption.encrypt(user.id), + }, + { + fields: ["flags", "roles", "guildMemberId", "joinedAt", "nickname", "timeoutUntil", "left"], + }, + ); + + if (!guildMember || guildMember.left) { + unknownChannel.addError({ + channel: { + code: "UnknownChannel", + message: "The provided channel does not exist or you do not have access to it.", + }, + }); + + set.status = 404; + + return { + success: false, + response: unknownChannel.toJSON(), + permissions: null, + guildMember: null, + }; + } + + const roles = ( + await Promise.all( + guildMember.roles.map(async (id) => + rolesTable.get( + { roleId: id, guildId: Encryption.encrypt(guildId) }, + { fields: ["roleId", "permissions", "position"] }, + ), + ), + ) + ).filter((val) => val !== null); + + const permissionCheck = new PermissionHandler( + user.id, + guildMember.flags ?? 0, + roles.map((role) => ({ + id: role.roleId!, + permissions: Permissions.permissionFromDatabase(role.permissions), + position: role.position!, + })), + ); + + return { + success: true, + response: null, + permissions: permissionCheck, + guildMember: guildMember as GuildMemberTable, + }; } } diff --git a/src/Routes/v1/guilds/[guildId]/members/[memberId]/kick.ts b/src/Routes/v1/guilds/[guildId]/members/[memberId]/kick.ts index 81dcb343..2b17fa3d 100644 --- a/src/Routes/v1/guilds/[guildId]/members/[memberId]/kick.ts +++ b/src/Routes/v1/guilds/[guildId]/members/[memberId]/kick.ts @@ -1,13 +1,262 @@ +import { guildMemberFlags } from "@/Constants.ts"; +import bodyValidator from "@/Middleware/BodyValidator.ts"; +import userMiddleware, { type UserMiddlewareType } from "@/Middleware/User.ts"; +import { type Infer, string } from "@/Types/BodyValidation.ts"; +import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; +import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import errorGen from "@/Utils/Classes/ErrorGen.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; -import Route from "@/Utils/Classes/Routing/Route.ts"; +import Middleware from "@/Utils/Classes/Routing/Decorators/Middleware.ts"; +import Route, { type CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; +import { guildMembersTable, type GuildMemberTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; +import { rolesTable } from "@/Utils/Cql/Tables/RoleTable.ts"; +import PermissionHandler from "@/Utils/Versioning/v1/PermissionCheck.ts"; + +const kickMemberBody = { + reason: string().max(200).optional(), +} export default class KickMember extends Route { @Method("delete") @Description("Change this Description when working on this route") @ContentTypes("application/json") - public deleteMember() { - return {}; + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: "User", + }), + ) + @Middleware(bodyValidator(kickMemberBody)) + public async deleteMember({ + user, + set, + params, + body, + }: CreateRoute<"/:guildId/members/:memberId", Infer, [UserMiddlewareType]>) { + + if (user.id === params.memberId) { + const cannotKickSelf = errorGen.CannotInvokeSelf(); + + cannotKickSelf.addError({ + userId: { + code: "CannotKickSelf", + message: "You cannot kick yourself.", + }, + }); + + set.status = 403; + + return cannotKickSelf.toJSON(); + } + + const { success, response, permissions } = await this.permissionCheck(params.guildId, { + user, + set, + }); + + if (!success || !permissions) { + return response; + } + + if (!permissions.hasAnyRole(["KickMembers"])) { + const noPermission = errorGen.MissingPermissions(); + + noPermission.addError({ + permissions: { + code: "MissingPermissions", + message: "You are missing the \"KickMembers\" permission.", + requiredPermissions: ["KickMembers"], // ? testing field may be removed at any time + }, + }); + + set.status = 403; + + return noPermission.toJSON(); + } + + const member = await guildMembersTable.get({ + guildId: Encryption.encrypt(params.guildId), + userId: Encryption.encrypt(params.memberId) + }, { + fields: ["flags", "roles", "guildMemberId", "left"] + }); + + if (!member || member.left) { + const unknownUser = errorGen.UnknownMember(); + + unknownUser.addError({ + userId: { + code: "UnknownUser", + message: "The provided user does not exist or is not in the guild.", + }, + }); + + set.status = 404; + + return unknownUser.toJSON(); + } + + const membersFlags = new GuildMemberFlags(member.flags ?? 0); + + if (membersFlags.has("Owner") || membersFlags.has("CoOwner")) { + if (!permissions.isOwner) { + const cannotKickOwner = errorGen.FailedToKickBan(); + + cannotKickOwner.addError({ + userId: { + code: "CannotKickOwner", + message: "You cannot kick the owner of the guild.", + }, + }); + + set.status = 403; + + return cannotKickOwner.toJSON(); + } + } + + const memberRoles = ( + await Promise.all( + member.roles.map(async (id) => + rolesTable.get( + { roleId: id, guildId: Encryption.encrypt(params.guildId) }, + { fields: ["position", "roleId"] }, + ), + ), + ) + ).filter((val) => val !== null); + + if (!permissions.canBanKick(memberRoles.map((role) => ({ id: role.roleId!, position: role.position! })))) { + const cannotKick = errorGen.FailedToKickBan(); + + cannotKick.addError({ + userId: { + code: "CannotKick", + message: "You cannot kick this user.", + }, + }); + + set.status = 403; + + return cannotKick.toJSON(); + } + + await guildMembersTable.update({ + guildId: Encryption.encrypt(params.guildId), + userId: Encryption.encrypt(params.memberId) + }, { + left: true, + flags: guildMemberFlags.Kicked, + roles: [], + nickname: null, + }); + + this.App.rabbitMQForwarder("guildMember.kick", { + guildId: params.guildId, + userId: params.memberId, + kickedBy: user.id, + reason: body.reason, + }) + + set.status = 204; + + return; + } + + private async permissionCheck( + guildId: string, + { + user, + set, + }: { + user: UserMiddlewareType["user"]; + set: CreateRoute["set"]; + }, + ): Promise<{ + success: boolean; + response: unknown; + permissions: PermissionHandler | null; + guildMember: GuildMemberTable | null; + }> { + const unknownChannel = errorGen.UnknownChannel(); + + if (!(await user.checkInGuild(Encryption.decrypt(guildId)))) { + const invalidGuild = errorGen.UnknownGuild(); + + invalidGuild.addError({ + guildId: { + code: "UnknownGuild", + message: "The provided guild does not exist, or you do not have access to it.", + }, + }); + + set.status = 404; + + return { + success: false, + response: invalidGuild.toJSON(), + permissions: null, + guildMember: null, + }; + } + + const guildMember = await guildMembersTable.get( + { + guildId: Encryption.encrypt(guildId), + userId: Encryption.encrypt(user.id) + }, + { + fields: ["flags", "roles", "guildMemberId", "joinedAt", "nickname", "timeoutUntil", "left"], + }, + ); + + if (!guildMember || guildMember.left) { + unknownChannel.addError({ + channel: { + code: "UnknownChannel", + message: "The provided channel does not exist or you do not have access to it.", + }, + }); + + set.status = 404; + + return { + success: false, + response: unknownChannel.toJSON(), + permissions: null, + guildMember: null, + }; + } + + const roles = ( + await Promise.all( + guildMember.roles.map(async (id) => + rolesTable.get( + { roleId: id, guildId: Encryption.encrypt(guildId) }, + { fields: ["roleId", "permissions", "position"] }, + ), + ), + ) + ).filter((val) => val !== null); + + const permissionCheck = new PermissionHandler( + user.id, + guildMember.flags ?? 0, + roles.map((role) => ({ + id: role.roleId!, + permissions: Permissions.permissionFromDatabase(role.permissions), + position: role.position!, + })), + ); + + return { + success: true, + response: null, + permissions: permissionCheck, + guildMember: guildMember as GuildMemberTable, + }; } } diff --git a/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/[roleId].ts b/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/[roleId].ts index 1b640a01..0f6e476b 100644 --- a/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/[roleId].ts +++ b/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/[roleId].ts @@ -1,5 +1,4 @@ import userMiddleware, { type UserMiddlewareType } from "@/Middleware/User.ts"; -import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; @@ -51,15 +50,17 @@ export default class AddRemoveRole extends Route { { guildId: Encryption.encrypt(params.guildId), guildMemberId: member.guildMemberId!, - left: false, }, { roles: member.roles }, ); set.status = 204; - // todo: guild member update - // this.App.rabbitMQForwarder("guildMember.update", {}); + this.App.rabbitMQForwarder("guildMember.update", { + guildId: params.guildId, + userId: params.memberId, + guildMemberId: String(member.guildMemberId), + }); return; } @@ -117,15 +118,17 @@ export default class AddRemoveRole extends Route { { guildId: Encryption.encrypt(params.guildId), guildMemberId: member.guildMemberId!, - left: false, }, { roles: member.roles }, ); set.status = 204; - // todo: guild member update - // this.App.rabbitMQForwarder("guildMember.update", {}); + this.App.rabbitMQForwarder("guildMember.update", { + guildId: params.guildId, + userId: params.memberId, + guildMemberId: String(member.guildMemberId), + }); return; } @@ -164,12 +167,11 @@ export default class AddRemoveRole extends Route { { guildId: Encryption.encrypt(params.guildId), userId: Encryption.encrypt(user.id), - left: false, }, - { fields: ["flags", "roles"] }, + { fields: ["flags", "roles", "left"] }, ); - if (!guildMember) { + if (!guildMember || guildMember.left) { set.status = 404; this.App.logger.debug("Guild member not found"); @@ -181,20 +183,6 @@ export default class AddRemoveRole extends Route { }; } - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - - if (!guildMemberFlags.has("In")) { - set.status = 404; - - this.App.logger.debug("Not in guild", guildMember); - - return { - success: false, - response: invalidGuild.toJSON(), - member: null, - }; - } - const usersRoles = ( await Promise.all( guildMember.roles.map(async (id) => @@ -241,12 +229,11 @@ export default class AddRemoveRole extends Route { { guildId: Encryption.encrypt(params.guildId), userId: Encryption.encrypt(params.memberId === "@me" ? user.id : params.memberId), - left: false, }, - { fields: ["roles", "guildMemberId"] }, + { fields: ["roles", "guildMemberId", "left"] }, ); - if (!member) { + if (!member || member.left) { set.status = 404; const notFound = errorGen.UnknownMember(); diff --git a/src/Routes/v1/guilds/[guildId]/roles/[roleId].ts b/src/Routes/v1/guilds/[guildId]/roles/[roleId].ts index 539d0d2c..016a6c25 100644 --- a/src/Routes/v1/guilds/[guildId]/roles/[roleId].ts +++ b/src/Routes/v1/guilds/[guildId]/roles/[roleId].ts @@ -52,21 +52,12 @@ export default class FetchDeleteRole extends Route { const guildMember = await guildMembersTable.get( { guildId: Encryption.encrypt(params.guildId), - userId: Encryption.encrypt(user.id), - left: false, + userId: Encryption.encrypt(user.id) }, - { fields: ["flags"] }, + { fields: ["left"] }, ); - if (!guildMember) { - set.status = 404; - - return invalidGuild.toJSON(); - } - - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - - if (!guildMemberFlags.has("In")) { + if (!guildMember || guildMember.left) { set.status = 404; return invalidGuild.toJSON(); diff --git a/src/Routes/v1/guilds/[guildId]/roles/index.ts b/src/Routes/v1/guilds/[guildId]/roles/index.ts index 76353846..6ee0e426 100644 --- a/src/Routes/v1/guilds/[guildId]/roles/index.ts +++ b/src/Routes/v1/guilds/[guildId]/roles/index.ts @@ -80,20 +80,11 @@ export default class FetchCreateRoles extends Route { { guildId: Encryption.encrypt(params.guildId), userId: Encryption.encrypt(user.id), - left: false, }, - { fields: ["flags"] }, + { fields: ["left"] }, ); - if (!guildMember) { - set.status = 404; - - return invalidGuild.toJSON(); - } - - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - - if (!guildMemberFlags.has("In")) { + if (!guildMember || guildMember.left) { set.status = 404; return invalidGuild.toJSON(); diff --git a/src/Routes/v1/guilds/index.ts b/src/Routes/v1/guilds/index.ts index 72712166..922c7c68 100644 --- a/src/Routes/v1/guilds/index.ts +++ b/src/Routes/v1/guilds/index.ts @@ -26,7 +26,7 @@ import { type PermissionsOverridesTable, } from "@/Utils/Cql/Tables/PermissionsOverideTable.ts"; import { guildMembersTable, type GuildMemberTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; -import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; +import type { NullifyStuff } from "@/Utils/Cql/DB/createTableTypes.ts"; const postGuild = { name: string().max(Constants.settings.Max.GuildNameLength).min(2), @@ -109,6 +109,7 @@ export interface FinishedGuild { owner?: { avatar: string | null; flags: string; + banner: string | null; globalNickname: string | null; id: string; publicFlags: string; @@ -280,13 +281,14 @@ export default class FetchGuilds extends Route { userId: rawGuild.guild.ownerId, }, { - fields: ["avatar", "flags", "publicFlags", "globalNickname", "tag", "username", "userId"], + fields: ["avatar", "flags", "publicFlags", "globalNickname", "tag", "username", "userId", "banner"], }, ); if (fetchedUser) { guild.owner = { avatar: fetchedUser.avatar ? Encryption.decrypt(fetchedUser.avatar) : null, + banner: fetchedUser.banner ? Encryption.decrypt(fetchedUser.banner) : null, flags: FlagFields.cleanPrivateFlags(fetchedUser.flags ?? "0"), globalNickname: fetchedUser.globalNickname ? Encryption.decrypt(fetchedUser.globalNickname) : null, id: Encryption.decrypt(fetchedUser.userId!), @@ -404,7 +406,7 @@ export default class FetchGuilds extends Route { type: number; }[] = []; - interface role { + interface Role { allowedAgeRestricted?: boolean; color: number; hoist: boolean; @@ -415,13 +417,13 @@ export default class FetchGuilds extends Route { position: number; } - const newRoles: role[] = []; + const newRoles: Role[] = []; const guildId = this.App.snowflake.generate(); if (body.roles) { // ? Like body.channels, we shouldn't trust the clients ids, they are only used for channels permission overrides for (const role of body.roles) { - const rl: Partial = {}; + const rl: Partial = {}; if (role.permissions) { if (permissionOverrideType(role.permissions)) { @@ -449,7 +451,7 @@ export default class FetchGuilds extends Route { rl.oldId = role.id ?? null; - newRoles.push(rl as role); + newRoles.push(rl as Role); } if (!newRoles.some((role) => role.id === guildId)) { @@ -592,6 +594,7 @@ export default class FetchGuilds extends Route { deleteable: role.id !== guildId, mentionable: true, roleId: Encryption.encrypt(role.id ?? this.App.snowflake.generate()), + managed: false, }); } @@ -609,7 +612,7 @@ export default class FetchGuilds extends Route { }; members.push({ - flags: Constants.guildMemberFlags.Owner | Constants.guildMemberFlags.In, + flags: Constants.guildMemberFlags.Owner, guildId: Encryption.encrypt(guildId), joinedAt: new Date(), nickname: null, @@ -617,7 +620,6 @@ export default class FetchGuilds extends Route { timeouts: [], userId: Encryption.encrypt(user.id), guildMemberId: this.App.snowflake.generate(true), - channelAcks: [], left: false, timeoutUntil: null, }); @@ -705,7 +707,7 @@ export default class FetchGuilds extends Route { nickname: null, roles: [guildId], joinedAt: new Date(), - flags: Constants.guildMemberFlags.Owner | Constants.guildMemberFlags.In, + flags: Constants.guildMemberFlags.Owner, timeouts: [], }, }); @@ -718,7 +720,7 @@ export default class FetchGuilds extends Route { nickname: null, roles: [guildId], joinedAt: new Date(), - flags: Constants.guildMemberFlags.Owner | Constants.guildMemberFlags.In, + flags: Constants.guildMemberFlags.Owner, timeouts: [], owner: true, }, diff --git a/src/Routes/v1/invites/[inviteCode].ts b/src/Routes/v1/invites/[inviteCode].ts index 8b06b5b6..fc02879d 100644 --- a/src/Routes/v1/invites/[inviteCode].ts +++ b/src/Routes/v1/invites/[inviteCode].ts @@ -20,7 +20,7 @@ import { channelsTable } from "@/Utils/Cql/Tables/ChannelTable.ts"; import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; import { invitesTable } from "@/Utils/Cql/Tables/InviteTable.ts"; import { guildMembersTable, type GuildMemberTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; -import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; +import type { NullifyStuff } from "@/Utils/Cql/DB/createTableTypes.ts"; export default class FetchJoinInvite extends Route { public randomKey = generateKeySync("aes", { length: 256 }); @@ -264,17 +264,12 @@ export default class FetchJoinInvite extends Route { return invalidInvite.toJSON(); } - const member = - (await guildMembersTable.get({ - userId: Encryption.encrypt(user.id), - guildId: inviteExists.guildId!, - left: false, - })) ?? - (await guildMembersTable.get({ - userId: Encryption.encrypt(user.id), - guildId: inviteExists.guildId!, - left: true, - })); + const member = await guildMembersTable.get({ + userId: Encryption.encrypt(user.id), + guildId: inviteExists.guildId!, + }, { + fields: ["left", "flags", "guildMemberId"] + }) if (member) { const memberFlags = new GuildMemberFlags(member.flags ?? 0); @@ -294,7 +289,7 @@ export default class FetchJoinInvite extends Route { return banned.toJSON(); } - if (memberFlags.has("In")) { + if (!member.left) { const alreadyIn = errorGen.InvalidInvite(); alreadyIn.addError({ @@ -308,14 +303,6 @@ export default class FetchJoinInvite extends Route { return alreadyIn.toJSON(); } - - if (memberFlags.hasOneArray(["Left", "Kicked"])) { - await guildMembersTable.remove({ - guildId: inviteExists.guildId!, - left: true, - guildMemberId: member.guildMemberId!, - }); - } } // @ts-expect-error -- This is fine @@ -353,7 +340,7 @@ export default class FetchJoinInvite extends Route { } const newMember: NullifyStuff = { - flags: Constants.guildMemberFlags.In, + flags: Constants.guildMemberFlags.None, guildId: inviteExists.guildId!, guildMemberId: BigInt(this.App.snowflake.generate()), joinedAt: new Date(), @@ -361,12 +348,18 @@ export default class FetchJoinInvite extends Route { roles: [inviteExists.guildId!], timeouts: [], userId: Encryption.encrypt(user.id), - channelAcks: [], left: false, timeoutUntil: null, }; - await guildMembersTable.insert(newMember); + member ? await guildMembersTable.update({ + guildId: inviteExists.guildId!, + guildMemberId: member.guildMemberId!, + }, { + left: false, + joinedAt: new Date(), + roles: [inviteExists.guildId!], + }) : await guildMembersTable.insert(newMember); await invitesTable.update( { diff --git a/src/Routes/v1/users/@me/index.ts b/src/Routes/v1/users/@me/index.ts index 9fa91fa9..75c5d7c3 100644 --- a/src/Routes/v1/users/@me/index.ts +++ b/src/Routes/v1/users/@me/index.ts @@ -5,7 +5,7 @@ import userMiddleware from "@/Middleware/User.ts"; import type { Infer } from "@/Types/BodyValidation.ts"; import { string } from "@/Types/BodyValidation.ts"; import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; -import type { NullifyStuff, UnNullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; +import type { NullifyStuff, UnNullifyStuff } from "@/Utils/Cql/DB/createTableTypes"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; @@ -26,6 +26,7 @@ export interface User { email: string; emailVerified: boolean; flags: string; + banner: string | null; globalNickname: string | null; id: string; mfaEnabled: boolean; @@ -39,6 +40,7 @@ export interface User { const patchSelf = { username: string().min(3).max(72).optional(), avatar: string().optional().nullable(), + banner: string().optional().nullable(), bio: string().max(300).optional().nullable(), globalNickname: string().optional().nullable(), phoneNumber: string().optional().nullable(), @@ -79,6 +81,7 @@ export default class FetchPatch extends Route { "tag", "avatar", "phoneNumber", + "banner", ], }, ); @@ -102,6 +105,7 @@ export default class FetchPatch extends Route { globalNickname: fetchedUser.globalNickname, tag: fetchedUser.tag ?? "", avatar: fetchedUser.avatar, + banner: fetchedUser.banner, publicFlags: String(flags.PublicFlags.cleaned), flags: String(flags.cleanedPrivateFlags), phoneNumber: null, diff --git a/src/Routes/v1/users/@me/relationships/index.ts b/src/Routes/v1/users/@me/relationships/index.ts index 9bc46696..cfa229e4 100644 --- a/src/Routes/v1/users/@me/relationships/index.ts +++ b/src/Routes/v1/users/@me/relationships/index.ts @@ -55,6 +55,7 @@ export default class Relationships extends Route { | never | { avatar: string | null; + banner: string | null; flags: string; globalNickname: string | null; id: string; @@ -106,7 +107,7 @@ export default class Relationships extends Route { userId: Encryption.encrypt(userId!), }, { - fields: ["avatar", "flags", "globalNickname", "publicFlags", "tag", "username"], + fields: ["avatar", "flags", "globalNickname", "publicFlags", "tag", "username", "banner"], }, ); // ? it should always exist since we are fetching it from a relationship @@ -124,6 +125,7 @@ export default class Relationships extends Route { : decrypted.secondaryUserFlags === relationshipFlags.FriendRequest, user: { avatar: fetchedUser.avatar, + banner: fetchedUser.banner, flags: FlagFields.cleanPrivateFlags(fetchedUser.flags ?? 0), globalNickname: fetchedUser.globalNickname, publicFlags: fetchedUser.publicFlags ?? "0", diff --git a/src/Routes/v1/users/[userId]/index.ts b/src/Routes/v1/users/[userId]/index.ts index d5c2fc22..55db7b6b 100644 --- a/src/Routes/v1/users/[userId]/index.ts +++ b/src/Routes/v1/users/[userId]/index.ts @@ -13,6 +13,7 @@ import { settingsTable } from "@/Utils/Cql/Tables/SettingsTable.ts"; import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; interface User { + banner: string | null; avatar: string | null; bio?: string | null; flags: string; @@ -39,7 +40,7 @@ export default class Fetch extends Route { userId: Encryption.encrypt(params.userId), }, { - fields: ["flags", "publicFlags", "userId", "username", "globalNickname", "tag", "avatar"], + fields: ["flags", "publicFlags", "userId", "username", "globalNickname", "tag", "avatar", "banner"], }, ); @@ -68,6 +69,7 @@ export default class Fetch extends Route { globalNickname: fetchedUser.globalNickname, tag: fetchedUser.tag ?? "0000", avatar: fetchedUser.avatar, + banner: fetchedUser.banner, publicFlags: String(flags.PublicFlags.cleaned), flags: String(flags.cleanedPrivateFlags), }; diff --git a/src/Routes/v1/users/[userId]/profile.ts b/src/Routes/v1/users/[userId]/profile.ts index 0586b710..253edbc1 100644 --- a/src/Routes/v1/users/[userId]/profile.ts +++ b/src/Routes/v1/users/[userId]/profile.ts @@ -11,10 +11,6 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; import { settingsTable } from "@/Utils/Cql/Tables/SettingsTable.ts"; import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; -// ? Why would we want to have a "profile" route instead of adding it to the normal user route -// ? Great question, the reason is I want it to be the same as the @me route, since the profile meta data is sent in the -// ? Gateway payload for identify, I want to keep it the same as the @me route, so that way I can easily document it - interface ProfileResponse { // TODO: Add connections (Discord, Twitter (X), Github, Steam, Spotify (Not sure if we can do this one), Reddit, Youtube, Twitch) bio: string | null; diff --git a/src/Utils/Classes/App.ts b/src/Utils/Classes/App.ts index 5684fc71..820b860f 100644 --- a/src/Utils/Classes/App.ts +++ b/src/Utils/Classes/App.ts @@ -12,11 +12,9 @@ import CustomLogger from "./Logger.ts"; import type { GetChannelTypes, channels } from "./Shared/RabbitMQ.ts"; import Snowflake from "./Snowflake.ts"; import SystemInfo from "./SystemInfo.ts"; -import Client from "./DB/Client.ts"; +import Client from "../Cql/DB/Client.ts"; import RabbitMQ from "./Shared/RabbitMQ.ts"; -type GitType = "Added" | "Copied" | "Deleted" | "Ignored" | "Modified" | "None" | "Renamed" | "Unmerged" | "Untracked"; - class App { public ready = false; @@ -45,11 +43,6 @@ class App { public static git: SimpleGit = simpleGit(); - public static gitFiles: { - filePath: string; - type: GitType; - }[] = []; - public static gitBranch = "Unknown"; public static gitCommit = "Unknown"; diff --git a/src/Utils/Classes/BitFields/Permissions.ts b/src/Utils/Classes/BitFields/Permissions.ts index ed4924d0..af1a02fe 100644 --- a/src/Utils/Classes/BitFields/Permissions.ts +++ b/src/Utils/Classes/BitFields/Permissions.ts @@ -10,7 +10,7 @@ import Constants, { permissions } from "@/Constants.ts"; import FlagUtilsBInt from "./NewFlags.ts"; -import type { NullifyStuff } from "@/Utils/Classes/DB/createTableTypes.ts"; +import type { NullifyStuff } from "@/Utils/Cql/DB/createTableTypes.ts"; import type { BigintPair } from "@/Utils/Cql/Tables/RoleTable.ts"; import safeBigInt from "@/Utils/safeBigInt.ts"; diff --git a/src/Utils/Classes/DB/Client.ts b/src/Utils/Classes/DB/Client.ts deleted file mode 100644 index ba4e6723..00000000 --- a/src/Utils/Classes/DB/Client.ts +++ /dev/null @@ -1,518 +0,0 @@ -import { EventEmitter } from "node:events"; -import process from "node:process"; -import { createInterface } from "node:readline/promises"; -import cassandra, { type ClientOptions } from "@kastelapp/cassandra-driver"; -import App from "@/Utils/Classes/App.ts"; -import ListenerMap from "@/Utils/Classes/ListenerMap.ts"; -import safePromise from "@/Utils/safePromise.ts"; -import type Table from "./Table.ts"; -import type { Options } from "./createTableTypes.ts"; - -const possibleYes = ["y", "yes", "yeah", "sure", "ok"]; - -interface Client { - emit(event: "Error", error: unknown): boolean; - emit(event: "Close" | "Connected"): boolean; - on(event: "Error", listener: (error: unknown) => void): this; - on(event: "Close" | "Connected", listener: () => void): this; -} - -interface OurClientOptions { - db?: { - durableWrites?: boolean; - networkTopologyStrategy?: { - [DataCenter: string]: number; - }; - options?: Omit; - }; - keyspace: string; - nodes: string[]; - password: string; - username: string; -} - -class Client extends EventEmitter { - private static instance: Client; - - // @ts-expect-error - public static tables: ListenerMap>> = new ListenerMap(); - - public constructor() { - super(); - - Client.instance = this; - } - - public connected = false; - - #connection!: cassandra.Client; - - public get connection() { - return this.#connection; - } - - public static getInstance(): Client { - if (!Client.instance) { - Client.instance = new Client(); - } - - return Client.instance; - } - - public async connect(options: OurClientOptions) { - this.#connection = new cassandra.Client({ - contactPoints: options.nodes, - localDataCenter: options.db?.networkTopologyStrategy - ? Object.keys(options.db?.networkTopologyStrategy)?.[0] ?? "datacenter1" - : "datacenter1", - credentials: { - username: options.username, - password: options.password, - }, - ...options, - }); - - const [, error] = await safePromise(this.connection.connect()); - - if (error) { - throw new Error(`Failed to connect to Cassandra: ${error.message}`); - } - - let createKeySpace = `CREATE KEYSPACE IF NOT EXISTS ${options.keyspace}`; - - if (options.db?.networkTopologyStrategy && Object.keys(options.db?.networkTopologyStrategy).length > 0) { - createKeySpace += ` WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy' ${Object.entries( - options.db?.networkTopologyStrategy, - ) - .map(([DataCenter, ReplicationFactor]) => `, '${DataCenter}' : ${ReplicationFactor}`) - .join(", ")} }`; - } else { - createKeySpace += " WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 }"; - } - - createKeySpace += ` AND DURABLE_WRITES = ${options.db?.durableWrites ?? false};`; - - const [, keyspaceError] = await safePromise(this.connection.execute(createKeySpace)); - - if (keyspaceError) { - throw new Error(`Failed to create keyspace: ${keyspaceError.message}`); - } - - const [, useKeySpaceError] = await safePromise(this.connection.execute(`USE ${options.keyspace}`)); - - if (useKeySpaceError) { - throw new Error(`Failed to use keyspace: ${useKeySpaceError.message}`); - } - - Client.tables.on("change", async (table) => { - if (!table || !Client.instance.connected) { - return; - } - - await this.handleTable(options.keyspace, table); - }); - - for (const table of Client.tables.values()) { - // ? we got to query the tables metadata to confirm everything matches what the table is set to currently - await this.handleTable(options.keyspace, table); - } - - this.emit("Connected"); - - this.connected = true; - } - - // @ts-expect-error -- Its fine - private async handleTable(keyspace: string, table: Table<_T>) { - const tableCommand = `SELECT * FROM system_schema.tables WHERE keyspace_name = '${keyspace}' AND table_name = '${table.snakeifyString(table.options.tableName)}'`; - const columnsCommand = `SELECT * FROM system_schema.columns WHERE keyspace_name = '${keyspace}' AND table_name = '${table.snakeifyString(table.options.tableName)}'`; - const indexesCommand = `SELECT * FROM system_schema.indexes WHERE keyspace_name = '${keyspace}' AND table_name = '${table.snakeifyString(table.options.tableName)}'`; - - const [data, error] = await safePromise(this.connection.execute(tableCommand)); - - if (error || !data) { - throw new Error(`Failed to get table metadata: ${error?.message}`); - } - - const cmd = table.toCQLCommand(); - - if (data.rows.length === 0) { - for (const type of cmd.types) { - const [, error] = await safePromise(this.connection.execute(type)); - - if (error) { - throw new Error(`Failed to create type: ${error.message}`); - } - - App.staticLogger.info(`Created type ${type}`); - } - - const [, error] = await safePromise(this.connection.execute(cmd.table)); - - if (error) { - console.log(cmd.table); - throw new Error(`[${table.snakeifyString(table.options.tableName)}] Failed to create table: ${error.message}`); - } - - App.staticLogger.info(`Created table ${table.snakeifyString(table.options.tableName)}`); - - for (const index of cmd.indexes) { - const [, error] = await safePromise(this.connection.execute(index)); - - if (error) { - throw new Error(`Failed to create index: ${error.message}`); - } - - // ? get the part after INDEX or EXISTS - const indxName = index.replace(/CREATE INDEX (?:IF NOT EXISTS )?/, "").replace(/ ON .*/, ""); - - App.staticLogger.info(`Created index ${indxName}`); - } - - // ? We return due to the fact there's nothing else for us to do - return; - } - - for (const type of cmd.types) { - const [, error] = await safePromise(this.connection.execute(type)); - - if (error) { - throw new Error(`Failed to create type: ${error.message}`); - } - } - - const [columns, columnsError] = await safePromise(this.connection.execute(columnsCommand)); - - if (columnsError || !columns) { - throw new Error(`Failed to get columns metadata: ${columnsError?.message}`); - } - - const [indexes, indexesError] = await safePromise(this.connection.execute(indexesCommand)); - - if (indexesError || !indexes) { - throw new Error(`Failed to get indexes metadata: ${indexesError?.message}`); - } - - const columnNames: { - name: string; - type: string; - kind: string; - position: number; - clusteringOrder: "asc" | "desc"; - }[] = columns.rows.map((row) => ({ - name: row.column_name, - type: row.type, - kind: row.kind, - position: row.position, - clusteringOrder: row.clustering_order, - })); - - const indexColumns: { - name: string; - kind: string; - target: string; - }[] = indexes.rows.map((row) => ({ - name: row.index_name, - kind: row.kind, - target: row.options.target, - })); - - const remotePrimaryKeys = columnNames.filter( - (column) => column.kind === "partition_key" || column.kind === "clustering", - ); - - const fixedPrimaryKeys: [string[] | string, ...string[]] = remotePrimaryKeys - .reduce<[{ name: string; pos: number }[], ...{ name: string; pos: number }[]]>( - (acc, key) => { - if (key.kind === "partition_key") { - acc[0].push({ name: key.name, pos: key.position }); - } else { - acc.push({ name: key.name, pos: key.position }); - } - - return acc; - }, - [[]], - ) - .reduce<[string[] | string, ...string[]]>( - (acc, key) => { - if (Array.isArray(key)) { - key.sort((a, b) => a.pos - b.pos); - - // ? if the length is 1, we just want the name - if (key.length === 1) { - acc[0] = key[0]!.name; - } else { - acc[0] = key.map((k) => k.name); - } - } else { - acc.push(key.name); - } - - return acc; - }, - [[]], - ); - - // ? In a perfect world we would be able to create the new table for the user and then migrate the data over, but we are not in a perfect world - // ? it could possibly take a long time to migrate the data over, so we will just throw an error and let the user handle it - if ( - !Bun.deepEquals( - fixedPrimaryKeys, - table.options.primaryKeys.map((k) => - Array.isArray(k) ? k.map((k) => table.snakeifyString(k)) : table.snakeifyString(k), - ), - ) - ) { - console.log( - remotePrimaryKeys, - fixedPrimaryKeys, - table.options.primaryKeys.map((k) => - Array.isArray(k) ? k.map((k) => table.snakeifyString(k)) : table.snakeifyString(k), - ), - ); - throw new Error( - `The primary keys for the table ${table.snakeifyString(table.options.tableName)} have changed, we cannot change a tables primary key, please backup the data and recreate the table`, - ); - } - - // ? compare index keys, if there's a missing one from our local table, delete it from remote. Now if our local has a new index key, WE CAN add it - // ? we just got to re-create it - const remoteIndexKeys = indexColumns.map((column) => ({ name: column.name, target: column.target })); - - const rl = createInterface({ - input: process.stdin, - output: process.stdout, - }); - - if ( - !table.options.indexes && - remoteIndexKeys.length > 1 && - remoteIndexKeys[0]!.name !== - `${table.snakeifyString(table.options.tableName)}_inx_${table.snakeifyString(table.versionName)}` - ) { - const answer = await rl.question( - `The table ${table.snakeifyString(table.options.tableName)} has indexes that are not in the local table, would you like to remove them? [y/n] `, - ); - - if (possibleYes.includes(answer)) { - for (const index of indexColumns) { - const [, error] = await safePromise(this.connection.execute(`DROP INDEX ${index.name}`)); - - if (error) { - throw new Error(`Failed to drop index ${index.name}: ${error.message}`); - } - - App.staticLogger.info(`Dropped index ${index.name}`); - } - } - } - - if (table.options.indexes) { - for (const [name, target] of table.options.indexes.map((idx) => - Array.isArray(idx) - ? [idx[0], table.snakeifyString(idx[1])] - : [ - `${table.snakeifyString(table.options.tableName)}_inx_${table.snakeifyString(idx)}`, - table.snakeifyString(idx), - ], - )) { - if (!remoteIndexKeys.some((index) => index.name === name)) { - const [, error] = await safePromise( - this.connection.execute( - `CREATE INDEX IF NOT EXISTS ${name} ON ${table.snakeifyString(table.options.tableName)} (${table.snakeifyString(target as string)})`, - ), - ); - - if (error) { - throw new Error( - `[${table.snakeifyString(table.options.tableName)}] Failed to create index ${name}: ${error.message}`, - ); - } - - App.staticLogger.info(`Created index ${name}`); - } - } - - for (const index of indexColumns) { - if ( - index.name === - `${table.snakeifyString(table.options.tableName)}_inx_${table.snakeifyString(table.versionName)}` - ) { - continue; - } - - const indexKey = table.options.indexes.find((idx) => { - const name = Array.isArray(idx) - ? idx[0] - : `${table.snakeifyString(table.options.tableName)}_inx_${table.snakeifyString(idx)}`; - - return name === index.name; - }); - - if (!indexKey) { - const answer = await rl.question( - `The index ${index.name} (target: ${index.target} | table: ${table.snakeifyString(table.options.tableName)}) is not in the local table, would you like to remove it? [y/n] `, - ); - - if (possibleYes.includes(answer)) { - const [, error] = await safePromise(this.connection.execute(`DROP INDEX ${index.name}`)); - - if (error) { - throw new Error(`Failed to drop index ${index.name}: ${error.message}`); - } - - App.staticLogger.info(`Dropped index ${index.name}`); - } - } - } - } - - if (table.versionName !== "") { - // ? check if the version index / column is in remote, if it is not ask the user if they want to add the version column and index - const versionColumn = columnNames.find((column) => column.name === table.versionName); - - if (!versionColumn) { - const answer = await rl.question( - `[${table.options.tableName}] The version column ${table.versionName} is not in the remote table, would you like to add it? [y/n] `, - ); - - if (possibleYes.includes(answer)) { - const [, error] = await safePromise( - this.connection.execute( - `ALTER TABLE ${table.snakeifyString(table.options.tableName)} ADD ${table.versionName} int`, - ), - ); - - if (error) { - throw new Error(`Failed to add version column ${table.versionName}: ${error.message}`); - } - - App.staticLogger.info(`Added version column ${table.versionName}`); - } - } - - const versionIndex = indexColumns.find((index) => index.target === table.versionName); - - if (!versionIndex) { - const answer = await rl.question( - `[${table.options.tableName}] The version index ${table.snakeifyString(table.options.tableName)}_inx_${table.versionName} is not in the remote table, would you like to add it? [y/n] `, - ); - - if (possibleYes.includes(answer)) { - const [, error] = await safePromise( - this.connection.execute( - `CREATE INDEX IF NOT EXISTS ${table.snakeifyString(table.options.tableName)}_inx_${table.snakeifyString(table.versionName)} ON ${table.snakeifyString(table.options.tableName)} (${table.versionName})`, - ), - ); - - if (error) { - throw new Error( - `Failed to create version index ${table.snakeifyString(table.options.tableName)}_inx_${table.snakeifyString(table.versionName)}: ${error.message}`, - ); - } - - App.staticLogger.info( - `Created version index ${table.snakeifyString(table.options.tableName)}_inx_${table.snakeifyString(table.versionName)}`, - ); - } - } - } - - // ? check if there's any missing columns, if there is, ask the user if they want to add them - const missingColumns = Object.keys(table.options.columns).filter( - (column) => !columnNames.some((col) => col.name === table.snakeifyString(column)), - ); - - for (const column of missingColumns) { - const answer = await rl.question( - `[${table.options.tableName}] The column ${column} is not in the remote table, would you like to add it? [y/n] `, - ); - - if (possibleYes.includes(answer)) { - const found = table.columns.find((col) => col.startsWith(table.snakeifyString(column))); - - const [, error] = await safePromise( - this.connection.execute(`ALTER TABLE ${table.snakeifyString(table.options.tableName)} ADD ${found}`), - ); - - if (error) { - throw new Error(`Failed to add column ${found}: ${error.message}`); - } - - App.staticLogger.info(`Added column ${found}`); - } - } - - if (table.options.types) { - // ? check all the types, see if they are missing a column in the type and edit it if so - for (const [name, type] of Object.entries(table.options.types)) { - const [typeData, typeError] = await safePromise( - this.connection.execute( - `SELECT * FROM system_schema.types WHERE keyspace_name = '${keyspace}' AND type_name = '${table.snakeifyString(name)}'`, - ), - ); - - if (typeError || !typeData) { - throw new Error(`Failed to get type metadata: ${typeError?.message}`); - } - - const typeColumns: { - name: string; - type: string; - }[] = - typeData.rows?.[0]?.field_names?.map((row: string, i: number) => ({ - name: row, - type: typeData.rows?.[0]?.field_types[i], - })) ?? []; - - const missingTypeColumns = Object.keys(type).filter( - (column) => !typeColumns.some((col) => col.name === table.snakeifyString(column)), - ); - - for (const column of missingTypeColumns) { - const answer = await rl.question( - `[${table.options.tableName}] The column ${column} is not in the remote type ${name}, would you like to add it? [y/n] `, - ); - - if (possibleYes.includes(answer)) { - const [, error] = await safePromise( - this.connection.execute( - `ALTER TYPE ${table.snakeifyString(name)} ADD ${table.snakeifyString(column)} ${table.extractTypeName(type[column]!)}`, - ), - ); - - if (error) { - throw new Error( - `Failed to add column ${table.snakeifyString(column)} to type ${table.snakeifyString(name)}: ${error.message}`, - ); - } - - App.staticLogger.info(`Added column ${table.snakeifyString(column)} to type ${name}`); - } - } - - const extraColumns = typeColumns.filter( - (column) => - !Object.keys(type) - .map((col) => table.snakeifyString(col)) - .includes(column.name), - ); - - for (const column of extraColumns) { - App.staticLogger.debug( - `[${table.options.tableName}] The column ${column.name} is in the remote type ${name}, but not in the local type sadly you cannot remove columns from a type`, - ); - } - } - } - - rl.close(); - } - - public async execute(query: string, params: unknown[] = [], opts: cassandra.QueryOptions = {}) { - return this.connection.execute(query, params, opts); - } -} - -export default Client; diff --git a/src/Utils/Classes/DB/Finder.ts b/src/Utils/Classes/DB/Finder.ts deleted file mode 100644 index f0c730a3..00000000 --- a/src/Utils/Classes/DB/Finder.ts +++ /dev/null @@ -1,32 +0,0 @@ -class Finder { - public data: Data[]; - - public constructor(data: Data[]) { - this.data = data; - } - - [Symbol.iterator]() { - return this.data[Symbol.iterator](); - } - - /** - * This is just for historical reasons - */ - public toArray() { - return this.data; - } - - public get length() { - return this.data.length; - } - - public get first() { - return this.data[0]; - } - - public map(callback: (value: Data, index: number, array: Data[]) => T) { - return this.data.map(callback); - } -} - -export default Finder; diff --git a/src/Utils/Classes/DB/Table.ts b/src/Utils/Classes/DB/Table.ts deleted file mode 100644 index fe898fc8..00000000 --- a/src/Utils/Classes/DB/Table.ts +++ /dev/null @@ -1,1212 +0,0 @@ -import Long from "long"; -import App from "@/Utils/Classes/App.ts"; -import safePromise from "@/Utils/safePromise.ts"; -import Client from "./Client.ts"; -import type { - AllTypes, - ConvertObjectToNormal, - ConvertToActualType, - ConvertTypesToTypes, - ExtractTypesFromCreateTable, - NullifyStuff, - Options, - PublicGetReturnType, -} from "./createTableTypes.ts"; -import { reservedNames, ExtractValueName, snakeifyString } from "./createTableTypes.ts"; -import Finder from "./Finder.ts"; -import { inspect } from "bun"; - -const tableAndColumnNameRegex = /^[A-Z_a-z]\w*$/; - -type MergeUnions = A | B; - -type PossibleType = ([string, string] | string)[]; - -// -type Flatten = T extends (infer U)[] ? (U extends unknown[] ? Flatten : U) : T; -class Table { - readonly #_options: T; - - private batching = false; - - private batchCommands: { - params: unknown[]; - query: string; - }[] = []; - - public constructor(options: T) { - this.#_options = Object.freeze(options); - - this.checker(); - } - - public get options() { - return this.#_options as T extends Options - ? Options - : never; - } - - public get tableName() { - return this.snakeifyString(this.options.tableName); - } - - private checker() { - if (!this.options.tableName || this.options.tableName.length === 0) { - throw new Error("Table name is required"); - } - - if (reservedNames.includes(this.tableName)) { - throw new Error( - `The table name ${this.tableName} is a reserved name in Cassandra, you are required to change it to something else, here are some suggestions: ${this.tableName}_`, - ); - } - - if (!this.options.columns || Object.keys(this.options.columns).length === 0) { - throw new Error("Columns are required"); - } - - // ? If all keys are primary we should probably throw an error, unsure how cassandra actually handles it, although we probably don't want it anyways - if (this.options.primaryKeys.length === Object.keys(this.options.columns).length) { - throw new Error( - "All columns are primary keys, this is not allowed, please have the minimal amount of primary keys", - ); - } - - // ? now for indexes, if there's more then 75% of the columns as indexes, we should probably throw a warning - if ( - this.options.indexes && - this.options.indexes.length > Math.floor(Object.keys(this.options.columns).length * 0.75) - ) { - App.staticLogger.warn( - "You have more then 75% of the columns as indexes, this is not recommended, please have the minimal amount of indexes", - ); - } - - if (this.options.version !== undefined && (this.options.version === 0 || this.options.version === -1)) { - throw new Error( - "[Internal Error] Sorry, the version you provided is an internally used version, this will conflict with migration scripts. Please use a non zero, non negative number for the version", - ); - } - - if (!tableAndColumnNameRegex.test(this.tableName)) { - throw new Error( - `The table name ${this.tableName} is invalid, it must match the regex ${tableAndColumnNameRegex}`, - ); - } - - for (const key of Object.keys(this.options.columns)) { - if (!tableAndColumnNameRegex.test(key)) { - throw new Error(`The column name ${key} is invalid, it must match the regex ${tableAndColumnNameRegex}`); - } - - if (reservedNames.includes(key)) { - App.staticLogger.warn( - `The column name ${key} is a reserved name in Cassandra, it is recommended to change it, we are prefixing it with an underscore`, - ); - } - } - - // @ts-expect-error -- unsure how to handle this correctly - Client.tables.set(this.tableName, this); - } - - public startBatching() { - this.batching = true; - } - - public async endBatching() { - console.log(this.batchCommands); - - this.batchCommands = []; - - this.batching = false; - } - - public extractType(input: AllTypes) { - return ExtractValueName(input); - } - - public async migrateData>( - data: Data, - version: number, - where: { [key: string]: unknown }, - ): Promise { - if (this.options.migrationScripts) { - const migration = this.options.migrationScripts[version]; - - if (!migration) { - return data; - } - - App.staticLogger.debug( - `[${this.tableName}] Migrating data from version ${version} to ${version + 1} due to ${migration.changes}`, - ); - - const doWeHaveAllFields = Array.isArray(migration.fields) - ? migration.fields.every((field) => data[this.snakeifyString(field) as never] !== undefined) - : Object.keys(data as never).length === Object.keys(this.options.columns).length; - - // ? So for this, we got to check the "where" to make sure we got all the primary keys / partition keys else it will throw an error when we try to update. - // ? If we do NOT we set another boolean called "hasAllPrimary" if its false, we fetch those keys as well -> then we update the where object to include them - // ? so we can then migrate the data - - const primaryKeys = this.options.primaryKeys.flat(); - - let hasAllPrimary = primaryKeys.every((key) => - Object.entries(where) - .filter(([, v]) => v !== undefined) - .map(([k]) => k) - .includes(key), - ); - - const keysToFetch = []; - - if (!hasAllPrimary) { - // ? first check if data has the fields, if so just patch the where - for (const key of primaryKeys) { - if (!Object.keys(where).includes(key) && !Object.keys(data).includes(key)) { - keysToFetch.push(key); - } - - if (!Object.keys(where).includes(key)) { - where[key] = data[key]; - } - } - - // ? now we remove any keys that are not a primary key or is undefined - for (const key of Object.keys(where)) { - if (!primaryKeys.includes(key) || where[key] === undefined) { - delete where[key]; - } - } - - // ? one last check to see if we have all the primary keys - hasAllPrimary = primaryKeys.every((key) => - Object.entries(where) - .filter(([, v]) => v !== undefined) - .map(([k]) => k) - .includes(key), - ); - } - - if (!doWeHaveAllFields) { - if (migration.fields === "*") { - keysToFetch.push(...Object.keys(this.options.columns)); - } else { - for (const field of migration.fields) { - if (!Object.keys(data).includes(this.snakeifyString(field))) { - keysToFetch.push(field as string); - } - } - } - } - - if (doWeHaveAllFields && hasAllPrimary) { - const migratedData = (await migration.migrate(Client.getInstance(), structuredClone(data), version)) as Data; - - // ? removes any non primary keys from the where object - for (const key of Object.keys(where)) { - if (!primaryKeys.includes(key)) { - delete where[key]; - } - } - - // ? If something changed, update the data in the database - if (Bun.deepEquals(migratedData, data)) { - // ? nothing changed, but we still want to update the version - const opts = { - query: `UPDATE ${this.tableName} SET ${this.snakeifyString(this.versionName)} = ? WHERE ${Object.keys(where) - .map((key) => `${this.snakeifyString(key)} = ?`) - .join(" AND ")};`, - params: [version + 1, ...Object.values(where)], - }; - - const [res, error] = await safePromise( - Client.getInstance().connection.execute(opts.query, opts.params, { - prepare: true, - }), - ); - - if (error) { - throw new Error(`[${this.tableName}] There was an error updating the data: ${error.message}`); - } - - App.staticLogger.debug( - `[${this.tableName}] [R1] (${res?.wasApplied()}) No changes were made to the data, but the version was updated to ${version + 1}`, - opts, - ); - } else { - const opts = { - query: `UPDATE ${this.tableName} SET ${ - migration.fields === "*" - ? Object.keys(migratedData as never) - .map((f) => `${this.snakeifyString(f)} = ?`) - .join(", ") - : migration.fields - .map((f) => this.snakeifyString(f as string)) - .map((f) => `${f} = ?`) - .join(", ") - }, ${this.snakeifyString(this.versionName)} = ? WHERE ${Object.keys(where) - .map((key) => `${this.snakeifyString(key)} = ?`) - .join(" AND ")};`, - params: [ - ...Object.values( - Object.fromEntries( - Object.entries(migratedData as never).filter(([key]) => !Object.keys(where).includes(key)), - ), - ), - version + 1, - ...Object.values(where), - ], - }; - - const [res, error] = await safePromise( - Client.getInstance().connection.execute(opts.query, opts.params, { - prepare: true, - }), - ); - - if (error) { - throw new Error(`[${this.tableName}] There was an error updating the data: ${error.message}`); - } - - App.staticLogger.debug( - `[${this.tableName}] [R2] (${res?.wasApplied()}) The data has been updated to version ${version + 1}`, - ); - } - - // ? if version + 1 is less then the latest version, continue migrating - if (version + 1 < this.version) { - return await this.migrateData(migratedData, version + 1, structuredClone(where)); - } - - return migratedData; - } - - // ? else rip we now got to fetch more fields :/ - - const opts = { - query: `SELECT ${migration.fields === "*" ? "*" : keysToFetch.map((f) => this.snakeifyString(f as string)).join(", ")} FROM ${this.tableName} WHERE ${Object.keys( - where, - ) - .map((key) => `${this.snakeifyString(key)} = ?`) - .join(" AND ")};`, - params: Object.values(where), - }; - - const [fetchedData, error] = await safePromise( - Client.getInstance().connection.execute(opts.query, opts.params, { - prepare: true, - }), - ); - - if (error) { - throw new Error(`[${this.tableName}] There was an error fetching the data: ${error.message}`); - } - - if (!fetchedData) { - return data; - } - - const first = fetchedData.first(); - - const mappedTypes = Object.entries(this.options.columns).map(([key, value]) => { - return { - key: this.snakeifyString(key), - value: ExtractValueName(value as AllTypes), - }; - }); - - const finishedData: Record = { - ...data, - }; - - for (const [key, value] of Object.entries(first)) { - const foundMappedType = mappedTypes.find((type) => type.key === key); - - if (!foundMappedType) { - continue; - } - - // ? If the value is a array but the returned value is not an array (/null) we make it an array, this is due to cassandra returning null if the value is empty - if (foundMappedType.value.toString().includes("list") && !value) { - finishedData[this.convertBack(key)] = []; - - continue; - } - - finishedData[this.convertBack(key)] = this.recursiveConvert(value); - } - - // ? If we are missing where keys, add them - if (!hasAllPrimary) { - for (const key of primaryKeys) { - if (!Object.keys(where).includes(key)) { - where[key] = finishedData[key]; - } - } - } - - // ? now remove any non needed keys from finishedData (i.e any key that is not in migration.fields) - if (migration.fields !== "*") { - for (const key of Object.keys(finishedData)) { - if (!migration.fields.includes(this.snakeifyString(key))) { - delete finishedData[key]; - } - } - } - - const migratedData = (await migration.migrate( - Client.getInstance(), - structuredClone(finishedData), - version, - )) as Data; - - if (Bun.deepEquals(migratedData, finishedData)) { - // ? nothing changed, but we still want to update the version - const opts = { - query: `UPDATE ${this.tableName} SET ${this.snakeifyString(this.versionName)} = ? WHERE ${Object.keys(where) - .map((key) => `${this.snakeifyString(key)} = ?`) - .join(" AND ")};`, - params: [version + 1, ...Object.values(where)], - }; - - const [, error] = await safePromise( - Client.getInstance().connection.execute(opts.query, opts.params, { - prepare: true, - }), - ); - - if (error) { - throw new Error(`[${this.tableName}] There was an error updating the data: ${error.message}`); - } - - App.staticLogger.debug( - `[${this.tableName}] No changes were made to the data, but the version was updated to ${version + 1}`, - ); - } else { - const optMigration = Object.fromEntries( - Object.entries(migratedData as never).filter(([key]) => !Object.keys(where).includes(key)), - ); - - const opts = { - query: `UPDATE ${this.tableName} SET ${ - migration.fields === "*" - ? Object.keys(optMigration as never) - .map((f) => `${this.snakeifyString(f)} = ?`) - .join(", ") - : migration.fields - .map((f) => this.snakeifyString(f as string)) - .map((f) => `${f} = ?`) - .join(", ") - }, ${this.snakeifyString(this.versionName)} = ? WHERE ${Object.keys(where) - .map((key) => `${this.snakeifyString(key)} = ?`) - .join(" AND ")};`, - params: [...Object.values(optMigration), version + 1, ...Object.values(where)], - }; - - const [, error] = await safePromise( - Client.getInstance().connection.execute(opts.query, opts.params, { - prepare: true, - }), - ); - - if (error) { - throw new Error(`[${this.tableName}] There was an error updating the data: ${error.message}`); - } - - App.staticLogger.debug(`[${this.tableName}] The data has been updated to version ${version + 1}`); - } - - // if version + 1 is less then the latest version, continue migrating - if (version + 1 < this.version) { - return await this.migrateData(migratedData, version + 1, structuredClone(where)); - } - - return migratedData; - } - - return data; - } - - public async get< - AdditionalColumns extends Record, - Fields extends (keyof this["options"]["columns"])[] | "*" = "*", - >( - filter: Partial>, - options?: { - /** - * This is for historical purposes, if you want to fetch specific columns which are no longer in local but you are CERTAIN they are in remote - */ - additionalColumns?: AdditionalColumns; - allowFiltering?: boolean; - fields?: Fields; - }, - ): Promise< - | (PublicGetReturnType, Fields> & - PublicGetReturnType, Fields>) - | null - > { - if ( - !options || - !options.fields || - options.fields === "*" || - options.fields.length === 0 || - options.fields.length === Object.keys(this.options.columns).length - ) { - App.staticLogger.warn( - `[${this.tableName}] You are fetching all fields, this is not recommended, please specify the fields you want to fetch`, - ); - } - - const gotClient = Client.getInstance(); - - if (!gotClient.connected) { - throw new Error("The client is not connected yet."); - } - - if (!options) { - // biome-ignore lint/style/noParameterAssign: we need to assign it - options = { fields: "*" as Fields }; - } - - if (Array.isArray(options.fields)) { - if (!options.fields.includes(this.versionName)) { - options.fields.push(this.versionName as string); - } - - // ? we filter out any empty strings (due to version name) and any duplicates - options.fields = Array.from(new Set(options.fields)).filter((f) => f !== "") as Fields; - } - - const opts: { - params: unknown[]; - query: string; - } = { - query: `SELECT ${options.fields === "*" || !options.fields ? "*" : options.fields.map((f) => this.snakeifyString(f as string))?.join(", ")} FROM ${this.tableName} WHERE ${Object.keys( - filter, - ) - .map((key) => `${this.snakeifyString(key)} = ?`) - .join(" AND ")}${options.allowFiltering ? " ALLOW FILTERING" : ""} LIMIT 1;`, - params: Object.values(filter).map((v) => { - if (typeof v === "object") { - return this.recursiveConvert(v, true); - } - - return v; - }), - }; - - const [data, error] = await safePromise( - gotClient.execute(opts.query, opts.params, { - prepare: true, - }), - ); - - if (error) { - // ? Note: this goes for all errors, the reason we re-throw them, is due to the STUPID damn nature of cassandra-driver - // ? It throw's error's yes, but the stack is lost, so we re-throw it to get the stack - throw new Error(`[${this.tableName}] There was an error fetching the data: ${error.message}`); - } - - if (!data) { - return null; - } - - let finishedData: Partial< - PublicGetReturnType< - ConvertObjectToNormal & - ExtractTypesFromCreateTable, - Fields - > - > = {}; - - const first = data?.first(); - - if (!first) { - return null; - } - - const mappedTypes = Object.entries(this.options.columns).map(([key, value]) => { - return { - key: this.snakeifyString(key), - value: ExtractValueName(value as AllTypes), - }; - }); - - for (const [key, value] of Object.entries(first)) { - const foundMappedType = mappedTypes.find((type) => type.key === key); - - if (!foundMappedType) { - continue; - } - - // ? If the value is a array but the returned value is not an array (/null) we make it an array, this is due to cassandra returning null if the value is empty - if (foundMappedType.value.toString().includes("list") && !value) { - finishedData[ - this.convertBack(key) as keyof PublicGetReturnType< - ConvertObjectToNormal & - ExtractTypesFromCreateTable, - Fields - > - ] = [] as never; - - continue; - } - - finishedData[ - this.convertBack(key) as keyof PublicGetReturnType< - ConvertObjectToNormal & - ExtractTypesFromCreateTable, - Fields - > - ] = this.recursiveConvert(value); - } - - if (this.versionName !== "") { - const version = first[this.versionName]; - - if (version === undefined || version === null) { - finishedData = await this.migrateData(finishedData, 0, structuredClone(filter)); - } - - if (typeof version === "number" && version < this.version) { - finishedData = await this.migrateData(finishedData, version, structuredClone(filter)); - } - } - - // ? If there's any extra data remove it, we only want to return what the user asked for - if (options.fields !== "*" && options.fields) { - for (const key of Object.keys(finishedData)) { - if (!options.fields.includes(key as never)) { - delete finishedData[key as never]; - } - } - - // ? now if there's any keys we are missing, add it as null (unless its a list in which that case we add it as []) - for (const key of options.fields) { - if (!Object.keys(finishedData).includes(key as never)) { - const foundMappedType = mappedTypes.find((type) => type.key === this.snakeifyString(key as string)); - - if (!foundMappedType) { - continue; - } - - if (foundMappedType.value.toString().includes("list")) { - finishedData[key as never] = []; - } else { - finishedData[key as never] = null; - } - } - } - } - - return finishedData as PublicGetReturnType< - ConvertObjectToNormal & ExtractTypesFromCreateTable, - Fields - >; - } - - private recursiveConvert(obj: Record | unknown, inverse?: boolean) { - if (Long.isLong(obj)) { - return BigInt(obj.toString()); - } - - if (typeof obj !== "object") { - return obj; - } - - if (Array.isArray(obj)) { - return obj.map((v) => this.recursiveConvert(v, inverse)); - } - - if (obj === null || obj === undefined || obj instanceof Date) { - return obj; - } - - const convert = inverse ? this.snakeifyString.bind(this) : this.convertBack.bind(this); - - const newObj: Record = {}; - - for (const [key, value] of Object.entries(obj)) { - if (Long.isLong(value)) { - newObj[convert(key)] = BigInt(value.toString()); - } else if (typeof value === "object") { - newObj[convert(key)] = Array.isArray(value) - ? value.map((v) => this.recursiveConvert(v, inverse)) - : this.recursiveConvert(value, inverse); - } else { - newObj[convert(key)] = value; - } - } - - return newObj; - } - - public async update< - AdditionalColumns extends Record, - Filter extends Partial>, - >( - filter: Filter, - update: Omit>>, keyof Filter>, - options?: { - /** - * This is for historical purposes, if you want to update specific columns which are no longer in local but you are CERTAIN they are in remote - */ - additionalColumns?: AdditionalColumns; - - /** - * If you want to set a specific version for the tbale, this is somewhat dangerous but if for whatever reason you want to sure - */ - version?: number; - }, - ) { - if (Object.keys(update).length === 0) { - throw new Error(`[${this.tableName}] You are trying to update with no values, this is not allowed`); - } - - const gotClient = Client.getInstance(); - - if (!gotClient.connected) { - throw new Error("The client is not connected yet."); - } - - const opts = { - query: `UPDATE ${this.tableName} SET ${Object.entries(update) - .map(([key]) => `${this.snakeifyString(key)} = ?`) - .join(", ")}${options?.version ? `, ${this.versionName} = ${options.version}` : ""} WHERE ${Object.keys(filter) - .map((key) => `${this.snakeifyString(key)} = ?`) - .join(" AND ")};`, - params: [...Object.values(update).map((v) => this.recursiveConvert(v, true)), ...Object.values(filter)], - }; - - const [, error] = await safePromise( - gotClient.execute(opts.query, opts.params, { - prepare: true, - }), - ); - - if (error) { - throw new Error(`[${this.tableName}] There was an error updating the data: ${error.message}`); - } - - App.staticLogger.debug(`[${this.tableName}] The data has been updated`); - } - - /** - * This is just a link to the delete function - */ - // ? we can only delete via primary keys, we can get them from infering from the options - public async remove( - filter: { - [key in Flatten]: ExtractTypesFromCreateTable[key]; - }, - ) { - await this.delete(filter); - } - - public async delete( - filter: { - [key in Flatten]: ExtractTypesFromCreateTable[key]; - }, - ) { - const gotClient = Client.getInstance(); - - if (!gotClient.connected) { - throw new Error("The client is not connected yet."); - } - - const opts = { - query: `DELETE FROM ${this.tableName} WHERE ${Object.keys(filter) - .map((key) => `${this.snakeifyString(key)} = ?`) - .join(" AND ")};`, - params: Object.values(filter), - }; - - const [, error] = await safePromise( - gotClient.execute(opts.query, opts.params, { - prepare: true, - }), - ); - - if (error) { - throw new Error(`[${this.tableName}] There was an error deleting the data: ${error.message}`); - } - - App.staticLogger.debug(`[${this.tableName}] The data has been deleted`); - } - - public async create>>>( - data: Data, - options?: { - /** - * If you want to set a specific version for the tbale, this is somewhat dangerous but if for whatever reason you want to sure - */ - version?: number; - }, - ): Promise { - if (Object.keys(data).length === 0) { - throw new Error(`[${this.tableName}] You are trying to create with no values, this is not allowed`); - } - - const gotClient = Client.getInstance(); - - if (!gotClient.connected) { - throw new Error("The client is not connected yet."); - } - - const opts = { - query: `INSERT INTO ${this.tableName} (${Object.keys(data) - .map((key) => this.snakeifyString(key)) - .join(", ")}, ${this.snakeifyString(this.versionName)}) VALUES (${Object.keys(data) - .map(() => "?") - .join(", ")}, ${options?.version ? options.version : this.version});`, - params: Object.values(data).map((v) => this.recursiveConvert(v, true)), - }; - - const [, error] = await safePromise( - gotClient.execute(opts.query, opts.params, { - prepare: true, - }), - ); - - if (error) { - throw new Error(`[${this.tableName}] There was an error creating the data: ${error.message}`); - } - - App.staticLogger.debug(`[${this.tableName}] The data has been created`); - - return data; - } - - /** - * Just for historical purposes, this is just a link to the create function - */ - public async insert>>( - data: NullifyStuff, - options?: { - /** - * If you want to set a specific version for the tbale, this is somewhat dangerous but if for whatever reason you want to sure - */ - version?: number; - }, - ): Promise { - return this.create(data, options); - } - - public async find< - AdditionalColumns extends Record = {}, - Fields extends (keyof this["options"]["columns"])[] | "*" = "*", - RawThis extends this, - >( - filter: Partial< - ConvertObjectToNormal & ExtractTypesFromCreateTable - >, - options?: { - /** - * This is for historical purposes, if you want to fetch specific columns which are no longer in local but you are CERTAIN they are in remote - */ - additionalColumns?: AdditionalColumns; - allowFiltering?: boolean; - fields?: Fields; - limit?: number; - orderBy?: { - type: "ASC" | "DESC"; - field: keyof RawThis["options"]["columns"]; - }; - before?: { - [key in keyof ExtractTypesFromCreateTable]?: ExtractTypesFromCreateTable< - RawThis["options"] - >[key]; - }; - after?: { - [key in keyof ExtractTypesFromCreateTable]?: ExtractTypesFromCreateTable< - tRawThisis["options"] - >[key]; - }; - }, - ): Promise< - Finder< - PublicGetReturnType, Fields> & - PublicGetReturnType, Fields> - > - > { - if ( - !options || - !options.fields || - options.fields === "*" || - options.fields.length === 0 || - options.fields.length === Object.keys(this.options.columns).length - ) { - App.staticLogger.warn( - `[${this.tableName}] You are fetching all fields, this is not recommended, please specify the fields you want to fetch`, - ); - } - - const gotClient = Client.getInstance(); - - if (!gotClient.connected) { - throw new Error("The client is not connected yet."); - } - - if (!options) { - // biome-ignore lint/style/noParameterAssign: we need to assign it - options = { fields: "*" as Fields }; - } - - if (Array.isArray(options.fields)) { - if (!options.fields.includes(this.versionName)) { - options.fields.push(this.versionName as string); - } - - // ? we filter out any empty strings (due to version name) and any duplicates - options.fields = Array.from(new Set(options.fields)).filter((f) => f !== "") as Fields; - } - - const opts: { - params: unknown[]; - query: string; - } = { - query: `SELECT ${options.fields === "*" || !options.fields ? "*" : options.fields.map((f) => this.snakeifyString(f as string))?.join(", ")} FROM ${this.tableName} WHERE ${Object.keys( - filter, - ) - .map((key) => `${this.snakeifyString(key)} = ?`) - .join(" AND ")}`, - params: Object.values(filter).map((v) => { - if (typeof v === "object") { - return this.recursiveConvert(v, true); - } - - return v; - }), - }; - - if (options.before) { - opts.query += `AND ${Object.keys(options.before) - .map((key) => `${this.snakeifyString(key)} < ?`) - .join(" AND ")}`; - opts.params.push(...Object.values(options.before).map((v) => this.recursiveConvert(v, true))); - } - - if (options.after) { - opts.query += `AND ${Object.keys(options.after) - .map((key) => `${this.snakeifyString(key)} > ?`) - .join(" AND ")}`; - opts.params.push(...Object.values(options.after).map((v) => this.recursiveConvert(v, true))); - } - - if (options.orderBy) { - opts.query += `ORDER BY ${this.snakeifyString(options.orderBy.field)} ${options.orderBy.type}`; - } - - opts.query += `${options.allowFiltering ? " ALLOW FILTERING" : ""}${options.limit ? ` LIMIT ${options.limit}` : ""};`; - - const [data, error] = await safePromise( - gotClient.execute(opts.query, opts.params, { - prepare: true, - }), - ); - - if (error) { - throw new Error(`[${this.tableName}] There was an error fetching the data: ${error.message}`); - } - - if (!data) { - return new Finder([]); - } - - const mappedTypes = Object.entries(this.options.columns).map(([key, value]) => { - return { - key: this.snakeifyString(key), - value: ExtractValueName(value as AllTypes), - }; - }); - - const finishedData: Partial< - PublicGetReturnType< - ConvertObjectToNormal & - ExtractTypesFromCreateTable, - Fields - > - >[] = []; - - for (const row of data) { - const newObj: Record = {}; - - for (const [key, value] of Object.entries(row)) { - const foundMappedType = mappedTypes.find((type) => type.key === key); - - if (!foundMappedType) { - continue; - } - - // ? If the value is a array but the returned value is not an array (/null) we make it an array, this is due to cassandra returning null if the value is empty - if (foundMappedType.value.toString().includes("list") && !value) { - newObj[ - this.convertBack(key) as keyof PublicGetReturnType< - ConvertObjectToNormal & - ExtractTypesFromCreateTable, - Fields - > - ] = [] as never; - - continue; - } - - newObj[ - this.convertBack(key) as keyof PublicGetReturnType< - ConvertObjectToNormal & - ExtractTypesFromCreateTable, - Fields - > - ] = this.recursiveConvert(value); - } - - if (this.versionName !== "") { - const version = row[this.versionName]; - - if (version === undefined || version === null) { - finishedData.push(await this.migrateData(newObj, 0, structuredClone(filter))); - - continue; - } - - if (typeof version === "number" && version < this.version) { - finishedData.push(await this.migrateData(newObj, version, structuredClone(filter))); - - continue; - } - } - - finishedData.push(newObj); - } - - // ? If there's any extra data remove it, we only want to return what the user asked for - if (options.fields !== "*" && options.fields) { - for (const obj of finishedData) { - for (const key of Object.keys(obj)) { - if (!options.fields.includes(key as never)) { - delete obj[key as never]; - } - } - - // ? now if there's any keys we are missing, add it as null (unless its a list in which that case we add it as []) - for (const key of options.fields) { - if (!Object.keys(obj).includes(key as never)) { - const foundMappedType = mappedTypes.find((type) => type.key === this.snakeifyString(key as string)); - - if (!foundMappedType) { - continue; - } - - if (foundMappedType.value.toString().includes("list")) { - obj[key as never] = []; - } else { - obj[key as never] = null; - } - } - } - } - } - - return new Finder( - finishedData as PublicGetReturnType< - ConvertObjectToNormal & - ExtractTypesFromCreateTable, - Fields - >, - ); - } - - /** - * Turn's camelCase / PascalCase strings into snake_case - */ - public snakeifyString(str: string) { - return snakeifyString(str); - } - - /** - * Converts snake_case strings into camelCase / PascalCase - */ - private convertBack(str: string) { - const initalKey = str.endsWith("_") ? (reservedNames.includes(str.slice(0, -1)) ? str.slice(0, -1) : str) : str; - - if (this.options?.mode === "PascalCase") { - return initalKey - .split("_") - .map((part) => part[0]!.toUpperCase() + part.slice(1)) - .join(""); - } - - if (this.options?.mode === "camelCase") { - return initalKey - .split("_") - .map((part, index) => (index === 0 ? part : part[0]!.toUpperCase() + part.slice(1))) - .join(""); - } - - return initalKey; - } - - /** - * Export a table to a CQL command - * - * @returns The CQL string for the table - */ - public toCQLCommand() { - const table = [ - `CREATE TABLE${this.options.ifNotExists ? " IF NOT EXISTS" : ""} ${this.options.keyspace ? `${this.options.keyspace}.` : ""}${this.tableName} (`, - this.columns.map((k) => `\t ${k}`).join(",\n"), - this.options.version === undefined ? "," : `,\t${this.snakeifyString(this.versionName)} int,`, - `\tPRIMARY KEY (${this.options.primaryKeys.map((key) => (Array.isArray(key) ? `(${key.map((k) => this.snakeifyString(k)).join(", ")})` : this.snakeifyString(key))).join(", ")})`, - ")", - this.withOptions.length > 0 ? `WITH ${this.withOptions.join(" AND ")}` : "", - ";", - ].join("\n"); - - const types = Object.entries(this.options.types ?? {}).map(([key, value]): string => { - const columns = Object.entries(value).map(([key, value]) => { - return `${this.snakeifyString(key)} ${ExtractValueName(value)}`; - }); - - return `CREATE TYPE IF NOT EXISTS ${this.snakeifyString(key)} (${columns.join(",\n")});`; - }); - - const indexes = this.indexes; - - // ? yeah, I know this is technically bad BUT since the likelyhood of someone using this code elsewhere is low we do not care - // ? we push a version index forcfully - if (this.options.version !== undefined) { - indexes.push( - `CREATE INDEX IF NOT EXISTS ${this.tableName}_inx_${this.snakeifyString(this.versionName)} ON ${this.tableName} (${this.versionName});`, - ); - } - - return { - table, - indexes, - types, - }; - } - - public extractTypeName(type: AllTypes): string { - return ExtractValueName(type); - } - - public get columns() { - return Object.entries(this.options.columns).map(([key, value]) => { - const correctValue = ExtractValueName(value as AllTypes); - const convertedString = this.snakeifyString(key); - - if (reservedNames.includes(convertedString)) { - console.warn( - `The column name ${key} is a reserved name in Cassandra, it is recommended to change it, we are prefixing it with an underscore`, - ); - - return `${convertedString}_ ${correctValue}`; - } - - return `${convertedString} ${correctValue}`; - }); - } - - public get withOptions() { - return Object.entries(this.options.with ?? {}).map(([key, value]) => - this.handleWithOptions(this.snakeifyString(key), value), - ); - } - - public get indexes() { - if (!this.options.indexes) { - return []; - } - - return this.options.indexes.map((index) => { - const name = Array.isArray(index) ? index[0] : null; - - return `CREATE INDEX IF NOT EXISTS ${name ? name : `${this.tableName}_inx_${index as unknown as string}`} ON ${this.tableName} (${Array.isArray(index) ? this.snakeifyString(index[1]) : this.snakeifyString(index)});`; - }); - } - - public get versionName() { - return this.options.version === undefined - ? "" - : Array.isArray(this.options.version) - ? this.options.version[0] - : "int_tbl_ver"; - } - - public get version() { - return this.options.version === undefined - ? 0 - : Array.isArray(this.options.version) - ? this.options.version[1] - : this.options.version; - } - - private handleWithOptions(key: string, value: unknown) { - let builtValue = ""; - - if (value === null || value === undefined) { - return ""; - } - - if (key === "clustering_order") { - return `CLUSTERING ${value}`; - } - - switch (typeof value) { - case "bigint": - case "number": - case "boolean": { - builtValue = value.toString(); - - break; - } - - case "string": { - builtValue = `'${value}'`; - - break; - } - - case "object": { - if (!Array.isArray(value)) { - // ? turn value into {'keys': 'ALL', 'rows_per_partition': 'ALL'} - builtValue = `{${Object.entries(value) - .map(([key, value]) => `'${this.snakeifyString(key)}': '${value}'`) - .join(", ")}}`; - - break; - } - - builtValue = `[${value.join(", ")}]`; - - break; - } - - default: { - builtValue = ""; - } - } - - return `${key} = ${builtValue}`; - } - - /** - * If the table is currently migrating data - */ - public isMigrating = false; - - /** - * Start migrating data - */ - public async startMigration() {} - - /** - * Stop migrating data - */ - public async endMigration() {} -} - -export default Table; diff --git a/src/Utils/Classes/DB/createTable.ts b/src/Utils/Classes/DB/createTable.ts deleted file mode 100644 index c20bb623..00000000 --- a/src/Utils/Classes/DB/createTable.ts +++ /dev/null @@ -1,15 +0,0 @@ -import Table from "./Table.ts"; -import type { Options, AllTypes, ListAndFreezeType } from "./createTableTypes.ts"; - -const createTable = < - Types extends Record>>, - Columns extends Record>, - PrimaryKeys extends keyof Columns | [keyof Columns, keyof Columns], - IndexKeys extends keyof Columns, ->( - options: Options, -) => { - return new Table(options); -}; - -export default createTable; diff --git a/src/Utils/Classes/DB/createTableTypes.ts b/src/Utils/Classes/DB/createTableTypes.ts deleted file mode 100644 index a3b2a2e1..00000000 --- a/src/Utils/Classes/DB/createTableTypes.ts +++ /dev/null @@ -1,473 +0,0 @@ -import type Client from "./Client.ts"; -import type Table from "./Table.ts"; - -type Check = [T] extends [string] ? (string extends T ? false : true) : false; - -export type ColumnTypesRaw = - | BigIntConstructor - | BooleanConstructor - | DateConstructor - | NumberConstructor - | StringConstructor; - -export type ExtractNameBasedOffConstructor = T extends BigIntConstructor - ? "BigInt" - : T extends BooleanConstructor - ? "Boolean" - : T extends DateConstructor - ? "Timestamp" - : T extends NumberConstructor - ? "Number" - : T extends StringConstructor - ? "String" - : never; - -export type ColumnTypesStrings = - | "BigInt" - | "bigint" - | "Boolean" - | "boolean" - | "Date" - | "date" - | "Int" - | "int" - | "Number" - | "number" - | "String" - | "string" - | "Timestamp" - | "timestamp"; - -export type ListableTypes = `list<${ColumnTypesStrings | FrozenTypes}>`; -export type ListableTypesNoFrozen = `list<${ColumnTypesStrings}>`; -export type FrozenTypes = `frozen<${ColumnTypesStrings}>`; -export type FrozenlessTypes = ColumnTypesRaw | ColumnTypesStrings | ListableTypesNoFrozen | TupleFrozenlessTypes; -export type TupleFrozenlessTypes = [FrozenlessTypes]; // This replaces the recursive tuple type definition. - -export type AllTypes = ColumnTypesRaw | ColumnTypesStrings | FrozenTypes | ListableTypes | TupleAllTypes; -export type TupleAllTypes = [AllTypes]; // Separates the tuple types to avoid direct recursion. - -export type ListAndFreezeType = T extends string - ? - | `frozen<${T}>` - | `list<${T}>` - | `list>` - | [`frozen<${T}>`] - | [`list<${T}>`] - | [`list>`] - | [T] - : never; - -export type ConvertType = T extends ColumnTypesRaw - ? `frozen<${Lowercase>}>` - : T extends ColumnTypesStrings - ? `frozen<${Lowercase}>` - : T extends ListableTypesNoFrozen - ? `list<${T}>` - : T extends TupleFrozenlessTypes - ? // @ts-expect-error -- Its fine - `list<${T}>` - : never; - -export type ExtractType = T extends `list<${infer U}>` ? U : never; - -export type ConvertToActualType< - Type, - Types extends Record>>, -> = Type extends `list<${infer U}>` - ? ConvertToActualType[] - : Type extends `frozen<${infer U}>` - ? ConvertToActualType - : Type extends [infer U] - ? ConvertToActualType[] - : Check extends false - ? ConvertBasicTypes - : Type extends keyof Types - ? ConvertObjectToNormal - : ConvertBasicTypes; - -export type ConvertBasicTypes = Type extends "BigInt" | "bigint" - ? bigint - : Type extends "Boolean" | "boolean" - ? boolean - : Type extends "Timestamp" | "timestamp" - ? Date - : Type extends "Number" | "number" | "Int" | "int" - ? number - : Type extends "String" | "string" | "Text" | "text" - ? string - : null; - -export type ConvertObjectToNormal< - T, - Types extends Record>>, -> = { - [K in keyof T]: ConvertToActualType; -}; - -export enum DataTypes { - BigInt = "bigint", - Boolean = "boolean", - Date = "timestamp", - Number = "int", - String = "text", - Text = "text", - Timestamp = "timestamp", -} - -interface CassandraTableOptions { - bloomFilterFpChance?: number; - caching?: { - keys: string; - rowsPerPartition: string; - }; - cdc?: boolean; - // ScyllaDB-specific - clusteringOrder?: string; - comment?: string; - compaction?: { - [key: string]: unknown; - class: string; - sstableSizeInMb?: string; // for additional options specific to the compaction strategy - }; - compression?: { - [key: string]: unknown; - chunkLengthKb?: number; - sstableCompression: string; // for additional options specific to the compression algorithm - }; - // ScyllaDB-specific - concurrentReads?: number; - // ScyllaDB-specific - concurrentWrites?: number; - crcCheckChance?: number; - dclocalReadRepairChance?: number; - defaultTimeToLive?: number; - extensions?: { - [key: string]: unknown; - }; - gcGraceSeconds?: number; - maxIndexInterval?: number; - memtableFlushPeriodInMs?: number; - memtableWriteThroughputInMb?: number; - minIndexInterval?: number; - readRepairChance?: number; - speculativeRetry?: string; - // ScyllaDB-specific - timeout?: number; -} - -export interface Options< - Types extends Record>>, - Columns extends Record>, - PrimaryKeys extends keyof Columns | [keyof Columns, keyof Columns], - IndexKeys extends keyof Columns, -> { - /** - * The actual columns of the table - */ - columns: Columns; - - /** - * Create the table if it does not exist. If it does exist, we will first compare the local vs the remote table - * If remote has extra columns vs local, we will ask if you want to delete them (Since this is a destructive operation). Now if there's extra columns in local vs remote, we will add them since its not destructive - * - * When you want to query data, we will check the version, if the version mismatches we will continuesly run the migration scripts until the version matches in order - * (so you can only worry about the previous version, not all versions before it) - */ - ifNotExists?: boolean; - - /** - * Ignore missing columns, this is for remote, so lets say you got a table that has these columns: a, b, c, d and in a later update you remove b - * Instead of asking you to delete it, we will just ignore it. This is only useful when you have a table that is constantly being updated and you need the old columns for old api versions. - * - * NOTE: since this ""wrapper"" is trying to be type safe, you may need to add @ts-expect-error when you try to query old columns - */ - ignoreMissingColumns?: boolean; - - /** - * These are the indexes for the table, they normally require a name but if not provided we generate like this: "[table]_inx_[index]" - * if you want a custom index name, you can provide a tuple with the first value being the name and the second being the index - */ - indexes?: (IndexKeys | [string, IndexKeys])[]; - - /** - * The keyspace is linked to, if none is provided defaults to whatever one is in use currently, if the keyspace does not exist we will create it for oyu - */ - keyspace?: string; - - metaData?: { - /** - * Ignore's stuff like "XXX is a reserved keyword prefixing it with a _" etc - */ - ignoreWarnings?: boolean; - /** - * This lets you migrate data in the background. - * - * How this works is simple. When the current time matches one of the ones in setTimes, we will query the database for any versions under the max version and migrate them. Since we forcefully made a index on the version, we can easily query for the data -> then migrate it - * - * This is AMAZING if you change versions of stuff often and want to keep the data up to date and not have it slow down when someone queries it - */ - migration?: { - /** - * How much data at a time to query, defaults to 250 - */ - atATime?: number; - /** - * The max version to migrate to - */ - maxVersion?: number; - /** - * What times to migrate data, if you know at X time the server is at a low usage, you can set this to that time - * - * [0] = Start time - * [1] = End time - * - * NOTE: The table does have two functions you can call to manually migrate data, so you can do it whenever you want as well. - */ - setTimes?: [number | string, number | string][]; - /** - * If we even should slowly migrate the data. - */ - shouldSlowlyMigrate?: boolean; - }; - missingLocalColumns?: "ask" | "delete" | "ignore" | "warn"; - missingLocalIndexes?: "ask" | "delete" | "ignore"; - missingRemoteColumns?: "ask" | "ignore" | "insert" | "warn"; - missingRemoteIndexes?: "ask" | "create" | "ignore" | "warn"; - }; - - /** - * Migrate old versions of the table to the new version - */ - migrationScripts?: { - [version: number]: { - /** - * An optional field for debugging purposes - */ - changes?: string; - fields: string[] | "*"; - /** - * The migration script - * - * @param client The client for the database - * @param data The data to migrate - * @param version The current version of the data (mainly for the -1 migration) - * @returns The migrated data OR null. In the case it returns null, we re-query the data. This is so you can delete the row, then re-insert it with new data - */ - migrate(client: Client, data: unknown, version: number): Promise | unknown | null; - }; - /** - * -1 is ran for every version, its in case you want to have your own custom migration script - */ - "-1"?: { - /** - * An optional field for debugging purposes - */ - changes?: string; - fields: string[] | "*"; - /** - * The migration script - * - * @param client The client for the database - * @param data The data to migrate - * @param version The current version of the data (mainly for the -1 migration) - * @returns The migrated data OR null. In the case it returns null, we re-query the data. This is so you can delete the row, then re-insert it with new data - */ - migrate(client: Client, data: unknown, version: number): Promise | unknown | null; - }; - /** - * 0 is only ran when the data has no version, this could be you at a later point in time adding a version to the table - */ - "0"?: { - /** - * An optional field for debugging purposes - */ - changes?: string; - fields: string[] | "*"; - /** - * The migration script - * - * @param client The client for the database - * @param data The data to migrate - * @param version The current version of the data (mainly for the -1 migration) - * @returns The migrated data OR null. In the case it returns null, we re-query the data. This is so you can delete the row, then re-insert it with new data - */ - migrate(client: Client, data: unknown, version: number): Promise | unknown; - }; - }; - - /** - * The "mode" for the columns casing - */ - mode?: "camelCase" | "PascalCase" | "snake_case"; - - /** - * These are the primary keys for the table - * i.e "PRIMARY KEY (k1, k2)" or "PRIMARY KEY ((k1, k2), k3))" - */ - primaryKeys: PrimaryKeys[]; - tableName: string; - - types?: Types; - - /** - * Version is forcefully injected as a column, we name it "int_tbl_ver" and its a normal int. You may choose to rename it if you wish - * If you want to use a custom version, you can provide a tuple with the first value being the name and the second being the version - */ - version?: number | [string, number]; - /** - * The options for the table - */ - with?: CassandraTableOptions; -} - -export type ExtractTypesFromCreateTable = T extends Table> - ? ConvertObjectToNormal - : T extends Options - ? ConvertObjectToNormal - : never; - -export type ConvertTypesToTypes>> = { - // @ts-expect-error -- This is fine - [K in keyof T]: ConvertToActualType; -}; - -export type NullifyStuff = { - [K in keyof T]: T[K] extends string | number | boolean | Date | bigint | null - ? T[K] | null - : T[K] extends (infer U)[] - ? NullifyStuff[] - : T[K] extends object - ? NullifyStuff - : T[K] | null; -}; - -export type UnNullifyStuff = { - [K in keyof T]: T[K] extends string | number | boolean | Date | bigint | null - ? Exclude - : T[K] extends (infer U)[] - ? UnNullifyStuff[] - : T[K] extends object - ? UnNullifyStuff - : Exclude; -}; - -export type PublicGetReturnType = Fields extends "*" - ? NullifyStuff - : NullifyStuff>>; - -const mappings = { - date: "timestamp", - string: "text", - number: "int", -}; - -export const reservedNames = [ - "partition_key", - "cluster_key", - "key", - "column1", - "value", - "writetime", - "ttl", - "add", - "all", - "allow", - "alter", - "and", - "apply", - "asc", - "authorize", - "batch", - "begin", - "by", - "columnfamily", - "create", - "delete", - "desc", - "drop", - "from", - "grant", - "in", - "index", - "insert", - "into", - "keyspace", - "limit", - "modify", - "of", - "on", - "order", - "primary", - "rename", - "revoke", - "schema", - "select", - "set", - "table", - "to", - "token", - "truncate", - "update", - "use", - "using", - "where", - "with", -]; - -export const snakeifyString = (str: string) => { - const replaced = str.replaceAll(/(?[\da-z]|(?=[A-Z]))(?[A-Z])/g, "$1_$2").toLowerCase(); - - if (reservedNames.includes(replaced)) { - return `${replaced}_`; - } - - return replaced; -}; - -export const convertToCorrectType = (type: string) => { - if (mappings[type as keyof typeof mappings]) { - return mappings[type as keyof typeof mappings]; - } - - return type; -}; - -export const ExtractValueName = (type: T): AllTypes => { - // ? basically the FreezeType just without freezing the type - if (typeof type === "string") { - return convertToCorrectType(snakeifyString(type)).toString() as AllTypes; - } - - if (Array.isArray(type)) { - return `list<${ExtractValueName(type[0])}>`.toString() as AllTypes; - } - - return convertToCorrectType(snakeifyString(type.name)).toString() as AllTypes; -}; - -/** - * Turn a {@link ColumnTypesRaw} or {@link ColumnTypesStrings} into a {@link FrozenTypes} or {@link ListableTypes} - */ -export const FreezeType = (type: T): ConvertType => { - if (typeof type === "string") { - if (type.startsWith("frozen<") || type.startsWith("list; - } - - if (type.startsWith("list<")) { - // ? we extract the type from the list - const extractedType = type.slice(5, -1); - - return `list<${FreezeType(convertToCorrectType(extractedType.toLowerCase()) as FrozenlessTypes)}>` as ConvertType; - } - - return `frozen<${convertToCorrectType(type.toLowerCase())}>` as ConvertType; - } - - if (Array.isArray(type)) { - return `list<${FreezeType(type[0])}>`.toLowerCase() as ConvertType; - } - - return `frozen<${convertToCorrectType(type.name.toLowerCase())}>` as ConvertType; -}; diff --git a/src/Utils/Classes/DB/tableToCql.ts b/src/Utils/Classes/DB/tableToCql.ts deleted file mode 100644 index 3b519fbc..00000000 --- a/src/Utils/Classes/DB/tableToCql.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { - type ListAndFreezeType, - ExtractValueName, - reservedNames, - type AllTypes, - type Options, -} from "./createTableTypes.ts"; - -const handledWithOptions = (key: string, value: unknown) => { - let builtValue = ""; - - if (value === null || value === undefined) { - return ""; - } - - if (key === "clustering_order") { - return `CLUSTERING ${value}`; - } - - switch (typeof value) { - case "bigint": - case "number": - case "boolean": { - builtValue = value.toString(); - - break; - } - - case "string": { - builtValue = `'${value}'`; - - break; - } - - case "object": { - if (!Array.isArray(value)) { - // ? turn value into {'keys': 'ALL', 'rows_per_partition': 'ALL'} - builtValue = `{${Object.entries(value) - .map(([key, value]) => `'${key}': '${value}'`) - .join(", ")}}`; - - break; - } - - builtValue = `[${value.join(", ")}]`; - - break; - } - - default: { - builtValue = ""; - } - } - - return `${key} = ${builtValue}`; -}; - -/** - * Build a non clean CQL table. - * - * Note: The "uncleaned" portion means that the formatting is garbage but it should still work to run in cassandra - */ -const convertTableToCqlCommand = < - Types extends Record>>, - Columns extends Record>, - PrimaryKeys extends keyof Columns | [keyof Columns, keyof Columns], - IndexKeys extends keyof Columns, ->( - options: Options, -) => { - const columns = Object.entries(options.columns).map(([key, value]) => { - const correctValue = ExtractValueName(value as AllTypes); - - if (reservedNames.includes(key.toString())) { - return `${key}_ ${correctValue}`; - } - - return `${key} ${correctValue}`; - }); - - const types = Object.entries(options.types ?? {}).map(([key, value]): string => { - const columns = Object.entries(value).map(([key, value]) => { - return `${key} ${ExtractValueName(value as AllTypes)}`; - }); - - return `CREATE TYPE ${key} (${columns.join(",\n")});`; - }); - - const withOptions = Object.entries(options.with ?? {}).map(([key, value]) => handledWithOptions(key, value)); - - const built = [ - types.join("\n"), - `CREATE TABLE${options.ifNotExists ? " IF NOT EXISTS" : ""} ${options.tableName} (`, - columns.map((k) => `\t ${k}`).join(",\n"), - ",", - `\tPRIMARY KEY (${options.primaryKeys.map((key) => (Array.isArray(key) ? `(${key.join(", ")})` : key)).join(", ")})`, - ")", - withOptions.length > 0 ? `WITH ${withOptions.join(" AND ")}` : "", - ";", - "", - "", - (options.indexes ?? []).length > 0 - ? options.indexes - ?.map((index) => { - const name = Array.isArray(index) ? index[0] : null; - - return `CREATE INDEX IF NOT EXISTS ${name ? name : `${options.tableName}_inx_${index as string}`} ON ${options.tableName} (${String(Array.isArray(index) ? index[1] : index)});`; - }) - .join("\n") - : "", - ]; - - return built.join("\n"); -}; - -export default convertTableToCqlCommand; - -export { handledWithOptions }; diff --git a/src/Utils/Classes/ErrorGen.ts b/src/Utils/Classes/ErrorGen.ts index 7fbc8cd7..e4b37a8f 100644 --- a/src/Utils/Classes/ErrorGen.ts +++ b/src/Utils/Classes/ErrorGen.ts @@ -247,6 +247,18 @@ const errorGen = { AlreadyInGuild: () => { return new HTTPErrors(4_038); }, + /* + * You cannot invoke yourself, i.e kick yourself + */ + CannotInvokeSelf: () => { + return new HTTPErrors(4_039); + }, + /* + * Failed to kick or ban the user + */ + FailedToKickBan: () => { + return new HTTPErrors(4_040); + } }; export default errorGen; diff --git a/src/Utils/Cql b/src/Utils/Cql index 82be9404..73ce9d8c 160000 --- a/src/Utils/Cql +++ b/src/Utils/Cql @@ -1 +1 @@ -Subproject commit 82be94045728a18aeb90844351bd63b42062f2b4 +Subproject commit 73ce9d8cbb92044407fce80e2bb81659494ae85f diff --git a/src/Utils/Versioning/v1/PermissionCheck.ts b/src/Utils/Versioning/v1/PermissionCheck.ts index 13329c5a..31de58ad 100644 --- a/src/Utils/Versioning/v1/PermissionCheck.ts +++ b/src/Utils/Versioning/v1/PermissionCheck.ts @@ -135,6 +135,33 @@ class PermissionHandler { return allow && !deny; } + + /** + * Checks if you can ban / kick someone, basically just checks role positions. I.e if you are at position 8 and thhey are position 3, you can ban them + * BUT if they are at position 8 and you are at position 3, you can't ban them + */ + public canBanKick(memberRoles: { + id: string; + position: number; + }[]): boolean { + if (this.guildMemberFlags.has("Owner") || this.guildMemberFlags.has("CoOwner")) { + return true; + } + + const membersHighestRole = this.memberRoles.sort((a, b) => b.position - a.position)[0]; + + if (!membersHighestRole) { + return false; + } + + const highestRole = memberRoles.sort((a, b) => b.position - a.position)[0]; + + if (!highestRole) { + return false; + } + + return membersHighestRole.position > highestRole.position; + } /** * This basically gets all the permissions a user has in the guild, useful for a few endpoints (mainly for the oauth2 endpoint) @@ -156,6 +183,10 @@ class PermissionHandler { return finishedPermissions.normizedBits; } + + public get isOwner() { + return this.guildMemberFlags.has("Owner"); + } /** * This takes in an array of permissions and checks to make sure you have permission to all of them. This is used for adding bots diff --git a/src/tableMigration.ts b/src/tableMigration.ts index e44b58c4..dc83a8c0 100644 --- a/src/tableMigration.ts +++ b/src/tableMigration.ts @@ -2,7 +2,7 @@ import App from "./Utils/Classes/App.ts"; new App("womp"); -import Client from "./Utils/Classes/DB/Client.ts"; +import Client from "./Utils/Cql/DB/Client.ts"; import ConfigManager from "./Utils/Classes/ConfigManager.ts"; import * as tables from "@/Utils/Cql/Tables/Tables.ts"; From e420254936644b4f29b370ec3ef13133c84560d9 Mon Sep 17 00:00:00 2001 From: kodarru Date: Sat, 14 Sep 2024 22:53:08 -0700 Subject: [PATCH 4/7] Route Descriptions --- src/Routes/v1/channels/[channelId]/index.ts | 4 ++-- .../v1/channels/[channelId]/messages/[messageId]/report.ts | 2 +- src/Routes/v1/guilds/[guildId]/bans/index.ts | 6 +++--- src/Routes/v1/guilds/[guildId]/index.ts | 2 +- src/Routes/v1/guilds/[guildId]/invites/@me.ts | 2 +- src/Routes/v1/guilds/[guildId]/invites/[inviteCode].ts | 4 ++-- src/Routes/v1/guilds/[guildId]/leave.ts | 2 +- src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts | 2 +- src/Routes/v1/guilds/[guildId]/members/[memberId]/kick.ts | 2 +- .../v1/guilds/[guildId]/members/[memberId]/roles/index.ts | 2 +- src/Routes/v1/guilds/[guildId]/members/index.ts | 2 +- src/Routes/v1/guilds/[guildId]/report.ts | 2 +- src/Routes/v1/guilds/[guildId]/roles/[roleId].ts | 2 +- src/Routes/v1/users/@me/channels/[channelId].ts | 4 ++-- src/Routes/v1/users/@me/channels/index.ts | 4 ++-- src/Routes/v1/users/[userId]/report.ts | 2 +- src/Routes/v1/webhooks/[token]/[id]/github.ts | 2 +- src/Routes/v1/webhooks/[token]/[id]/index.ts | 6 +++--- 18 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/Routes/v1/channels/[channelId]/index.ts b/src/Routes/v1/channels/[channelId]/index.ts index 6ef50ecc..7244c487 100644 --- a/src/Routes/v1/channels/[channelId]/index.ts +++ b/src/Routes/v1/channels/[channelId]/index.ts @@ -5,14 +5,14 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; export default class FetchUpdateChannel extends Route { @Method("get") - @Description("Change this Description when working on this route") + @Description("Fetch a certain channel.") @ContentTypes("application/json") public getChannel() { return {}; } @Method("patch") - @Description("Change this Description when working on this route") + @Description("Update a certain channel.") @ContentTypes("application/json") public patchChannel() { return {}; diff --git a/src/Routes/v1/channels/[channelId]/messages/[messageId]/report.ts b/src/Routes/v1/channels/[channelId]/messages/[messageId]/report.ts index ae33d774..35c20a92 100644 --- a/src/Routes/v1/channels/[channelId]/messages/[messageId]/report.ts +++ b/src/Routes/v1/channels/[channelId]/messages/[messageId]/report.ts @@ -5,7 +5,7 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; export default class ReportMessage extends Route { @Method("post") - @Description("Change this Description when working on this route") + @Description("Send a report about a message") @ContentTypes("application/json") public postReport() { return {}; diff --git a/src/Routes/v1/guilds/[guildId]/bans/index.ts b/src/Routes/v1/guilds/[guildId]/bans/index.ts index bab87367..dd07dc9b 100644 --- a/src/Routes/v1/guilds/[guildId]/bans/index.ts +++ b/src/Routes/v1/guilds/[guildId]/bans/index.ts @@ -5,21 +5,21 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; export default class FetchCreateRemoveBan extends Route { @Method("delete") - @Description("Change this Description when working on this route") + @Description("Remove a ban from a guild") @ContentTypes("application/json") public deleteBan() { return {}; } @Method("get") - @Description("Change this Description when working on this route") + @Description("Get information about a ban") @ContentTypes("application/json") public getBan() { return {}; } @Method("post") - @Description("Change this Description when working on this route") + @Description("Create a ban in a guild") @ContentTypes("application/json") public postBan() { return {}; diff --git a/src/Routes/v1/guilds/[guildId]/index.ts b/src/Routes/v1/guilds/[guildId]/index.ts index eacfc804..6463a3ae 100644 --- a/src/Routes/v1/guilds/[guildId]/index.ts +++ b/src/Routes/v1/guilds/[guildId]/index.ts @@ -210,7 +210,7 @@ export default class FetchEditGuild extends Route { } @Method("patch") - @Description("Change this Description when working on this route") + @Description("Edit a guild") @ContentTypes("application/json") public postGuild() { return {}; diff --git a/src/Routes/v1/guilds/[guildId]/invites/@me.ts b/src/Routes/v1/guilds/[guildId]/invites/@me.ts index e8129589..02aeb48c 100644 --- a/src/Routes/v1/guilds/[guildId]/invites/@me.ts +++ b/src/Routes/v1/guilds/[guildId]/invites/@me.ts @@ -5,7 +5,7 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; export default class MyInvites extends Route { @Method("delete") - @Description("Change this Description when working on this route") + @Description("Delete invites from the current user") @ContentTypes("application/json") public deleteInvite() { return {}; diff --git a/src/Routes/v1/guilds/[guildId]/invites/[inviteCode].ts b/src/Routes/v1/guilds/[guildId]/invites/[inviteCode].ts index a35b2086..b930d486 100644 --- a/src/Routes/v1/guilds/[guildId]/invites/[inviteCode].ts +++ b/src/Routes/v1/guilds/[guildId]/invites/[inviteCode].ts @@ -5,14 +5,14 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; export default class FetchDeleteInvite extends Route { @Method("delete") - @Description("Change this Description when working on this route") + @Description("Delete an invite") @ContentTypes("application/json") public deleteInvite() { return {}; } @Method("get") - @Description("Change this Description when working on this route") + @Description("Get information about an invite") @ContentTypes("application/json") public getInvite() { return {}; diff --git a/src/Routes/v1/guilds/[guildId]/leave.ts b/src/Routes/v1/guilds/[guildId]/leave.ts index eb17f7a2..5f575e66 100644 --- a/src/Routes/v1/guilds/[guildId]/leave.ts +++ b/src/Routes/v1/guilds/[guildId]/leave.ts @@ -15,7 +15,7 @@ import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; export default class LeaveGuild extends Route { @Method("delete") - @Description("Change this Description when working on this route") + @Description("Delete a guild") @ContentTypes("any") @Middleware( userMiddleware({ diff --git a/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts b/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts index 6e3f4232..b0eef7c4 100644 --- a/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts +++ b/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts @@ -23,7 +23,7 @@ const banMemberBody = { export default class BanMember extends Route { @Method("delete") - @Description("Change this Description when working on this route") + @Description("Remove a ban from a member") @ContentTypes("application/json") @Middleware( userMiddleware({ diff --git a/src/Routes/v1/guilds/[guildId]/members/[memberId]/kick.ts b/src/Routes/v1/guilds/[guildId]/members/[memberId]/kick.ts index 2b17fa3d..19601747 100644 --- a/src/Routes/v1/guilds/[guildId]/members/[memberId]/kick.ts +++ b/src/Routes/v1/guilds/[guildId]/members/[memberId]/kick.ts @@ -21,7 +21,7 @@ const kickMemberBody = { export default class KickMember extends Route { @Method("delete") - @Description("Change this Description when working on this route") + @Description("Kick a member from the guild") @ContentTypes("application/json") @Middleware( userMiddleware({ diff --git a/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/index.ts b/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/index.ts index d61b3333..25b97ad5 100644 --- a/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/index.ts +++ b/src/Routes/v1/guilds/[guildId]/members/[memberId]/roles/index.ts @@ -5,7 +5,7 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; export default class AddRemoveRole extends Route { @Method("put") - @Description("Change this Description when working on this route") + @Description("Change the roles of a member in a guild.") @ContentTypes("application/json") public putRole() { return {}; diff --git a/src/Routes/v1/guilds/[guildId]/members/index.ts b/src/Routes/v1/guilds/[guildId]/members/index.ts index 3d3d9f88..742a51e9 100644 --- a/src/Routes/v1/guilds/[guildId]/members/index.ts +++ b/src/Routes/v1/guilds/[guildId]/members/index.ts @@ -5,7 +5,7 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; export default class FetchMembers extends Route { @Method("get") - @Description("Change this Description when working on this route") + @Description("Fetch all members of a guild.") @ContentTypes("application/json") public getMembers() { return {}; diff --git a/src/Routes/v1/guilds/[guildId]/report.ts b/src/Routes/v1/guilds/[guildId]/report.ts index 7aa823a5..3d8dd213 100644 --- a/src/Routes/v1/guilds/[guildId]/report.ts +++ b/src/Routes/v1/guilds/[guildId]/report.ts @@ -5,7 +5,7 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; export default class Report extends Route { @Method("post") - @Description("Change this Description when working on this route") + @Description("Send a report about a guild") @ContentTypes("application/json") public postReport() { return {}; diff --git a/src/Routes/v1/guilds/[guildId]/roles/[roleId].ts b/src/Routes/v1/guilds/[guildId]/roles/[roleId].ts index 016a6c25..9d202f88 100644 --- a/src/Routes/v1/guilds/[guildId]/roles/[roleId].ts +++ b/src/Routes/v1/guilds/[guildId]/roles/[roleId].ts @@ -113,7 +113,7 @@ export default class FetchDeleteRole extends Route { } @Method("delete") - @Description("Change this Description when working on this route") + @Description("Delete a role") @ContentTypes("application/json") public deleteRole() { return {}; diff --git a/src/Routes/v1/users/@me/channels/[channelId].ts b/src/Routes/v1/users/@me/channels/[channelId].ts index 50acf0a3..253c4b1b 100644 --- a/src/Routes/v1/users/@me/channels/[channelId].ts +++ b/src/Routes/v1/users/@me/channels/[channelId].ts @@ -5,14 +5,14 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; export default class Channels extends Route { @Method("delete") - @Description("Change this Description when working on this route") + @Description("Delete a channel") @ContentTypes("application/json") public deleteChannel() { return {}; } @Method("get") - @Description("Change this Description when working on this route") + @Description("Get a channel") @ContentTypes("application/json") public getChannel() { return {}; diff --git a/src/Routes/v1/users/@me/channels/index.ts b/src/Routes/v1/users/@me/channels/index.ts index 54aeb927..be5a2748 100644 --- a/src/Routes/v1/users/@me/channels/index.ts +++ b/src/Routes/v1/users/@me/channels/index.ts @@ -5,14 +5,14 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; export default class Channels extends Route { @Method("post") - @Description("Change this Description when working on this route") + @Description("Create/Send a message in a DM channel") @ContentTypes("application/json") public createChannel() { return {}; } @Method("get") - @Description("Change this Description when working on this route") + @Description("Get DM channels") @ContentTypes("application/json") public getChannels() { return {}; diff --git a/src/Routes/v1/users/[userId]/report.ts b/src/Routes/v1/users/[userId]/report.ts index 7aa823a5..b6626ffb 100644 --- a/src/Routes/v1/users/[userId]/report.ts +++ b/src/Routes/v1/users/[userId]/report.ts @@ -5,7 +5,7 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; export default class Report extends Route { @Method("post") - @Description("Change this Description when working on this route") + @Description("Report a user") @ContentTypes("application/json") public postReport() { return {}; diff --git a/src/Routes/v1/webhooks/[token]/[id]/github.ts b/src/Routes/v1/webhooks/[token]/[id]/github.ts index b805fdcd..56f00c07 100644 --- a/src/Routes/v1/webhooks/[token]/[id]/github.ts +++ b/src/Routes/v1/webhooks/[token]/[id]/github.ts @@ -5,7 +5,7 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; export default class GithubWebhook extends Route { @Method("post") - @Description("Change this Description when working on this route") + @Description("Allows a GitHub webhook to be sent correctly") @ContentTypes("application/json") public postGithub() { return {}; diff --git a/src/Routes/v1/webhooks/[token]/[id]/index.ts b/src/Routes/v1/webhooks/[token]/[id]/index.ts index 39d3dcdf..b1205eed 100644 --- a/src/Routes/v1/webhooks/[token]/[id]/index.ts +++ b/src/Routes/v1/webhooks/[token]/[id]/index.ts @@ -5,21 +5,21 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; export default class FetchPostWebhook extends Route { @Method("get") - @Description("Change this Description when working on this route") + @Description("Get information about a webhook") @ContentTypes("application/json") public getWebhook() { return {}; } @Method("patch") - @Description("Change this Description when working on this route") + @Description("Update a message sent by a webhook") @ContentTypes("application/json") public patchWebhook() { return {}; } @Method("post") - @Description("Change this Description when working on this route") + @Description("Send a message using a webhook") @ContentTypes("application/json") public postWebhook() { return {}; From bb490ba8bacca37d873b138266936b17992a0179 Mon Sep 17 00:00:00 2001 From: kodarru Date: Sat, 14 Sep 2024 23:07:56 -0700 Subject: [PATCH 5/7] Route Descriptions V2 --- src/Routes/v1/guilds/[guildId]/bans/index.ts | 2 +- src/Routes/v1/guilds/[guildId]/leave.ts | 2 +- src/Routes/v1/users/@me/channels/index.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Routes/v1/guilds/[guildId]/bans/index.ts b/src/Routes/v1/guilds/[guildId]/bans/index.ts index dd07dc9b..0c079e96 100644 --- a/src/Routes/v1/guilds/[guildId]/bans/index.ts +++ b/src/Routes/v1/guilds/[guildId]/bans/index.ts @@ -12,7 +12,7 @@ export default class FetchCreateRemoveBan extends Route { } @Method("get") - @Description("Get information about a ban") + @Description("Get all bans in a guild") @ContentTypes("application/json") public getBan() { return {}; diff --git a/src/Routes/v1/guilds/[guildId]/leave.ts b/src/Routes/v1/guilds/[guildId]/leave.ts index 5f575e66..7fe1311c 100644 --- a/src/Routes/v1/guilds/[guildId]/leave.ts +++ b/src/Routes/v1/guilds/[guildId]/leave.ts @@ -15,7 +15,7 @@ import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; export default class LeaveGuild extends Route { @Method("delete") - @Description("Delete a guild") + @Description("Leave a guild") @ContentTypes("any") @Middleware( userMiddleware({ diff --git a/src/Routes/v1/users/@me/channels/index.ts b/src/Routes/v1/users/@me/channels/index.ts index be5a2748..a8cd200d 100644 --- a/src/Routes/v1/users/@me/channels/index.ts +++ b/src/Routes/v1/users/@me/channels/index.ts @@ -5,7 +5,7 @@ import Route from "@/Utils/Classes/Routing/Route.ts"; export default class Channels extends Route { @Method("post") - @Description("Create/Send a message in a DM channel") + @Description("Create a DM channel") @ContentTypes("application/json") public createChannel() { return {}; From db830e4b72b85da80406e319100c12a2fcf959b5 Mon Sep 17 00:00:00 2001 From: Darker-Ink Date: Sun, 15 Sep 2024 21:58:29 -0500 Subject: [PATCH 6/7] feat: fetching bans and unbanning --- .../v1/channels/[channelId]/attachments.ts | 19 - src/Routes/v1/channels/[channelId]/typing.ts | 16 - src/Routes/v1/guilds/[guildId]/bans/index.ts | 328 +++++++++++++++++- .../[guildId]/members/[memberId]/ban.ts | 52 ++- .../v1/guilds/[guildId]/roles/[roleId].ts | 1 - src/Routes/v1/invites/[inviteCode].ts | 3 +- 6 files changed, 343 insertions(+), 76 deletions(-) diff --git a/src/Routes/v1/channels/[channelId]/attachments.ts b/src/Routes/v1/channels/[channelId]/attachments.ts index 3818b67d..db21935f 100644 --- a/src/Routes/v1/channels/[channelId]/attachments.ts +++ b/src/Routes/v1/channels/[channelId]/attachments.ts @@ -3,7 +3,6 @@ import bodyValidator from "@/Middleware/BodyValidator.ts"; import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; import { type Infer, number, snowflake, string } from "@/Types/BodyValidation.ts"; -import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import { FlagUtils } from "@/Utils/Classes/BitFields/NewFlags.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; @@ -328,24 +327,6 @@ export default class Attachments extends Route { }; } - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - - if (!guildMemberFlags.has("In")) { - set.status = 404; - - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", - }, - }); - - return { - success: false, - response: unknownChannel.toJSON(), - }; - } - const permissionOverrides = channel.permissionOverrides ? ( await Promise.all( diff --git a/src/Routes/v1/channels/[channelId]/typing.ts b/src/Routes/v1/channels/[channelId]/typing.ts index f07f3eb8..5fcf2fcb 100644 --- a/src/Routes/v1/channels/[channelId]/typing.ts +++ b/src/Routes/v1/channels/[channelId]/typing.ts @@ -1,7 +1,6 @@ import Constants from "@/Constants.ts"; import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; -import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import { FlagUtils } from "@/Utils/Classes/BitFields/NewFlags.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; @@ -102,21 +101,6 @@ export default class Typing extends Route { return unknownChannel.toJSON(); } - const guildMemberFlags = new GuildMemberFlags(guildMember.flags ?? 0); - - if (!guildMemberFlags.has("In")) { - set.status = 404; - - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", - }, - }); - - return unknownChannel.toJSON(); - } - const permissionOverrides = channel.permissionOverrides ? ( await Promise.all( diff --git a/src/Routes/v1/guilds/[guildId]/bans/index.ts b/src/Routes/v1/guilds/[guildId]/bans/index.ts index 0c079e96..a72a9ec0 100644 --- a/src/Routes/v1/guilds/[guildId]/bans/index.ts +++ b/src/Routes/v1/guilds/[guildId]/bans/index.ts @@ -1,27 +1,333 @@ +import { guildMemberFlags, UnBanErrorCodes } from "@/Constants.ts"; +import userMiddleware, { type UserMiddlewareType } from "@/Middleware/User.ts"; +import { any, type Infer, string } from "@/Types/BodyValidation.ts"; +import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import errorGen from "@/Utils/Classes/ErrorGen.ts"; import ContentTypes from "@/Utils/Classes/Routing/Decorators/ContentTypes.ts"; import Description from "@/Utils/Classes/Routing/Decorators/Description.ts"; import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; -import Route from "@/Utils/Classes/Routing/Route.ts"; +import Middleware from "@/Utils/Classes/Routing/Decorators/Middleware.ts"; +import Route, { type CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; +import { bansTable } from "@/Utils/Cql/Tables/BanTable.ts"; +import { guildMembersTable, type GuildMemberTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; +import { rolesTable } from "@/Utils/Cql/Tables/RoleTable.ts"; +import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; +import PermissionHandler from "@/Utils/Versioning/v1/PermissionCheck.ts"; + +const unbanMembersBody = { + members: any(), + reason: string().max(200).optional(), // ? for auditlog whenever I work on that +}; export default class FetchCreateRemoveBan extends Route { @Method("delete") @Description("Remove a ban from a guild") @ContentTypes("application/json") - public deleteBan() { - return {}; + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: "User", + }), + ) + public async deleteBan({ + user, + set, + params, + body, + }: CreateRoute<"/:guildId", Infer, [UserMiddlewareType]>) { + if ( + !Array.isArray(body.members) || + body.members.length === 0 || + body.members.length > 100 || + body.members.some((member) => typeof member !== "string") + ) { + const invalidMembers = errorGen.InvalidField(); + + invalidMembers.addError({ + members: { + code: "InvalidField", + message: "The members field is invalid, it must be an array of strings and no larger then 100 members.", + }, + }); + + set.status = 400; + + return invalidMembers.toJSON(); + } + + const { success, response, permissions } = await this.permissionCheck(params.guildId, { + user, + set, + }); + + if (!success || !permissions) { + return response; + } + + if (!permissions.hasAnyRole(["UnbanMembers"])) { + set.status = 403; + + const noPermission = errorGen.MissingPermissions(); + + noPermission.addError({ + permissions: { + code: "MissingPermissions", + message: 'You are missing the "UnbanMembers" permission.', + requiredPermissions: ["ViewBans"], + }, + }); + + return noPermission.toJSON(); + } + + const unbannedUserIds: string[] = []; + const failedUnbans: [string, UnBanErrorCodes][] = []; + + await Promise.all( + body.members.map(async (memberId) => { + const banTable = await bansTable.get({ + guildId: Encryption.encrypt(params.guildId), + userId: Encryption.encrypt(memberId), + }, { + fields: ["userId"] + }); + + if (!banTable) { + failedUnbans.push([memberId, UnBanErrorCodes.NotBanned]); + + return; + } + + const guildMember = await guildMembersTable.get({ + guildId: Encryption.encrypt(params.guildId), + userId: Encryption.encrypt(memberId), + }, { + fields: ["guildMemberId"] + }); + + if (!guildMember) { + failedUnbans.push([memberId, UnBanErrorCodes.InternalError]); + + return; + } + + await guildMembersTable.update({ + guildId: Encryption.encrypt(params.guildId), + guildMemberId: guildMember.guildMemberId!, + }, { + flags: guildMemberFlags.None + }); + + unbannedUserIds.push(memberId); + + this.App.rabbitMQForwarder("ban.delete", { + guildId: params.guildId, + userId: memberId, + }) + }) + ) + + return { + unbanned: unbannedUserIds, + failedUnbans + }; } @Method("get") @Description("Get all bans in a guild") - @ContentTypes("application/json") - public getBan() { - return {}; + @ContentTypes("any") + @Middleware( + userMiddleware({ + accessType: "LoggedIn", + allowedRequesters: "User", + }), + ) + public async getBans({ user, set, params }: CreateRoute<"/:guildId", any, [UserMiddlewareType]>) { + const { success, response, permissions } = await this.permissionCheck(params.guildId, { + user, + set, + }); + + if (!success || !permissions) { + return response; + } + + if (!permissions.hasAnyRole(["ViewBans"])) { + set.status = 403; + + const noPermission = errorGen.MissingPermissions(); + + noPermission.addError({ + permissions: { + code: "MissingPermissions", + message: 'You are missing the "ViewBans" permission.', + requiredPermissions: ["ViewBans"], // ? testing field may be removed at any time + }, + }); + + return noPermission.toJSON(); + } + + const data = ( + await bansTable.find( + { + guildId: Encryption.encrypt(params.guildId), + }, + { + limit: 500, + }, + ) + ) + .toArray() + .filter((ban) => ban !== null); + + return Encryption.completeDecryption( + await Promise.all( + data.map(async (ban) => { + const bannedUser = await usersTable.get( + { + userId: ban.userId!, + }, + { + fields: ["avatar", "globalNickname", "publicFlags", "tag", "userId", "username", "flags", "banner"], + }, + ); + + const bannedBy = await usersTable.get( + { + userId: ban.bannerId!, + }, + { + fields: ["avatar", "globalNickname", "publicFlags", "tag", "userId", "username", "flags", "banner"], + }, + ); + + return { + bannedAt: ban.bannedDate!.toISOString(), + bannedBy: bannedBy + ? { + avatar: bannedBy.avatar, + globalNickname: bannedBy.globalNickname, + publicFlags: bannedBy.publicFlags, + tag: bannedBy.tag, + id: bannedBy.userId, + username: bannedBy.username, + flags: bannedBy.flags, + banner: bannedBy.banner, + } + : null, + bannedUser: bannedUser + ? { + avatar: bannedUser.avatar, + globalNickname: bannedUser.globalNickname, + publicFlags: bannedUser.publicFlags, + tag: bannedUser.tag, + id: bannedUser.userId, + username: bannedUser.username, + flags: bannedUser.flags, + banner: bannedUser.banner, + } + : null, + reason: ban.reason, + unbanDate: ban.unbanDate ? ban.unbanDate.toISOString() : null, + }; + }), + ), + ); } - @Method("post") - @Description("Create a ban in a guild") - @ContentTypes("application/json") - public postBan() { - return {}; + private async permissionCheck( + guildId: string, + { + user, + set, + }: { + user: UserMiddlewareType["user"]; + set: CreateRoute["set"]; + }, + ): Promise<{ + success: boolean; + response: unknown; + permissions: PermissionHandler | null; + guildMember: GuildMemberTable | null; + }> { + const unknownChannel = errorGen.UnknownChannel(); + + if (!(await user.checkInGuild(Encryption.decrypt(guildId)))) { + const invalidGuild = errorGen.UnknownGuild(); + + invalidGuild.addError({ + guildId: { + code: "UnknownGuild", + message: "The provided guild does not exist, or you do not have access to it.", + }, + }); + + set.status = 404; + + return { + success: false, + response: invalidGuild.toJSON(), + permissions: null, + guildMember: null, + }; + } + + const guildMember = await guildMembersTable.get( + { + guildId: Encryption.encrypt(guildId), + userId: Encryption.encrypt(user.id), + }, + { + fields: ["flags", "roles", "guildMemberId", "joinedAt", "nickname", "timeoutUntil", "left"], + }, + ); + + if (!guildMember || guildMember.left) { + unknownChannel.addError({ + channel: { + code: "UnknownChannel", + message: "The provided channel does not exist or you do not have access to it.", + }, + }); + + set.status = 404; + + return { + success: false, + response: unknownChannel.toJSON(), + permissions: null, + guildMember: null, + }; + } + + const roles = ( + await Promise.all( + guildMember.roles.map(async (id) => + rolesTable.get( + { roleId: id, guildId: Encryption.encrypt(guildId) }, + { fields: ["roleId", "permissions", "position"] }, + ), + ), + ) + ).filter((val) => val !== null); + + const permissionCheck = new PermissionHandler( + user.id, + guildMember.flags ?? 0, + roles.map((role) => ({ + id: role.roleId!, + permissions: Permissions.permissionFromDatabase(role.permissions), + position: role.position!, + })), + ); + + return { + success: true, + response: null, + permissions: permissionCheck, + guildMember: guildMember as GuildMemberTable, + }; } } diff --git a/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts b/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts index b0eef7c4..18dab10f 100644 --- a/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts +++ b/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts @@ -121,22 +121,7 @@ export default class BanMember extends Route { fields: ["flags", "roles", "guildMemberId", "left"] }); - if (!member || member.left) { - const unknownUser = errorGen.UnknownMember(); - - unknownUser.addError({ - userId: { - code: "UnknownUser", - message: "The provided user does not exist or is not in the guild.", - }, - }); - - set.status = 404; - - return unknownUser.toJSON(); - } - - const membersFlags = new GuildMemberFlags(member.flags ?? 0); + const membersFlags = new GuildMemberFlags(member?.flags ?? 0); if (membersFlags.has("Owner") || membersFlags.has("CoOwner")) { if (!permissions.isOwner) { @@ -155,7 +140,7 @@ export default class BanMember extends Route { } } - const memberRoles = ( + const memberRoles = member ? ( await Promise.all( member.roles.map(async (id) => rolesTable.get( @@ -164,7 +149,7 @@ export default class BanMember extends Route { ), ), ) - ).filter((val) => val !== null); + ).filter((val) => val !== null) : []; if (!permissions.canBanKick(memberRoles.map((role) => ({ id: role.roleId!, position: role.position! })))) { const cannotBan = errorGen.FailedToKickBan(); @@ -181,15 +166,26 @@ export default class BanMember extends Route { return cannotBan.toJSON(); } - await guildMembersTable.update({ - guildId: Encryption.encrypt(params.guildId), - userId: Encryption.encrypt(params.memberId) - }, { - left: true, - flags: guildMemberFlags.Banned, - roles: [], - nickname: null, - }); + if (member) { + await guildMembersTable.update({ + guildId: Encryption.encrypt(params.guildId), + userId: Encryption.encrypt(params.memberId) + }, { + left: true, + flags: guildMemberFlags.Banned, + roles: [], + nickname: null, + }); + } else { + await guildMembersTable.create({ + guildId: Encryption.encrypt(params.guildId), + userId: Encryption.encrypt(params.memberId), + flags: guildMemberFlags.Banned, + roles: [], + left: true, + guildMemberId: this.App.snowflake.generate(true), + }); + } await bansTable.create({ bannedDate: new Date(), @@ -203,7 +199,7 @@ export default class BanMember extends Route { this.App.rabbitMQForwarder("guildMember.ban", { guildId: params.guildId, userId: params.memberId, - kickedBy: user.id, + bannedBy: user.id, reason: body.reason, }) diff --git a/src/Routes/v1/guilds/[guildId]/roles/[roleId].ts b/src/Routes/v1/guilds/[guildId]/roles/[roleId].ts index 9d202f88..9efcfcd0 100644 --- a/src/Routes/v1/guilds/[guildId]/roles/[roleId].ts +++ b/src/Routes/v1/guilds/[guildId]/roles/[roleId].ts @@ -1,5 +1,4 @@ import userMiddleware, { type UserMiddlewareType } from "@/Middleware/User.ts"; -import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; import errorGen from "@/Utils/Classes/ErrorGen.ts"; diff --git a/src/Routes/v1/invites/[inviteCode].ts b/src/Routes/v1/invites/[inviteCode].ts index fc02879d..8d8d4992 100644 --- a/src/Routes/v1/invites/[inviteCode].ts +++ b/src/Routes/v1/invites/[inviteCode].ts @@ -137,7 +137,7 @@ export default class FetchJoinInvite extends Route { userId: inviteExists.creatorId!, }, { - fields: ["avatar", "globalNickname", "publicFlags", "tag", "userId", "username", "flags"], + fields: ["avatar", "globalNickname", "publicFlags", "tag", "userId", "username", "flags", "banner"], }, ); @@ -169,6 +169,7 @@ export default class FetchJoinInvite extends Route { tag: creator.tag, publicFlags: creator.publicFlags, flags: FlagFields.cleanPrivateFlags(creator.flags ?? "0"), + banner: creator.banner, } : null, uses: inviteExists.uses, From 76ff3196db3c291264553ceab479e3a67ea826d3 Mon Sep 17 00:00:00 2001 From: Darker-Ink Date: Wed, 18 Sep 2024 23:02:28 -0500 Subject: [PATCH 7/7] feat: cleanup + start of reactions --- bun.lockb | Bin 264424 -> 266768 bytes package.json | 1 + .../[channelId]/messages/[messageId]/index.ts | 690 +++++++----------- .../[messageId]/reactions/[reactionId].ts | 0 .../v1/channels/[channelId]/messages/index.ts | 277 +------ src/Routes/v1/guilds/[guildId]/bans/index.ts | 5 + .../[guildId]/members/[memberId]/ban.ts | 48 +- src/Utils/Classes/API.ts | 103 +++ src/Utils/Versioning/v1/handleEmbeds.ts | 177 +++++ tsconfig.json | 2 +- 10 files changed, 617 insertions(+), 686 deletions(-) create mode 100644 src/Routes/v1/channels/[channelId]/messages/[messageId]/reactions/[reactionId].ts create mode 100644 src/Utils/Versioning/v1/handleEmbeds.ts diff --git a/bun.lockb b/bun.lockb index b9c423f487d8c42b6055db751298c530c7f8c43d..468cb4e03e9f9a32296c0c8a16c7aed78c05a4f1 100755 GIT binary patch delta 46669 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 V0bG3AqCM>|o}N^hzVR{R1OVS0?EwG) delta 45369 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 { - const channel = await channelsTable.get( - { - channelId: Encryption.encrypt(params.channelId), - }, - { - fields: ["type", "guildId", "channelId", "permissionOverrides"], - }, - ); + + const { response, success, permissionHandler } = await this.checkChannelAccess({ + params, + set, + user, + permissions: ["ViewChannels"], + }); + + if (!success || !permissionHandler) { + return response; + } - const unknownChannel = errorGen.UnknownChannel(); + const message = await this.tryMessage(params.channelId, params.messageId); - if (!channel) { + if (!message) { set.status = 404; - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", + const unknownMessage = errorGen.UnknownMessage(); + + unknownMessage.addError({ + message: { + code: "UnknownMessage", + message: "The provided message does not exist or you do not have access to it.", }, }); - return unknownChannel.toJSON(); + return unknownMessage.toJSON(); } + + if (Encryption.decrypt(message.authorId!) !== user.id && !permissionHandler.hasChannelPermission(params.channelId, ["ManageMessages"])) { + set.status = 403; - const channelFlags = new FlagUtils(channel.type ?? Constants.channelTypes.GuildText, Constants.channelTypes); - - if (channelFlags.hasOneArray(["Dm", "GroupChat"])) { - const message = await this.tryMessage(params.channelId, params.messageId); - - if (!message) { - set.status = 404; + const missingPermission = errorGen.MissingPermissions(); - const unknownMessage = errorGen.UnknownMessage(); - - unknownMessage.addError({ - message: { - code: "UnknownMessage", - message: "The provided message does not exist or you do not have access to it.", - }, - }); - - return unknownMessage.toJSON(); - } - - if (Encryption.decrypt(message.authorId!) !== user.id) { - set.status = 403; - - const missingPermission = errorGen.MissingPermissions(); - - missingPermission.addError({ - message: { - code: "MissingPermissions", - message: "You cannot delete a message that you did not create.", - requiredPermissions: [], // ? note: this is a testing field, may be removed later - }, - }); - - return missingPermission.toJSON(); - } - - await messagesTable.remove({ - channelId: Encryption.encrypt(params.channelId), - messageId: BigInt(params.messageId), - bucket: message.bucket!, - }); - } else { - const guildMember = await guildMembersTable.get( - { - guildId: channel.guildId!, - userId: Encryption.encrypt(user.id), - }, - { - fields: ["flags", "roles", "left"], + missingPermission.addError({ + message: { + code: "MissingPermissions", + message: "You cannot delete a message that you did not create.", + requiredPermissions: [], // ? note: this is a testing field, may be removed later }, - ); - - if (!guildMember || guildMember.left) { - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", - }, - }); - - set.status = 404; - - return unknownChannel.toJSON(); - } - - const message = await this.tryMessage(params.channelId, params.messageId); - - if (!message) { - set.status = 404; - - const unknownMessage = errorGen.UnknownMessage(); - - unknownMessage.addError({ - message: { - code: "UnknownMessage", - message: "The provided message does not exist or you do not have access to it.", - }, - }); - - return unknownMessage.toJSON(); - } - - if (Encryption.decrypt(message.authorId!) === user.id) { - await messagesTable.remove({ - channelId: Encryption.encrypt(params.channelId), - messageId: BigInt(params.messageId), - bucket: message.bucket!, - }); - - this.App.rabbitMQForwarder("message.delete", { - channelId: params.channelId, - messageId: params.messageId, - }); - - set.status = 204; - - return; - } - - const permissionOverrides = channel.permissionOverrides - ? ( - await Promise.all( - channel.permissionOverrides.map(async (id) => - permissionsOverridesTable.get( - { permissionId: id }, - { fields: ["allow", "deny", "permissionId", "type"] }, - ), - ), - ) - ).filter((val) => val !== null) - : []; - - const roles = ( - await Promise.all( - guildMember.roles.map(async (id) => - rolesTable.get( - { roleId: id, guildId: channel.guildId! }, - { fields: ["roleId", "permissions", "position"] }, - ), - ), - ) - ).filter((val) => val !== null); - - const permissionCheck = new PermissionHandler( - user.id, - guildMember.flags ?? 0, - roles.map((role) => ({ - id: role.roleId!, - permissions: Permissions.permissionFromDatabase(role.permissions), - position: role.position!, - })), - [ - { - id: channel.channelId!, - overrides: permissionOverrides.map((override) => ({ - allow: Permissions.permissionFromDatabase(override.allow), - deny: Permissions.permissionFromDatabase(override.deny), - id: override.permissionId!, - type: override.type === Constants.permissionOverrideTypes.Member ? "Member" : "Role", - })), - }, - ], - ); - - if ( - !permissionCheck.hasChannelPermission( - Encryption.decrypt(channel.channelId!), - ["ManageMessages", "ViewMessageHistory"], - true, - ) - ) { - set.status = 403; - - const missingPermission = errorGen.MissingPermissions(); - - missingPermission.addError({ - channel: { - code: "MissingPermissions", - message: 'You are missing the "ManageMessages" and "ViewMessageHistory" permissions.', - requiredPermissions: ["ManageMessages", "ViewMessageHistory"], // ? note: this is a testing field, may be removed later - }, - }); - - return missingPermission.toJSON(); - } - - await messagesTable.remove({ - channelId: Encryption.encrypt(params.channelId), - messageId: BigInt(params.messageId), - bucket: message.bucket!, }); - } + return missingPermission.toJSON(); + } + + await messagesTable.remove({ + channelId: Encryption.encrypt(params.channelId), + messageId: BigInt(params.messageId), + bucket: message.bucket!, + }); + this.App.rabbitMQForwarder("message.delete", { channelId: params.channelId, messageId: params.messageId, }); - + set.status = 204; - + return; } @@ -276,6 +130,21 @@ export default class DeleteEditGetMessage extends Route { set, body, }: CreateRoute<"/channels/:channelId/messages/:messageId", Infer, [UserMiddlewareType]>) { + if (body.content && body.content.trim().length === 0) { + set.status = 400; + + const invalidContent = errorGen.EmptyMessage(); + + invalidContent.addError({ + message: { + code: "InvalidMessage", + message: "You cannot send an empty message", + }, + }); + + return invalidContent.toJSON(); + } + if (body.embeds && !this.isEmbed(body.embeds)) { const invalidEmbed = errorGen.InvalidField(); @@ -292,6 +161,7 @@ export default class DeleteEditGetMessage extends Route { } let newEmbeds: Embed[] = []; + let canEmbed = true; if (body.embeds) { const invalidEmbed = errorGen.InvalidField(); @@ -326,31 +196,56 @@ export default class DeleteEditGetMessage extends Route { } } - const channel = await channelsTable.get( - { - channelId: Encryption.encrypt(params.channelId), - }, - { - fields: ["type", "guildId", "channelId", "permissionOverrides"], - }, - ); + if (body.content === undefined && newEmbeds.length === 0) { + set.status = 400; - const unknownChannel = errorGen.UnknownChannel(); + const invalidContent = errorGen.EmptyMessage(); - if (!channel) { - set.status = 404; + invalidContent.addError({ + message: { + code: "InvalidMessage", + message: "You cannot send an empty message", + }, + }); - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", + return invalidContent.toJSON(); + } + + if (body.content !== undefined && (await this.App.checkMessage(body.content))) { + set.status = 403; + + const phishingMessage = errorGen.InvalidField(); + + phishingMessage.addError({ + message: { + code: "PhishingDetected", + message: "Phishing content detected in message", }, }); - return unknownChannel.toJSON(); + return phishingMessage.toJSON(); + } + + const { response, success, permissionHandler } = await this.checkChannelAccess({ + params, + set, + user, + permissions: ["ViewChannels", "SendMessages"], + }); + + if (!success || !permissionHandler) { + return response; + } + + if ( + permissionHandler && + !permissionHandler.hasChannelPermission(params.channelId, ["EmbedLinks"]) && + newEmbeds.length > 0 + ) { + newEmbeds = []; + canEmbed = false; } - const channelFlags = new FlagUtils(channel.type ?? Constants.channelTypes.GuildText, Constants.channelTypes); const message = await this.tryMessage(params.channelId, params.messageId); if (!message) { @@ -367,142 +262,21 @@ export default class DeleteEditGetMessage extends Route { return unknownMessage.toJSON(); } + + if (Encryption.decrypt(message.authorId!) !== user.id) { + set.status = 403; - if (channelFlags.hasOneArray(["Dm", "GroupChat"])) { - if (Encryption.decrypt(message.authorId!) !== user.id) { - set.status = 403; - - const missingPermission = errorGen.MissingPermissions(); - - missingPermission.addError({ - message: { - code: "MissingPermissions", - message: "You cannot edit a message that you did not create.", - requiredPermissions: [], // ? note: this is a testing field, may be removed later - }, - }); - - return missingPermission.toJSON(); - } - } else { - const guildMember = await guildMembersTable.get({ - guildId: channel.guildId!, - userId: Encryption.encrypt(user.id), - }, { - fields: ["left", "roles", "flags"] - }); - - if (!guildMember) { - unknownChannel.addError({ - channel: { - code: "UnknownChannel", - message: "The provided channel does not exist or you do not have access to it.", - }, - }); - - set.status = 404; + const missingPermission = errorGen.MissingPermissions(); - return unknownChannel.toJSON(); - } - - const permissionOverrides = channel.permissionOverrides - ? ( - await Promise.all( - channel.permissionOverrides.map(async (id) => - permissionsOverridesTable.get( - { permissionId: id }, - { fields: ["allow", "deny", "permissionId", "type"] }, - ), - ), - ) - ).filter((val) => val !== null) - : []; - - const roles = ( - await Promise.all( - guildMember.roles.map(async (id) => - rolesTable.get( - { roleId: id, guildId: channel.guildId! }, - { fields: ["roleId", "permissions", "position"] }, - ), - ), - ) - ).filter((val) => val !== null); - - const permissionCheck = new PermissionHandler( - user.id, - guildMember.flags ?? 0, - roles.map((role) => ({ - id: role.roleId!, - permissions: Permissions.permissionFromDatabase(role.permissions), - position: role.position!, - })), - [ - { - id: channel.channelId!, - overrides: permissionOverrides.map((override) => ({ - allow: Permissions.permissionFromDatabase(override.allow), - deny: Permissions.permissionFromDatabase(override.deny), - id: override.permissionId!, - type: override.type === Constants.permissionOverrideTypes.Member ? "Member" : "Role", - })), - }, - ], - ); - - if (!permissionCheck.hasChannelPermission(Encryption.decrypt(channel.channelId!), ["ViewMessageHistory"])) { - set.status = 403; - - const missingPermission = errorGen.MissingPermissions(); - - missingPermission.addError({ - channel: { - code: "MissingPermissions", - message: 'You are missing the "ViewMessageHistory" permission.', - requiredPermissions: ["ViewMessageHistory"], // ? note: this is a testing field, may be removed later - }, - }); - - return missingPermission.toJSON(); - } - - if (Encryption.decrypt(message.authorId!) !== user.id) { - set.status = 403; - - const missingPermission = errorGen.MissingPermissions(); - - missingPermission.addError({ - message: { - code: "MissingPermissions", - message: "You cannot edit a message that you did not create.", - requiredPermissions: [], // ? note: this is a testing field, may be removed later - }, - }); - - return missingPermission.toJSON(); - } - - if ( - !permissionCheck.hasChannelPermission(Encryption.decrypt(channel.channelId!), ["EmbedLinks"]) && - newEmbeds.length > 0 - ) { - newEmbeds = []; - } - } - - if (!body.content && newEmbeds.length === 0) { - set.status = 400; - - const invalidContent = errorGen.EmptyMessage(); - - invalidContent.addError({ + missingPermission.addError({ message: { - code: "InvalidMessage", - message: "You cannot send an empty message", + code: "MissingPermissions", + message: "You cannot edit a message that you did not create.", + requiredPermissions: [], // ? note: this is a testing field, may be removed later }, }); - return invalidContent.toJSON(); + return missingPermission.toJSON(); } await messagesTable.update( @@ -513,14 +287,16 @@ export default class DeleteEditGetMessage extends Route { }, { updatedDate: new Date(), - embeds: newEmbeds as never, + embeds: newEmbeds as unknown as EmbedType[], ...(body.content ? { content: Encryption.encrypt(body.content) } : {}), }, ); - set.status = 204; - - return; + return this.getMessage({ + user, + params, + set, + } as never); } @Method("get") @@ -537,14 +313,98 @@ export default class DeleteEditGetMessage extends Route { params, set, }: CreateRoute<"/channels/:channelId/messages/:messageId", any, [UserMiddlewareType]>) { + const { response, success } = await this.checkChannelAccess({ + params, + set, + user, + permissions: ["ViewMessageHistory", "ViewChannels"], + }); + + if (!success) { + return response; + } + + const message = await this.tryMessage(params.channelId, params.messageId); + + if (!message) { + set.status = 404; + + const unknownMessage = errorGen.UnknownMessage(); + + unknownMessage.addError({ + message: { + code: "UnknownMessage", + message: "The provided message does not exist or you do not have access to it.", + }, + }); + + return unknownMessage.toJSON(); + } + + const userData = await usersTable.get( + { + userId: message.authorId!, + }, + { + fields: ["userId", "username", "globalNickname", "tag", "avatar", "publicFlags", "flags"], + }, + ); + + return Encryption.completeDecryption({ + id: message.messageId, + author: { + id: userData?.userId ?? "0", + username: userData?.username ?? "Unknown User", + globalNickname: userData?.globalNickname ?? null, + tag: userData?.tag ?? "0000", + avatar: userData?.avatar ?? null, + publicFlags: userData?.publicFlags ?? Constants.publicFlags.GhostBadge, + flags: userData?.flags ? FlagFields.cleanPrivateFlags(userData?.flags) : Constants.privateFlags.Ghost, + }, + content: message.content, + creationDate: new Date(this.App.snowflake.timeStamp(message.messageId!.toString())).toISOString(), + editedDate: message.updatedDate?.toISOString() ?? null, + embeds: [], + nonce: null, + replyingTo: message.replyingTo ?? null, + attachments: [], + flags: message.flags, + allowedMentions: message.allowedMentions, + mentions: { + channels: message.mentionChannels ?? [], + roles: [], + users: message.mentions ?? [], + }, + pinned: false, + deletable: true, + }); + } + + private async checkChannelAccess({ + params, + set, + user, + permissions, + }: { + user: UserMiddlewareType["user"]; + set: CreateRoute["set"]; + params: { channelId: string }; + permissions: PermissionKey[]; + }): Promise<{ + success: boolean; + response: unknown | null; + channel: ChannelTable | null; + permissionHandler: PermissionHandler | null; + }> { const channel = await channelsTable.get( { channelId: Encryption.encrypt(params.channelId), }, { - fields: ["type", "guildId", "channelId", "permissionOverrides"], + fields: ["type", "guildId", "permissionOverrides", "channelId"], }, ); + const unknownChannel = errorGen.UnknownChannel(); if (!channel) { @@ -557,7 +417,12 @@ export default class DeleteEditGetMessage extends Route { }, }); - return unknownChannel.toJSON(); + return { + success: false, + response: unknownChannel.toJSON(), + channel: null, + permissionHandler: null, + }; } const channelFlags = new FlagUtils(channel.type ?? Constants.channelTypes.GuildText, Constants.channelTypes); @@ -567,17 +432,36 @@ export default class DeleteEditGetMessage extends Route { set.status = 500; - return "Internal Server Error :("; + return { + success: false, + channel: null, + response: "Internal Server Error :(", + permissionHandler: null, + }; } else { - const guildMember = await guildMembersTable.get( - { - guildId: channel.guildId!, - userId: Encryption.encrypt(user.id), - }, - { - fields: ["flags", "roles", "left"], - }, - ); + if (!(await user.checkInGuild(Encryption.decrypt(channel.guildId!)))) { + // ? This is so we don't got to query guild members :3 + set.status = 404; + + unknownChannel.addError({ + channel: { + code: "UnknownChannel", + message: "The provided channel does not exist or you do not have access to it.", + }, + }); + + return { + success: false, + channel: null, + response: unknownChannel.toJSON(), + permissionHandler: null, + }; + } + + const guildMember = await guildMembersTable.get({ + guildId: channel.guildId!, + userId: Encryption.encrypt(user.id), + }); if (!guildMember || guildMember.left) { unknownChannel.addError({ @@ -589,7 +473,33 @@ export default class DeleteEditGetMessage extends Route { set.status = 404; - return unknownChannel.toJSON(); + return { + success: false, + channel: null, + response: unknownChannel.toJSON(), + permissionHandler: null, + }; + } + + // ? These are the possible text channels, if they aren't one of these they obv do not have messages you can fetch + if (!channelFlags.hasOneArray(["Dm", "GroupChat", "GuildNewMember", "GuildNews", "GuildRules", "GuildText"])) { + set.status = 403; + + const invalidChannel = errorGen.InvalidField(); + + invalidChannel.addError({ + channel: { + code: "InvalidChannel", + message: "The provided channel is not a text channel.", + }, + }); + + return { + success: false, + channel: null, + response: invalidChannel.toJSON(), + permissionHandler: null, + }; } const permissionOverrides = channel.permissionOverrides @@ -637,7 +547,7 @@ export default class DeleteEditGetMessage extends Route { ], ); - if (!permissionCheck.hasChannelPermission(Encryption.decrypt(channel.channelId!), ["ViewMessageHistory"])) { + if (!permissionCheck.hasChannelPermission(Encryption.decrypt(channel.channelId!), permissions)) { set.status = 403; const missingPermission = errorGen.MissingPermissions(); @@ -645,71 +555,29 @@ export default class DeleteEditGetMessage extends Route { missingPermission.addError({ channel: { code: "MissingPermissions", - message: 'You are missing the "ViewMessageHistory" permission.', - requiredPermissions: ["ViewMessageHistory"], // ? note: this is a testing field, may be removed later + message: `You are missing the "${permissions.join(", ")}" permissions.`, + requiredPermissions: permissions, // ? note: this is a testing field, may be removed later }, }); - return missingPermission.toJSON(); + return { + success: false, + channel: null, + response: missingPermission.toJSON(), + permissionHandler: null, + }; } - } - - const message = await this.tryMessage(params.channelId, params.messageId); - - if (!message) { - set.status = 404; - - const unknownMessage = errorGen.UnknownMessage(); - - unknownMessage.addError({ - message: { - code: "UnknownMessage", - message: "The provided message does not exist or you do not have access to it.", - }, - }); - return unknownMessage.toJSON(); + return { + success: true, + channel: channel as ChannelTable, + response: null, + permissionHandler: permissionCheck, + }; } - - const userData = await usersTable.get( - { - userId: message.authorId!, - }, - { - fields: ["userId", "username", "globalNickname", "tag", "avatar", "publicFlags", "flags"], - }, - ); - - return Encryption.completeDecryption({ - id: message.messageId, - author: { - id: userData?.userId ?? "0", - username: userData?.username ?? "Unknown User", - globalNickname: userData?.globalNickname ?? null, - tag: userData?.tag ?? "0000", - avatar: userData?.avatar ?? null, - publicFlags: userData?.publicFlags ?? Constants.publicFlags.GhostBadge, - flags: userData?.flags ? FlagFields.cleanPrivateFlags(userData?.flags) : Constants.privateFlags.Ghost, - }, - content: message.content, - creationDate: new Date(this.App.snowflake.timeStamp(message.messageId!.toString())).toISOString(), - editedDate: message.updatedDate?.toISOString() ?? null, - embeds: [], - nonce: null, - replyingTo: message.replyingTo ?? null, - attachments: [], - flags: message.flags, - allowedMentions: message.allowedMentions, - mentions: { - channels: message.mentionChannels ?? [], - roles: [], - users: message.mentions ?? [], - }, - pinned: false, - deletable: true, - }); } + public async tryMessage(channelId: string, messageId: string) { const buckets = this.App.getBuckets(channelId); diff --git a/src/Routes/v1/channels/[channelId]/messages/[messageId]/reactions/[reactionId].ts b/src/Routes/v1/channels/[channelId]/messages/[messageId]/reactions/[reactionId].ts new file mode 100644 index 00000000..e69de29b diff --git a/src/Routes/v1/channels/[channelId]/messages/index.ts b/src/Routes/v1/channels/[channelId]/messages/index.ts index 84439a2d..85f81534 100644 --- a/src/Routes/v1/channels/[channelId]/messages/index.ts +++ b/src/Routes/v1/channels/[channelId]/messages/index.ts @@ -4,7 +4,6 @@ import type { UserMiddlewareType } from "@/Middleware/User.ts"; import userMiddleware from "@/Middleware/User.ts"; import FetchPatch from "@/Routes/v1/users/@me/index.ts"; import { string, type Infer, snowflake, number, enums, any, array } from "@/Types/BodyValidation.ts"; -import type API from "@/Utils/Classes/API.ts"; import { FlagUtils } from "@/Utils/Classes/BitFields/NewFlags.ts"; import Permissions, { type PermissionKey } from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; @@ -20,9 +19,6 @@ import PermissionHandler from "@/Utils/Versioning/v1/PermissionCheck.ts"; import DeleteEditGetMessage from "./[messageId]/index.ts"; import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; import type { PreventInfiniteRecursion } from "@/Types/index.ts"; -import { CString, dlopen, FFIType, JSCallback, ptr, suffix, type Library } from "bun:ffi"; -import { request } from "undici"; -import safePromise from "@/Utils/safePromise.ts"; import type { Embed } from "@/Types/Embed.ts"; import { type EmbedType, messagesTable, type MessageTable } from "@/Utils/Cql/Tables/MessageTable.ts"; import { channelsTable, type ChannelTable } from "@/Utils/Cql/Tables/ChannelTable.ts"; @@ -33,6 +29,7 @@ import { rolesTable } from "@/Utils/Cql/Tables/RoleTable.ts"; import { parser, type EmbedToRules } from "@/Utils/EmbedChecker.ts"; import type { NullifyStuff } from "@/Utils/Cql/DB/createTableTypes.ts"; import { filesTable } from "@/Utils/Cql/Tables/FileTable.ts"; +import handleEmbeds from "@/Utils/Versioning/v1/handleEmbeds.ts"; const messageData = { content: string().optional().max(Constants.settings.Max.MessageLength), @@ -48,17 +45,6 @@ const messageData = { .max(Constants.settings.Max.Attachments), }; -type LibChecker = Library<{ - check_message: { - args: [FFIType.cstring, FFIType.function]; - returns: FFIType.cstring; - }; - init_domains: { - args: FFIType.cstring[]; - returns: FFIType.bool; - }; -}>; - export interface ReturnMessage { allowedMentions: number; attachments: { @@ -204,37 +190,9 @@ export const embedRules: EmbedToRules = { }; export default class FetchCreateMessages extends Route { - // ? Some people may not trust the pre-built lib files, in that case they can just not enable phishing, when its not enabled we don't even call this so we can be sure its present when we call it - public lib!: LibChecker; private embedRules: EmbedToRules = embedRules; - public constructor(App: API) { - super(App); - - if (App.config.server.phishing?.enabled) { - if (suffix === "dylib") { - throw new Error("Phishing check is not supported on MacOS. Please disable it."); - } - - this.lib = dlopen(`./lib/domain_checker.${suffix}`, { - check_message: { - args: [FFIType.cstring, FFIType.function], - returns: FFIType.cstring, - }, - init_domains: { - args: [FFIType.cstring], - returns: FFIType.bool, - }, - }); - - const domain = this.App.config.server.phishing?.domainsPath!; - const str = new CString(ptr(Buffer.from(domain + "\0"))); - - this.lib.symbols.init_domains(str.ptr); - } - } - @Method("get") @Description("Fetches messages in a specific channel") @ContentTypes("any") @@ -402,7 +360,7 @@ export default class FetchCreateMessages extends Route { } } - if (!body.content && (newEmbeds.length ?? 0) === 0) { + if (body.content === undefined && newEmbeds.length === 0) { set.status = 400; const invalidContent = errorGen.EmptyMessage(); @@ -417,7 +375,7 @@ export default class FetchCreateMessages extends Route { return invalidContent.toJSON(); } - if (body.content && (await this.checkMessage(body.content))) { + if (body.content !== undefined && (await this.App.checkMessage(body.content))) { set.status = 403; const phishingMessage = errorGen.InvalidField(); @@ -705,7 +663,7 @@ export default class FetchCreateMessages extends Route { }); if (message.content && canEmbed) { - this.handleEmbeds(message, insertMsg.bucket!, params.channelId); + handleEmbeds(this.App, message, insertMsg.bucket!, params.channelId); } if (allowedMentionFlags.hasArray(["All", "Users", "Roles", "Everyone", "Here"])) { @@ -715,172 +673,6 @@ export default class FetchCreateMessages extends Route { return Encryption.completeDecryption>(message); } - private async handleEmbeds(message: ReturnMessage, bucket: string, channelId: string) { - this.App.logger.startTimer("Message Scraping", true); - - const { content } = message; - - const links = Array.from(new Set(content!.match(/(?\b]+(?!>)/g) ?? [])); - - if (links.length === 0) { - return; - } - - if (!this.App.config.server.scraper?.enabled) { - return; - } - - interface MetaDataResponse { - mimetype: string; - mediaUrl: string; - embed: boolean; - frameUrl: string; - thumbHash: string | null; - linkShortner: { - isShortener: boolean; - redirectChain: string[]; - }; - earlyEmbed: Partial; - } - - const responses: MetaDataResponse[] = ( - await Promise.all( - links.map(async (link) => { - const url = new URL(this.App.config.server.scraper!.url); - - url.pathname = "/metadata"; - - url.searchParams.append("url", link); - url.searchParams.append("thumbhash", "true"); - - const [response, responseError] = await safePromise( - request(url.toString(), { - method: "GET", - headers: { - Authorization: this.App.config.server.scraper!.authHeader, - }, - }), - ); - - if (!response || responseError || response.statusCode !== 200) { - return null; - } - - const [body, bodyError] = await safePromise(response.body.json()); - - if (!body || bodyError) { - console.log(bodyError, body); - return null; - } - - return body as MetaDataResponse; - }), - ) - ).filter((item) => item !== null); - - let isPhishing = false; // 🐟🐟🐟 - - for (const response of responses) { - if (!response.linkShortner.isShortener || !this.App.config.server.phishing?.enabled) { - continue; - } - - const checked = await this.testMessage(`${response.linkShortner.redirectChain.join(" -> ")}\0`); - - const parsed = JSON.parse(checked) as { domain: string; phishing: boolean }; - - if (parsed.phishing) { - isPhishing = true; - - const index = responses.indexOf(response); - - if (index > -1) { - responses.splice(index, 1); - } - } - } - - if ( - !isPhishing && - links.includes("https://thisdomainwillalwayscausethemessagetobeclassedasappishingmessagedonotsendthis.com") - ) { - isPhishing = true; - } - - // todo: possibly send a system dm warning the user(?), I do not want to delete the mesage as it could be a false positive - // todo: we may also add the link shortner to a list of known phishing domains (our custom one) - - const earlyEmbeds = responses - .filter((response) => Object.entries(response.earlyEmbed).length > 0) - .map((response) => response.earlyEmbed); - // ? we fetch any url's which do't have an early embed and is embedable (via the .embed property) - const urlsToFetch = responses - .filter((response) => response.embed && Object.entries(response.earlyEmbed).length === 0) - .map((response) => response.linkShortner.redirectChain[0]); - - const embeds: Embed[] = ( - await Promise.all( - urlsToFetch.map(async (link) => { - const url = new URL(this.App.config.server.scraper!.url); - - url.pathname = "/embed"; - - url.searchParams.append("url", link!); - - const [response, responseError] = await safePromise( - request(url.toString(), { - method: "GET", - headers: { - Authorization: this.App.config.server.scraper!.authHeader, - }, - }), - ); - - if (!response || responseError || response.statusCode !== 200) { - return null; - } - - const [body, bodyError] = await safePromise(response.body.json()); - - if (!body || bodyError) { - return null; - } - - return body as Embed; - }), - ) - ).filter((item) => item !== null); - - if (isPhishing) { - message.flags |= Constants.messageFlags.Phishing; - } - - message.embeds = earlyEmbeds.concat(embeds).concat(message.embeds); - - if (message.embeds.length === 0 && !isPhishing) { - return; - } - - this.App.rabbitMQForwarder("message.update", { - channelId: channelId, - message: Encryption.completeDecryption(message), - }); - - this.App.logger.stopTimer("Message Scraping"); - - await messagesTable.update( - { - messageId: BigInt(message.id), - channelId: Encryption.encrypt(channelId), - bucket, - }, - { - embeds: message.embeds as any, - flags: message.flags, - }, - ); - } - private async handleMentions(message: ReturnMessage, bucket: string, channelId: string) {} private removeNulls(obj: Record): Record { @@ -909,67 +701,6 @@ export default class FetchCreateMessages extends Route { return newObj; } - private testMessage(input: string): Promise { - const fixedInput = Buffer.from(input); - - return new Promise((resolve, reject) => { - const resolveAnywaysTimeout = setTimeout(() => { - this.App.logger.warn("Phishing check took too long, resolving anyways"); - - resolve(JSON.stringify({ domain: null, phishing: false })); - }, 100); - - const callback = new JSCallback( - (result) => { - clearTimeout(resolveAnywaysTimeout); - - resolve(new CString(result).toString()); - - callback.close(); - }, - { - returns: "void", - args: [FFIType.cstring], - }, - ); - - try { - this.lib.symbols.check_message(ptr(fixedInput), callback); - } catch (error) { - reject(error); - - callback.close(); - } - }); - } - - public async checkMessage(message: string) { - if (!this.App.config.server.phishing?.enabled) { - return false; - } - - // ? using regex check if message even includes a domain if not we can skip the check - if (!/(https?:\/\/[^\s]+)/.test(message)) { - return false; - } - - this.App.logger.startTimer("Phishing check", true); - - const checked = await this.testMessage(message + "\0"); - - this.App.logger.stopTimer("Phishing check"); - - const parsed = JSON.parse(checked.toString()) as { domain: string; phishing: boolean }; - - if (this.App.config.server.phishing?.action === "alert") { - this.App.logger.warn(`Phishing domain detected: ${parsed.domain}`); - - return false; // ? since only alerting we don't want to block - } - - return parsed.phishing; - } - private async checkChannelAccess({ params, set, diff --git a/src/Routes/v1/guilds/[guildId]/bans/index.ts b/src/Routes/v1/guilds/[guildId]/bans/index.ts index a72a9ec0..2ec88f3b 100644 --- a/src/Routes/v1/guilds/[guildId]/bans/index.ts +++ b/src/Routes/v1/guilds/[guildId]/bans/index.ts @@ -119,6 +119,11 @@ export default class FetchCreateRemoveBan extends Route { flags: guildMemberFlags.None }); + await bansTable.delete({ + guildId: Encryption.encrypt(params.guildId), + userId: Encryption.encrypt(memberId) + }); + unbannedUserIds.push(memberId); this.App.rabbitMQForwarder("ban.delete", { diff --git a/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts b/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts index 18dab10f..91992745 100644 --- a/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts +++ b/src/Routes/v1/guilds/[guildId]/members/[memberId]/ban.ts @@ -2,6 +2,7 @@ import { guildMemberFlags } from "@/Constants.ts"; import bodyValidator from "@/Middleware/BodyValidator.ts"; import userMiddleware, { type UserMiddlewareType } from "@/Middleware/User.ts"; import { type Infer, string } from "@/Types/BodyValidation.ts"; +import FlagFields from "@/Utils/Classes/BitFields/Flags.ts"; import GuildMemberFlags from "@/Utils/Classes/BitFields/GuildMember.ts"; import Permissions from "@/Utils/Classes/BitFields/Permissions.ts"; import Encryption from "@/Utils/Classes/Encryption.ts"; @@ -12,8 +13,10 @@ import Method from "@/Utils/Classes/Routing/Decorators/Method.ts"; import Middleware from "@/Utils/Classes/Routing/Decorators/Middleware.ts"; import Route, { type CreateRoute } from "@/Utils/Classes/Routing/Route.ts"; import { bansTable } from "@/Utils/Cql/Tables/BanTable.ts"; +import { botsGuildsTable } from "@/Utils/Cql/Tables/BotGuildsTable.ts"; import { guildMembersTable, type GuildMemberTable } from "@/Utils/Cql/Tables/GuildMemberTable.ts"; import { rolesTable } from "@/Utils/Cql/Tables/RoleTable.ts"; +import { usersTable } from "@/Utils/Cql/Tables/UserTable.ts"; import PermissionHandler from "@/Utils/Versioning/v1/PermissionCheck.ts"; const banMemberBody = { @@ -169,13 +172,56 @@ export default class BanMember extends Route { if (member) { await guildMembersTable.update({ guildId: Encryption.encrypt(params.guildId), - userId: Encryption.encrypt(params.memberId) + guildMemberId: member.guildMemberId!, }, { left: true, flags: guildMemberFlags.Banned, roles: [], nickname: null, }); + + const fetchedUser = await usersTable.get({ + userId: Encryption.encrypt(params.memberId) + }, { + fields: ["guilds", "flags"] + }); + + if (fetchedUser) { + const userFlags = new FlagFields(fetchedUser.flags ?? 0, 0); + + if (userFlags.has("Bot")) { + const foundGuildTable = await botsGuildsTable.get({ + botId: Encryption.encrypt(params.memberId), + guildId: Encryption.encrypt(params.guildId) + }, { + fields: ["roleId"] + }); + + if (foundGuildTable) { + await botsGuildsTable.delete({ + botId: Encryption.encrypt(params.memberId), + guildId: Encryption.encrypt(params.guildId) + }); + + await rolesTable.delete({ + guildId: Encryption.encrypt(params.guildId), + roleId: foundGuildTable.roleId! + }) + + this.App.rabbitMQForwarder("role.delete", { + guildId: params.guildId, + roleId: foundGuildTable.roleId! + }) + } + } else { + await usersTable.update({ + userId: Encryption.encrypt(params.memberId), + }, { + guilds: Encryption.completeEncryption(fetchedUser.guilds.filter((guild) => guild !== Encryption.encrypt(params.guildId))), + }); + } + } + } else { await guildMembersTable.create({ guildId: Encryption.encrypt(params.guildId), diff --git a/src/Utils/Classes/API.ts b/src/Utils/Classes/API.ts index bcada4a1..e57a56a7 100644 --- a/src/Utils/Classes/API.ts +++ b/src/Utils/Classes/API.ts @@ -22,6 +22,18 @@ import put, { type PutType } from "@/Utils/S3Events/put.ts"; import deletee, { type DeleteType } from "@/Utils/S3Events/delete.ts"; import RateLimit from "@/Utils/Classes/RateLimit.ts"; import RateLimits from "@/RateLimits.ts"; +import { CString, dlopen, FFIType, JSCallback, type Library, ptr, suffix } from "bun:ffi"; + +type LibChecker = Library<{ + check_message: { + args: [FFIType.cstring, FFIType.function]; + returns: FFIType.cstring; + }; + init_domains: { + args: FFIType.cstring[]; + returns: FFIType.bool; + }; +}>; class API extends App { private routeDirectory: string = join(import.meta.dirname, "../../Routes"); @@ -46,6 +58,9 @@ class API extends App { public s3!: S3Client; public globalRatelimit = new RateLimit(this, RateLimits.global); + + // ? Some people may not trust the pre-built lib files, in that case they can just not enable phishing, when its not enabled we don't even call this so we can be sure its present when we call it + public lib!: LibChecker; public constructor() { super("API"); @@ -106,6 +121,28 @@ class API extends App { public override async init(): Promise { await super.init(); + + if (this.config.server.phishing?.enabled) { + if (suffix === "dylib") { + throw new Error("Phishing check is not supported on MacOS. Please disable it."); + } + + this.lib = dlopen(`./lib/domain_checker.${suffix}`, { + check_message: { + args: [FFIType.cstring, FFIType.function], + returns: FFIType.cstring, + }, + init_domains: { + args: [FFIType.cstring], + returns: FFIType.bool, + }, + }); + + const domain = this.config.server.phishing?.domainsPath!; + const str = new CString(ptr(Buffer.from(domain + "\0"))); + + this.lib.symbols.init_domains(str.ptr); + } this.rabbitMQ.on("data", (data) => { if (data.type !== "minio") { @@ -789,6 +826,72 @@ class API extends App { true, ); } + + public testMessage(input: string): Promise { + + if (!this.config.server.phishing?.enabled) { + return Promise.resolve(JSON.stringify({ domain: null, phishing: false })); + } + + const fixedInput = Buffer.from(input); + + return new Promise((resolve, reject) => { + const resolveAnywaysTimeout = setTimeout(() => { + this.logger.warn("Phishing check took too long, resolving anyways"); + + resolve(JSON.stringify({ domain: null, phishing: false })); + }, 100); + + const callback = new JSCallback( + (result) => { + clearTimeout(resolveAnywaysTimeout); + + resolve(new CString(result).toString()); + + callback.close(); + }, + { + returns: "void", + args: [FFIType.cstring], + }, + ); + + try { + this.lib.symbols.check_message(ptr(fixedInput), callback); + } catch (error) { + reject(error); + + callback.close(); + } + }); + } + + public async checkMessage(message: string) { + if (!this.config.server.phishing?.enabled) { + return false; + } + + // ? using regex check if message even includes a domain if not we can skip the check + if (!/(https?:\/\/[^\s]+)/.test(message)) { + return false; + } + + this.logger.startTimer("Phishing check", true); + + const checked = await this.testMessage(message + "\0"); + + this.logger.stopTimer("Phishing check"); + + const parsed = JSON.parse(checked.toString()) as { domain: string; phishing: boolean }; + + if (this.config.server.phishing?.action === "alert") { + this.logger.warn(`Phishing domain detected: ${parsed.domain}`); + + return false; // ? since only alerting we don't want to block + } + + return parsed.phishing; + } } export default API; diff --git a/src/Utils/Versioning/v1/handleEmbeds.ts b/src/Utils/Versioning/v1/handleEmbeds.ts new file mode 100644 index 00000000..fd1920db --- /dev/null +++ b/src/Utils/Versioning/v1/handleEmbeds.ts @@ -0,0 +1,177 @@ +import Constants from "@/Constants.ts"; +import type { ReturnMessage } from "@/Routes/v1/channels/[channelId]/messages/index.ts"; +import type { Embed } from "@/Types/Embed.ts"; +import type API from "@/Utils/Classes/API.ts"; +import Encryption from "@/Utils/Classes/Encryption.ts"; +import { messagesTable } from "@/Utils/Cql/Tables/MessageTable.ts"; +import safePromise from "@/Utils/safePromise.ts"; +import { request } from "undici"; + +const handleEmbeds = async (app: API, message: ReturnMessage, bucket: string, channelId: string) => { + app.logger.startTimer("Message Scraping", true); + + const { content } = message; + + const links = Array.from(new Set(content!.match(/(?\b]+(?!>)/g) ?? [])); + + if (links.length === 0) { + return; + } + + if (!app.config.server.scraper?.enabled) { + return; + } + + interface MetaDataResponse { + mimetype: string; + mediaUrl: string; + embed: boolean; + frameUrl: string; + thumbHash: string | null; + linkShortner: { + isShortener: boolean; + redirectChain: string[]; + }; + earlyEmbed: Partial; + } + + const responses: MetaDataResponse[] = ( + await Promise.all( + links.map(async (link) => { + const url = new URL(app.config.server.scraper!.url); + + url.pathname = "/metadata"; + + url.searchParams.append("url", link); + url.searchParams.append("thumbhash", "true"); + + const [response, responseError] = await safePromise( + request(url.toString(), { + method: "GET", + headers: { + Authorization: app.config.server.scraper!.authHeader, + }, + }), + ); + + if (!response || responseError || response.statusCode !== 200) { + return null; + } + + const [body, bodyError] = await safePromise(response.body.json()); + + if (!body || bodyError) { + console.log(bodyError, body); + return null; + } + + return body as MetaDataResponse; + }), + ) + ).filter((item) => item !== null); + + let isPhishing = false; // 🐟🐟🐟 + + for (const response of responses) { + if (!response.linkShortner.isShortener || !app.config.server.phishing?.enabled) { + continue; + } + + const checked = await app.testMessage(`${response.linkShortner.redirectChain.join(" -> ")}\0`); + + const parsed = JSON.parse(checked) as { domain: string; phishing: boolean }; + + if (parsed.phishing) { + isPhishing = true; + + const index = responses.indexOf(response); + + if (index > -1) { + responses.splice(index, 1); + } + } + } + + if ( + !isPhishing && + links.includes("https://thisdomainwillalwayscausethemessagetobeclassedasappishingmessagedonotsendcom") + ) { + isPhishing = true; + } + + // todo: possibly send a system dm warning the user(?), I do not want to delete the mesage as it could be a false positive + // todo: we may also add the link shortner to a list of known phishing domains (our custom one) + + const earlyEmbeds = responses + .filter((response) => Object.entries(response.earlyEmbed).length > 0) + .map((response) => response.earlyEmbed); + // ? we fetch any url's which do't have an early embed and is embedable (via the .embed property) + const urlsToFetch = responses + .filter((response) => response.embed && Object.entries(response.earlyEmbed).length === 0) + .map((response) => response.linkShortner.redirectChain[0]); + + const embeds: Embed[] = ( + await Promise.all( + urlsToFetch.map(async (link) => { + const url = new URL(app.config.server.scraper!.url); + + url.pathname = "/embed"; + + url.searchParams.append("url", link!); + + const [response, responseError] = await safePromise( + request(url.toString(), { + method: "GET", + headers: { + Authorization: app.config.server.scraper!.authHeader, + }, + }), + ); + + if (!response || responseError || response.statusCode !== 200) { + return null; + } + + const [body, bodyError] = await safePromise(response.body.json()); + + if (!body || bodyError) { + return null; + } + + return body as Embed; + }), + ) + ).filter((item) => item !== null); + + if (isPhishing) { + message.flags |= Constants.messageFlags.Phishing; + } + + message.embeds = earlyEmbeds.concat(embeds).concat(message.embeds); + + if (message.embeds.length === 0 && !isPhishing) { + return; + } + + app.rabbitMQForwarder("message.update", { + channelId: channelId, + message: Encryption.completeDecryption(message), + }); + + app.logger.stopTimer("Message Scraping"); + + await messagesTable.update( + { + messageId: BigInt(message.id), + channelId: Encryption.encrypt(channelId), + bucket, + }, + { + embeds: message.embeds as any, + flags: message.flags, + }, + ); +} + + +export default handleEmbeds; diff --git a/tsconfig.json b/tsconfig.json index 3e4121d4..641d8424 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -41,6 +41,6 @@ }, "jsx": "react-jsx" }, - "include": ["src/**/*", "scripts/**/*", "tests/**/*", "simple/**/*"], + "include": ["src/**/*", "scripts/**/*", "tests/**/*", "simple/**/*", "dtests/search.ts"], "exclude": [".github"] }