From 06c027e14e450ee0c4d4d2ebf625cc2f49edfad6 Mon Sep 17 00:00:00 2001 From: Yusuf Bera Ertan Date: Sat, 24 Aug 2024 01:55:27 +0300 Subject: [PATCH] feat: guestbook needs auth now --- bun.lockb | Bin 142688 -> 144872 bytes package.json | 1 + src/lib/guestbookAuth.ts | 45 ++++++ src/routes/guestbook/+page.server.ts | 98 ++++++++++--- src/routes/guestbook/+page.svelte | 197 +++++++++++++++------------ 5 files changed, 230 insertions(+), 111 deletions(-) create mode 100644 src/lib/guestbookAuth.ts diff --git a/bun.lockb b/bun.lockb index 44f564e6c7a5ffdb56b17d6a4d2ee321ba209e40..57a9f2a0bad88cf9e9baed74cd9e598bb770e511 100644 GIT binary patch delta 25664 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�nE17s+42Km-sLdy8#A-x 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 delta 24429 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%0AMqIdpVZLoGShEU~KcN`>x)M=~uz1_%uG; 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 lny=5?sU-xgzyAa6{V{>t< URL, cookies: Cookies) => { + const state = generateState() + const url = authCb(state) + cookies.set("state", state, { + secure: !dev, + path: "/guestbook/", + httpOnly: true, + maxAge: 60 * 10, + }) + return url +} + +export const extractCode = (url: URL, cookies: Cookies) => { + const code = url.searchParams.get("code"); + const state = url.searchParams.get("state"); + + const storedState = cookies.get("state"); + + if (code === null || state === null) { + return null + } + if (state !== storedState) { + throw new Error("Invalid OAuth request"); + } + + return code +} + +export default { + callbackUrl, + discord, github, + createAuthUrl, + extractCode, +} \ No newline at end of file diff --git a/src/routes/guestbook/+page.server.ts b/src/routes/guestbook/+page.server.ts index c7e48f7..b5d3b7a 100644 --- a/src/routes/guestbook/+page.server.ts +++ b/src/routes/guestbook/+page.server.ts @@ -1,43 +1,97 @@ import { GUESTBOOK_BASE_URL } from '$env/static/private' -import { PUBLIC_BASE_URL } from '$env/static/public' -import { redirect } from '@sveltejs/kit' +import { redirect, type Cookies } from '@sveltejs/kit' +import auth from '$lib/guestbookAuth' interface Entry { - author: String, - content: String, + author: string, + content: string, timestamp: number, } -export const actions = { - default: async ({ request, cookies }) => { - const body = await request.text() - let respRaw: Response - try { - respRaw = await fetch(`${GUESTBOOK_BASE_URL}`, { method: 'POST', body }) - } catch (err: any) { - cookies.set("sendError", err.toString(), { path: "/guestbook" }) - redirect(303, `${PUBLIC_BASE_URL}/guestbook/`) +const scopeCookies = (cookies: Cookies) => { + return { + get: (key: string) => { + return cookies.get(key) + }, + set: (key: string, value: string, props: import('cookie').CookieSerializeOptions = {}) => { + cookies.set(key, value, { ...props, path: "/guestbook/" }) + }, + delete: (key: string, props: import('cookie').CookieSerializeOptions = {}) => { + cookies.delete(key, { ...props, path: "/guestbook/" }) } - if (respRaw.status === 429) { - cookies.set("sendRatelimited", "true", { path: "/guestbook" }) - } - redirect(303, `${PUBLIC_BASE_URL}/guestbook/`) } } +const postAction = (client: any, scopes: string[]) => { + return async ({ request, cookies }: { request: Request, cookies: Cookies }) => { + const form = await request.formData() + const author = form.get("author")?.toString().replace(/([^_a-z0-9]+)/gi, '') + const content = form.get("content")?.toString() + const scopedCookies = scopeCookies(cookies) + if (author === undefined || content === undefined) { + scopedCookies.set("sendError", "one of author or content fields are missing") + redirect(303, auth.callbackUrl) + } + if (['dusk', 'yusdacra'].includes(author.trim())) { + scopedCookies.set("sendError", "author cannot be dusk or yusdacra (those are my names choose something else smh)") + redirect(303, auth.callbackUrl) + } + // save form content in a cookie + const params = new URLSearchParams({ author, content }) + scopedCookies.set("postData", params.toString()) + // get auth url to redirect user to + const authUrl = auth.createAuthUrl((state) => client.createAuthorizationURL(state, scopes), cookies) + redirect(303, authUrl) + } +} + +export const actions = { + post_discord: postAction(auth.discord, ["identify"]), + post_github: postAction(auth.github, []), +} + export async function load({ url, fetch, cookies }) { + const scopedCookies = scopeCookies(cookies) var data = { entries: [] as [number, Entry][], page: parseInt(url.searchParams.get('page') || "1"), hasNext: false, - sendError: cookies.get("sendError") || "", + sendError: scopedCookies.get("sendError") || "", getError: "", - sendRatelimited: cookies.get('sendRatelimited') || "", + sendRatelimited: scopedCookies.get('sendRatelimited') || "", getRatelimited: false, } + const rawPostData = scopedCookies.get("postData") || null + if (rawPostData !== null) { + // delete the postData cookie after we got it cause we dont need it anymore + scopedCookies.delete("postData") + // check if we are landing from an auth from a post action + let code: string | null = null + // try to get the code, fails if invalid oauth request + try { + code = auth.extractCode(url, cookies) + } catch (err: any) { + data.sendError = err.toString() + } + // if we do have a code, then actually make the put request to guestbook server + if (code !== null) { + let respRaw: Response + try { + const postData = new URLSearchParams(rawPostData) + respRaw = await fetch(`${GUESTBOOK_BASE_URL}`, { method: 'POST', body: postData }) + } catch (err: any) { + scopedCookies.set("sendError", `${err.toString()} (is guestbook server running?)`) + redirect(303, auth.callbackUrl) + } + if (respRaw.status === 429) { + scopedCookies.set("sendRatelimited", "true") + } + redirect(303, auth.callbackUrl) + } + } // delete the cookies after we get em since we dont really need these more than once - cookies.delete("sendError", { path: "/guestbook" }) - cookies.delete("sendRatelimited", { path: "/guestbook" }) + scopedCookies.delete("sendError") + scopedCookies.delete("sendRatelimited") // handle cases where the page query might be a string so we just return back page 1 instead data.page = isNaN(data.page) ? 1 : data.page data.page = Math.max(data.page, 1) @@ -45,7 +99,7 @@ export async function load({ url, fetch, cookies }) { try { respRaw = await fetch(GUESTBOOK_BASE_URL + "/" + data.page) } catch (err: any) { - data.getError = err.toString() + data.getError = `${err.toString()} (is guestbook server running?)` return data } data.getRatelimited = respRaw.status === 429 diff --git a/src/routes/guestbook/+page.svelte b/src/routes/guestbook/+page.svelte index a170056..50b96be 100644 --- a/src/routes/guestbook/+page.svelte +++ b/src/routes/guestbook/+page.svelte @@ -6,108 +6,127 @@ const hasNextPage = data.hasNext; -
-
- -
-

hia, here is the guestbook if you wanna post anything :)

-

just be a good human bean pretty please

-
-
-
-

###

-

...

-
-