From 34eb270aca5c8356f6b9117cd759ef3e89560226 Mon Sep 17 00:00:00 2001 From: I-Have-An-Issue <34550332+I-Have-An-Issue@users.noreply.github.com> Date: Mon, 10 Oct 2022 18:28:46 -0400 Subject: [PATCH] Coool page --- package-lock.json | 5 +- package.json | 3 +- src/lib/constants.js | 6 +++ src/lib/database.js | 2 +- .../(nolayout)/register/+page.server.js | 42 +++++++++++++++ src/routes/(nolayout)/register/+page.svelte | 51 +++++++++++++++---- src/routes/api/login/+server.js | 0 src/routes/api/register/+server.js | 23 +++++++++ 8 files changed, 118 insertions(+), 14 deletions(-) create mode 100644 src/lib/constants.js create mode 100644 src/routes/(nolayout)/register/+page.server.js create mode 100644 src/routes/api/login/+server.js create mode 100644 src/routes/api/register/+server.js diff --git a/package-lock.json b/package-lock.json index 2a4e8bc..9d610a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@sveltejs/adapter-node": "^1.0.0-next.96", "bcrypt": "^5.1.0", + "cookie": "^0.5.0", "mongodb": "^4.10.0" }, "devDependencies": { @@ -891,7 +892,6 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -3727,8 +3727,7 @@ "cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, "cssesc": { "version": "3.0.0", diff --git a/package.json b/package.json index c364b60..24b4f7e 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "start": "node build/", - "dev": "vite dev", + "dev": "vite dev --port 80", "build": "vite build", "preview": "vite preview", "lint": "prettier --plugin-search-dir . --check .", @@ -26,6 +26,7 @@ "dependencies": { "@sveltejs/adapter-node": "^1.0.0-next.96", "bcrypt": "^5.1.0", + "cookie": "^0.5.0", "mongodb": "^4.10.0" } } diff --git a/src/lib/constants.js b/src/lib/constants.js new file mode 100644 index 0000000..12a41ea --- /dev/null +++ b/src/lib/constants.js @@ -0,0 +1,6 @@ +export const COOKIE_NAME = ".ROWBLOX_SESSION_DO_NOT_SHARE"; +export const USERNAME_REGEX = /[^A-Za-z0-9\-_ ]/g; +export const MIN_USERNAME_LENGTH = 3; +export const MAX_USERNAME_LENGTH = 16; +export const MIN_PASSWORD_LENGTH = 0; +export const INVITE_KEY_PREFIX = "rowblox-"; diff --git a/src/lib/database.js b/src/lib/database.js index 66e980f..2054586 100644 --- a/src/lib/database.js +++ b/src/lib/database.js @@ -1,6 +1,6 @@ import { MongoClient } from "mongodb"; import { hash, compare } from "bcrypt"; -import { prerendering } from "$app/env"; +import { prerendering } from "$app/environment"; if (!process.env.MONGO_URL) throw new Error("Missing MONGO_URL env variable!"); diff --git a/src/routes/(nolayout)/register/+page.server.js b/src/routes/(nolayout)/register/+page.server.js new file mode 100644 index 0000000..65064d9 --- /dev/null +++ b/src/routes/(nolayout)/register/+page.server.js @@ -0,0 +1,42 @@ +import { invalid, redirect } from "@sveltejs/kit"; +import { MIN_USERNAME_LENGTH, MAX_USERNAME_LENGTH, USERNAME_REGEX, MIN_PASSWORD_LENGTH, INVITE_KEY_PREFIX, COOKIE_NAME } from "$lib/constants"; + +/** @type {import('./$types').Actions} */ +export const actions = { + default: async ({ cookies, request }) => { + const session = cookies.get(COOKIE_NAME); + if (session) return redirect(302, "/"); + + const data = await request.formData(); + const username = data.get("username"); + const password = data.get("password"); + const confirm_password = data.get("confirm_password"); + const invite_key = data.get("invite_key"); + + console.log(username, password, confirm_password, invite_key); + + if (username.length < MIN_USERNAME_LENGTH || username.length > MAX_USERNAME_LENGTH || new RegExp(USERNAME_REGEX).test(username)) + return invalid(400, { + username, + invite_key, + error: "username" + }); + + if (username.length < MIN_PASSWORD_LENGTH || confirm_password !== password) + return invalid(400, { + username, + invite_key, + error: "password" + }); + + if (!invite_key.startsWith(INVITE_KEY_PREFIX)) + return invalid(400, { + username, + invite_key, + error: "invite_key" + }); + + cookies.set(COOKIE_NAME, "murder row"); + return invalid(500, { message: "Dis shit does NOT WORK!" }); + } +}; diff --git a/src/routes/(nolayout)/register/+page.svelte b/src/routes/(nolayout)/register/+page.svelte index 29d9e2a..751c593 100644 --- a/src/routes/(nolayout)/register/+page.svelte +++ b/src/routes/(nolayout)/register/+page.svelte @@ -1,20 +1,53 @@ Register - Rowblox + -
+
- - - - + + + +
- + {#if form?.message} +

{form?.message}

+ {/if} +
+ diff --git a/src/routes/api/login/+server.js b/src/routes/api/login/+server.js new file mode 100644 index 0000000..e69de29 diff --git a/src/routes/api/register/+server.js b/src/routes/api/register/+server.js new file mode 100644 index 0000000..a019064 --- /dev/null +++ b/src/routes/api/register/+server.js @@ -0,0 +1,23 @@ +import { json } from "@sveltejs/kit"; +import { serialize, parse } from "cookie"; +import { createUser } from "$lib/database"; +import { MIN_USERNAME_LENGTH, MAX_USERNAME_LENGTH, USERNAME_REGEX, MIN_PASSWORD_LENGTH, INVITE_KEY_PREFIX, COOKIE_NAME } from "$lib/constants"; + +/** @type {import('./$types').RequestHandler} */ +export async function POST({ request }) { + const cookies = parse(request.headers.get("cookie") || ""); + const cookie = cookies[COOKIE_NAME]; + if (cookie) + return json({ + success: false, + error: "You are already logged in!" + }); + + const body = await request.json(); + console.log(body); + + return json({ + success: false, + error: "LOle!" + }); +}