From 62edbd9cd21a21fbca22bad025ef9a206f5da3f1 Mon Sep 17 00:00:00 2001 From: bloodwiing Date: Thu, 16 May 2024 12:25:41 +0300 Subject: [PATCH] Add: Proper Account creation --- src/lib/server/db/user.js | 56 ++++++++++++++++----- src/routes/(login)/register/+page.server.js | 4 +- 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/src/lib/server/db/user.js b/src/lib/server/db/user.js index d974c81..af10785 100644 --- a/src/lib/server/db/user.js +++ b/src/lib/server/db/user.js @@ -85,20 +85,52 @@ export async function getUser(user_id) { * @param {string} password * @returns {Promise} */ -export async function registerUser(sql, username, password) { - // const users = await getUsers(sql, [user_id]); +export async function registerUser(username, password) { + const hashedPassword = await hash(password, { + type: argon2id, + memoryCost: 2 ** 16, + timeCost: 4, + parallelism: 1, + hashLength: 64, + }); - // return users.get(user_id) || { - // error: true, - // msg: `Could not find user of ID ${user_id}` - // }; - const salt = await genSalt(10); + const insert = sql` + INSERT INTO doki8902.user (username, password) + VALUES (${ username }, ${ hashedPassword });`; - console.log(salt); + try { + await insert; - // const hash = + } catch (e) { + if (e && typeof(e) === 'object' && 'name' in e && e.name === 'PostgresError') { + const pgerr = /** @type {PostgresError} */ (e); - // const insert = sql` - // INSERT INTO doki8902.user (username, password) - // VALUES (${ username }, ${ hash })` + switch (pgerr.constraint_name) { + case 'idx_user_username': + return { + error: true, + msg: "Username taken", + }; + + case 'username_length_min': + return { + error: true, + msg: "Username has invalid length", + }; + + case 'username_valid_symbols': + return { + error: true, + msg: "Username contains invalid symbols", + }; + + default: + break; + } + } + } + + return { + success: true, + }; } diff --git a/src/routes/(login)/register/+page.server.js b/src/routes/(login)/register/+page.server.js index 39eeb49..26a6774 100644 --- a/src/routes/(login)/register/+page.server.js +++ b/src/routes/(login)/register/+page.server.js @@ -19,7 +19,9 @@ async function POST({ request }) { return; } - registerUser(username, password); + const result = await registerUser(username, password); + + console.log(result); } /** @type {import('./$types').Actions} */