From 303c1c881e93c45b39ad309847ead800617a0e53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Tue, 16 Jul 2024 19:29:20 +0200 Subject: [PATCH 01/17] feat(website): add auth-astro & basic routes --- apps/website/astro.config.ts | 42 +++++++------------ apps/website/auth.config.ts | 23 ++++++++++ apps/website/bun.lockb | Bin 0 -> 355322 bytes apps/website/package.json | 12 +++--- apps/website/src/pages/auth/login.astro | 13 ++++++ apps/website/src/pages/auth/logout.astro | 14 +++++++ apps/website/src/pages/dashboard/index.astro | 8 ++++ apps/website/src/pages/index.astro | 2 +- 8 files changed, 80 insertions(+), 34 deletions(-) create mode 100644 apps/website/auth.config.ts create mode 100755 apps/website/bun.lockb create mode 100644 apps/website/src/pages/auth/login.astro create mode 100644 apps/website/src/pages/auth/logout.astro create mode 100644 apps/website/src/pages/dashboard/index.astro diff --git a/apps/website/astro.config.ts b/apps/website/astro.config.ts index d3d8d91..709c4b4 100644 --- a/apps/website/astro.config.ts +++ b/apps/website/astro.config.ts @@ -2,36 +2,24 @@ import path from "path"; import { fileURLToPath } from "url"; import { defineConfig } from "astro/config"; import sitemap from "@astrojs/sitemap"; -import robotsTxt from "astro-robots-txt"; -import compress from "astro-compress"; import tailwind from "@astrojs/tailwind"; +import cloudflare from "@astrojs/cloudflare"; +import auth from "auth-astro"; import { CONFIG } from "./src/config"; -import image from "@astrojs/image"; + const __dirname = path.dirname(fileURLToPath(import.meta.url)); // https://astro.build/config export default defineConfig({ - site: CONFIG.origin, - base: "/", - trailingSlash: "always", - output: "static", - integrations: [sitemap(), robotsTxt({ - policy: [{ - userAgent: "*" - }], - sitemap: true - }), compress({ - css: true, - html: true, - img: true, - js: true, - svg: true - }), tailwind(), image()], - vite: { - resolve: { - alias: { - "~": path.resolve(__dirname, "./src") - } - } - } -}); \ No newline at end of file + site: CONFIG.origin, + integrations: [sitemap(), tailwind(), auth()], + output: "server", + adapter: cloudflare(), + vite: { + resolve: { + alias: { + "~": path.resolve(__dirname, "./src"), + }, + }, + }, +}); diff --git a/apps/website/auth.config.ts b/apps/website/auth.config.ts new file mode 100644 index 0000000..140c417 --- /dev/null +++ b/apps/website/auth.config.ts @@ -0,0 +1,23 @@ +import Discord from "@auth/core/providers/discord"; +import { defineConfig } from "auth-astro"; + +export default defineConfig({ + providers: [ + Discord({ + clientId: import.meta.env.DISCORD_CLIENT_ID, + clientSecret: import.meta.env.DISCORD_CLIENT_SECRET, + }), + ], + callbacks: { + session({ session, token }) { + if (session.user && token?.sub) { + session.user.id = token.sub; + } + return session; + }, + }, + pages: { + signIn: "/auth/login", + signOut: "/auth/logout", + }, +}); diff --git a/apps/website/bun.lockb b/apps/website/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..2e6eea970576988ec21d99ffa79625de0765464c GIT binary patch literal 355322 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 Ee-RpLaR2}S literal 0 HcmV?d00001 diff --git a/apps/website/package.json b/apps/website/package.json index c979ac4..1643d29 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -9,16 +9,16 @@ "astro": "astro" }, "dependencies": { - "@astrojs/image": "^0.16.5", + "@astrojs/cloudflare": "^11.0.1", "@astrojs/prefetch": "^0.2.1", - "@astrojs/sitemap": "^1.2.1", - "@astrojs/tailwind": "^3.1.1", + "@astrojs/sitemap": "^3.1.6", + "@astrojs/tailwind": "^5.1.0", + "@auth/core": "^0.18.6", "@tailwindcss/typography": "^0.5.9", - "astro": "^2.2.1", - "astro-compress": "2.2.11", + "astro": "^4.11.5", "astro-google-fonts-optimizer": "^0.2.2", "astro-icon": "^0.8.0", - "astro-robots-txt": "^0.4.1", + "auth-astro": "^4.1.2", "tailwindcss": "^3.3.1" }, "devDependencies": { diff --git a/apps/website/src/pages/auth/login.astro b/apps/website/src/pages/auth/login.astro new file mode 100644 index 0000000..fa7fb8e --- /dev/null +++ b/apps/website/src/pages/auth/login.astro @@ -0,0 +1,13 @@ +--- +import Layout from "~/layouts/Layout.astro"; +--- + + + + diff --git a/apps/website/src/pages/auth/logout.astro b/apps/website/src/pages/auth/logout.astro new file mode 100644 index 0000000..a2b38b3 --- /dev/null +++ b/apps/website/src/pages/auth/logout.astro @@ -0,0 +1,14 @@ +--- +import Layout from "~/layouts/Layout.astro"; +--- + + + + diff --git a/apps/website/src/pages/dashboard/index.astro b/apps/website/src/pages/dashboard/index.astro new file mode 100644 index 0000000..c181eb0 --- /dev/null +++ b/apps/website/src/pages/dashboard/index.astro @@ -0,0 +1,8 @@ +--- +import { getSession } from "auth-astro/server"; + +const session = await getSession(Astro.request); +console.log(session); +--- + +{session ?

Welcome {session.user?.name}

:

