Cleanup
Removed repetitive database code, and fixed README.md
This commit is contained in:
parent
92890da839
commit
911d17637f
3 changed files with 51 additions and 80 deletions
39
README.md
39
README.md
|
@ -1,38 +1 @@
|
||||||
# create-svelte
|
Backend for Sanifae, a social networking demo
|
||||||
|
|
||||||
Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte).
|
|
||||||
|
|
||||||
## Creating a project
|
|
||||||
|
|
||||||
If you're seeing this, you've probably already done this step. Congrats!
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# create a new project in the current directory
|
|
||||||
npm create svelte@latest
|
|
||||||
|
|
||||||
# create a new project in my-app
|
|
||||||
npm create svelte@latest my-app
|
|
||||||
```
|
|
||||||
|
|
||||||
## Developing
|
|
||||||
|
|
||||||
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run dev
|
|
||||||
|
|
||||||
# or start the server and open the app in a new browser tab
|
|
||||||
npm run dev -- --open
|
|
||||||
```
|
|
||||||
|
|
||||||
## Building
|
|
||||||
|
|
||||||
To create a production version of your app:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
You can preview the production build with `npm run preview`.
|
|
||||||
|
|
||||||
> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.
|
|
|
@ -1,13 +1,16 @@
|
||||||
const rowCount = 5;
|
const rowCount = 5;
|
||||||
|
|
||||||
|
const AUTH_ACTIONS = [
|
||||||
|
'postCreate',
|
||||||
|
'vote'
|
||||||
|
];
|
||||||
|
|
||||||
import sqlite3 from 'sqlite3'
|
import sqlite3 from 'sqlite3'
|
||||||
import { open } from 'sqlite'
|
import { open } from 'sqlite'
|
||||||
import { hash, compare } from 'bcrypt'
|
import { hash, compare } from 'bcrypt'
|
||||||
import { calcVote, calcVoteUser, heckLength, checkRegex } from '../util.js';
|
import { randomBytes } from 'node:crypto';
|
||||||
|
|
||||||
const {
|
import { calcVote, calcVoteUser, checkLength, checkRegex } from '../util.js';
|
||||||
randomBytes
|
|
||||||
} = await import('node:crypto');
|
|
||||||
|
|
||||||
var db;
|
var db;
|
||||||
async function initDb() {
|
async function initDb() {
|
||||||
|
@ -23,9 +26,22 @@ async function initDb() {
|
||||||
await db.run('CREATE TABLE IF NOT EXISTS user (username CHAR(64), followers INTEGER, following INTEGER, upvotes INTEGER, downvotes INTEGER, reputation REAL)');
|
await db.run('CREATE TABLE IF NOT EXISTS user (username CHAR(64), followers INTEGER, following INTEGER, upvotes INTEGER, downvotes INTEGER, reputation REAL)');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let backendProxy = async ({route, backendParams}) => {
|
||||||
|
if (!db) await initDb();
|
||||||
|
|
||||||
|
if (AUTH_ACTIONS.indexOf(route) != -1) {
|
||||||
|
var user = (await backend.token({cookies: backendParams.cookies})).data;
|
||||||
|
if (!user || user == '') return {'success': 'Not authorized.' };
|
||||||
|
|
||||||
|
backendParams['user'] = user;
|
||||||
|
}
|
||||||
|
|
||||||
|
return backend[route](backendParams);
|
||||||
|
}
|
||||||
|
|
||||||
var backend = {};
|
var backend = {};
|
||||||
|
|
||||||
var updateUser = async ({user}) => {
|
let updateUser = async ({user}) => {
|
||||||
let allPosts = await db.all('SELECT * from post WHERE username = ?', [
|
let allPosts = await db.all('SELECT * from post WHERE username = ?', [
|
||||||
user
|
user
|
||||||
]);
|
]);
|
||||||
|
@ -64,8 +80,6 @@ backend.register = async ({user, pass, pass2}) => {
|
||||||
if (lengthCheck) return lengthCheck;
|
if (lengthCheck) return lengthCheck;
|
||||||
|
|
||||||
if (pass != pass2) return {'success': 'Passwords don\'t match.'};
|
if (pass != pass2) return {'success': 'Passwords don\'t match.'};
|
||||||
|
|
||||||
if (!db) await initDb();
|
|
||||||
|
|
||||||
var existingAccounts = await db.all('SELECT username FROM auth WHERE username = ?',[
|
var existingAccounts = await db.all('SELECT username FROM auth WHERE username = ?',[
|
||||||
user
|
user
|
||||||
|
@ -85,8 +99,6 @@ backend.register = async ({user, pass, pass2}) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
backend.login = async ({user, pass, cookies}) => {
|
backend.login = async ({user, pass, cookies}) => {
|
||||||
if (!db) await initDb();
|
|
||||||
|
|
||||||
var existingAccounts = await db.all('SELECT username, password FROM auth WHERE username = ?',[
|
var existingAccounts = await db.all('SELECT username, password FROM auth WHERE username = ?',[
|
||||||
user
|
user
|
||||||
]);
|
]);
|
||||||
|
@ -116,17 +128,13 @@ backend.login = async ({user, pass, cookies}) => {
|
||||||
return { success: 'Successfully logged into account.', data: token, location: '/'};
|
return { success: 'Successfully logged into account.', data: token, location: '/'};
|
||||||
}
|
}
|
||||||
|
|
||||||
backend.postCreate = async ({cookies, content}) => {
|
backend.postCreate = async ({content}) => {
|
||||||
if (!db) await initDb();
|
|
||||||
|
|
||||||
var lengthCheck = checkLength(content,'Post content',1,10240);
|
var lengthCheck = checkLength(content,'Post content',1,10240);
|
||||||
|
|
||||||
if (lengthCheck)
|
if (lengthCheck)
|
||||||
return lengthCheck;
|
return lengthCheck;
|
||||||
|
|
||||||
var user = (await backend.token({cookies})).data;
|
if (!content) return {'success': 'There is no post!' };
|
||||||
|
|
||||||
if (!user || !content || user == '') return {'success': 'Not authorized.' };
|
|
||||||
|
|
||||||
var id = randomBytes(10).toString('hex');
|
var id = randomBytes(10).toString('hex');
|
||||||
|
|
||||||
|
@ -141,8 +149,6 @@ backend.postCreate = async ({cookies, content}) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
backend.postGet = async ({id}) => {
|
backend.postGet = async ({id}) => {
|
||||||
if (!db) await initDb();
|
|
||||||
|
|
||||||
var posts = await db.all('SELECT * from post WHERE id = ?', [
|
var posts = await db.all('SELECT * from post WHERE id = ?', [
|
||||||
id
|
id
|
||||||
])
|
])
|
||||||
|
@ -155,8 +161,6 @@ backend.postGet = async ({id}) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
backend.userGet = async ({user}) => {
|
backend.userGet = async ({user}) => {
|
||||||
if (!db) await initDb();
|
|
||||||
|
|
||||||
var posts = await db.all('SELECT * from user WHERE username = ?', [
|
var posts = await db.all('SELECT * from user WHERE username = ?', [
|
||||||
user
|
user
|
||||||
])
|
])
|
||||||
|
@ -169,8 +173,6 @@ backend.userGet = async ({user}) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
backend.postBulk = async ({page,user}) => {
|
backend.postBulk = async ({page,user}) => {
|
||||||
if (!db) await initDb();
|
|
||||||
|
|
||||||
var posts;
|
var posts;
|
||||||
|
|
||||||
if (!user) {
|
if (!user) {
|
||||||
|
@ -189,12 +191,8 @@ backend.postBulk = async ({page,user}) => {
|
||||||
return {data: posts};
|
return {data: posts};
|
||||||
}
|
}
|
||||||
|
|
||||||
backend.vote = async ({cookies, id, vote}) => {
|
backend.vote = async ({cookies, id, vote, user}) => {
|
||||||
if (!db) await initDb();
|
if (!id || (vote != 'down' && vote != 'up')) return {success: 'fail' };
|
||||||
|
|
||||||
var user = (await backend.token({cookies})).data;
|
|
||||||
|
|
||||||
if (!user || !id || user == '' || (vote != 'down' && vote != 'up')) return {success: 'fail' };
|
|
||||||
|
|
||||||
await db.run('DELETE FROM vote WHERE username = ? AND id = ?', [
|
await db.run('DELETE FROM vote WHERE username = ? AND id = ?', [
|
||||||
user,
|
user,
|
||||||
|
@ -234,8 +232,6 @@ backend.vote = async ({cookies, id, vote}) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
backend.token = async ({cookies}) => {
|
backend.token = async ({cookies}) => {
|
||||||
if (!db) await initDb();
|
|
||||||
|
|
||||||
var tokenIn = cookies.get('token');
|
var tokenIn = cookies.get('token');
|
||||||
|
|
||||||
var existingAccounts = await db.all('SELECT username from token WHERE token = ?',[
|
var existingAccounts = await db.all('SELECT username from token WHERE token = ?',[
|
||||||
|
@ -249,5 +245,6 @@ backend.token = async ({cookies}) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
backendProxy,
|
||||||
backend
|
backend
|
||||||
}
|
}
|
|
@ -1,33 +1,44 @@
|
||||||
import { backend } from '../../../lib/db/db.js';
|
import { backend, backendProxy } from '../../../lib/db/db.js';
|
||||||
|
|
||||||
|
|
||||||
/** @type {import('./$types').RequestHandler} */
|
/** @type {import('./$types').RequestHandler} */
|
||||||
export async function GET({ url, cookies, params }) {
|
export async function GET({ url, cookies, params }) {
|
||||||
var backendParams = {cookies};
|
const formEntries = url.searchParams;
|
||||||
|
return await handleReq({
|
||||||
for (const [key, value] of url.searchParams) {
|
cookies,
|
||||||
backendParams[key] = value;
|
params: formEntries,
|
||||||
}
|
route: params.route
|
||||||
|
});
|
||||||
return await main({backendParams, route: params.route});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @type {import('./$types').RequestHandler} */
|
/** @type {import('./$types').RequestHandler} */
|
||||||
export async function POST({ url, cookies, request, params }) {
|
export async function POST({ cookies, request, params }) {
|
||||||
|
|
||||||
|
const formEntries = (await request.formData()).entries();
|
||||||
|
|
||||||
|
return await handleReq({
|
||||||
|
cookies,
|
||||||
|
params: formEntries,
|
||||||
|
route: params.route
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function handleReq({ cookies, params, route }) {
|
||||||
var backendParams = {cookies};
|
var backendParams = {cookies};
|
||||||
|
|
||||||
for (const [key, value] of (await request.formData()).entries()) {
|
for (const [key, value] of params) {
|
||||||
backendParams[key] = value;
|
backendParams[key] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return await main({backendParams, route: params.route});
|
return await mainApi({backendParams, route: route});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function main({backendParams, route}) {
|
async function mainApi({backendParams, route}) {
|
||||||
if (Object.keys(backend).indexOf(route) == -1) {
|
if (Object.keys(backend).indexOf(route) == -1) {
|
||||||
return new Response(JSON.stringify({success: 'route doesn\'t exist'}));
|
return new Response(JSON.stringify({success: 'route doesn\'t exist'}));
|
||||||
}
|
}
|
||||||
|
|
||||||
var resData = await backend[route](backendParams);
|
var resData = await backendProxy({ route, backendParams });
|
||||||
|
|
||||||
return new Response(JSON.stringify(resData));
|
return new Response(JSON.stringify(resData));
|
||||||
};
|
};
|
Loading…
Reference in a new issue