diff --git a/src/hooks.server.js b/src/hooks.server.js
index 8bd92ed..998b639 100644
--- a/src/hooks.server.js
+++ b/src/hooks.server.js
@@ -8,11 +8,16 @@ export async function handle({ event, resolve }) {
}
const cookie = event.cookies.get(COOKIE_NAME);
- if (!cookie) return await resolve(event);
+ if (!cookie) {
+ if (event.routeId.startsWith("(app)")) return new Response("", { status: 302, headers: { Location: "/landing" } });
+ return await resolve(event);
+ }
- let user = await getUserFromSession(cookie, event.getClientAddress());
- if (!user) event.cookies.delete(COOKIE_NAME, { secure: !!process.env.PRODUCTION });
- else
+ let user = await getUserFromSession(cookie, event.request.headers.get("x-forwarded-for") || event.getClientAddress());
+ if (!user) {
+ event.cookies.delete(COOKIE_NAME, { secure: !!process.env.PRODUCTION });
+ if (event.routeId.startsWith("(app)")) return new Response("", { status: 302, headers: { Location: "/landing" } });
+ } else
event.locals.user = {
_id: user._id,
username: user.username,
diff --git a/src/lib/components/hCaptcha.svelte b/src/lib/components/hCaptcha.svelte
new file mode 100644
index 0000000..3236948
--- /dev/null
+++ b/src/lib/components/hCaptcha.svelte
@@ -0,0 +1,61 @@
+
+
+
+
+ {game?.name}
+ +Test Game
- -Players
-0
Visits
-0
Created
-10/10/22
Updated
-10/10/22
Max Players
-All
No players connected
Description
+Test Game
+Players
+0
+Visits
+0
+Created
+10/10/22
+Updated
+10/10/22
+Max Players
+No Limit
+Gamepasses
+This store does not have any gamepasses for sale.
+Players
+This game does not have any players.
+Players
+This is my description!
-Friends
-Games
-{form?.message}
+{form?.message}
{/if} - + diff --git a/src/routes/(nolayout)/logout/+server.js b/src/routes/(nolayout)/logout/+server.js index a732660..ec8018c 100644 --- a/src/routes/(nolayout)/logout/+server.js +++ b/src/routes/(nolayout)/logout/+server.js @@ -2,7 +2,7 @@ import { deleteSession } from "$lib/database"; import { COOKIE_NAME } from "$lib/constants"; /** @type {import('./$types').RequestHandler} */ -export async function GET({ cookies, getClientAddress }) { +export async function GET({ request, cookies, getClientAddress }) { const session = cookies.get(COOKIE_NAME); if (!session) return new Response("", { @@ -11,7 +11,7 @@ export async function GET({ cookies, getClientAddress }) { }); cookies.delete(COOKIE_NAME, { secure: !!process.env.PRODUCTION }); - await deleteSession(session, getClientAddress()); + await deleteSession(session, request.headers.get("x-forwarded-for") || getClientAddress()); return new Response("", { status: 302, diff --git a/src/routes/(nolayout)/register/+page.server.js b/src/routes/(nolayout)/register/+page.server.js index 3be4a8a..2d4f6c4 100644 --- a/src/routes/(nolayout)/register/+page.server.js +++ b/src/routes/(nolayout)/register/+page.server.js @@ -1,6 +1,6 @@ import { invalid, redirect } from "@sveltejs/kit"; -import { createUser, createSession } from "$lib/database"; -import { MIN_USERNAME_LENGTH, MAX_USERNAME_LENGTH, USERNAME_REGEX, MIN_PASSWORD_LENGTH, INVITE_KEY_PREFIX, COOKIE_NAME } from "$lib/constants"; +import { createUser, createSession, getUser } from "$lib/database"; +import { MIN_USERNAME_LENGTH, MAX_USERNAME_LENGTH, USERNAME_REGEX, MIN_PASSWORD_LENGTH, INVITE_KEY_PREFIX, COOKIE_NAME, HCAPTCHA_SITEKEY } from "$lib/constants"; /** @type {import('./$types').Actions} */ export const actions = { @@ -13,6 +13,7 @@ export const actions = { const password = data.get("password"); const confirm_password = data.get("confirm_password"); const invite_key = data.get("invite_key"); + const hcaptcha_response = data.get("h-captcha-response"); if (username.length < MIN_USERNAME_LENGTH || username.length > MAX_USERNAME_LENGTH || new RegExp(USERNAME_REGEX).test(username)) return invalid(400, { @@ -35,8 +36,37 @@ export const actions = { error: "invite_key" }); - const user = await createUser(username, password, getClientAddress()); - cookies.set(COOKIE_NAME, await createSession(user, getClientAddress()), { secure: !!process.env.PRODUCTION }); + if (!hcaptcha_response) + return invalid(400, { + username, + invite_key, + error: "hcaptcha" + }); + + const existingUser = await getUser({ username }, { _id: true }); + if (existingUser) + return invalid(400, { + username, + invite_key, + error: "username" + }); + + const hcaptcha = await fetch("https://hcaptcha.com/siteverify", { + method: "POST", + body: `response=${hcaptcha_response}&secret=${process.env.HCAPTCHA_SECRET}`, + headers: { "content-type": "application/x-www-form-urlencoded" } + }); + + const hcaptchaBody = await hcaptcha.json(); + if (!hcaptchaBody.success) + return invalid(400, { + username, + invite_key, + error: "hcaptcha" + }); + + const user = await createUser(username, password, request.headers.get("x-forwarded-for") || getClientAddress()); + cookies.set(COOKIE_NAME, await createSession(user, request.headers.get("x-forwarded-for") || getClientAddress()), { secure: !!process.env.PRODUCTION }); throw redirect(302, "/"); } }; diff --git a/src/routes/(nolayout)/register/+page.svelte b/src/routes/(nolayout)/register/+page.svelte index 39ba03f..15b78b1 100644 --- a/src/routes/(nolayout)/register/+page.svelte +++ b/src/routes/(nolayout)/register/+page.svelte @@ -1,17 +1,20 @@