Not logged in

} diff --git a/apps/website/src/pages/index.astro b/apps/website/src/pages/index.astro index 8009f4b..5a9ab2d 100644 --- a/apps/website/src/pages/index.astro +++ b/apps/website/src/pages/index.astro @@ -2,8 +2,8 @@ import Layout from "~/layouts/Layout.astro"; import Invite from "~/components/Invite.astro"; import Computer from "~/components/Computer.astro"; -import { Image } from "@astrojs/image/components"; import Logo from "~/assets/logo.png"; +import { Image } from "astro:assets"; --- From 4a0388a2ba46718e0d797492302d73c57c9899b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Tue, 16 Jul 2024 19:32:42 +0200 Subject: [PATCH 02/17] build: update @auth/core --- apps/website/bun.lockb | Bin 355322 -> 354779 bytes apps/website/package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/website/bun.lockb b/apps/website/bun.lockb index 2e6eea970576988ec21d99ffa79625de0765464c..6d5ea1dc806b7a72f78d3e42523dad70dbee22f4 100755 GIT binary patch delta 9187 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 Z9i$XF%F@-Rf1&ElYCFfcp{6|p{|l$BVPgOQ delta 9448 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 diff --git a/apps/website/package.json b/apps/website/package.json index 1643d29..6bd6730 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -13,7 +13,7 @@ "@astrojs/prefetch": "^0.2.1", "@astrojs/sitemap": "^3.1.6", "@astrojs/tailwind": "^5.1.0", - "@auth/core": "^0.18.6", + "@auth/core": "^0.32.0", "@tailwindcss/typography": "^0.5.9", "astro": "^4.11.5", "astro-google-fonts-optimizer": "^0.2.2", From 7adb5cc016c860f44c9b02de13acb83330bc87d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Fri, 2 Aug 2024 23:00:06 +0200 Subject: [PATCH 03/17] feat: add dashboard button --- apps/website/src/components/Settings.astro | 40 ++++++++++++++++++++ apps/website/src/pages/auth/login.astro | 2 + apps/website/src/pages/auth/logout.astro | 2 + apps/website/src/pages/dashboard/index.astro | 6 ++- apps/website/src/pages/index.astro | 14 ++++++- apps/website/tailwind.config.cjs | 26 +++++++------ 6 files changed, 74 insertions(+), 16 deletions(-) create mode 100644 apps/website/src/components/Settings.astro diff --git a/apps/website/src/components/Settings.astro b/apps/website/src/components/Settings.astro new file mode 100644 index 0000000..257b943 --- /dev/null +++ b/apps/website/src/components/Settings.astro @@ -0,0 +1,40 @@ + diff --git a/apps/website/src/pages/auth/login.astro b/apps/website/src/pages/auth/login.astro index fa7fb8e..9598ec1 100644 --- a/apps/website/src/pages/auth/login.astro +++ b/apps/website/src/pages/auth/login.astro @@ -1,5 +1,7 @@ --- import Layout from "~/layouts/Layout.astro"; + +export const prerender = true; --- diff --git a/apps/website/src/pages/auth/logout.astro b/apps/website/src/pages/auth/logout.astro index a2b38b3..eb95095 100644 --- a/apps/website/src/pages/auth/logout.astro +++ b/apps/website/src/pages/auth/logout.astro @@ -1,5 +1,7 @@ --- import Layout from "~/layouts/Layout.astro"; + +export const prerender = true; --- diff --git a/apps/website/src/pages/dashboard/index.astro b/apps/website/src/pages/dashboard/index.astro index c181eb0..cbb93ab 100644 --- a/apps/website/src/pages/dashboard/index.astro +++ b/apps/website/src/pages/dashboard/index.astro @@ -2,7 +2,9 @@ import { getSession } from "auth-astro/server"; const session = await getSession(Astro.request); -console.log(session); +if (!session) { + return Astro.redirect("/auth/login"); +} --- -{session ?

Welcome {session.user?.name}

:

Not logged in

} +

Welcome {session.user?.name}

diff --git a/apps/website/src/pages/index.astro b/apps/website/src/pages/index.astro index 5a9ab2d..fa5021e 100644 --- a/apps/website/src/pages/index.astro +++ b/apps/website/src/pages/index.astro @@ -2,8 +2,11 @@ import Layout from "~/layouts/Layout.astro"; import Invite from "~/components/Invite.astro"; import Computer from "~/components/Computer.astro"; +import Settings from "~/components/Settings.astro"; import Logo from "~/assets/logo.png"; import { Image } from "astro:assets"; + +export const prerender = true; --- @@ -32,15 +35,22 @@ import { Image } from "astro:assets";
); } diff --git a/apps/website/src/lib/guilds.ts b/apps/website/src/lib/guilds.ts index 5776160..b7996f9 100644 --- a/apps/website/src/lib/guilds.ts +++ b/apps/website/src/lib/guilds.ts @@ -1,4 +1,17 @@ import type { Guild, MutualeGuild, User } from "~/env"; +import { isUserEligible } from "./user"; + +export async function getGuild( + user: User, + guildId: string +): Promise { + const guilds = await getUserGuilds(user); + const guild = guilds.find((g) => g.id === guildId); + + if (!guild || !(await isMutualGuild(guild))) return undefined; + + return guild; +} export async function getUserGuilds(user: User): Promise { const discordApiGuildsResponse = await fetch( @@ -14,12 +27,11 @@ export async function getUserGuilds(user: User): Promise { return (await discordApiGuildsResponse.json()) as Guild[]; } -// Checks if user has AMDINISTRATOR permissions in the guild export async function filterUserGuilds( guilds: Guild[] ): Promise { const filtered = guilds - .filter((g) => (BigInt(g.permissions) & 0x8n) == 0x8n) + .filter(isUserEligible) .sort((a, b) => Number(b.owner) - Number(a.owner)); const result: MutualeGuild[] = []; diff --git a/apps/website/src/lib/user.ts b/apps/website/src/lib/user.ts index eae9165..de9ea56 100644 --- a/apps/website/src/lib/user.ts +++ b/apps/website/src/lib/user.ts @@ -1,5 +1,5 @@ import { getSession } from "auth-astro/server"; -import type { User } from "~/env"; +import type { Guild, User } from "~/env"; export async function getUser(req: Request): Promise { const session = await getSession(req); @@ -7,3 +7,8 @@ export async function getUser(req: Request): Promise { return session.user as User; } + +// Checks if user has AMDINISTRATOR permissions in the guild +export function isUserEligible(guild: Guild): boolean { + return (BigInt(guild.permissions) & 0x8n) == 0x8n; +} diff --git a/apps/website/src/pages/dashboard/guilds/[id].astro b/apps/website/src/pages/dashboard/guilds/[id].astro new file mode 100644 index 0000000..088bf70 --- /dev/null +++ b/apps/website/src/pages/dashboard/guilds/[id].astro @@ -0,0 +1,23 @@ +--- +import { getGuild } from "~/lib/guilds"; +import { getUser, isUserEligible } from "~/lib/user"; + +const { id } = Astro.params; + +const user = await getUser(Astro.request); +if (!user || !id) { + return Astro.redirect("/auth/login"); +} + +const guild = await getGuild(user, id); +if (!guild) { + return Astro.redirect("/dashboard"); +} + +const eligible = isUserEligible(guild); +if (!eligible) { + return Astro.redirect("/dashboard"); +} +--- + +You can manage guild {guild.name} with id {guild.id} From 468440ec0798b2330905649f93d4e81c3de17649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Sat, 3 Aug 2024 15:07:06 +0200 Subject: [PATCH 10/17] fix: mark node:path as external --- apps/website/astro.config.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/website/astro.config.ts b/apps/website/astro.config.ts index 80fe7d4..5a4783f 100644 --- a/apps/website/astro.config.ts +++ b/apps/website/astro.config.ts @@ -23,5 +23,8 @@ export default defineConfig({ "~": path.resolve(__dirname, "./src"), }, }, + ssr: { + external: ["node:path"], + }, }, }); From becba867ae89bb32e40d12e679eec74238862f0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Sat, 3 Aug 2024 16:49:53 +0200 Subject: [PATCH 11/17] fix: specify secret --- apps/website/auth.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/website/auth.config.ts b/apps/website/auth.config.ts index 389e7b6..e17e901 100644 --- a/apps/website/auth.config.ts +++ b/apps/website/auth.config.ts @@ -3,6 +3,7 @@ import { defineConfig } from "auth-astro"; import type { User } from "~/env"; export default defineConfig({ + secret: import.meta.env.AUTH_SECRET, providers: [ Discord({ clientId: import.meta.env.DISCORD_CLIENT_ID, From d937b4e1862a7778f3c31417d6dcb9e81f408de9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Sat, 3 Aug 2024 17:02:05 +0200 Subject: [PATCH 12/17] fix: env workaround --- apps/website/auth.config.ts | 12 +++++++++--- apps/website/bun.lockb | Bin 362986 -> 363327 bytes apps/website/package.json | 1 + 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/website/auth.config.ts b/apps/website/auth.config.ts index e17e901..8260a06 100644 --- a/apps/website/auth.config.ts +++ b/apps/website/auth.config.ts @@ -2,12 +2,18 @@ import Discord from "@auth/core/providers/discord"; import { defineConfig } from "auth-astro"; import type { User } from "~/env"; +import dotenv from "dotenv"; + +dotenv.config(); + +const { env } = process; + export default defineConfig({ - secret: import.meta.env.AUTH_SECRET, + secret: env.AUTH_SECRET, providers: [ Discord({ - clientId: import.meta.env.DISCORD_CLIENT_ID, - clientSecret: import.meta.env.DISCORD_CLIENT_SECRET, + clientId: env.DISCORD_CLIENT_ID, + clientSecret: env.DISCORD_CLIENT_SECRET, authorization: "https://discord.com/api/oauth2/authorize?scope=guilds+identify+email", }), diff --git a/apps/website/bun.lockb b/apps/website/bun.lockb index 26b57df09769adbfdffb398ffcf7a5a02a4edd51..04bf4048430d01c4bff0fcce9bca2dec6269501d 100755 GIT binary patch delta 59848 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 n@t)s#q@#dJz zd5mNnRa3%E{sj2VfH8VzS_mmD^&<#^M?MOiv(JF%6oX{zs zdaYpX`%y3=NOWE`{j}HWl=x4YsoG+imS1?l6lO8_{27!G)nsKq)pN*m2!B9q+^k*KGZeKc7upy&6r$ zTvk%X+ftO8c2?`t)XOFg>BBF1%B^+1w%3IO3San;SQyvW@)SFyP@?S_yYx-xWm zzWUM&m*p}-R(Bw!T?Z#|iKN5Va3{nNruX)G7D^C&kH>eFl`KoOlLA>U`{~sUT=K~L0dwwQRG14htRRV4)ZdGzS}`7_slbX3Kab#! ztcBC;f&csZP#1J4){wxhp*c+?Z~Xq!?Viq7g7ZE}Xa7Ri3fJ4DxdnkrX#1b#;yJxv zbwXmTLllMHgyc)Rb(QwvsZ%MM zIicCN2_JW?JtKRa+N{!`|82D8{40*FlH&h6(KtU@ea1=pIlcKN9Wt(`%bLFJW~%1^ zVYU3CkM6_WiSNTDtET>Zd#q|bF_e239`Q5)h{ci)o6byiw|f|Z4gu(dQpfG@Z zdD32Mr_FYb>q1n3A1Ew_+vZpQpyThC<5Wr?nvSOWDF7hFp0w&%iTko~9b2jZVT^p* zxtWMXDwI}9mH!n;skdQq67jIrPhQggzut046Q~HQ2tO6Cc^`_|(4QM(4b!;I5%8Hf-lWE9?7RxVp4^Bld*v;7Hl0uq1 zuqD#x>B96)2J>Ln=FP#*+lOD?4IJB3y-`+`52#graC|oL9!wc|*fF|Lb{^K$05oEU zx+^VfT)i5;tC4#v`p4&+VJ=k@BU|jo3_bd+Mf^Ce46|V6y^^28V(p3A+jcd zsM$nwfzcc5LEh4M54LonK-U`IOR8Onrt-KQs6(MHTwC)KT2QF-(vN~RSw#PR^fz1X zjT!d|hT-KQAL?Z(SQbqlvW*K;A|^(33gs|8j;Cftkmt)0JZwxjZ;@Bcu1a^Aou@|| zpCwVdK{dr{+ha`0}XrO-N76&o5)QRPrO*cuw&@Uaj#5)qdHf zQtacYtO&=A>NrfWQP^7j725dAu7}aBi0ed0`u8Jb5v*zQV_m#v0KIA}H7Cnrof`rn zPd`ME_bIFx15SbZ%P9PwB`rU7WAuRNlk! zZ3`CUe34%bO<+2#hsK~-fZ5>MCkE^f4%w?xex{F}V=0DG8ZJ)R)A$lw^>Avl2?L5# z1P+Hp^l|Gsmepv|^g=EO%YvmNa$oDLUFE;Ona)F_!+)l&v$E^*T+-kWDO0|s*b-=D zH%-Gue*!owNU~~u;)wie4gOGZ*JvvMh5`YoW*N|IuV&FH6`)Pz;oh%RBdPPf_#-OC zHj!SJupm?*j+o?kX?S1TK}7_R=L-lCO+9eY#|hkE+p_BBF4oUf+*F#u0ADFxJxg-= z?Au-oRlq9B>aC1_&*EfB4F5D5u&toBU8nmQTPFRYHn>BYm+1Kg>2cAT&mhA~UDN6p zXLGm29ir2RUvP7es{hM3VR7U2(7SMf{B&(YJ74PRDlt4iz)+l{WJPwRx^~){DYPI! zve#Ot(CAWKsMa}!_Lnk!q;R&A`gqly|5-S5epvL(APiJc3aNsrdKrxNF(s7Yu9W7o z%QpJ147MPpa$DHf_F$*jgndoXn7LbcPP0@h3zS+=yH`4Ua(Sh5qz_(Uef8Qi@fC#B z51Yp=H?3vA`3-mZx3$&;_`4#@fx10yevJ-<4Z(G`;x^=flvXLD$hN{VjiBtNmT$2A z8Z{Uha7|dsm(r%;gDm}~$U2uP1^6%)Ov$Lh$N*b0zxFR*dPe_d7^*gHnnmoW zBP5BYH%t|^l*DGu95lt%K_Us}jDshwJTcWOP0iR%2_rc4bOCe&O;Z{iH=}f4ZcV!n7P?ulb7tb<%y`=}UR1jixLy z?Ek!}3z)I99_IZ^P?%Hh(6U$jt=bCz+H2ZchKS}8sXQ5Fj zqlZp`2S(xL#FHz5(F0dlXwKlXW>Py}w-vm}mUYD`(aW}<&}uvpcp$fL(iD^$V5VJD z_*>lYz0KJ0WyQh6pEiZmJ^(NUp6tEk^dIME4${I&`m&ZL?l8vt#M40=>m^3vANAlGW}Gd>yQS55N5Cw}6qp?z`&*GTl8 zH6s@d-r8F>Kh#aUOj0SU8thHJIOtDd|7Xg+w=UKE;zd&&fU0NmeTf68UUkV)Gll%C z!&FMCPj#u8)^s&}UR~;`m%bIQ?EaYrUoG5zPgo^vPc|8E&0T6#LmCFt{<;Qw98O1T zNa@&(2i3&gW}5r4;a2>a%loNf++}+z3%gkka zd_mi5N!C^6Z5k~TYf1KSCIp|#e+kr71Pb}umUax^&4i9rioR_cgwhZwos5v zMi-Z81_1cN6UsOaw8IKB>b{xoS;0CzHj|UJWUmj|%u`WEN}88!{WWhD^TyuZ9@v2T zQG_+Pe+ocdaF3Amb>nLuiG{tx`(XGcOX#32xbL79z-fM`x$G{VvT>)av4tLiy|(!l z3b2J4gp!L5v=Os~FU)C=1{cL?3#eRGp9YwRBR#gze`E|0i2kvib#x8OR!K#|b6dEYT zUb6RnzZsetxHDM&Xz;Ecy?5x?Dn#@O%i{Lu+hH%_Q0Sp^_9c6tU8PHfZDZn$R2W38 z5=B7)lC3jLrxn<<$a7=y^Hr@b6#Oc;mhE;HwRB)hr#1JWm9q9|`Y}3Y6E$ac+0XPz zWD_(M2U?NO7YpPiZ3iPItuG#C&>Qw}92FsdO}*VE8&lD1m?L&ylpK~j!kjoKmX7>g zy{+_A0aK(NzJ+rX5X!(Krw7PbvmI#DxyWkg2Rw*^pdyYGX=j$$wxTzBsj9K;wiuL1 zwR4H^*G1t2ZgDVrC&kT14mp_~sD53z$m{qNB-~-ShFI~04%L;y5fYg@OJOK= z+(bbLhxk|*Tm()$6bj{c#;PVlj2yCZK__psD!&^~Ti>FISrolJCQnza_gVoI>I&Nz zL~$uEkBBib$@TRP@sr8*@ly_MZ4$uhR?Ph15)GtBK}g}TfmnG+(W98Z>9oQPVpg0@ zmVOa+7DGM?EX?O;P4g)m*?f5rxU*;p+>Ml8M8BwyjIIY~W!iN~BU~!Y2(Q2>T?(s3 z%EBFTETsf@$jGY(#tH<&Ncf!4CR8BA@K^>e(gVFU?M7cUg-HieP<^lxmqXg zR^`4~wE;`Q0Uz74Y`|jS3S*#w=;=So^Hz0486-Da@@NRJR!JLgp;;}Zd|`3Da219k z)yCGg76pm128>M}jkkEJ%r7q!P)u_$$)viC;k$Q+@|dUd#+jp1rW`+p$rI+epP~Rj zaU#eQe38?<)>_pWS5~<<;3`xUjN*jcR4A7Bs;F6%Al?>b2Ng9zPbVqa2R(^dLiRtf zDV~gr5mikFZ$<$GZ?8x2*3d}Wd(;HMl>}~ zGMSmHHdVS6!dxZK7Enkj^}waFBL1re%C%f^^p&RIzY}GR8fR+!sbZO8aYs`@OXx2K z6$W-d`+mr<>!!{V*nv_w46$WDApcfy0;1J(ax=hXFKdL^6pzG$El+9JhVcqp7p5${ zH7#LFNwngQ&sc#&%+6D~4n}$-1r7o5BTHtceW)2O#;O?tC(N0f5VymBRQi7fRxoL9 zBIS#t!ZdQA(IuxClj375v@4%R;eaa=6}K~iGJO%MEJWpj&13uGKRP{F=~YEFW+UYc zp_${9ho*WXU?Y+EQ|(>cDaKKO2>VN*_k9nSF{h&R1inhJn)o;&td z(#CtJ2g@GI31tVZ%|%M`LvXNycKRV)xlfvQAR@_!i<9YP?(^5(EdIM_Z=ok>ne1W*>3Bf+{47o!PQj+;sa3}7t5 z$^mk&Oi=(!mRV7xKgMq?!^&ISp#*vuuld$xj_)Q`Z|3qd4OzTKyvWn5bhm>voEd0%kmRLrbeos(_F3E3`RMDVGbIhq z(QR1o9VtBs`Wgs;3tUOmvi$rGE3;p#fa!D=0N->0*x5k(sMWpMRx02}L1|MsEyBzq zC0nIjp}HN>v=jh$@Gcp+G|^}IZ*Nq9^BrDn`zxqHwWq_Q)5aOu}d@tiByCva~S2H(yDUp5Gm8g!O(8aMLh6NSaaQEQX_}qm|IU?Y#T~} zoiL1qhx|;t^k{6sf<9jz2f&BFHkVA}J4qqmi}87=NCg}sx1SF3BQ=@oGL5ry0$_jbCGu;W1Q z3|VT~B6(Ux^MHCFyW(V5#I5VM1#P!Be75_lR^#P?95(VKO^Yb03;aP_AW*4GinQGI z;EU$?2O4*#(ZVm^57>Szpq3g}8EN%(`7`mW!!U%+t(6+Yf0p!|WB(%r77F zC-1%+Ex#HK=V(z(kGe|sPR?j+fo>1fzZAP%7qJT6%C9xHGVv%T*KUYc`D?x|m@MD- z%lLreyGhNe2Z0;QoEB47H^?e=k?KFA8(^%(cuRUnNnMO3%&=#Ihi3_24Kd5dr%f+g)&V@APPWbU2ZgPm z)Pp}*SGE5qT)a%z_ z(j4D+apo_0(pHZvOG{{)RqL9TX?7MeFg;-$JXh-50036(Y(i%D4n4DXlmYU7*h)}x z|6DOE|418_=x50~H04=KXN<8OFs%HsZp_7f*$K5>1$$UwcRCvmgO3A%z5H_9VpWgy z4M*{6u3UPB4(5?A0zSI3Dy%g-(1Z;!h@v8(i+V3X8}Yxnpkb z8z?h`31T&f!gYlg`@MXjZ*3{%M_|pozwI4zi^Q7or!kS}Bm6a2+V(|resASGjU}DH zpZ!;PA5a%~gEw>_5@L3wqDTxY^o2tbzI{rxtQgsW^`gKi*!mFqFbYm+6lF$9 zb5MD15)E4~rjMebG(QuK{EC0;!*h2p3C>j}4f^JjhOh5$WVp2&_7i!Nq~YVYym@K9 z@e>qt*a;W1Zl{|7%&4l>n79Jqf1<&q;LNlkl4ca-Vs(&4pfFE;=61V5v&J2}qf$D7 z!gi&-*^Z$@lE)2FDMLVE=Qxw#PnJ6RCSzkzxXl2?8ID-gH>bPvs9#eBI3raZ3Xn9j^bB$K?dQZ5aO4gi?N{*-mZYkkiRPgFoQ1p$D6uAx7}S=Z6XG10F}>$&}0oZDZ;wWhE8 zqJs7IyFIL|74jk0r2Inz2Yt8|KA(+Fwyqz#@RrRJwsVWZX+PThAv%ep?7_HiNkLciZV{|NI^tSL5YJ3%>ger3_@@RPwR(-zir zsvo8!7znoUHn?{1bDN*eZdDQe=?#->ya3$WR4^y3#QcB&V5!a(l;+F3b^oqIit>g% zBwkHn{W0c!0I;bZvAN07CNXWg-2o6{E&$9UUC$aY zV8F&G_M00a#CnPX0AG_IIY2t65z|YfhDbhC_z~XeHXDS$Rt~{muHtsMm|I#f2x;=! zbaN2ebF-jv1CeTx|F(9O6T|P8ljU6#({_epW6^EWi(4?x*H>faz0@S zYegg*%8ixUil<7u@WGWu;gn&O@4vG;4-VqZ1Hf3CwRaj4XR4h@yI z;U7Ush?87qm`-LI)T%8o`xt#QUZ+hOiZnE8pt$K7%o4fPfGY6FNaraKuGa z#D)?zA~rxp#eyKBVg;3>h=r(8v4VPiQoD4@{F2qUi^8rD-K_B#`R}?(`Ur&kJ>&ktn7-ZIa6v~a@W2Q z#Q~45;#I>M`#!yT)0}Dk*mv2NTrZDF5tJf2hW-fH6U z)Pz%8xPB~5#G>DudpwQcaU`h?Pn?oBHfu`0rw)D${FPwgMHOUCnUa$~(_`AYO}wt1%JmeH zTh^4U@!9k7)s$TLG&l>UD+-GWNN^UyL|A>alZ@-bGhpdm;4|QJ;D+!bI!tZ99FBz_ zrBBuKmsr0uta!h6@_6dO<*@SIaK6i{Y(p0$DPA*A(JTzrEC<%$%$k}rAt!sh=fPyx zUmp%uYh3t#ire+C!iqgMD`yJb!Q?%*=H^Vd%sD^jJ$~ct> z>gZOMW5NTgHz;gPH!GXnR98H0Moxb2WY8*Ty*7~qz@ z6h9IFYFM|+?-#pMtqfLKpIHBSSaba*xB)y5Ru}IWsz#+IXeBx4fRGf7J|2A8}{7E^N z=XgAxv6s2|Tmsi2ya%kiAPH6jo9ZSk#8^GnUEyZKx|>JAjo{*OZUwqof6aI|;SX7E zPqakWU4JU9>G03eQF63RFIy!}Z{|Vck}Trno)12WAcx z7HxKoqUUXdc2nIOVAj;}IpgTdNAcBlIr#~*^NHIMUz0JyBA=XscX z)Y7@r+;}rAkB2qX!{M6n4C2-HjAXJohNtL4SP_yfNAA!#eBF^zuo50^;_`L0RTm9ABq zX$e#E#%0aShI4XR?LL^}>R;J1KeD_FR{ZY^+)?-xR^2aG9r7l4uD{at8_adQl zJMcBpwpq4^1y7T3uvW|eKlR=IS}o(>3A;n`60EyvEO(Nw2X1tI?`n6#3<}5BZk!l> zliT#I#MZPbgEjTYA_x|w)}+~%h03oG8+Yu%OaNy~S_vFOE?r^5~L zGc9+AwRE2cYmzsFnZ#p@PEe4l)8kH;f5cZ~cHpa#U)hRG%gdiRE<`Mo;qpc-R?A;i0?EvyuZ#xb?4mcdQ)NL?hhx{ZBX}^^ffm@8P=KfsfZh4pEYh!pDpQX5H z7{2b=t@vlc-SE{7x8R=zpKJYj)^A|rXSwkUi!Q*3BVuz{TVEYm6*=~R+pk~4&YZ}b zk~f1H^}}Os_jG;SZQ2d6!tW%W#%XL;es;q79X)@49&NkDt@s}gGVIZjgX)$y*>BBucPReZ z(KT}NjGQ$iXUxAl6Bhmbd64s8;s53V@E^{9e}CS4>=pXI4n6S4gWG?85d8b|-akF( z6<+F|$Nv6+H~UTZwqD7s){Yf9y+lqa3*K@kYvfcCIe#r6el6lh4iz80?dH>!wV@{Z zq<7r8v6ov$cMWU8_WBKid*5{zzZb#>>o@*?z4sLU`}_7hw|9>1bD3K$Ys#!_&y4Iz z1=F}^BRhKTjNF{uDm!{)Cy(sZWAo-@PvsVOw_?_WD{^M)miNran=*wXm*>et?jp4g z)+)Ea`Z=%`oj$NuyO!`daCNu|T>i1E?|_@(-wkWkTnuZmn_#&Ytn~5nJ7UCOsG#o- zy7Ob)l>9lWP~HrkNIagu-*4{>Z)(t>uh!HUj|L#rCP8Em zi#p=Ik@}Hv>CL`#EBZ0M*4)S71o#-b{K)hz$FGAw$r%lgC$h_p&&!=PGiOSEWS@K7 z+2=ZViry!I=KnW8x&gFDKdzNU^*SG1b!D{BON8M7swfq^ZevJLyu>QELX;Y^q%*>C$S1I389c{&rQ1@7PJns||CQQxmTg~g7IJU#uXvXDD z&Ci>X6`puTY~c`FbA4nsBYTeL%xJHZS9bo`Svgb2d;XW-0~8kh7jFXo$7@Lo8m3P8 z?Ps@BBIk*-86It#+((>K!dEvsrEue^UT1RMSl{d1-7{hJ`%w5SxHGKrX$&iA0M;4m z%hO!mYk3Q-BG*}7VtFdu5PhiSbjvMVE-Xr{=MK;~osoDaU&}@~imq9I@tIy{w%=>H z1lC0O*oMDi`GYuj@E*7R?Ut{B>l6P9%UPED!}Z9yC>=xhY4h-^Gn2frkL)@#&;Ll* zCg*hwbU}>@Z<>}IE*~87J{yi767sGL=L`u2XR}ahsjC(~(m5%3KVEx0UwC@AB;SE^ z!mWp<2hV8kic#Ss7bFGy;+^M2Ig*|foP*cb@iui$3cP^VIh;ErHQ293RlNjnLO5Ya zs_#UL@E60<1H)Q+JYB;T!&1GchjWI90^?eFJYD1m)?rOm)IdzU$1}>YaMcfL~*Ja4^l`K6)Y-R(S{ z!A^BHbx8_(6C+inqrEBN(lH_LRpIh6A>XTs;ntU>2kJ9YmpWC*$GXtz_pP$X!WT|V zO$wZFVyH7mckpud&b>G_I0|b7sXVHh_qlM+*ii6yw1JMMaURgg z;~C)OJDsZ4qUQbGQkW5=@a!BQ>R|A3j3eMv#R{Wc0fy1#ZP_7fwh^4ZebhYvF-O>k3 zm8ZH)mN1?wUoAYHDtw8jtg1O-3EW_mLl`?P$=H-cwH;KjI_#G zK%Rwo>4Z^rrsKDG%pt1R8*!AAhT#c3g4aEq8%hoSh^3r^;prDA1v5h)Pj9?v$7@9) zssnd2VWaRgL{W~nA8!PndlPi%=C;dcrpJ1dqwoehrGAK|o1>a;oIqO|+gGIq=3-s! zl)oE`|BI??wFr#sp@~(Io*LMLb%7JNE_dDq&HxUU((@BIB&RgYABe} z)1CbcD*dzqPgBgT@%z@R?(|_iV@3CC%_8P_Jhjvrm%ti%PT8+uu|o7r4c58HjZe

Y!NqajKI}bz6#eS*7%f40%U~ORo$C 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

8PJYwR%Kxp*^!ip~t9y9wT?30l8CBkM?{3X4x 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 diff --git a/apps/website/package.json b/apps/website/package.json index 2d0f437..c6424d3 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -20,6 +20,7 @@ "astro-google-fonts-optimizer": "^0.2.2", "astro-icon": "^0.8.0", "auth-astro": "^4.1.2", + "dotenv": "^16.4.5", "preact": "^10.23.1", "tailwindcss": "^3.3.1" }, From 2c77ab58076bd6e6668f15e6407a09091fe73407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Sat, 3 Aug 2024 17:03:50 +0200 Subject: [PATCH 13/17] fix: add path to ssr external --- apps/website/astro.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/website/astro.config.ts b/apps/website/astro.config.ts index 5a4783f..f81ac21 100644 --- a/apps/website/astro.config.ts +++ b/apps/website/astro.config.ts @@ -24,7 +24,7 @@ export default defineConfig({ }, }, ssr: { - external: ["node:path"], + external: ["node:path", "path"], }, }, }); From 04522ee264a708e1d7a204692dee707c9f7192c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Sat, 3 Aug 2024 17:05:34 +0200 Subject: [PATCH 14/17] fix: add path to ssr external --- apps/website/astro.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/website/astro.config.ts b/apps/website/astro.config.ts index f81ac21..94fb94e 100644 --- a/apps/website/astro.config.ts +++ b/apps/website/astro.config.ts @@ -24,7 +24,7 @@ export default defineConfig({ }, }, ssr: { - external: ["node:path", "path"], + external: ["node:path", "path", "os", "crypto"], }, }, }); From 19df67079a58e98ac6d8267778d1f1df0529b39c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Sat, 3 Aug 2024 20:23:12 +0200 Subject: [PATCH 15/17] refactor: switch to lucia --- apps/website/.example.dev.vars | 6 ++ apps/website/.gitignore | 3 + apps/website/astro.config.ts | 9 +- apps/website/bun.lockb | Bin 363327 -> 286113 bytes apps/website/migrations/0001_auth.sql | 18 ++++ apps/website/package.json | 6 +- .../src/components/dashboard/UserInfo.astro | 22 +--- apps/website/src/env.d.ts | 25 ++++- apps/website/src/lib/auth.ts | 54 ++++++++++ apps/website/src/lib/guilds.ts | 26 ++--- apps/website/src/lib/user.ts | 10 +- apps/website/src/middleware.ts | 40 +++++++ apps/website/src/pages/api/user/guilds.ts | 7 +- .../src/pages/auth/callback/discord.ts | 100 ++++++++++++++++++ apps/website/src/pages/auth/login.astro | 15 --- apps/website/src/pages/auth/login.ts | 20 ++++ apps/website/src/pages/auth/logout.astro | 16 --- apps/website/src/pages/auth/logout.ts | 20 ++++ .../src/pages/dashboard/guilds/[id].astro | 6 +- apps/website/src/pages/dashboard/index.astro | 4 + apps/website/tsconfig.json | 5 +- apps/website/worker-configuration.d.ts | 11 ++ apps/website/wrangler.toml | 6 ++ 23 files changed, 335 insertions(+), 94 deletions(-) create mode 100644 apps/website/.example.dev.vars create mode 100644 apps/website/migrations/0001_auth.sql create mode 100644 apps/website/src/lib/auth.ts create mode 100644 apps/website/src/middleware.ts create mode 100644 apps/website/src/pages/auth/callback/discord.ts delete mode 100644 apps/website/src/pages/auth/login.astro create mode 100644 apps/website/src/pages/auth/login.ts delete mode 100644 apps/website/src/pages/auth/logout.astro create mode 100644 apps/website/src/pages/auth/logout.ts create mode 100644 apps/website/worker-configuration.d.ts create mode 100644 apps/website/wrangler.toml diff --git a/apps/website/.example.dev.vars b/apps/website/.example.dev.vars new file mode 100644 index 0000000..754628a --- /dev/null +++ b/apps/website/.example.dev.vars @@ -0,0 +1,6 @@ +PRO= + +DISCORD_CLIENT_ID= +DISCORD_CLIENT_SECRET= +DISCORD_BOT_TOKEN= +DISCORD_REDIRECT_URI=/auth/callback/discord diff --git a/apps/website/.gitignore b/apps/website/.gitignore index 6d4c0aa..57729bd 100644 --- a/apps/website/.gitignore +++ b/apps/website/.gitignore @@ -19,3 +19,6 @@ pnpm-debug.log* # macOS-specific files .DS_Store + +.dev.vars +.wrangler/ diff --git a/apps/website/astro.config.ts b/apps/website/astro.config.ts index 94fb94e..2c9091c 100644 --- a/apps/website/astro.config.ts +++ b/apps/website/astro.config.ts @@ -5,7 +5,6 @@ import preact from "@astrojs/preact"; import sitemap from "@astrojs/sitemap"; import tailwind from "@astrojs/tailwind"; import cloudflare from "@astrojs/cloudflare"; -import auth from "auth-astro"; import { CONFIG } from "./src/config"; @@ -14,17 +13,17 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); // https://astro.build/config export default defineConfig({ site: CONFIG.origin, - integrations: [sitemap(), tailwind(), auth(), preact()], + integrations: [sitemap(), tailwind(), preact()], output: "server", adapter: cloudflare(), + security: { + checkOrigin: true, + }, vite: { resolve: { alias: { "~": path.resolve(__dirname, "./src"), }, }, - ssr: { - external: ["node:path", "path", "os", "crypto"], - }, }, }); diff --git a/apps/website/bun.lockb b/apps/website/bun.lockb index 04bf4048430d01c4bff0fcce9bca2dec6269501d..9cfc3b040c289cfb12ff4b9d4e2220c09c8701bd 100755 GIT binary patch delta 61815 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 diff --git a/apps/website/migrations/0001_auth.sql b/apps/website/migrations/0001_auth.sql new file mode 100644 index 0000000..799cb93 --- /dev/null +++ b/apps/website/migrations/0001_auth.sql @@ -0,0 +1,18 @@ +-- Migration number: 0001 2024-08-03T15:43:57.349Z + +CREATE TABLE IF NOT EXISTS user ( + id TEXT NOT NULL PRIMARY KEY, + discord_id TEXT NOT NULL UNIQUE, + username TEXT NOT NULL, + avatar TEXT NOT NULL, + access_token TEXT NOT NULL, + access_token_expiration NUMBER NOT NULL, + refresh_token TEXT NOT NULL +); + +CREATE TABLE IF NOT EXISTS session ( + id TEXT NOT NULL PRIMARY KEY, + expires_at INTEGER NOT NULL, + user_id TEXT NOT NULL, + FOREIGN KEY (user_id) REFERENCES user (id) +); diff --git a/apps/website/package.json b/apps/website/package.json index c6424d3..5de2235 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -14,13 +14,13 @@ "@astrojs/prefetch": "^0.2.1", "@astrojs/sitemap": "^3.1.6", "@astrojs/tailwind": "^5.1.0", - "@auth/core": "^0.32.0", + "@lucia-auth/adapter-sqlite": "^3.0.2", "@tailwindcss/typography": "^0.5.9", + "arctic": "^1.9.2", "astro": "^4.11.5", "astro-google-fonts-optimizer": "^0.2.2", "astro-icon": "^0.8.0", - "auth-astro": "^4.1.2", - "dotenv": "^16.4.5", + "lucia": "^3.2.0", "preact": "^10.23.1", "tailwindcss": "^3.3.1" }, diff --git a/apps/website/src/components/dashboard/UserInfo.astro b/apps/website/src/components/dashboard/UserInfo.astro index 7261fc1..88cf86b 100644 --- a/apps/website/src/components/dashboard/UserInfo.astro +++ b/apps/website/src/components/dashboard/UserInfo.astro @@ -1,28 +1,12 @@ --- import { Image } from "astro:assets"; -import type { User } from "~/env"; -import { getUser } from "~/lib/user"; -interface Props { - user?: User; -} - -let user: User; -if (!Astro.props.user) { - const u = await getUser(Astro.request); - if (!u) { - return Astro.redirect("/auth/login"); - } - - user = u; -} else { - user = Astro.props.user; -} +const user = Astro.locals.user; ---

