From a1c9b30cf69abcd52c42d82fd97a5342cc612914 Mon Sep 17 00:00:00 2001 From: tdgmdev Date: Thu, 9 Mar 2023 19:12:15 -0500 Subject: [PATCH] A lot of stuff --- src/lib/components/Area.svelte | 3 +- src/lib/components/Header.svelte | 2 +- src/lib/components/Post.svelte | 22 +- src/lib/db/db.js | 420 +---------------------- src/lib/db/handlers.js | 401 ++++++++++++++++++++++ src/routes/+layout.svelte | 1 - src/routes/account/login/+page.svelte | 4 +- src/routes/account/register/+page.svelte | 4 +- src/routes/api/[route]/+server.js | 3 +- 9 files changed, 439 insertions(+), 421 deletions(-) create mode 100644 src/lib/db/handlers.js diff --git a/src/lib/components/Area.svelte b/src/lib/components/Area.svelte index ac8aaec..6a857fb 100644 --- a/src/lib/components/Area.svelte +++ b/src/lib/components/Area.svelte @@ -20,7 +20,8 @@ #header { font-weight: bold; - font-size: 2rem; + font-size: 1rem; + overflow-x: auto; width: 100%; diff --git a/src/lib/components/Header.svelte b/src/lib/components/Header.svelte index 75b5f69..e91f734 100644 --- a/src/lib/components/Header.svelte +++ b/src/lib/components/Header.svelte @@ -7,7 +7,7 @@ #logo { - width: calc(100vw + 50px); + width: calc(100vw - 10px); background: var(--dark-1); diff --git a/src/lib/components/Post.svelte b/src/lib/components/Post.svelte index b751062..11069e0 100644 --- a/src/lib/components/Post.svelte +++ b/src/lib/components/Post.svelte @@ -55,8 +55,11 @@ font-weight: bold; font-size: 1.5rem; } - .vote-area { - margin-right: 30px; + + + #header-area { + display: flex; + flex-direction: column; } img { @@ -70,7 +73,6 @@ } .date { - margin-left: 1rem; font-size: 0.8rem; font-style: italic; font-weight: normal; @@ -93,12 +95,14 @@ - - {username} - - - {date} - +
+
+ {username} +
+
+ {date} +
+
diff --git a/src/lib/db/db.js b/src/lib/db/db.js index 3adba8c..6aae3b7 100644 --- a/src/lib/db/db.js +++ b/src/lib/db/db.js @@ -1,4 +1,4 @@ -const ROW_COUNT = 5; +import { backend } from './handlers.js'; const AUTH_ACTIONS = [ 'postCreate', @@ -9,32 +9,11 @@ const AUTH_ACTIONS = [ 'follow' ]; -const LEGAL_SORTS = { - 'time': 'time', - 'rating': 'rating', - 'hot': `rating / (%d - time + 24000)` -} - -const roles = [ - 'Owner', - 'Admin', - 'Veteran' -] - -const FILE_SIZE_LIMIT = 1024*1024*16; - -const VALID_EXTENSIONS = ['png','jpg','jpeg','gif','svg', 'mp4']; - -var ridArray = {}; - import sqlite3 from 'sqlite3' import { open } from 'sqlite' -import { hash, compare } from 'bcrypt' -import { randomBytes, createHash } from 'node:crypto'; -import { writeFile } from 'node:fs/promises'; -import { calcVote, checkLength, checkRegex, safePath, formatPost } from '../util.js'; var db; + async function initDb() { db = await open({ filename: `${process.cwd()}/db/main.db`, @@ -53,392 +32,25 @@ async function initDb() { let backendProxy = async ({route, backendParams}) => { if (!db) await initDb(); - var user = ((await backend.token({cookies: backendParams.cookies})) || {}).data; + let extraParams = {}; + + extraParams['db'] = db; + + let user = (await backend.token({cookies: backendParams.cookies},extraParams)) || {}; + + user = user.data; if ((!user || user == '') && AUTH_ACTIONS.indexOf(route) != -1) return {'success': 'Not authorized.' }; 3 - var isAdmin = false; - if (user && user != '') isAdmin = ((await userRoles({user})) || []).indexOf('Admin') != -1; + let isAdmin = false; + if (user && user != '') isAdmin = ((await backend.userRoles({}, {user, db})) || []).indexOf('Admin') != -1; - backendParams['admin'] = isAdmin; + extraParams['admin'] = isAdmin; + extraParams['user'] = user; - if (AUTH_ACTIONS.indexOf(route) != -1) backendParams['user'] = user; - - return backend[route](backendParams); + return backend[route](backendParams, extraParams) || {}; } -var backend = {}; - -let updateUser = async ({user}) => { - let allPosts = await db.all('SELECT * from post WHERE username = ?', [ - user - ]); - - let upvotes = 0; - let downvotes = 0; - allPosts.forEach(post => { - upvotes += post.upvotes || 0; - downvotes += post.downvotes || 0; - }); - - await db.run('DELETE FROM user WHERE username = ?', [ - user - ]); - - await db.run('INSERT INTO user (username,followers,following,upvotes,downvotes,reputation) VALUES (?,?,?,?,?,?)', [ - user, - 0, - 0, - upvotes, - downvotes, - calcVote(upvotes,downvotes,'user') - ]); -} - -backend.register = async ({user, pass, pass2}) => { - var lengthCheck = false; - - lengthCheck = - checkLength(pass,'Password',4,1024) || - checkLength(user,'Username',1,64) || - checkRegex(user,'Username',/[^A-Za-z0-9\-\_]/g); - - if (lengthCheck) return lengthCheck; - - if (pass != pass2) return {'success': 'Passwords don\'t match.'}; - - var existingAccounts = await db.all('SELECT username FROM auth WHERE username = ?',[ - user - ]); - - if (existingAccounts && existingAccounts.length > 0) - return { success: 'Account already exists.' }; - - var passHash = await hash(pass,10); - - await db.run('INSERT INTO auth (username, password) VALUES (?, ?)', [ - user, - passHash - ]) - - await updateUser({user: user}); - - return { success: 'Successfully created account.', location: '/'}; -} - -backend.login = async ({user, pass, cookies}) => { - var existingAccounts = await db.all('SELECT username, password FROM auth WHERE username = ?',[ - user - ]); - - if (!existingAccounts || existingAccounts.length < 1) - return { success: 'Account does not exist.' }; - - var passHash = await compare(pass,existingAccounts[0].password); - - if (!passHash) - return { success: 'Incorrect password.' }; - - var token = randomBytes(256).toString('hex'); - - await db.run('INSERT INTO token (username, token) VALUES (?, ?)', [ - user, - token - ]) - - if (token) { - cookies.set('token',token, { - maxAge: 60 * 60 * 24 * 7, - path: '/' - }); - }; - - return { success: 'Successfully logged into account.', data: token, location: '/'}; -} - -backend.postCreate = async ({content, user}) => { - if (!content) return {'success': 'No post provided.'} - - var lengthCheck = checkLength(content,'Post content',1,10240); - - if (lengthCheck) - return lengthCheck; - - if (!content) return {'success': 'There is no post!' }; - - var id = randomBytes(10).toString('hex'); - - var postFlatten = formatPost(content).flat(); - var reply = postFlatten[postFlatten.findIndex(x => x.subtype == 'post')]; - - if (reply) - reply = reply.url.split('/').pop(); - - await db.run('INSERT INTO post (username, id, content, rating, reply, time) VALUES (?, ?, ?, ?, ?, ?)', [ - user, - id, - content, - calcVote(0,0), - reply || '', - Math.floor(new Date() * 1000) - ]) - - return {'success': 'Your post has been broadcasted!', 'href': `/post/${id}` }; -} - -backend.postDelete = async ({id, user, admin}) => { - if (admin) { - await db.run('DELETE FROM post WHERE id = ?', [ - id - ]) - } else { - await db.run('DELETE FROM post WHERE username = ? AND id = ?', [ - user, - id - ]) - } - - return {'success': 'Your post has been deleted!', 'href': `/post/${id}` }; -} - -let userRoles = async ({user}) => { - var rolesLocal = await db.all('SELECT roles from bio WHERE username = ?', [ - user - ] ); - - if (rolesLocal.length == 0) rolesLocal = [{}]; - - let rolesLocalList = rolesLocal[0].roles; - - return roles.filter((elem,i) => ((rolesLocalList % (1<<(i+1))) > ((1< { - var posts = await db.all('SELECT * from user WHERE username = ?', [ - user - ]) - - if (!posts || posts.length < 1) { - return {'success': 'User does not exist.'} - } - - var following = await db.all('SELECT * from follow WHERE username = ?', [ - user - ]); - - var followers = await db.all('SELECT * from follow WHERE following = ?', [ - user - ]); - - if (!following) following = []; - - if (!followers) followers = []; - - return {data: posts[0], following, followers}; -} - -backend.userBio = async ({user}) => { - var posts = await db.all('SELECT * from bio WHERE username = ?', [ - user - ]) - - if (!posts || posts.length < 1) { - return {'success': 'Bio does not exist.'} - } - - posts[0].rolesArr = (await userRoles({user})) || []; - - return {data: posts[0]}; -} - -backend.postBulk = async ({page, id, user, cookies, sort, type, admin}) => { - var posts; - - var userAuth = (await backend.token({cookies})).data || ''; - - sort = (LEGAL_SORTS[sort]) || 'rating'; - - if (sort + '' != sort) sort = 'rating'; - - sort = sort.replaceAll('%d',Math.floor(new Date() * 1000)); - - - if (type == 'all') { - posts = await db.all('SELECT * from post ORDER BY '+sort+' DESC LIMIT ?, ?', [ - page*ROW_COUNT, - ROW_COUNT - ]) - } else if (type == 'post') { - posts = await db.all('SELECT * from post WHERE id = ?', [ - id - ]); - - if (posts.length == 0) posts.push({}); - - posts.push(...(await db.all('SELECT * from post WHERE reply = ? ORDER BY '+sort+' DESC LIMIT ?, ?', [ - id, - page*ROW_COUNT, - ROW_COUNT - ]))) - - } else if (type == 'user') { - posts = await db.all('SELECT * from post WHERE username = ? ORDER BY '+sort+' DESC LIMIT ?, ?', [ - user, - page*ROW_COUNT, - ROW_COUNT - ]) - } else if (type == 'follow') { - posts = await db.all('SELECT * from post WHERE username IN (SELECT following from follow WHERE username = ?) ORDER BY '+sort+' DESC LIMIT ?, ?', [ - userAuth, - page*ROW_COUNT, - ROW_COUNT - ]) - } - - posts = posts.map(post => { - return {...post, isAuthor: userAuth == post.username || admin}; - }) - - return {data: posts}; -} - -backend.vote = async ({id, vote, user}) => { - if (!id || (vote != 'down' && vote != 'up')) return {success: 'fail' }; - - var isCreator = (await db.all('SELECT * from post WHERE id = ?', [ - id - ]))[0].username == user; - - if (isCreator) - return {success: 'fail' }; - - await db.run('DELETE FROM vote WHERE username = ? AND id = ?', [ - user, - id - ]); - - await db.run('INSERT INTO vote (id, username, type) VALUES (?,?,?)', [ - id, - user, - vote == 'up' ? 1 : 2 - ]); - - var votes = await db.all('SELECT type from vote WHERE id = ?', [ - id - ]) || []; - - var up = votes.filter(x => x.type == 1).length; - var down = votes.filter(x => x.type == 2).length; - - await db.run('UPDATE post SET upvotes = ?, downvotes = ?, rating = ? WHERE id = ?', [ - up, - down, - calcVote(up,down), - id - ]); - - var user = await db.all('SELECT * from post WHERE id = ?', [ - id - ]) || []; - - if (!user[0]) - return {success: 'fail' }; - - await updateUser({user: user[0].username}); - - return {data: {up,down}}; -} - -backend.token = async ({cookies}) => { - var tokenIn = cookies.get('token'); - - var existingAccounts = await db.all('SELECT username from token WHERE token = ?',[ - tokenIn - ]); - - if (!existingAccounts || existingAccounts.length < 1) - return false; - - return {data: existingAccounts[0].username}; -} - -backend.follow = async ({target, user}) => { - var isFollowing = await db.all('SELECT * FROM follow WHERE username = ? AND following = ?',[ - user, - target - ]); - - if (isFollowing && isFollowing.length > 0) { - await db.run('DELETE FROM follow WHERE username = ? AND following = ?',[ - user, - target - ]); - } else { - await db.run('INSERT INTO follow (username, following) VALUES (?, ?)',[ - user, - target - ]); - } - - var following = await db.all('SELECT * from follow WHERE username = ?', [ - target - ]); - - var followers = await db.all('SELECT * from follow WHERE following = ?', [ - target - ]); - - return {'success': 'User followed/unfollowed.', 'data': {following, followers}}; -}; - -let fileCreate = (type) => { - return async ({img, extension,id, last, user }) => { - let validExtensions = VALID_EXTENSIONS; - - if (type == 'pfp') validExtensions = ['png']; - - if (ridArray[id] !== '' && !(ridArray[id])) { - ridArray[id] = img; - } else { - ridArray[id] += img; - } - - const imgData = ridArray[id]; - - if (last != 'true') { - return {'success': 'Image still proccessing...'} - } else { - ridArray[id] = false; - } - - const imgHash = createHash('md5').update(imgData).digest('hex'); - - if (!imgHash) - return {'success': 'Image not provided.'} - - if (imgHash.length > FILE_SIZE_LIMIT) - return {'success': 'Image too big.'} - - const extensionSafe = safePath(extension); - - if (validExtensions.indexOf(extensionSafe) == -1) - return { success: 'Illegal file extension. Permitted file extensions are: ' + validExtensions.join(', ') }; - - if (type == 'post') { - writeFile(`${process.cwd()}/db/post-${imgHash}.${extensionSafe}`,imgData,{encoding: 'base64'}); - } else { - writeFile(`${process.cwd()}/db/pfp-${user}.png`,imgData,{encoding: 'base64'}); - } - - return { success: 'Successfully uploaded file.', 'href': `/img/${imgHash}.${extensionSafe}`}; - } -} -backend.fileCreate = fileCreate('post'); -backend.pfp = fileCreate('pfp'); - - export { - backendProxy, - backend, - VALID_EXTENSIONS -} \ No newline at end of file + backendProxy +}; \ No newline at end of file diff --git a/src/lib/db/handlers.js b/src/lib/db/handlers.js new file mode 100644 index 0000000..e398550 --- /dev/null +++ b/src/lib/db/handlers.js @@ -0,0 +1,401 @@ +const ROW_COUNT = 5; + +const LEGAL_SORTS = { + 'time': 'time', + 'rating': 'rating', + 'hot': `rating / (%d - time + 24000)` +} + +const roles = [ + 'Owner', + 'Admin', + 'Veteran' +] + +const FILE_SIZE_LIMIT = 1024*1024*16; + +const VALID_EXTENSIONS = ['png','jpg','jpeg','gif','svg', 'mp4']; + + +import { hash, compare } from 'bcrypt' +import { randomBytes, createHash } from 'node:crypto'; +import { writeFile } from 'node:fs/promises'; +import { calcVote, checkLength, checkRegex, safePath, formatPost } from '../util.js'; + +var ridArray = {}; + +let updateUser = async ({user},{db}) => { + let allPosts = await db.all('SELECT * from post WHERE username = ?', [ + user + ]); + + let upvotes = 0; + let downvotes = 0; + + allPosts.forEach(post => { + upvotes += post.upvotes || 0; + downvotes += post.downvotes || 0; + }); + + await db.run('DELETE FROM user WHERE username = ?', [ + user + ]); + + await db.run('INSERT INTO user (username,followers,following,upvotes,downvotes,reputation) VALUES (?,?,?,?,?,?)', [ + user, + 0, + 0, + upvotes, + downvotes, + calcVote(upvotes,downvotes,'user') + ]); +} + +let fileCreate = (type) => { + return async ({img, extension,id, last}, {user}) => { + let validExtensions = VALID_EXTENSIONS; + + if (type == 'pfp') validExtensions = ['png']; + + if (ridArray[id] !== '' && !(ridArray[id])) { + ridArray[id] = img; + } else { + ridArray[id] += img; + } + + const imgData = ridArray[id]; + + if (last != 'true') { + return {'success': 'Image still proccessing...'} + } else { + ridArray[id] = false; + } + + const imgHash = createHash('md5').update(imgData).digest('hex'); + + if (!imgHash) + return {'success': 'Image not provided.'} + + if (imgHash.length > FILE_SIZE_LIMIT) + return {'success': 'Image too big.'} + + const extensionSafe = safePath(extension); + + if (validExtensions.indexOf(extensionSafe) == -1) + return { success: 'Illegal file extension. Permitted file extensions are: ' + validExtensions.join(', ') }; + + let fileName = (type == 'post') ? `post-${imgHash}.${extensionSafe}` : `pfp-${user}.png` + + writeFile(`${process.cwd()}/db/${fileName}`,imgData,{encoding: 'base64'}); + + return { success: 'Successfully uploaded file.', 'href': `/img/${imgHash}.${extensionSafe}`}; + } +} + +var backend = {}; + +backend.fileCreate = fileCreate('post'); +backend.pfp = fileCreate('pfp'); + +backend.userRoles = async ({user},{db}) => { + var rolesLocal = await db.all('SELECT roles from bio WHERE username = ?', [ + user + ] ); + + if (rolesLocal.length == 0) rolesLocal = [{}]; + + let rolesLocalList = rolesLocal[0].roles; + + return roles.filter((elem,i) => ((rolesLocalList % (1<<(i+1))) > ((1< { + var lengthCheck = false; + + lengthCheck = + checkLength(pass,'Password',4,1024) || + checkLength(user,'Username',1,64) || + checkRegex(user,'Username',/[^A-Za-z0-9\-\_]/g); + + if (lengthCheck) return lengthCheck; + + if (pass != pass2) return {'success': 'Passwords don\'t match.'}; + + var existingAccounts = await db.all('SELECT username FROM auth WHERE username = ?',[ + user + ]); + + if (existingAccounts && existingAccounts.length > 0) + return { success: 'Account already exists.' }; + + var passHash = await hash(pass,10); + + await db.run('INSERT INTO auth (username, password) VALUES (?, ?)', [ + user, + passHash + ]) + + await updateUser({user: user}); + + return { success: 'Successfully created account.', location: '/'}; +} + +backend.login = async ({user, pass, cookies},{db}) => { + var existingAccounts = await db.all('SELECT username, password FROM auth WHERE username = ?',[ + user + ]); + + if (!existingAccounts || existingAccounts.length < 1) + return { success: 'Account does not exist.' }; + + var passHash = await compare(pass,existingAccounts[0].password); + + if (!passHash) + return { success: 'Incorrect password.' }; + + var token = randomBytes(256).toString('hex'); + + await db.run('INSERT INTO token (username, token) VALUES (?, ?)', [ + user, + token + ]) + + if (token) { + cookies.set('token',token, { + maxAge: 60 * 60 * 24 * 7, + path: '/' + }); + }; + + return { success: 'Successfully logged into account.', data: token, location: '/'}; +} + +backend.postCreate = async ({content}, {user,db}) => { + if (!content) return {'success': 'No post provided.'} + + var lengthCheck = checkLength(content,'Post content',1,10240); + + if (lengthCheck) + return lengthCheck; + + if (!content) return {'success': 'There is no post!' }; + + var id = randomBytes(10).toString('hex'); + + var postFlatten = formatPost(content).flat(); + var reply = postFlatten[postFlatten.findIndex(x => x.subtype == 'post')]; + + if (reply) + reply = reply.url.split('/').pop(); + + await db.run('INSERT INTO post (username, id, content, rating, reply, time) VALUES (?, ?, ?, ?, ?, ?)', [ + user, + id, + content, + calcVote(0,0), + reply || '', + Math.floor(new Date() * 1000) + ]) + + return {'success': 'Your post has been broadcasted!', 'href': `/post/${id}` }; +} + +backend.postDelete = async ({id}, {user, admin, db}) => { + if (admin) { + await db.run('DELETE FROM post WHERE id = ?', [ + id + ]) + } else { + await db.run('DELETE FROM post WHERE username = ? AND id = ?', [ + user, + id + ]) + } + + return {'success': 'Your post has been deleted!', 'href': `/post/${id}` }; +} + +backend.userGet = async ({user},{db}) => { + var posts = await db.all('SELECT * from user WHERE username = ?', [ + user + ]) + + if (!posts || posts.length < 1) { + return {'success': 'User does not exist.'} + } + + var following = await db.all('SELECT * from follow WHERE username = ?', [ + user + ]); + + var followers = await db.all('SELECT * from follow WHERE following = ?', [ + user + ]); + + if (!following) following = []; + + if (!followers) followers = []; + + return {data: posts[0], following, followers}; +} + +backend.userBio = async ({user},{db}) => { + var posts = await db.all('SELECT * from bio WHERE username = ?', [ + user + ]) + + if (!posts || posts.length < 1) { + return {'success': 'Bio does not exist.'} + } + + posts[0].rolesArr = (await userRoles({user})) || []; + + return {data: posts[0]}; +} + +backend.postBulk = async ({page, id, user, cookies, sort, type}, {admin, db}) => { + var posts; + + var userAuth = (await backend.token({cookies}, {db})).data || ''; + + sort = (LEGAL_SORTS[sort]) || 'rating'; + + if (sort + '' != sort) sort = 'rating'; + + sort = sort.replaceAll('%d',Math.floor(new Date() * 1000)); + + + if (type == 'all') { + posts = await db.all('SELECT * from post ORDER BY '+sort+' DESC LIMIT ?, ?', [ + page*ROW_COUNT, + ROW_COUNT + ]) + } else if (type == 'post') { + posts = await db.all('SELECT * from post WHERE id = ?', [ + id + ]); + + if (posts.length == 0) posts.push({}); + + posts.push(...(await db.all('SELECT * from post WHERE reply = ? ORDER BY '+sort+' DESC LIMIT ?, ?', [ + id, + page*ROW_COUNT, + ROW_COUNT + ]))) + + } else if (type == 'user') { + posts = await db.all('SELECT * from post WHERE username = ? ORDER BY '+sort+' DESC LIMIT ?, ?', [ + user, + page*ROW_COUNT, + ROW_COUNT + ]) + } else if (type == 'follow') { + posts = await db.all('SELECT * from post WHERE username IN (SELECT following from follow WHERE username = ?) ORDER BY '+sort+' DESC LIMIT ?, ?', [ + userAuth, + page*ROW_COUNT, + ROW_COUNT + ]) + } + + posts = posts.map(post => { + return {...post, isAuthor: userAuth == post.username || admin}; + }) + + return {data: posts}; +} + +backend.vote = async ({id, vote}, {user, db}) => { + if (!id || (vote != 'down' && vote != 'up')) return {success: 'fail' }; + + var isCreator = (await db.all('SELECT * from post WHERE id = ?', [ + id + ]))[0].username == user; + + if (isCreator) + return {success: 'fail' }; + + await db.run('DELETE FROM vote WHERE username = ? AND id = ?', [ + user, + id + ]); + + await db.run('INSERT INTO vote (id, username, type) VALUES (?,?,?)', [ + id, + user, + vote == 'up' ? 1 : 2 + ]); + + var votes = await db.all('SELECT type from vote WHERE id = ?', [ + id + ]) || []; + + var up = votes.filter(x => x.type == 1).length; + var down = votes.filter(x => x.type == 2).length; + + await db.run('UPDATE post SET upvotes = ?, downvotes = ?, rating = ? WHERE id = ?', [ + up, + down, + calcVote(up,down), + id + ]); + + var user = await db.all('SELECT * from post WHERE id = ?', [ + id + ]) || []; + + if (!user[0]) + return {success: 'fail' }; + + await updateUser({user: user[0].username}); + + return {data: {up,down}}; +} + +backend.token = async ({cookies}, {db}) => { + var tokenIn = cookies.get('token'); + + var existingAccounts = await db.all('SELECT username from token WHERE token = ?',[ + tokenIn + ]); + + if (!existingAccounts || existingAccounts.length < 1) + return false; + + return {data: existingAccounts[0].username}; +} + +backend.follow = async ({target}, {user, db}) => { + var isFollowing = await db.all('SELECT * FROM follow WHERE username = ? AND following = ?',[ + user, + target + ]); + + if (isFollowing && isFollowing.length > 0) { + await db.run('DELETE FROM follow WHERE username = ? AND following = ?',[ + user, + target + ]); + } else { + await db.run('INSERT INTO follow (username, following) VALUES (?, ?)',[ + user, + target + ]); + } + + var following = await db.all('SELECT * from follow WHERE username = ?', [ + target + ]); + + var followers = await db.all('SELECT * from follow WHERE following = ?', [ + target + ]); + + return {'success': 'User followed/unfollowed.', 'data': {following, followers}}; +}; + + + +export { + backend, + VALID_EXTENSIONS +} \ No newline at end of file diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index ffcb5c2..9c31f94 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -4,7 +4,6 @@ height: 100vh; width: 100vw; - padding: 25px; padding-top: 0px; display: flex; diff --git a/src/routes/account/login/+page.svelte b/src/routes/account/login/+page.svelte index 3493023..44712e3 100644 --- a/src/routes/account/login/+page.svelte +++ b/src/routes/account/login/+page.svelte @@ -8,9 +8,9 @@ -

+ Log in -

+

Login

diff --git a/src/routes/account/register/+page.svelte b/src/routes/account/register/+page.svelte index 4bd8bf5..dfdce60 100644 --- a/src/routes/account/register/+page.svelte +++ b/src/routes/account/register/+page.svelte @@ -8,9 +8,9 @@ -

+ Register -

+

Register

diff --git a/src/routes/api/[route]/+server.js b/src/routes/api/[route]/+server.js index 256b472..b31e660 100644 --- a/src/routes/api/[route]/+server.js +++ b/src/routes/api/[route]/+server.js @@ -1,4 +1,5 @@ -import { backend, backendProxy } from '../../../lib/db/db.js'; +import { backend } from '../../../lib/db/handlers.js'; +import { backendProxy } from '../../../lib/db/db.js'; /** @type {import('./$types').RequestHandler} */