From eea87823d98f478f4a049309e586c3109a428f8e Mon Sep 17 00:00:00 2001 From: bloodwiing Date: Thu, 16 May 2024 13:28:24 +0300 Subject: [PATCH] Add: User Logging in --- src/comp/entry/entryfield.svelte | 45 +++++++++++++ src/comp/entry/entryform.svelte | 73 +++++++++++++++++++++ src/lib/server/db/post.js | 2 +- src/lib/server/db/user.js | 44 +++++++++++++ src/routes/(login)/login/+page.server.js | 25 +++++++ src/routes/(login)/login/+page.svelte | 11 ++++ src/routes/(login)/register/+page.server.js | 4 ++ src/routes/(login)/register/+page.svelte | 56 +++------------- src/types/status.ts | 1 + 9 files changed, 212 insertions(+), 49 deletions(-) create mode 100644 src/comp/entry/entryfield.svelte create mode 100644 src/comp/entry/entryform.svelte diff --git a/src/comp/entry/entryfield.svelte b/src/comp/entry/entryfield.svelte new file mode 100644 index 0000000..ec6b230 --- /dev/null +++ b/src/comp/entry/entryfield.svelte @@ -0,0 +1,45 @@ + + + + +
+ + +
diff --git a/src/comp/entry/entryform.svelte b/src/comp/entry/entryform.svelte new file mode 100644 index 0000000..c71f921 --- /dev/null +++ b/src/comp/entry/entryform.svelte @@ -0,0 +1,73 @@ + + + + +
{dispatch('submit', e);}} {...$$restProps}> +
+

{formName}

+ +
+ +
+ +
+ + + + +
diff --git a/src/lib/server/db/post.js b/src/lib/server/db/post.js index 0abf4ac..e3801a0 100644 --- a/src/lib/server/db/post.js +++ b/src/lib/server/db/post.js @@ -131,7 +131,7 @@ export async function getPost(post_id, opts = {}) { } }(); - const category_guess = await getCategoryCached(sql, post['category_id']); + const category_guess = await getCategoryCached(post['category_id']); if (Object.hasOwn(category_guess, 'error')) { return { error: true, diff --git a/src/lib/server/db/user.js b/src/lib/server/db/user.js index 6e0732d..e0d052f 100644 --- a/src/lib/server/db/user.js +++ b/src/lib/server/db/user.js @@ -134,3 +134,47 @@ export async function createUser(username, password) { success: true, }; } + +/** + * @param {string} username + * @param {string} password + * @returns {Promise} + */ +export async function createUserSession(username, password) { + const select = sql` + SELECT password, id + FROM doki8902.user + WHERE username = ${ username };`; + + const result = await select; + + if (result.length == 0) { + return { + error: true, + msg: 'Username or password is incorrect', + }; + } + + const hashedPassword = result[0]['password']; + + const isMatch = await verify(hashedPassword, password); + + if (!isMatch) { + return { + error: true, + msg: 'Username or password is incorrect', + }; + } + + const insert = sql` + INSERT INTO doki8902.user_session (user_id) + VALUES (${ result[0]['id'] }) + RETURNING token;`; + + const token = await insert; + + return { + success: true, + result: token[0]['token'], + }; +} diff --git a/src/routes/(login)/login/+page.server.js b/src/routes/(login)/login/+page.server.js index e69de29..d2ecd10 100644 --- a/src/routes/(login)/login/+page.server.js +++ b/src/routes/(login)/login/+page.server.js @@ -0,0 +1,25 @@ +import { createUserSession } from "$lib/server/db/user"; + +/** @type {import("@sveltejs/kit").Action} */ +async function POST({ request, cookies }) { + if (request.method !== 'POST') { + return; + } + + const data = await request.formData(); + const username = data.get('username')?.toString(); + const password = data.get('password')?.toString(); + + if (!username || !password) { + return; + } + + const result = await createUserSession(username, password); + + console.log(result); +} + +/** @type {import("@sveltejs/kit").Actions} */ +export let actions = { + default: POST +}; diff --git a/src/routes/(login)/login/+page.svelte b/src/routes/(login)/login/+page.svelte index e69de29..9130a7c 100644 --- a/src/routes/(login)/login/+page.svelte +++ b/src/routes/(login)/login/+page.svelte @@ -0,0 +1,11 @@ + + + + New here? + + + + diff --git a/src/routes/(login)/register/+page.server.js b/src/routes/(login)/register/+page.server.js index 414eb31..b106527 100644 --- a/src/routes/(login)/register/+page.server.js +++ b/src/routes/(login)/register/+page.server.js @@ -11,6 +11,10 @@ export function load({ cookies }) { /** @type {import('./$types').Action} */ async function POST({ request }) { + if (request.method !== 'POST') { + return; + } + const data = await request.formData(); const username = data.get('username')?.toString(); const password = data.get('password')?.toString(); diff --git a/src/routes/(login)/register/+page.svelte b/src/routes/(login)/register/+page.svelte index 09d17cb..5213b13 100644 --- a/src/routes/(login)/register/+page.svelte +++ b/src/routes/(login)/register/+page.svelte @@ -1,5 +1,6 @@ - - -
-

Register

-
-
- - -
- -
- - -
- -
- - -
-
- - - - -
+ + + + diff --git a/src/types/status.ts b/src/types/status.ts index 87ee3e9..a15fdb3 100644 --- a/src/types/status.ts +++ b/src/types/status.ts @@ -5,4 +5,5 @@ export type Error = { export type Success = { success: boolean, + result?: object, };