icon

- @{user.name} + @{user.username}

diff --git a/apps/website/src/env.d.ts b/apps/website/src/env.d.ts index 1bcd6b7..6577947 100644 --- a/apps/website/src/env.d.ts +++ b/apps/website/src/env.d.ts @@ -1,10 +1,13 @@ /// -import type { User as AuthCoreUser } from "@auth/core/types"; - -export type User = AuthCoreUser & { - global_name: string; - discordAccessToken: string; +type D1Database = import("@cloudflare/workers-types").D1Database; +type ENV = { + GITHUB_APP_NAME: string; + DISCORD_CLIENT_ID: string; + DISCORD_CLIENT_SECRET: string; + DISCORD_BOT_TOKEN: string; + DISCORD_REDIRECT_URI: string; + DB: D1Database; }; export interface Guild { @@ -19,3 +22,15 @@ export interface MutualeGuild { mutual: boolean; guild: Guild; } + +type Runtime = import("@astrojs/cloudflare").Runtime; + +// https://github.com/withastro/astro/issues/7394#issuecomment-1975657601 +declare namespace App { + interface Locals extends Runtime { + discord: import("arctic").Discord; + lucia: import("lucia").Lucia; + session: import("lucia").Session | null; + user: import("lucia").User | null; + } +} diff --git a/apps/website/src/lib/auth.ts b/apps/website/src/lib/auth.ts new file mode 100644 index 0000000..c7fa454 --- /dev/null +++ b/apps/website/src/lib/auth.ts @@ -0,0 +1,54 @@ +import { Lucia } from "lucia"; +import { D1Adapter } from "@lucia-auth/adapter-sqlite"; +import { Discord } from "arctic"; + +export function initializeLucia(D1: D1Database) { + const adapter = new D1Adapter(D1, { + user: "user", + session: "session", + }); + return new Lucia(adapter, { + sessionCookie: { + attributes: { + // set to `true` when using HTTPS + secure: import.meta.env.PROD, + }, + }, + getUserAttributes: (attributes) => { + return { + discordId: attributes.discord_id, + username: attributes.username, + avatar: attributes.avatar, + sensitive: { + accessToken: attributes.access_token, + refreshToken: attributes.refresh_token, + accessTokenExpiresAt: attributes.access_token_expiration, + }, + }; + }, + }); +} + +export function initializeDiscord( + discordClientId: string, + discordClientSecret: string, + redirectUri: string +) { + return new Discord(discordClientId, discordClientSecret, redirectUri); +} + +declare module "lucia" { + interface Register { + Lucia: ReturnType; + DatabaseUserAttributes: DatabaseUserAttributes; + } +} + +interface DatabaseUserAttributes { + discord_id: number; + username: string; + avatar: string; + access_token: string; + refresh_token: string; + access_token_expiration: number; +} diff --git a/apps/website/src/lib/guilds.ts b/apps/website/src/lib/guilds.ts index b7996f9..502c7da 100644 --- a/apps/website/src/lib/guilds.ts +++ b/apps/website/src/lib/guilds.ts @@ -1,24 +1,25 @@ -import type { Guild, MutualeGuild, User } from "~/env"; +import type { Guild, MutualeGuild } from "~/env"; import { isUserEligible } from "./user"; export async function getGuild( - user: User, - guildId: string + user, + guildId: string, + env ): Promise { const guilds = await getUserGuilds(user); const guild = guilds.find((g) => g.id === guildId); - if (!guild || !(await isMutualGuild(guild))) return undefined; + if (!guild || !(await isMutualGuild(guild, env))) return undefined; return guild; } -export async function getUserGuilds(user: User): Promise { +export async function getUserGuilds(user): Promise { const discordApiGuildsResponse = await fetch( "https://discord.com/api/v10/users/@me/guilds", { headers: { - Authorization: `Bearer ${user.discordAccessToken as string}`, + Authorization: `Bearer ${user.sensitive.accessToken as string}`, "Cache-Control": "max-age=300", }, } @@ -28,7 +29,8 @@ export async function getUserGuilds(user: User): Promise { } export async function filterUserGuilds( - guilds: Guild[] + guilds: Guild[], + env ): Promise { const filtered = guilds .filter(isUserEligible) @@ -37,7 +39,7 @@ export async function filterUserGuilds( const result: MutualeGuild[] = []; for (const guild of filtered) { - const mutual = await isMutualGuild(guild); + const mutual = await isMutualGuild(guild, env); result.push({ mutual, guild }); } @@ -47,14 +49,12 @@ export async function filterUserGuilds( return result; } -export async function isMutualGuild(guild: Guild): Promise { +export async function isMutualGuild(guild: Guild, env): Promise { const res = await fetch( - `https://discord.com/api/v10/guilds/${guild.id}/members/${ - import.meta.env.DISCORD_CLIENT_ID - }`, + `https://discord.com/api/v10/guilds/${guild.id}/members/${env.DISCORD_CLIENT_ID}`, { headers: { - Authorization: `Bot ${import.meta.env.DISCORD_BOT_TOKEN}`, + Authorization: `Bot ${env.DISCORD_BOT_TOKEN}`, }, } ); diff --git a/apps/website/src/lib/user.ts b/apps/website/src/lib/user.ts index de9ea56..a98dab3 100644 --- a/apps/website/src/lib/user.ts +++ b/apps/website/src/lib/user.ts @@ -1,12 +1,4 @@ -import { getSession } from "auth-astro/server"; -import type { Guild, User } from "~/env"; - -export async function getUser(req: Request): Promise { - const session = await getSession(req); - if (!session || !session.user) return null; - - return session.user as User; -} +import type { Guild } from "~/env"; // Checks if user has AMDINISTRATOR permissions in the guild export function isUserEligible(guild: Guild): boolean { diff --git a/apps/website/src/middleware.ts b/apps/website/src/middleware.ts new file mode 100644 index 0000000..7c50700 --- /dev/null +++ b/apps/website/src/middleware.ts @@ -0,0 +1,40 @@ +import { initializeLucia, initializeDiscord } from "./lib/auth"; +import { defineMiddleware } from "astro:middleware"; + +export const onRequest = defineMiddleware(async (context, next) => { + const lucia = initializeLucia(context.locals.runtime.env.DB); + context.locals.lucia = lucia; + const discord = initializeDiscord( + context.locals.runtime.env.DISCORD_CLIENT_ID, + context.locals.runtime.env.DISCORD_CLIENT_SECRET, + context.locals.runtime.env.DISCORD_REDIRECT_URI + ); + context.locals.discord = discord; + const sessionId = context.cookies.get(lucia.sessionCookieName)?.value ?? null; + if (!sessionId) { + context.locals.user = null; + context.locals.session = null; + return next(); + } + + const { session, user } = await lucia.validateSession(sessionId); + if (session && session.fresh) { + const sessionCookie = lucia.createSessionCookie(session.id); + context.cookies.set( + sessionCookie.name, + sessionCookie.value, + sessionCookie.attributes + ); + } + if (!session) { + const sessionCookie = lucia.createBlankSessionCookie(); + context.cookies.set( + sessionCookie.name, + sessionCookie.value, + sessionCookie.attributes + ); + } + context.locals.session = session; + context.locals.user = user; + return next(); +}); diff --git a/apps/website/src/pages/api/user/guilds.ts b/apps/website/src/pages/api/user/guilds.ts index 13a3a47..8328a71 100644 --- a/apps/website/src/pages/api/user/guilds.ts +++ b/apps/website/src/pages/api/user/guilds.ts @@ -1,9 +1,8 @@ import type { APIRoute } from "astro"; import { filterUserGuilds, getUserGuilds } from "~/lib/guilds"; -import { getUser } from "~/lib/user"; -export const GET: APIRoute = async ({ request }) => { - const user = await getUser(request); +export const GET: APIRoute = async ({ locals }) => { + const user = locals.user; if (!user) { return new Response(null, { status: 401, @@ -11,7 +10,7 @@ export const GET: APIRoute = async ({ request }) => { } const guilds = await getUserGuilds(user); - const res = await filterUserGuilds(guilds); + const res = await filterUserGuilds(guilds, locals.runtime.env); return Response.json(res); }; diff --git a/apps/website/src/pages/auth/callback/discord.ts b/apps/website/src/pages/auth/callback/discord.ts new file mode 100644 index 0000000..e180945 --- /dev/null +++ b/apps/website/src/pages/auth/callback/discord.ts @@ -0,0 +1,100 @@ +import { OAuth2RequestError } from "arctic"; +import type { APIContext } from "astro"; +import { generateIdFromEntropySize } from "lucia"; + +type UserRow = { + id: string; +}; + +export async function GET(context: APIContext): Promise { + const code = context.url.searchParams.get("code"); + const state = context.url.searchParams.get("state"); + const storedState = context.cookies.get("discord_oauth_state")?.value ?? null; + if (!code || !state || !storedState || state !== storedState) { + return new Response(null, { + status: 400, + }); + } + + try { + const tokens = await context.locals.discord.validateAuthorizationCode(code); + const disocrdUserResponse = await fetch( + "https://discord.com/api/users/@me", + { + headers: { + Authorization: `Bearer ${tokens.accessToken}`, + }, + } + ); + + const discordUser: DiscordUser = await disocrdUserResponse.json(); + + const existingUser = await context.locals.runtime.env.DB.prepare( + "SELECT * FROM user WHERE discord_id = ?1" + ) + .bind(discordUser.id) + .first(); + + if (existingUser) { + const session = await context.locals.lucia.createSession( + existingUser.id, + {} + ); + + const sessionCookie = context.locals.lucia.createSessionCookie( + session.id + ); + + context.cookies.set( + sessionCookie.name, + sessionCookie.value, + sessionCookie.attributes + ); + return context.redirect("/dashboard"); + } + + const userId = generateIdFromEntropySize(10); // 16 characters long + + await context.locals.runtime.env.DB.prepare( + "INSERT INTO user (id, discord_id, username, avatar, access_token, access_token_expiration, refresh_token) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7)" + ) + .bind( + userId, + discordUser.id, + discordUser.username, + discordUser.avatar, + tokens.accessToken, + tokens.accessTokenExpiresAt.getTime(), + tokens.refreshToken + ) + .run(); + + const session = await context.locals.lucia.createSession(userId, {}); + const sessionCookie = context.locals.lucia.createSessionCookie(session.id); + context.cookies.set( + sessionCookie.name, + sessionCookie.value, + sessionCookie.attributes + ); + return context.redirect("/dashboard"); + } catch (e) { + console.error(e.message); + + // the specific error message depends on the provider + if (e instanceof OAuth2RequestError) { + // invalid code + return new Response(null, { + status: 400, + }); + } + return new Response(null, { + status: 500, + }); + } +} + +interface DiscordUser { + id: string; + username: string; + avatar: string; +} diff --git a/apps/website/src/pages/auth/login.astro b/apps/website/src/pages/auth/login.astro deleted file mode 100644 index 9598ec1..0000000 --- a/apps/website/src/pages/auth/login.astro +++ /dev/null @@ -1,15 +0,0 @@ ---- -import Layout from "~/layouts/Layout.astro"; - -export const prerender = true; ---- - - - - diff --git a/apps/website/src/pages/auth/login.ts b/apps/website/src/pages/auth/login.ts new file mode 100644 index 0000000..1e63010 --- /dev/null +++ b/apps/website/src/pages/auth/login.ts @@ -0,0 +1,20 @@ +import { generateState } from "arctic"; + +import type { APIContext } from "astro"; + +export async function GET(context: APIContext): Promise { + const state = generateState(); + const url = await context.locals.discord.createAuthorizationURL(state, { + scopes: ["identify", "guilds"], + }); + + context.cookies.set("discord_oauth_state", state, { + path: "/", + secure: import.meta.env.PROD, + httpOnly: true, + maxAge: 60 * 10, + sameSite: "lax", + }); + + return context.redirect(url.toString()); +} diff --git a/apps/website/src/pages/auth/logout.astro b/apps/website/src/pages/auth/logout.astro deleted file mode 100644 index eb95095..0000000 --- a/apps/website/src/pages/auth/logout.astro +++ /dev/null @@ -1,16 +0,0 @@ ---- -import Layout from "~/layouts/Layout.astro"; - -export const prerender = true; ---- - - - - diff --git a/apps/website/src/pages/auth/logout.ts b/apps/website/src/pages/auth/logout.ts new file mode 100644 index 0000000..4cbaaa7 --- /dev/null +++ b/apps/website/src/pages/auth/logout.ts @@ -0,0 +1,20 @@ +import type { APIContext } from "astro"; + +export async function GET(context: APIContext): Promise { + if (!context.locals.session) { + return new Response(null, { + status: 401, + }); + } + + await context.locals.lucia.invalidateSession(context.locals.session.id); + + const sessionCookie = context.locals.lucia.createBlankSessionCookie(); + context.cookies.set( + sessionCookie.name, + sessionCookie.value, + sessionCookie.attributes + ); + + return context.redirect("/"); +} diff --git a/apps/website/src/pages/dashboard/guilds/[id].astro b/apps/website/src/pages/dashboard/guilds/[id].astro index 088bf70..cfadc13 100644 --- a/apps/website/src/pages/dashboard/guilds/[id].astro +++ b/apps/website/src/pages/dashboard/guilds/[id].astro @@ -1,15 +1,15 @@ --- import { getGuild } from "~/lib/guilds"; -import { getUser, isUserEligible } from "~/lib/user"; +import { isUserEligible } from "~/lib/user"; const { id } = Astro.params; -const user = await getUser(Astro.request); +const user = Astro.locals.user; if (!user || !id) { return Astro.redirect("/auth/login"); } -const guild = await getGuild(user, id); +const guild = await getGuild(user, id, Astro.locals.runtime.env); if (!guild) { return Astro.redirect("/dashboard"); } diff --git a/apps/website/src/pages/dashboard/index.astro b/apps/website/src/pages/dashboard/index.astro index 3165a2f..5533745 100644 --- a/apps/website/src/pages/dashboard/index.astro +++ b/apps/website/src/pages/dashboard/index.astro @@ -3,6 +3,10 @@ import Layout from "~/layouts/Layout.astro"; import Container from "~/components/Container.astro"; import GuildSelector from "~/components/preact/GuildSelector"; import UserInfo from "~/components/dashboard/UserInfo.astro"; + +if (!Astro.locals.user) { + return Astro.redirect("/auth/login"); +} --- diff --git a/apps/website/tsconfig.json b/apps/website/tsconfig.json index 8543cd5..f35cf4f 100644 --- a/apps/website/tsconfig.json +++ b/apps/website/tsconfig.json @@ -1,11 +1,12 @@ { - "extends": "astro/tsconfigs/base", + "extends": "astro/tsconfigs/strictest", "compilerOptions": { "strictNullChecks": true, "allowJs": true, "baseUrl": ".", "paths": { "~/*": ["src/*"] - } + }, + "types": ["./src/env.d.ts"] } } diff --git a/apps/website/worker-configuration.d.ts b/apps/website/worker-configuration.d.ts new file mode 100644 index 0000000..94aec6d --- /dev/null +++ b/apps/website/worker-configuration.d.ts @@ -0,0 +1,11 @@ +// Generated by Wrangler on Sat Aug 03 2024 17:34:42 GMT+0200 (Central European Summer Time) +// by running `wrangler types` + +interface Env { + PRO: string; + DISCORD_CLIENT_ID: string; + DISCORD_CLIENT_SECRET: string; + DISCORD_BOT_TOKEN: string; + DISCORD_REDIRECT_URI: string; + DB: D1Database; +} diff --git a/apps/website/wrangler.toml b/apps/website/wrangler.toml new file mode 100644 index 0000000..644039c --- /dev/null +++ b/apps/website/wrangler.toml @@ -0,0 +1,6 @@ +name = "roles-bot" + +[[d1_databases]] +binding = "DB" # i.e. available in your Worker on env.DB +database_name = "roles-bot-dashboard" +database_id = "fdc6f902-9142-44bf-9be9-b38d351ffd27" From e285c47e011e40c1eaf3a80f2de8c4b14e831d6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Tue, 6 Aug 2024 21:54:44 +0200 Subject: [PATCH 16/17] feat: guild info --- .../src/components/dashboard/GuildInfo.astro | 25 +++++++++++++++++++ .../src/pages/dashboard/guilds/[id].astro | 15 ++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 apps/website/src/components/dashboard/GuildInfo.astro diff --git a/apps/website/src/components/dashboard/GuildInfo.astro b/apps/website/src/components/dashboard/GuildInfo.astro new file mode 100644 index 0000000..de06da9 --- /dev/null +++ b/apps/website/src/components/dashboard/GuildInfo.astro @@ -0,0 +1,25 @@ +--- +import { Image } from "astro:assets"; + +interface Props { + id: string; + name: string; + icon: string; +} + +const { id, name, icon } = Astro.props; +--- + +
+ icon + +

+ {name} +

+
diff --git a/apps/website/src/pages/dashboard/guilds/[id].astro b/apps/website/src/pages/dashboard/guilds/[id].astro index cfadc13..fa2a750 100644 --- a/apps/website/src/pages/dashboard/guilds/[id].astro +++ b/apps/website/src/pages/dashboard/guilds/[id].astro @@ -1,4 +1,7 @@ --- +import GuildInfo from "~/components/dashboard/GuildInfo.astro"; +import UserInfo from "~/components/dashboard/UserInfo.astro"; +import Layout from "~/layouts/Layout.astro"; import { getGuild } from "~/lib/guilds"; import { isUserEligible } from "~/lib/user"; @@ -20,4 +23,14 @@ if (!eligible) { } --- -You can manage guild {guild.name} with id {guild.id} + +
+ + +

on

+ + +
+ + You can manage guild {guild.name} with id {guild.id} +
From ee07e4e72ddd1b32170b6e6070e5b9c56b4ce025 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Sat, 10 Aug 2024 10:25:07 +0200 Subject: [PATCH 17/17] fix: type checking --- apps/website/bun.lockb | Bin 286113 -> 288576 bytes apps/website/package.json | 3 ++- apps/website/src/env.d.ts | 9 ++++----- apps/website/tsconfig.json | 7 +++---- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/apps/website/bun.lockb b/apps/website/bun.lockb index 9cfc3b040c289cfb12ff4b9d4e2220c09c8701bd..16a6c2bda7cebb3b9bf9137a8c9b8f0d90c49536 100755 GIT binary patch delta 47499 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 QF(``d3g}w$mbHKVFaBZM_y7O^ delta 47020 zcmeEvcU%-nw|4goBMb&aK|oZ*oIr9AWWbyR4_UR-T*G z+v4DNg5d0 zJs~Y1{ z5c)AFXASHX6W5(eIO!y*7knkDJBK`#ARL&VpA>eBv-wB>7UJE1#msv`Z zkqRUuf&bE)!wbUt_)`FQ7rY(tGLRg!6nGq&WS}_ykUkmuJ3B4l1v&C(J3Ta#Q7za6 zp`wb;!EHxiI?w?)3GR}733yvz|Hy>6m;sT}WW?18{74`1oVv_^CqZ6aaaCCx;I<6v$bN$Yuf>uD%kB#i#E7C)fOmYu|mHNJCctT=7 zlo93-6m88=lxB zD!hL$RjY<_RqJG2Sen~ND#N?8cv&8$*vQzPXrr_MJUJ-=$*IJIm}r_Jub@u@_dbxu zUuz&trTGA593q}M@U0MJQlETxq~f-05;-mAZDc%=3MEs@_!3D(*9H*)8kEjpA2g}K1UzKIwP7|{s{ zE(4>`4;mg<;uHHvMjlnB>YS`cz!r_YCtf_NnM$V4&iJ!GADP2|G_~S^)T5?8Xa^o+ zG3}TiZ(kFPj^c6^aGr>OrlD-!Z`W@2jkf0EK z^yM+W2P8*M0BO!AM8*z?>@P`~;K}_SaWQdVrL0=K8TEpBFc^^XW1;5^Jg;obSKZjB zjwBTU_t=|jht=bJH6Xcf4Wu3&;KO^KCR2D!f>a(nO=xWcNvZ&RP@j8w97y_|V3$Tp zc5NQ6b|HKSuL9~J$5e>vgJo6nY{cEelH}4eCcKvucxwN@T0>W%0&;&k9H2STo3B(- z7%HSbuMVUk9TF-WhXWM%LXcBA(`Jwy9upItU`&)&h4GdzY|1+V!z4T=JR)*Bcxqu9 zkQ_<`(qx+eed@RrAVuyGDxm(D1|)eWAPs=JKzm>-#M=Sb9ebpUkCzl6__9FzR>-hy z%?m6MEqVHv@`z5#hLpha8G9|cb<(l&wmc3i)mveCjR_${=^tvBs?Tr5 z%yW-+;hmiUBv1QCCPofQlqA-b_tAJD$*Xtcwxk>M2mpb*wH{5ofmrY3ib+I z4y1DTu{u+Q@zApajuUnU07)JVq%Ii{O?HhK#y#Sa`X*wUqVH(*CBaj|`2NuevAq+d zDDYIE6ObZM4`ZGxGQ{wOu`G~A=T^u|182ta2E7K4#VqYHkfuw6I3B6@eR*%W5N||A z0VHTx-$n*`dq&Ol!A0U%Yd09YPq1X4@e0xJP~q8ycv z7|ivW0jXloAzbbSo*XX;v;%%k;q!Z8D&p@5foZ{LC_GJwitdB%k**Hqp||qo20x>V z$nawzjhU1<3>I9M1-~whS1=P;4Ee(a9u)bXhjDv2Q4CB#w+$VR_)`R4BZEQ~kr0^( zds2^Rm*~Dddab^TZ55YSCsVhvU%L^m9W1uE+0vAm8higUq=4x7gD&T9#2epu`o-8aG|DPAI7yAX#7Tq+BD z@4R`vw}7PWHj#IE86f%Hhf2rwluih~)gopU3w+kfg_eG=4G#?oeh~RW!a@#OK3BUZt_8v{DR( z9fG&5dEWE9f#E zMI+*3lM7!3Q+Jy?cfy+0utXHNJHN=4SPY4nt9ZdH>?kx=b{r515pP# zG_Zeo-(E41{a@^&g%*3zh~2#BqzvwP1h5DcO`e(z*W1G@HZ7P(R0C4l8X)z2Y;>&J zlzHGO64QX>$Y_D7K?;sz6m4Q^hC6Gqw^85{z02g)Jp@t!ZwbCf zczoY@m&Ak%;Hlc}K-zgsH^~urD&f+zFV2hIlcHlHjMD$x#iuzUjzxvK^xs{4>Yw53 z%q}2}=^k-?ai1S9(RzcfQwG{N8;hOetrxBQ-)^Ka?N3YWf80n3L7~x-fl);ZodTq8 zG@YBBF%KNU$K#ZVo4Wp(?CRFQw_7vJ;2X+p+fv4tH+dj%lSfY}q@K6|8y|+3fMkC+usCp$z%c^jfaF&jfi(q|2iikkkfSl}-EA(oDew^-ChF`;M)qU4YY;6i;5+rG|tJk%;Xs|U&Dl`M#m;bxFCm1H-A-diV0t>BNW4D<1o$0}KFP}V6m+(|jv-5^g; z(%lXEJ^3Wb18N#l)4v2)KZmPhE=je)Y1O=u;QUlhcJq}plq?T}?4lUz}Wb_TR&`VNXsLM*GyRSY0Tn)8wu&1wlOiA}L=nG&SA(@4$aYk_FRGH2e zYh$329T;fF6TyK>mbXEl1+I;1h8opWN%k@5Ct{2SL1w08R`=Ci0asf|9TKSc`x^A! zFeG>t!EjTFBBV!{A>xCE3p)FHzF{4EnpsA@k64 z_tllg+Fe7*t{y;*_BUvrTPZvJgJgq}!z~u(@7&tHF z@&5TL^3(>&wH5!G2K^`;=Y%akU;Pnq)P8v6~4vu#d)qM(_ z8}cwVQ1@4GRN9P6>l$EE)mE}S1N38&st381LNR^@j@LossS=JR+yeSW-ws?e)xt1% zvjQ9imV5sI9JP#dRWR3iUBLmq`Z#dp75spemEc6HQQt$MX|Be{9cu?!(W#v}6daXP zhm?MY;56i?Cfh;TSvyGYT3nKRpkk&BgR#Egs9KF`Y!x`(^9YURQE_Ewogl;<^C{{0>#tH5C< z@!(ulf6)|uI=En!gI}6YPRh=PL3+2+d?7#wpz`kEsN+=EUlib5fluQc*IJj#PU!Riu(B)dwkV8)MhXbv|3 zT#f<##qT&T#J+Qm=2UR)bGRqpadoQatzka6wmF*bz_m1SaziD(g+ZRIWVJBpE}^UZ zlvKX}eIa+##GygZ85~UjKAssk8WQS`pgT>RlHDReUl!{>pKQZWrYkr;s9-_2m^dZ7 zPJsR)QdAm~5aYwilXLmhN#7P6)q{!V=c}7ac}mUt0rGjpzl}k*Qj+l({}O0 zh4}_6YrxSo;+xNVaAFO{1o82fq;ANQluSQg`DZ1otwElo__s6YR{2X(6QyRm0Ns0} z!qik`;ejg06wn#LwNvGnk?NHr4?-YR+xl@x@xCVg z`{0@>sqF(TFo1YBlXyC~W~!OrzmwO22i(kLq;kyYpMc{7f#zWYgCvFLRJ{TmZ_In7 zT98#tq2$g6{a8eWnuIW+&con5lx*(+S*Q4SG3Z-jDpQB4fzmGmN4ntZ_{zU2SzQd6 zzW!Ye`f+vmx|vU1MfZS1kJ8Za@zuPnqkQTbq<4WG5~6qfF%rOGz*Du@490_N!a3~E zm%-IgYIY6KcdM6Iz6M-RCA&)iwwLs9gRVDLyjn^|cz|44@$YWX4QPO|M!aqlQhiBN zSGu7jby8D9kZPxW^o*=_-HVSKbgR+mAl2i?NOhw&>mou;e(px9gX(9oFe;0d>9-+8-eD8Mw)qkq?J!#6Qv#traI!bDr0L<<5XoGx5$%;1UDm9m+E~*!!kitku`6BG>iRXMuxj!t-)i z_&TW^ZRHcdp;Ktf19t~pJ8=B;O#R`$h!yV=BOz;P85S#IY|F z(eMR_uB_*)4+O^*$=nohSica~U~mTnr_NaYM{qQCctF}<0U#^+X)x+%funNJ#L{^Z zTrCQSzF-$FSIg*v!MUm3*AFSO#TVWy;AjY_6G2}J3ljyG*V+~wS=OtavK$s!1m-!&FYM9@6%K;{l+cz6D3kQ^$wCUqoJ4j)SAlK=V%dSzzbI+)FE{ zZX|obVV;S~3-;t28u|%G`w(yl6BR>y9)lw{ITwJHKbM;bj#of^m<5iSz%@gn_|#Ch z75z+byhq9A@8EJ9>lMvogyvz0j|CS-150-qDKGWJoWD08h}?2hZ~>?X=RDjej8ptm z4f;&Tus~yskSAt+_<1eA+JesDxR;s9eikuUMRS}y0}j0>Ty~3E0tXPIV*=MQcDq9R|AaICUMyOvym1RgN9&cs>NUyRqQlov7n7I81QCx%A`xg-ylJ z&!T@`XU2oeE%xrayw(YMjjaBTlN0#@pjIyTP|}ARb zr1Bd|UT!xy8tQ0Jyr0ETZjw*P-rxd}MRVLw$r@wOJ%9wavSY9T8=*-zwfcBUK})?u z)b9gFa|~-xLtnX|;y=zHV{63UgGxI7+9+B0+g!4fv+ls$p(AODf@`q$N z%|NyrG8zU5KJIBhj#Fw(57PUN=Zbu!#DXJt`DVTv9M#S9?g>ra%jG6;O+*qaS9c|S zhC#msG9DOIp#NQHpy}XhP2_tJ@A)y{>T*{w0j`0g=A%~3(ZZ9cC+Rp4juiDI4k$QG zEe1#K86iSRR_;8D~z*#86mibvs;W0#| zP>cXaRq=-h%fOK$Z}<&x6ckJhH(y=xsZ*Q|kpUj(raU}c^%Qx8F73XrN&iT1)rB$?FaJ*tPtT z3U&;|S9bs$YIF_2Ugp2SpzpMf4;9qZ*;hXo9JPj@+l#C>Jv9r)YL}q+Z#3v{Kvo|b zl3IJ24LO4%h#n$mL1PPKEmV&%h;-H);Vs>==$a$tN)J|Kqms4BAa7CpHybpcHYzEb zgX91ueX~KIxQSPYr4Qq84>%gBSb-Ejd6SZ|B}m?_q;E0ki)`Vi6ZM>@8M1|b5YV53 zupw8+N?B|x_Y+;#!dJHo+z|Cf+IJh5s2B3nVxuXzOZl`bNbkIxKkwm#?-y|0 zpn_P!Et`zI9XkMA6XfyW><3p{so5q#W41?0$q3T4+N12u2-45q!^`kN_yk-JZV!DE zx|bg?v4$=8)h`6+hCBqMwx1ao{2qc0-fkZs9sD@nnmDCqy#T#}6vY8i!7ca`!67Qu zv9M$+HTDH*24pHJ`-1eA`%OEU+yGCHz|q`++iiR`llLn%GJ|xtAXHEJnkv64J2Qhc z1AkRMWd`Xl{F<|tVFnjCz$XS`JoA_REd?aHc>9fGm5aCZCY97fM zBFGyEj)oTUFo@TKqd;M)Y2d4QdPJ#lC`eQLsFHFB&L7Pggb3S_qspg4K|1Le?%9;= zLjk&`NQJ7YxjCuFIVqpxrre*9YOLy=LMlW}*_|+@y5*!+=A>TdqykQw^hV^QPUfVF zosy&ms=dxRsU6wDDhRn+YkcV&B(x=ZDfN7yqmq@2@ZL7a=um_YbAIOMf;%x?z8j zy6x8&_=}KKe}lBaU%ah&`A5>eKa_6$q4W!+_5NZv_{yK98>Z_E{6$EP9si-U@YO#X zfUdqZq^(gI7D}uRtH8CVs@0`Yd(HH?kLsYz{}|s@~6=HxgVsRg)fs-OS<0ruT!qc@uLus^LDk+9<~#!&Q7} zI$UQ)`szD^<2K34W^lamnJIo2kNEb%Pt(zYgAqJIT@J3UYLX6BPr->|Fk*O|!y#`T zxIpeSVtq9yPmcDpc)}I=z4S0}EmTGF7;= z(0$t?D`|b8z*?A{OKMTTI zC`XSYt1G{_nHg=cS`ZZjRRNiU+(C5ZMJ;$Q5Us)90)2pV{Rs0xj$o-5p$3EG5*zykmOxC`?pAX-Gv?@IUFJQTtxdxv6slm zi{wxgh%j2@6Oy4mg3pU2j|Gvvc#;1jG(%pZ$WJu2j09w0fXE;u#S{=ZFc?JF-yxMx zRkb+EO6q4jYZ9ahsfx{RpYR91uA$4^#-W8bkqF52E}H0yhFBCHuaUk)&IQ z!}Y&`bw6qX|(a}W-5>UEmxrw+aVqDbIOpjGg9PkgQZFLfW-d=l0T1ynI{6D0?E!FK+1nD z@Ewra^%;o&q%ZhGetso}qfsrWfs``L@Q3nrKr&g3pU2DzCwip{u-5$ctpC0^|jOoR1g3+xXp41PEX1yYMgf~WFh1x^$=6-fEh zf#i^J1`>1;lHg|`_1Rn?DJ}rgSX&Onf6_|&Baq}9!BdO30jd0U!S4pDV;V?$$AIL} zDIi7iBImnESCJqCw}5mJQpIfdkrMfTl^sh-VtL$<>qrc^?dMI zOK-kKQ)S|+WlP^VpRHmrl zZG}FetlWHIhg(Fv&nTq0CC^v9-~v zGFN2J7ui2T%36p&q`wSE>%m%~pBG8ALC6WItG5WAklfiSaGRDs0K$a?oGkgq&PZnW zi0r)r_W{ZK{iG$3&fjN*{G7lGBA<}-FA1KI+`bMZ(JlNTH*O35E|BVdY;p$)gr~Em zn1WBi(nU!Az5~)YF-O}d%MwWT@(aF@;H`jk5mJ6(!RJMiTZ{Z6B0mrEag|4)Hq1sS z5|RO1AZ?(uERjRyfE0iV0xJROA|(CFg8vaxxvI#gfZ+iK{;G-p8p*J`F#LB&6?h6q zyaaj!N$xAk6Vh!%sCx3Egvj{cM&o~{LfX+=3Wxt4q?Wf9`gsw{zEO%18UJq({r`WX zV!BZqEE+~gNmEx7(pX9(r13Y5as^VTeiA$(jrLJMC*V>b7CFF!ujxHNPG|Q@h z$WGn|l3-Py^u6fO92xu{d@`xpt4+21^I$T9o(WK(dr>@a5#uNd)4b2b2FinEdC#BrOTw zJ;7!vfr^PdNk|2&wa2b6Tm{O7^sf9H820{0(3 z;QZ&o+IGy)NoUgr@5@;1WE`|AIlQ%{ z#n7|iulIYeuh4c|#hLe)UbK90c6-|gPHMj5e&p_-RXU(!n*vh>x8-k$Je z!RO_+Y|L4?AX|D~ZY+DVS0wN|2SMu#5csl%7a({<0^LOj{8{sh5X?Le!B!FkF!>S$ z4KF|tc?p7=Y$FLilEC&d1O^s<8G;oTAvj2aU}k*cb2gQr1$#`;k_F!av|_UeTC-OKZCJ={KwGwupdHI1XwRDe2I#<6 z5_Dwp9Vj%sjY=Z#ppwpPBMCl|!1gW#U0L{DD0XA%1mVp39-upmCg{O32_l%o?|?|w zkDwmoWP)gRmY_GQ`~c904I_wQR|#U7`$IrqHkKfc-64o){*M6t*i?f4 z>@h(C3w{hpWU~m8*eikoEaVAbAX`W zXVgj(WI$jvy?{b1wON!|@8RpK{?e?+`T3R^mRZJ*x?QzC{T{b$?DX0@=8ioRJFr)Q z!5PI?-=Ep*+SS6o9(M7?PqsP!?e+04qh@}!xA=`-PN91XdLbo^HcfGv4GGz|GpMzL z&+;Mj0#dU}`xP1!bo^@UtoHHhzt+QYxv6X`T5eD)~e>8)FNc5d8_W`tIE2a`KjQUZKchdxmueW z>UH|`OsO{gW()7ph4!DZ8E1Ze-Y&DTf1GV;xw^i4@3E!mR~VDWrdMdlX*1XIH#-%q zc4OSs`u;oDc45)oiiYe@>*C?pVECg#9Z&u7Y|4tZk?WgvIJ|aE1HElVk*b+P;{r74k@jg{rR|0YaKp?ZfK3qh7u(d2967b;UXdugqWgThT*RLk6Ba zTJ-u-V~ssc4>cP%VqKu{n0`>9mxoN3nfanpjq-Kd(&SM7iHkQ(p4t76_BZ-ZJ+#1~ z>A)(Zvbq;eslGb%T-TmC*L_vo*3i3P6p1t#9F^B@ zb9ltPfZfbW{yLPi^m%>vgZSm0GTl-Yk&$xbX?Mgu8z_ zi?+OC86UFh?(=D-*L;|Mc%(xi)oz+PJLt76^}_g*%;pWRb^Wc?xNc`^l z+Z{dx)?9YsS>lJWNo&39pFNqF@#&*{rrotwd%tzMbn{L0@B>5cD!o^1yBqlK@ZCcq z#N_ZelVP%3WW>Fr6UL{vyq);^nM3Q=`44Sb-mG4+&(XEqjNLXmM-N%>?PueSlMCnj zc4;=%Y0@3n#)B3N2wUZn@#5|!{|^t=RHs)w@t*~a;_-P6TaUBrHG0UQGf}N>?JugE zdF7`;qb7YiWMCkiNON zW!sE{TOO*0E!0swDX-xyWyF&i<=pOeo#QYpA|y1R)O)X04g0)0=$E;9*Wo88HObS= zKSjH*j{kY&hAT7NhU%**WtNxO^CGn3)p{qNueYyEuZ-e9im)^}ui;xAd(=sPw^-B7 zcGvKyEf;^je`mY@rrBwWMx5=|^puUJd#?lR!QDfev1QJ8o>TXHy*AyI6XB<4)$W#Z zaLc?lCH3uu!!#zQ7O3J4CGlsf6DCPaaxvz2L zgTd^9?Sin-8^UlJEKbX7xM?eonx*$2Ie0A~B_UsM>Z7La9u234Z#9dMZeG8zDX{09 z)kST`Tq`sFUZ<+te=a9iYPqESk&yHmt;S6BpF1Ee)#Pw3*j4h{EwSQgW^v=C*Z0@z z^=ASMz59heXg;%L^Za)oE(t8~_INd?pZZvq3BK~I`})NnYd(8B*|yl3rysl4o}@cg z$+g<%(+vj+hbhGLI;H6{GtcOD(XyXWiu2k2y8OjDgYA|V7@uTW`s76qJC_|{zt&z@ z(LLbhBAvs~NfplzQQStm4emvrm7k zVl#2?-BTA`T6S$+Yiz`{_1tY>&?kWOWIZ$S#)V& zH(l!2v;8MG?#_47H1&3tUh|}@IsGx~+gsD4{Jg>$FAHjHV^3^uP;s2A-lxOG@u4yA zBGMe}Uge89zoB8F`M)OI-ZHQ0iX)T!`fLesZgQgU!0Jt&lu>SZsSfj#DPs%Y;ovco zWdYjH${Uw0(WCe5h(7h~Z8_^}<&F7{Yg2z3cR#6RgKdp$3%ES^;+tUh;_Zaqw&^Eb zcUn!iUabJ$9PxlH~5n8(@!*vEHtw)ud= z&H|?Y2*HZ?5X63jU?EEuyGnvVpCPE34Z(UgHXDLUUm$o+f{o1o zD+E_aFz+h_o7rO$jLC)|^cw_Q*{p96_tpBMa=zZ^-T} zgWttg%9^$_8ftLP(}2%l?KR*(g3lm+FVkyLV1*1ptQLYymQI3p8VE|7LGUY!HiN)I z3&BYe9ApkU2zHPlRR_Ugc9aBBW)QgKgWxDj&If_L4uYE`IL<1YLvVxy6U{Ys6vfSk z1zKn>pvBgDO-IZAc!3D-nWYWM$HLq-ZMN^T*Z9fw*GtCNux2cv6R2j~pp1P*QJON^vRVZ-78)~KR;r4|WBZVTnufCOwS%cxu32uJ|Fux7*nXy{ zrkPf5$eiso3jmpRnxeYbm;|a}wZ=huj5H~{0p332UckSPsuy1z;6;2BJQ@7nJzLYi z;L;-|+7#bc$qH8 zXfvu!-#fu2nf?*0v#ewlO@MCC)E~8v!MSIubA??s7M1J#qCU1%Pu~ORpGd=HgbXi% zsNjVcP27(oT{Wc z6`Pch7~Uf)@(8o`(NtF}KI4O^j67iSjy$@dW;CmUj6b_g*}wlyHoAN!TN8+q&iICh z$0Tou(wG>d_E6}vyuH>x`KhEc?pN^)VL3GjW5arRb@r4Aq=vIbg^!o5O65yh{5R%cW z=Nd}jq8kWG(%ZaRA)~Xu`q>zLV^aY{7aiOwpCVA11i0wTO)`4Bax^s&7af;LM(3|F zLPkejl3@pt#tRvpQb|T{MEopdbigDTMRca=^-MY)l8{~?v=xe`?__Kta}qMsr!w?{ z;Rl48qD|*1;wfTBMfleUd-jkW6SB2JhP_JKC}hpo31M*v#|hzjA;S-H620Y5eYgQK zs-OfYLg*b9dL59;!o;)RF<&Yi-qU$u58R;KelAa=H)I(<=B-_->^tvcr=SAU)NSj^+ zzaV6lAfvb4slD{A5dKp~Lne@}%R-Od@LZ)z@VT3iRRupyOSjgz==&lnTn$7Y&`|KM z3q=>CqfrS3?}pHGMVdahCC(`teD@Ev@kkN;xFNExOA*0t)UkTZL$nc-~(LBAEPuD{s^F{h9DyFDC z7G;foVCeG*3da*6Bu83;sO9uU6**V~L@!ZMi=GLC0Z7xAL3F(kdVxq6fs9)Dhmh4o znm)y)>!pylOM0W*ulfXfcR^W`bscW`lkP{e~*; zfbOx4=WrkJfn}f51lXD*4i+Fftlj<`rXjju`QQ1_PTE1!|^kVrmE2bjjsTr z{lX4p4{`t%2RVXDfJ%Z&foT7rk0x4y=tG-Npf8|o&{xnmkc>PHNDDFp=|J_+hWele zpoX9W&^rV=qQ$_Y&4xCYeIWWMi8htZpm+pf9&iqDE{NV|7z3jHWjtsiXcA~LC}F^e=)fks5!_RL~qV`fILC&ph>7|GH5Dj zI*7hjbN~%U`X|sxkSq9(K>Dt|F^Kk;FtQD54r&EzL&t))NK}GyWl$AR2k;$1oj~*v zr4>jIvIKR7tQ&~FwC@h;2^s=Q1q}sl25kY+45JyP1JQCo)1RjMLgXz1Ee0(CEu|^D zl4V}f6t!Lto<0J10+j}pVfQa-8XIq;4M#vnLB~MHK_@_`Kxv>MAlefXK@p%xP)`u; zM6~|8f@o)Zff`({y)ImiNZ z4{rYsx(~Vt+9I(Rmo+|kI8y$K##cw5%?)JXS2PA=J5<{R)D{8$iegyTUIK$Ac}ft-+E732(}O|dKVx`Xl|jjf`) zdS+s%Y$j+nC>T^5R1;JKL`$#?x(;JEKzl%YK?YDQkT>WC)J}uWfX;%>fzE?^fqdAo zs~S5aZCA7h)6R1Y5jqYk2PzMueRM1Q*^j&fpo5^+pxU5dkR__m4=M;M1S$-&1{DDn z1r3GH1kgB8Ke$6b&ytRfEs}sgPMRsLB&CiAbPR&8R$9aA?O6?G>HCB0d3(+Z6N)hF=%U!0?~fc5Ja0H z&KXAadpY`sj<(wM5Zb_~Ey#%UM9=^jpk4C`h)zojL5o1Yf)0Q(Kzl%YL9Ib;LE)fC z&>NJ!2&x039hEjc+R$j%wL*Ox$i;!kOoVb0Xdq}1Xb5OJ=p*v7K-nNWM3HVuY>;*Y z(NV1;hz{NdL5D%TLA^jeY}R#6$7nYsr$A){s2z$_1m6c~ItS5*LUbg(2g(4YgXmK| zXApgw=Lhl!)c^&60zoxFK_COD7AP208&rq6+|X3Crc)|?r?~|*6~w(T()J$>HVV`k z=`KJzLr#WArGP1rJ%<%K^3f6RJcwR0x`I496#a_)H6S{{O$U(;Iy$rhQJQSfsf|u# zb-~l&>TPa$qx#Ke0SK-`VFsuLloC-O2~-X|os_OaM&}Oto{IDe0qG!99%)+;9S8GP zOg5T=nt|wik__Eq&?7lHM);AA<`N7&dP)bCGPX2v7K3P!nFE{)n!VlqmWEjw=>aj# ze_99Vz&soVe*x7)nudcXXeG)G00slQ0x^Kq^|TApq(^JUBFJd{s0B(xc>|EvkwB0a zh}K@Z$qqo;8?+TVKJ;(e`+@NX`GP1-3lC)m0qcV5fQo@Sf$l@z5!eCL9@Gxh7DN-E zDJTp?v$sF=XtvUqlk z&@Rw+&^FL!&?eAE&<4ebR^y5HbNUs~7BfSeIzAl?U|-*9ihIvTnL;Sz7I%8qRJ&AflyUb)JKdx;!kXhsX%~mLkFg*nVuzHW8Kq(-B-MPzFl3r{e}vt3lQPY_;ur>#@^9P$0Ihf zaHp7<5%OH}o+9gxXWelhH4ffRP{5<4v{eNzef?JFqL-@RM#JH(DB5gj% zfVORZA++=Bqjz#^T+1?{An#K{K1j@sXD`cjSD0unn&lG*yt zus0Jd*^6lZ>;CyxzvwjbPms_MU&cCrg2Jz03xajGeD$Aqq-)L<>Yf;+_)CTMN)i6AWesu||k6VE1TxVG;0?Axa);qTQt)#-ba)%=E5 zm381wnYHt1bu!(tsxm_8!|KUePrT)pENer(f7lp=5J!?y>LcN_hzZ-;MBkYILT#oR z2eHcZWVRZur_Z#~>Lcc~y4{{vocw9{1dZ(OiW!Dl7mA$3L)(V+D)ZP&r7qR z8m+yfxwHCYB5h{e{WBj%w*J*DN24s;sDZP=>^Q)&3-n4NL~ffBCY*hEZ)2|BVD=3P z-m{^A+S0;mxm+)8jGvUNuv6sBaPsQ&)wi=nZq79ps)g-rD4?lnvuYGMWY=l@kX!{v zHVg^~*c{SpU4~cTx$&onM=^27bM=zgY0|sT4Edn<3VK$s7rl5_`G+x7+meH+M& zSZIsO=FG(cF|}pxZIM0M0;`;=`n`x}W1Yav;o0nn1*{%r*%p|*PrSB!=(RywzNb4- z#RcHt50+wIbyJqkv%OF#aSIchjtVm?bgW`KY2bFX1#Z-W$KLFvz1Cjy&YKk~sI|xc znc`_XxLJ?|7X;L29RZFGIL6RMTeH`hh#{kUm!mn1T@y~0XA2ElTPH79U&#YXw6Q!5 z+P9$M&~&~CW6Qv?jGZN$P1sE`)&Y97SYLkCX{UDO-j!sG?+#JSx)AgRu*t=tHxha@ z0c!mcbJXEu%sc4e4CIPCkm;-|=`CT+t3r?e%g@-pnjTL(_RCEl)t(;(@E}_YJ)g@k zR0M`bg#6ntGhXt8@Na{QjxnAO>Qv^8=(T|Hu9h=FHTVWYJ!M>5TdniMD_5P35KCVCVe32Qfd3sWtKO)BoId!&uzIk@{f&?1v zsxirqg%(B_yzr9)R_?UJi@u)e_~8DMT!m(A7!@bB@~0kr}4pMhn}C6l&evNHMfSP zAl3)q*baKw>(WX%W{tn^X>}=AFP<%cg3mB0P^;sY1??C<`00XNg`bf_PBb1UH){Uo zM&aC?S7q1>YpsXyR_4C{P2+g$@g6(H;%|Z_qWQ1G&Cf2HtXix--uL}^xQ*qqvQR*u(g+b#4`$cfiKYU|PK z>$cj~vNc<83$1FbASP*vuzGxM1>3BSF226aU{oL`^PgPu!)=axF%&$`8Uq|3;E5D% z#Wm8$xB6@wvB~6_ucT#0(#zwS$rpC4nAS%y_J2m~=cD-Lxe8irbhz~5JttOm-b6=BES$7o9796+mKQfvsdsgG zm6Lx78h1I*5Xq@ktg1QT;ft(yN*M3ILnVrSo%h(v-el2Fnt&WS9Xwqfxpe-y1>16S z(2@Ocn0A+nu@A+yp^k}7`R?F3tw&1cykAl^axX||D@bEq9nsg*1-sq;;Egk9zWxqV zG)UaNq=igzMCkb8xfDWbdYLP3=4q>;W16tSa{gw#oBk9lJ2Nj+K>udu@VUYUme9sJ zHf+UbYLEWLNg)2xn2C@h+33fzzt~0Qt;t56lj^H;YB@m8iY{Q^fXx!6|zds+TxCf+w&e=bH16yg-%bJqlMzW@+|A@ zjB#|IO?8F`Z`!jp&R7k(VRj2;P4*mZJMv9y;J_j6lP1157Xd~?t1_1|a7s1hfUm2< z!I_G|6t#`5D}yb&F1uF-mGR>Ta@@;md&v{otg^T{%3x=qhjW=sAXJ2q+Yl;_m=cUOCwR&J^2L4rfRqs?Pk&=PHQsi7E%NUFA{pGo1$|OQ zblATRb~Jk$q%F>FR>asF*MqM?`JZ-eIk;v4dIW+yZ>o4Mv!-G8U6;t~Sl3EezH3GB z;ohN-T+YK|c(>e+Y{%B3RE|Sptj4p?C?=0)nKdxa7De)*jIE&h~o3`Mvm6k(vC?4IjX zj&q`CROcKV-?rt(F4b&SqEYweelR8m_yBgg%D)jRR-!7x{$DkLCP-j4tw)X*w(NXW z#OAv=3#BGGN+OQDPuQhumfte?2OXm48e-#p-G>!+#ZW98!_Tq_2Zul0w7!v9Zcq)(==SHJVnbJ#6A@|NF&bgZ z6o1tP2fQ2aQa!i)P8MDresT945B22-_I|$y|F&<=wgS1e-ewE@P)b;S-lRPw zq+dksg2uBea&x|K>JQpzs^$Aenf&1%{M&h+rq+KSuOC@)oR`Q)UA_LToR+l<7_O1= zfI+>)SQXHd-SI{&64_^f^FbwiLj28e=Nky?>6<&H#D?8=p!&j1T4uiCLrDtx=9aa+K+)*<~eW539(ZP>pXZNp7i=!yY zhddu_o`2hEd_ez=O3q++{MX}5%$U5r>-q0aQ+z?KE)`q`y zxWA71c5u?JME-bI?Yxp~bpWE|HJDEV%X~f8HhuhMUv89|vD>5&0R@V4p|qi0*5B?z zKX`~Rs-wk0j2*Tv5WOqb(7)z5dJf^ENI&CUk$_o^&%un?9)DEk$A*U1{7V%gJbe8A z9HjMfT$sx5E^1aAcyMv{t~?cq3B`3Cof`3*@<|Ifwa!jG-5L&wg90C$CH}=p6dStf zkf3h=>Y1UmL2F;)>QH{ZezNozpEcKm?C1$EekP&EQ*9Y(uowfK;nZhUHaa)l)2X+I z4)Soe%YabNOyj4znujbZwX`_AHFt8aV}C$_iU!rfjj}L-2W-A{`#>^&r)b0a)Y8Uk zUJql}YGG&mJd70z*4ldy9nMb!^`=JbN>1>lok-l?zaGZdlR=LbPj~wI#xu8D&ajTb z@aYG?f>4`quDQS_LjgZ>tPIAHaXb4~2i$&UT^rDkRjrMCszsyuO=p|t$HT%4Z#kSB zV^zHx+gn>3Ac{K5WBCY~)96mv%CufPp)7v>XvwPAK^0wCD#0dp95wyOw)ka7wH+!u zu+X}2Mg4Wefu+^O*eElRS8-^=lquIoy|BoQgBv?d$|u<4x>ycdv6A%w6imDkj0T+2bLMGEo#oo#xgk) zzs9I`(pUx=P+)+LeHPY1Rd>kKPvja{#$J(uoh*L?=$(R|4fOU)FB(*Mtf`f&cb6GR z;k{6(QlyfnJpSIoTm?&ZHmBB7Y$7RpDBRkS_i0W;mb6xKmFu%iD99bzb<*nxJ$lqu z(5~*|`RfK8&ea>utQtaZ9t-c0)4a{BPD5=~%N4Wv10^x(96x}k``hN_4o?g1nc#?E z<7X5)XY-p>I@9IcD9PJcRznO#tGT>~E``-!{&eyk`bAW%KK3j;1T~*!g8_~=bbP?> zX%YRa=Ii+>(4z;XFkXhOhk~~&3{mX^+Ip0nI3(;C6!;IvQVrzL-SyI+=Rebx?iQ@( zsD3qI*&+BPW5;~%!)V>KO4kFfUxxzSxx3?42WD)9%8v{;HpXu)SJ>0W_@Uqoi*15oUx_Vjf{@f%=xF(6sEg?4~rJqC*rE@X(EhA8r?+Am3n0Q!Ig1*qx?`jt~0`aIC+Um-^-G&iJ#1 z`c6VA8V~qY;4-V;48O7c`4x-8SVuZGL%;K1fL))h)3&2+S0Pb?l*%&+n7UhOwyLnD-6dUN-V57HY4@nn!^vCscnTK z&653WPII_^608;2R1a6D{YAC-oDmUGS5EQt@)QeB(z-Ic7Wf@%0rPEvDo?ULEztM| zY-9_B;v_rX8NK*oBYV*T_gq^y@kzF$?yY{C_OzL=Mo^s_{O1b%Z*BrwqT=qG`9gVY zivRiw@3*0^Jn+H{IuXyp;z(fx6rAB%GwZESMpZkd7lxp*lr3(Fiq(g5>Vnz|Q|Bm~ z*b1e3ZRIm8GO$NQW1(!k9@9xkWR?j9{NGrvlU^F66t6wyE{D(6HeCekv}3rtNmH0r zYv`%o+B#uyc>ilpyjkbg+N%1+Fh-Be&a9=|pHv_wkoFD&I??J8J%Zj$a zdcUooqUFOo0~8-^~>y9FhmCwPrS2*99k8|?M*Ly{l>kK8hHa--%eX1pSwTy zUh#XL`cq+dGf!+H%)Pm`=+7OrX7+SyOX?fh7q>pry6%dTwU0xDMy|h$?dYJLZP{-Z zpXjN(Sf`E{?ds2(4w})s*c7mi(~wQ;^PT(ietNOrkLDwtw$L*5r@>-6Ossjk*e&S# ztbuL`=zct9S!Gt(wo4Qr^_Mc~2y!YQ=WgLejpwZT70;v9#RAQGv5Qsfr1kLmbMtIu zo85eN{orgXo=uF{&8DNQqm;qdjArM&EBIG^Mz2|j4bi~vbVBrH_8H(90lgydVtv2+ zFFw|N{snq8QP38yr>VDxHR_BvF;4H}&xCK3ectqp|AM`0qty=j4LS7N(#Gjy&$yKu zT$yqZR$OB4ZqH;7I^(o@A(IvF0=$*U!n)u*{V(HoS|r zuI6hdJJLlvMiaQ7wdkt#C^2$Buj;Ph?!z4+%jlN{8nNyk(uw`-m#(I+D(?6zZ~X)3 z=%CSMR@POWg>4Th_5gbUJ>$RwyzVpJHm%ym1K%#cJV?5Kcn3XnQW*BvP}mcZG)A>4S)+{Gi`k~rQm%B`x0gf zS0_Y*Oy|)`c$*$#@%DD=(YrN;kL#vBKZb)a$_Yl5SX~SU2#&kZShxMiN*+L>PrNok z-06%Sq%*_hWdL@Dwl}f|a?%__SMcC!WS;@^h{T-(Z8rlN?{A~}`jpA%g0pz^MYI6W zlWubWLq&F!vZmuF9v~KwQnN`w>Wq$OfH|Jkw1Mid`)}n|?%2r72cd3k4hcvH%$W~p z9FHc4w+ARZ9KYq!`DlD548;Zxus=$(KtFXX)O8Gu6^T^c;lD1d%4BL4$J*)Se=+5& z#Dlu=G_MH8FT7o^prA$gdE*9Em;t~l1T&L5CxzaKI)}i-QUfX@>MtTg{3RVmuBp?) zsEDZ72uv)2pfc2vI(j4ONTNV2v!F7fz9llEz9k&$Th3}x=MtD$0zw<5{^mwk)Zavb zSY|>Mh)w|_L#BWzCtaYG zdD-fWvbl%Jl1}og92B5|I4-*jMQI=!rvap*y^Aib^?S3bjV@1dIERxx*gtM|p@SMQ z(gX+`P*y%w$aN+AWPre1T@ZXA2OJz@UF_}o?ONNY)xg0q7Hq!O-KZaA6{EW8(BIiI zY}Q|&96d=8WZ@j&jRJE)djyA=ux5|-i@DYehXCz!fP?-Gi)B?% z+iyheSo;qg;@v;`HpiuEa5%;d`*q;RK~~YQ>GoZxmkPe!M@HnS1zEdWbj$0kOHEDP zpLC5!1OUeyw|n-?jH@@~Sv+UvEu_`LjNvkc6FMkK`~TNo=;2a0WE3i(Q&B+jq9wC# z=y)EZ5YVlKbmUn;^gzL^yOpU6tGJ?W)Jwz2Nx|zi2m|MIY7>n| zTB~e7nmXGw68eu1CctO!o6zcI5Ox0hgCOXPy!sw}0OJpjTOU0yeI6M{NIc-1Lz-!k z@#DHoDucOhzBURnNG(Fd#Qu{dUS?zQ1|fkJWKhi{hd6)~DA&HB;*mS75mr2^;0P0H zou%k%Arrz~)6zv+8BH5d*;wQ;7UWNdN|!ScYw>kqx<*^9$y*dX|BCN}fQGS;frevU z^hy<>{eGsCdFE}-FIb+bPcO)_Xlz|(TO049e_%;d2SduL-E;PPyW?-zaA;ZXmNN2h z>BKH;E4rq&hNPjeBF1I3>t;$gv-wc}DRt5}zHpBX=qda_ML!Oop)$skI^)F?Q;pUzWBycbAF(X_EoX~ohxE|n zC@^SZpb9DwmFQs+<1T@qlakOSCF|O>N5$%0(Z?#*4ZYmJ$eUy{SU*b^Z>lJN2jh)e zrnB~_GlKPChLXlbvT`%hvN%>Ikn|qGN>EEAJDP_9$=@825YKw@w3--b?u&R9irWX< zBZ`ditU^E|W=%*Kf+Mug?aXPuL)w?rBo0vo${mq9k(COR15JwRqgbawNn%#lYbXiw zR1fJhF(FrNu1$iVm&4K7XjUpz=`(nPNFNhoSa+U8bd@HtP6Eq-=7jD$u=WBPh}s}O zN7hY1s|p8PSvKp1w8`umJQpPB+BwD-%Ev6XFh1zjdoawQ#f)teJBv+phALvKPyYdb CBU*U? diff --git a/apps/website/package.json b/apps/website/package.json index 5de2235..420268f 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -9,7 +9,7 @@ "astro": "astro" }, "dependencies": { - "@astrojs/cloudflare": "^11.0.1", + "@astrojs/cloudflare": "^11.0.4", "@astrojs/preact": "^3.5.1", "@astrojs/prefetch": "^0.2.1", "@astrojs/sitemap": "^3.1.6", @@ -25,6 +25,7 @@ "tailwindcss": "^3.3.1" }, "devDependencies": { + "@cloudflare/workers-types": "^4.20240806.0", "autoprefixer": "^10.4.14", "cssnano": "^6.0.0", "postcss": "^8.4.21", diff --git a/apps/website/src/env.d.ts b/apps/website/src/env.d.ts index 6577947..e7b7e8b 100644 --- a/apps/website/src/env.d.ts +++ b/apps/website/src/env.d.ts @@ -1,7 +1,6 @@ /// -type D1Database = import("@cloudflare/workers-types").D1Database; -type ENV = { +type Env = { GITHUB_APP_NAME: string; DISCORD_CLIENT_ID: string; DISCORD_CLIENT_SECRET: string; @@ -10,7 +9,7 @@ type ENV = { DB: D1Database; }; -export interface Guild { +/*export interface Guild { id: string; name: string; icon: string; @@ -21,9 +20,9 @@ export interface Guild { export interface MutualeGuild { mutual: boolean; guild: Guild; -} +}*/ -type Runtime = import("@astrojs/cloudflare").Runtime; +type Runtime = import("@astrojs/cloudflare").Runtime; // https://github.com/withastro/astro/issues/7394#issuecomment-1975657601 declare namespace App { diff --git a/apps/website/tsconfig.json b/apps/website/tsconfig.json index f35cf4f..15b2c07 100644 --- a/apps/website/tsconfig.json +++ b/apps/website/tsconfig.json @@ -1,12 +1,11 @@ { - "extends": "astro/tsconfigs/strictest", + "extends": "astro/tsconfigs/strict", "compilerOptions": { + "types": ["@cloudflare/workers-types"], "strictNullChecks": true, - "allowJs": true, "baseUrl": ".", "paths": { "~/*": ["src/*"] - }, - "types": ["./src/env.d.ts"] + } } }
Add to Discord + + + Dashboard diff --git a/apps/website/tailwind.config.cjs b/apps/website/tailwind.config.cjs index af6fbd3..7f98fbf 100644 --- a/apps/website/tailwind.config.cjs +++ b/apps/website/tailwind.config.cjs @@ -1,15 +1,17 @@ /** @type {import('tailwindcss').Config} */ module.exports = { - content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}"], - theme: { - extend: { - colors: { - dark: "#111111", - }, - fontFamily: { - body: ["Montserrat", "sans-serif"], - }, - }, - }, - plugins: [], + content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}"], + theme: { + extend: { + colors: { + dark: "#111111", + blue: "#5865F2", + gold: "#FFA500", + }, + fontFamily: { + body: ["Montserrat", "sans-serif"], + }, + }, + }, + plugins: [], }; From d018fbb1d64dfbd136838f34f87ac4ea93fc809d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Fri, 2 Aug 2024 23:43:42 +0200 Subject: [PATCH 04/17] feat: fetch guilds --- apps/website/auth.config.ts | 56 +++++++++++++------- apps/website/src/env.d.ts | 8 +++ apps/website/src/pages/dashboard/index.astro | 9 +++- 3 files changed, 53 insertions(+), 20 deletions(-) diff --git a/apps/website/auth.config.ts b/apps/website/auth.config.ts index 140c417..8223e6f 100644 --- a/apps/website/auth.config.ts +++ b/apps/website/auth.config.ts @@ -2,22 +2,42 @@ import Discord from "@auth/core/providers/discord"; import { defineConfig } from "auth-astro"; export default defineConfig({ - providers: [ - Discord({ - clientId: import.meta.env.DISCORD_CLIENT_ID, - clientSecret: import.meta.env.DISCORD_CLIENT_SECRET, - }), - ], - callbacks: { - session({ session, token }) { - if (session.user && token?.sub) { - session.user.id = token.sub; - } - return session; - }, - }, - pages: { - signIn: "/auth/login", - signOut: "/auth/logout", - }, + providers: [ + Discord({ + clientId: import.meta.env.DISCORD_CLIENT_ID, + clientSecret: import.meta.env.DISCORD_CLIENT_SECRET, + authorization: + "https://discord.com/api/oauth2/authorize?scope=guilds+identify+email", + }), + ], + callbacks: { + async jwt({ token, account, profile }) { + if (account && profile) { + token.accessToken = account.access_token; + token.id = profile.id; + } + + return token; + }, + async session({ session, token }) { + if (session.user) { + session.user.id = token.id as string; + + const guilds = await fetch("https://discord.com/api/users/@me/guilds", { + headers: { + Authorization: `Bearer ${token.accessToken as string}`, + "Cache-Control": "max-age=300", + }, + }); + + session.user.guilds = await guilds.json(); + } + + return session; + }, + }, + pages: { + signIn: "/auth/login", + signOut: "/auth/logout", + }, }); diff --git a/apps/website/src/env.d.ts b/apps/website/src/env.d.ts index f964fe0..2fe3396 100644 --- a/apps/website/src/env.d.ts +++ b/apps/website/src/env.d.ts @@ -1 +1,9 @@ /// + +import type { User as AuthCoreUser } from "@auth/core/types"; + +export type User = AuthCoreUser & { + guilds: { + name: string; + }[]; +}; diff --git a/apps/website/src/pages/dashboard/index.astro b/apps/website/src/pages/dashboard/index.astro index cbb93ab..a80f808 100644 --- a/apps/website/src/pages/dashboard/index.astro +++ b/apps/website/src/pages/dashboard/index.astro @@ -1,10 +1,15 @@ --- +import type { User } from "~/env"; import { getSession } from "auth-astro/server"; const session = await getSession(Astro.request); -if (!session) { +if (!session || !session.user) { return Astro.redirect("/auth/login"); } + +const user = session.user as User; +console.log(user.guilds[0]); --- -

Welcome {session.user?.name}

+

Welcome {user.name}

+{user.guilds.map((g) => g.id).join("\n\n")} From b7dd3bf3efd6d8ed6e50b2cd85b933bbc5dcdf28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Sat, 3 Aug 2024 00:03:27 +0200 Subject: [PATCH 05/17] feat: show guilds in dashboard --- apps/website/src/components/Container.astro | 7 +++ apps/website/src/env.d.ts | 2 + apps/website/src/pages/dashboard/index.astro | 45 ++++++++++++++++++-- apps/website/tailwind.config.cjs | 1 + 4 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 apps/website/src/components/Container.astro diff --git a/apps/website/src/components/Container.astro b/apps/website/src/components/Container.astro new file mode 100644 index 0000000..21ead53 --- /dev/null +++ b/apps/website/src/components/Container.astro @@ -0,0 +1,7 @@ +--- +const { class: className } = Astro.props; +--- + +
+ +
diff --git a/apps/website/src/env.d.ts b/apps/website/src/env.d.ts index 2fe3396..320a19a 100644 --- a/apps/website/src/env.d.ts +++ b/apps/website/src/env.d.ts @@ -4,6 +4,8 @@ import type { User as AuthCoreUser } from "@auth/core/types"; export type User = AuthCoreUser & { guilds: { + id: string; name: string; + icon: string; }[]; }; diff --git a/apps/website/src/pages/dashboard/index.astro b/apps/website/src/pages/dashboard/index.astro index a80f808..252269a 100644 --- a/apps/website/src/pages/dashboard/index.astro +++ b/apps/website/src/pages/dashboard/index.astro @@ -1,6 +1,9 @@ --- import type { User } from "~/env"; import { getSession } from "auth-astro/server"; +import Layout from "~/layouts/Layout.astro"; +import Container from "~/components/Container.astro"; +import { Image } from "astro:assets"; const session = await getSession(Astro.request); if (!session || !session.user) { @@ -8,8 +11,44 @@ if (!session || !session.user) { } const user = session.user as User; -console.log(user.guilds[0]); --- -

Welcome {user.name}

-{user.guilds.map((g) => g.id).join("\n\n")} + +
+ icon + +

+ @{user.name} +

+
+ + +
+ { + user.guilds.map((guild) => ( +
+
+ icon + +

{guild.name}

+
+
+ )) + } +
+
+
diff --git a/apps/website/tailwind.config.cjs b/apps/website/tailwind.config.cjs index 7f98fbf..160ad84 100644 --- a/apps/website/tailwind.config.cjs +++ b/apps/website/tailwind.config.cjs @@ -5,6 +5,7 @@ module.exports = { extend: { colors: { dark: "#111111", + "dark-100": "#1A1A1A", blue: "#5865F2", gold: "#FFA500", }, From 92d0c39db25e39f717fc2737e7e64130aca11d69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Sat, 3 Aug 2024 10:46:56 +0200 Subject: [PATCH 06/17] feat: prepare for dynamic rendering --- apps/website/auth.config.ts | 23 +++++++---- apps/website/src/env.d.ts | 15 ++++--- apps/website/src/lib/guilds.ts | 43 ++++++++++++++++++++ apps/website/src/pages/api/user/guilds.ts | 23 +++++++++++ apps/website/src/pages/api/user/index.ts | 21 ++++++++++ apps/website/src/pages/dashboard/index.astro | 10 ++++- 6 files changed, 121 insertions(+), 14 deletions(-) create mode 100644 apps/website/src/lib/guilds.ts create mode 100644 apps/website/src/pages/api/user/guilds.ts create mode 100644 apps/website/src/pages/api/user/index.ts diff --git a/apps/website/auth.config.ts b/apps/website/auth.config.ts index 8223e6f..dab32e6 100644 --- a/apps/website/auth.config.ts +++ b/apps/website/auth.config.ts @@ -1,5 +1,6 @@ import Discord from "@auth/core/providers/discord"; import { defineConfig } from "auth-astro"; +import type { User } from "~/env"; export default defineConfig({ providers: [ @@ -15,6 +16,9 @@ export default defineConfig({ if (account && profile) { token.accessToken = account.access_token; token.id = profile.id; + + token.name = profile.username as string; + token.global_name = profile.global_name; } return token; @@ -22,15 +26,20 @@ export default defineConfig({ async session({ session, token }) { if (session.user) { session.user.id = token.id as string; + (session.user as unknown as User).global_name = + token.global_name as string; - const guilds = await fetch("https://discord.com/api/users/@me/guilds", { - headers: { - Authorization: `Bearer ${token.accessToken as string}`, - "Cache-Control": "max-age=300", - }, - }); + const guilds = await fetch( + "https://discord.com/api/v10/users/@me/guilds", + { + headers: { + Authorization: `Bearer ${token.accessToken as string}`, + "Cache-Control": "max-age=300", + }, + } + ); - session.user.guilds = await guilds.json(); + (session.user as unknown as User).guilds = await guilds.json(); } return session; diff --git a/apps/website/src/env.d.ts b/apps/website/src/env.d.ts index 320a19a..47ddad0 100644 --- a/apps/website/src/env.d.ts +++ b/apps/website/src/env.d.ts @@ -3,9 +3,14 @@ import type { User as AuthCoreUser } from "@auth/core/types"; export type User = AuthCoreUser & { - guilds: { - id: string; - name: string; - icon: string; - }[]; + global_name: string; + guilds: Guild[]; }; + +export interface Guild { + id: string; + name: string; + icon: string; + permissions: string; + owner: boolean; +} diff --git a/apps/website/src/lib/guilds.ts b/apps/website/src/lib/guilds.ts new file mode 100644 index 0000000..6f4220a --- /dev/null +++ b/apps/website/src/lib/guilds.ts @@ -0,0 +1,43 @@ +import type { Guild } from "~/env"; + +// Checks if user has AMDINISTRATOR permissions in the guild +export async function filterUserGuilds(guilds: Guild[]): Promise< + { + mutual: boolean; + guild: Guild; + }[] +> { + const filtered = guilds + .filter((g) => (BigInt(g.permissions) & 0x8n) == 0x8n) + .sort((a, b) => Number(b.owner) - Number(a.owner)); + + const result: { + mutual: boolean; + guild: Guild; + }[] = []; + + for (const guild of filtered) { + const mutual = await isMutualGuild(guild); + + result.push({ mutual, guild }); + } + + result.sort((a, b) => Number(b.mutual) - Number(a.mutual)); + + return result; +} + +export async function isMutualGuild(guild: Guild): Promise { + const res = await fetch( + `https://discord.com/api/v10/guilds/${guild.id}/members/${ + import.meta.env.DISCORD_CLIENT_ID + }`, + { + headers: { + Authorization: `Bot ${import.meta.env.DISCORD_BOT_TOKEN}`, + }, + } + ); + + return res.ok; +} diff --git a/apps/website/src/pages/api/user/guilds.ts b/apps/website/src/pages/api/user/guilds.ts new file mode 100644 index 0000000..9f28f00 --- /dev/null +++ b/apps/website/src/pages/api/user/guilds.ts @@ -0,0 +1,23 @@ +import type { APIRoute } from "astro"; +import { getSession } from "auth-astro/server"; +import type { User } from "~/env"; + +export const GET: APIRoute = async ({ request }) => { + const session = await getSession(request); + if (!session || !session.user) { + return new Response(null, { + status: 401, + }); + } + + const user = session.user as User; + + return Response.json( + user.guilds.map((g) => ({ + id: g.id, + name: g.name, + owner: g.owner, + permissions: g.permissions, + })) + ); +}; diff --git a/apps/website/src/pages/api/user/index.ts b/apps/website/src/pages/api/user/index.ts new file mode 100644 index 0000000..6736781 --- /dev/null +++ b/apps/website/src/pages/api/user/index.ts @@ -0,0 +1,21 @@ +import type { APIRoute } from "astro"; +import { getSession } from "auth-astro/server"; +import type { User } from "~/env"; + +export const GET: APIRoute = async ({ request }) => { + const session = await getSession(request); + if (!session || !session.user) { + return new Response(null, { + status: 401, + }); + } + + const user = session.user as User; + + return Response.json({ + id: user.id, + username: user.name, + global_name: user.global_name, + avatar_url: user.image, + }); +}; diff --git a/apps/website/src/pages/dashboard/index.astro b/apps/website/src/pages/dashboard/index.astro index 252269a..dca9c9f 100644 --- a/apps/website/src/pages/dashboard/index.astro +++ b/apps/website/src/pages/dashboard/index.astro @@ -1,5 +1,6 @@ --- import type { User } from "~/env"; +import { filterUserGuilds } from "~/lib/guilds"; import { getSession } from "auth-astro/server"; import Layout from "~/layouts/Layout.astro"; import Container from "~/components/Container.astro"; @@ -11,6 +12,7 @@ if (!session || !session.user) { } const user = session.user as User; +const guilds = await filterUserGuilds(user.guilds); --- @@ -33,8 +35,12 @@ const user = session.user as User; class="flex flex-wrap items-center justify-center gap-12 pb-4 text-white" > { - user.guilds.map((guild) => ( -
+ guilds.map(({ guild, mutual }) => ( +
Date: Sat, 3 Aug 2024 13:27:30 +0200 Subject: [PATCH 07/17] feat: break name --- apps/website/src/pages/dashboard/index.astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/website/src/pages/dashboard/index.astro b/apps/website/src/pages/dashboard/index.astro index dca9c9f..9a3baed 100644 --- a/apps/website/src/pages/dashboard/index.astro +++ b/apps/website/src/pages/dashboard/index.astro @@ -25,7 +25,7 @@ const guilds = await filterUserGuilds(user.guilds); height={64} /> -

+

@{user.name}

From 0259cb1e745359aef73808c1386ee8cc475f5ce5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Sat, 3 Aug 2024 14:42:34 +0200 Subject: [PATCH 08/17] feat: render dashboard fully on client --- apps/website/astro.config.ts | 24 +++++---- apps/website/auth.config.ts | 13 +---- apps/website/bun.lockb | Bin 354779 -> 362986 bytes apps/website/package.json | 2 + .../src/components/dashboard/UserInfo.astro | 23 ++++++++ apps/website/src/components/preact/Guild.tsx | 28 ++++++++++ .../src/components/preact/GuildSelector.tsx | 31 +++++++++++ .../src/components/preact/LoadingGuild.tsx | 9 ++++ apps/website/src/env.d.ts | 7 ++- apps/website/src/lib/guilds.ts | 30 +++++++---- apps/website/src/lib/user.ts | 9 ++++ apps/website/src/pages/api/user/guilds.ts | 20 +++---- apps/website/src/pages/api/user/index.ts | 21 -------- apps/website/src/pages/dashboard/index.astro | 50 ++---------------- 14 files changed, 153 insertions(+), 114 deletions(-) create mode 100644 apps/website/src/components/dashboard/UserInfo.astro create mode 100644 apps/website/src/components/preact/Guild.tsx create mode 100644 apps/website/src/components/preact/GuildSelector.tsx create mode 100644 apps/website/src/components/preact/LoadingGuild.tsx create mode 100644 apps/website/src/lib/user.ts delete mode 100644 apps/website/src/pages/api/user/index.ts diff --git a/apps/website/astro.config.ts b/apps/website/astro.config.ts index 709c4b4..80fe7d4 100644 --- a/apps/website/astro.config.ts +++ b/apps/website/astro.config.ts @@ -1,25 +1,27 @@ import path from "path"; import { fileURLToPath } from "url"; import { defineConfig } from "astro/config"; +import preact from "@astrojs/preact"; import sitemap from "@astrojs/sitemap"; import tailwind from "@astrojs/tailwind"; import cloudflare from "@astrojs/cloudflare"; import auth from "auth-astro"; + import { CONFIG } from "./src/config"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); // https://astro.build/config export default defineConfig({ - site: CONFIG.origin, - integrations: [sitemap(), tailwind(), auth()], - output: "server", - adapter: cloudflare(), - vite: { - resolve: { - alias: { - "~": path.resolve(__dirname, "./src"), - }, - }, - }, + site: CONFIG.origin, + integrations: [sitemap(), tailwind(), auth(), preact()], + output: "server", + adapter: cloudflare(), + vite: { + resolve: { + alias: { + "~": path.resolve(__dirname, "./src"), + }, + }, + }, }); diff --git a/apps/website/auth.config.ts b/apps/website/auth.config.ts index dab32e6..389e7b6 100644 --- a/apps/website/auth.config.ts +++ b/apps/website/auth.config.ts @@ -29,17 +29,8 @@ export default defineConfig({ (session.user as unknown as User).global_name = token.global_name as string; - const guilds = await fetch( - "https://discord.com/api/v10/users/@me/guilds", - { - headers: { - Authorization: `Bearer ${token.accessToken as string}`, - "Cache-Control": "max-age=300", - }, - } - ); - - (session.user as unknown as User).guilds = await guilds.json(); + (session.user as unknown as User).discordAccessToken = + token.accessToken as string; } return session; diff --git a/apps/website/bun.lockb b/apps/website/bun.lockb index 6d5ea1dc806b7a72f78d3e42523dad70dbee22f4..26b57df09769adbfdffb398ffcf7a5a02a4edd51 100755 GIT binary patch delta 69187 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 delta 64324 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 diff --git a/apps/website/package.json b/apps/website/package.json index 6bd6730..2d0f437 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@astrojs/cloudflare": "^11.0.1", + "@astrojs/preact": "^3.5.1", "@astrojs/prefetch": "^0.2.1", "@astrojs/sitemap": "^3.1.6", "@astrojs/tailwind": "^5.1.0", @@ -19,6 +20,7 @@ "astro-google-fonts-optimizer": "^0.2.2", "astro-icon": "^0.8.0", "auth-astro": "^4.1.2", + "preact": "^10.23.1", "tailwindcss": "^3.3.1" }, "devDependencies": { diff --git a/apps/website/src/components/dashboard/UserInfo.astro b/apps/website/src/components/dashboard/UserInfo.astro new file mode 100644 index 0000000..273a362 --- /dev/null +++ b/apps/website/src/components/dashboard/UserInfo.astro @@ -0,0 +1,23 @@ +--- +import { Image } from "astro:assets"; +import { getUser } from "~/lib/user"; + +const user = await getUser(Astro.request); +if (!user) { + return Astro.redirect("/auth/login"); +} +--- + +
+ icon + +

+ @{user.name} +

+
diff --git a/apps/website/src/components/preact/Guild.tsx b/apps/website/src/components/preact/Guild.tsx new file mode 100644 index 0000000..08ef8d6 --- /dev/null +++ b/apps/website/src/components/preact/Guild.tsx @@ -0,0 +1,28 @@ +import type { Guild } from "~/env"; + +interface Props { + guild: Guild; + mutual: boolean; +} + +export default function Guild({ guild, mutual }: Props) { + return ( +
+
+ icon + +

{guild.name}

+
+
+ ); +} diff --git a/apps/website/src/components/preact/GuildSelector.tsx b/apps/website/src/components/preact/GuildSelector.tsx new file mode 100644 index 0000000..f9d89ee --- /dev/null +++ b/apps/website/src/components/preact/GuildSelector.tsx @@ -0,0 +1,31 @@ +import { Component } from "preact"; +import Guild from "./Guild"; +import LoadingGuild from "./LoadingGuild"; +import type { MutualeGuild } from "~/env"; + +interface State { + guilds: MutualeGuild[] | null; +} + +export default class GuildSelector extends Component<{}, State> { + constructor(props) { + super(props); + + this.state = { + guilds: null, + }; + } + + async componentDidMount() { + const response = await fetch("/api/user/guilds"); + const data = await response.json(); + this.setState({ guilds: data }); + } + + render() { + const { guilds } = this.state; + if (!guilds) return [...Array(15)].map(() => ); + + return guilds.map((g) => ); + } +} diff --git a/apps/website/src/components/preact/LoadingGuild.tsx b/apps/website/src/components/preact/LoadingGuild.tsx new file mode 100644 index 0000000..59e2a06 --- /dev/null +++ b/apps/website/src/components/preact/LoadingGuild.tsx @@ -0,0 +1,9 @@ +export default function LoadingGuild() { + return ( +
+
+
+
+
+ ); +} diff --git a/apps/website/src/env.d.ts b/apps/website/src/env.d.ts index 47ddad0..1bcd6b7 100644 --- a/apps/website/src/env.d.ts +++ b/apps/website/src/env.d.ts @@ -4,7 +4,7 @@ import type { User as AuthCoreUser } from "@auth/core/types"; export type User = AuthCoreUser & { global_name: string; - guilds: Guild[]; + discordAccessToken: string; }; export interface Guild { @@ -14,3 +14,8 @@ export interface Guild { permissions: string; owner: boolean; } + +export interface MutualeGuild { + mutual: boolean; + guild: Guild; +} diff --git a/apps/website/src/lib/guilds.ts b/apps/website/src/lib/guilds.ts index 6f4220a..5776160 100644 --- a/apps/website/src/lib/guilds.ts +++ b/apps/website/src/lib/guilds.ts @@ -1,20 +1,28 @@ -import type { Guild } from "~/env"; +import type { Guild, MutualeGuild, User } from "~/env"; + +export async function getUserGuilds(user: User): Promise { + const discordApiGuildsResponse = await fetch( + "https://discord.com/api/v10/users/@me/guilds", + { + headers: { + Authorization: `Bearer ${user.discordAccessToken as string}`, + "Cache-Control": "max-age=300", + }, + } + ); + + return (await discordApiGuildsResponse.json()) as Guild[]; +} // Checks if user has AMDINISTRATOR permissions in the guild -export async function filterUserGuilds(guilds: Guild[]): Promise< - { - mutual: boolean; - guild: Guild; - }[] -> { +export async function filterUserGuilds( + guilds: Guild[] +): Promise { const filtered = guilds .filter((g) => (BigInt(g.permissions) & 0x8n) == 0x8n) .sort((a, b) => Number(b.owner) - Number(a.owner)); - const result: { - mutual: boolean; - guild: Guild; - }[] = []; + const result: MutualeGuild[] = []; for (const guild of filtered) { const mutual = await isMutualGuild(guild); diff --git a/apps/website/src/lib/user.ts b/apps/website/src/lib/user.ts new file mode 100644 index 0000000..eae9165 --- /dev/null +++ b/apps/website/src/lib/user.ts @@ -0,0 +1,9 @@ +import { getSession } from "auth-astro/server"; +import type { User } from "~/env"; + +export async function getUser(req: Request): Promise { + const session = await getSession(req); + if (!session || !session.user) return null; + + return session.user as User; +} diff --git a/apps/website/src/pages/api/user/guilds.ts b/apps/website/src/pages/api/user/guilds.ts index 9f28f00..13a3a47 100644 --- a/apps/website/src/pages/api/user/guilds.ts +++ b/apps/website/src/pages/api/user/guilds.ts @@ -1,23 +1,17 @@ import type { APIRoute } from "astro"; -import { getSession } from "auth-astro/server"; -import type { User } from "~/env"; +import { filterUserGuilds, getUserGuilds } from "~/lib/guilds"; +import { getUser } from "~/lib/user"; export const GET: APIRoute = async ({ request }) => { - const session = await getSession(request); - if (!session || !session.user) { + const user = await getUser(request); + if (!user) { return new Response(null, { status: 401, }); } - const user = session.user as User; + const guilds = await getUserGuilds(user); + const res = await filterUserGuilds(guilds); - return Response.json( - user.guilds.map((g) => ({ - id: g.id, - name: g.name, - owner: g.owner, - permissions: g.permissions, - })) - ); + return Response.json(res); }; diff --git a/apps/website/src/pages/api/user/index.ts b/apps/website/src/pages/api/user/index.ts deleted file mode 100644 index 6736781..0000000 --- a/apps/website/src/pages/api/user/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { APIRoute } from "astro"; -import { getSession } from "auth-astro/server"; -import type { User } from "~/env"; - -export const GET: APIRoute = async ({ request }) => { - const session = await getSession(request); - if (!session || !session.user) { - return new Response(null, { - status: 401, - }); - } - - const user = session.user as User; - - return Response.json({ - id: user.id, - username: user.name, - global_name: user.global_name, - avatar_url: user.image, - }); -}; diff --git a/apps/website/src/pages/dashboard/index.astro b/apps/website/src/pages/dashboard/index.astro index 9a3baed..3165a2f 100644 --- a/apps/website/src/pages/dashboard/index.astro +++ b/apps/website/src/pages/dashboard/index.astro @@ -1,60 +1,18 @@ --- -import type { User } from "~/env"; -import { filterUserGuilds } from "~/lib/guilds"; -import { getSession } from "auth-astro/server"; import Layout from "~/layouts/Layout.astro"; import Container from "~/components/Container.astro"; -import { Image } from "astro:assets"; - -const session = await getSession(Astro.request); -if (!session || !session.user) { - return Astro.redirect("/auth/login"); -} - -const user = session.user as User; -const guilds = await filterUserGuilds(user.guilds); +import GuildSelector from "~/components/preact/GuildSelector"; +import UserInfo from "~/components/dashboard/UserInfo.astro"; --- -
- icon - -

- @{user.name} -

-
+
- { - guilds.map(({ guild, mutual }) => ( -
-
- icon - -

{guild.name}

-
-
- )) - } +
From 8ca6a4f5a379ac75ad410431ee17af04afefc5d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Sat, 3 Aug 2024 15:01:57 +0200 Subject: [PATCH 09/17] feat: render each guild --- .../src/components/dashboard/UserInfo.astro | 18 ++++++++++++--- apps/website/src/components/preact/Guild.tsx | 12 +++++++--- .../src/components/preact/LoadingGuild.tsx | 4 ++-- apps/website/src/lib/guilds.ts | 16 +++++++++++-- apps/website/src/lib/user.ts | 7 +++++- .../src/pages/dashboard/guilds/[id].astro | 23 +++++++++++++++++++ 6 files changed, 69 insertions(+), 11 deletions(-) create mode 100644 apps/website/src/pages/dashboard/guilds/[id].astro diff --git a/apps/website/src/components/dashboard/UserInfo.astro b/apps/website/src/components/dashboard/UserInfo.astro index 273a362..7261fc1 100644 --- a/apps/website/src/components/dashboard/UserInfo.astro +++ b/apps/website/src/components/dashboard/UserInfo.astro @@ -1,10 +1,22 @@ --- import { Image } from "astro:assets"; +import type { User } from "~/env"; import { getUser } from "~/lib/user"; -const user = await getUser(Astro.request); -if (!user) { - return Astro.redirect("/auth/login"); +interface Props { + user?: User; +} + +let user: User; +if (!Astro.props.user) { + const u = await getUser(Astro.request); + if (!u) { + return Astro.redirect("/auth/login"); + } + + user = u; +} else { + user = Astro.props.user; } --- diff --git a/apps/website/src/components/preact/Guild.tsx b/apps/website/src/components/preact/Guild.tsx index 08ef8d6..6195fc8 100644 --- a/apps/website/src/components/preact/Guild.tsx +++ b/apps/website/src/components/preact/Guild.tsx @@ -7,10 +7,16 @@ interface Props { export default function Guild({ guild, mutual }: Props) { return ( -
{guild.name}
-
+
); } diff --git a/apps/website/src/components/preact/LoadingGuild.tsx b/apps/website/src/components/preact/LoadingGuild.tsx index 59e2a06..e575bcf 100644 --- a/apps/website/src/components/preact/LoadingGuild.tsx +++ b/apps/website/src/components/preact/LoadingGuild.tsx @@ -1,9 +1,9 @@ export default function LoadingGuild() { return ( -
+
-
+