Rewrite
This commit is contained in:
parent
ce7957e0bf
commit
d8670ecf81
18 changed files with 191 additions and 193 deletions
|
@ -1,7 +1,8 @@
|
|||
/** @type {import('./$types').PageLoad} */
|
||||
export async function load({ fetch, params }) {
|
||||
const res = await fetch(`/api/session`);
|
||||
const username = await res.text();
|
||||
|
||||
return { username };
|
||||
export async function load({ fetch }) {
|
||||
const res = await fetch(`/api/token`);
|
||||
|
||||
const username = await res.json();
|
||||
|
||||
return { username: username.data };
|
||||
}
|
|
@ -8,7 +8,7 @@ export async function load({ fetch, params, url }) {
|
|||
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
|
||||
const res = await fetch(`/api/explore?page=${id}`);
|
||||
const res = await fetch(`/api/postBulk?page=${id}`);
|
||||
const postJson = await res.json();
|
||||
|
||||
return { postJson, id };
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
export let data;
|
||||
</script>
|
||||
|
||||
{#each data.postJson as post}
|
||||
{#each data.postJson.data as post}
|
||||
<Post
|
||||
success={post.success}
|
||||
username={post.username}
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
import { checkLength, checkRegex } from '../../lib/util.js';
|
||||
import { registerBackend, loginBackend } from '../../lib/db.js';
|
||||
|
||||
async function basicChecks(data) {
|
||||
const pass = data.get('pass') + '';
|
||||
const user = data.get('user') + '';
|
||||
|
||||
var lengthCheck = false;
|
||||
|
||||
lengthCheck =
|
||||
checkLength(pass,'Password',4,1024) ||
|
||||
checkLength(user,'Username',1,64) ||
|
||||
checkRegex(user,'Username',/[^A-Za-z0-9\-\_]/g);
|
||||
|
||||
return {
|
||||
user,
|
||||
pass,
|
||||
lengthCheck
|
||||
};
|
||||
}
|
||||
|
||||
/** @type {import('./$types').Actions} */
|
||||
export const actions = {
|
||||
register: async ({ request }) => {
|
||||
const data = await request.formData();
|
||||
|
||||
const pass2 = data.get('pass2') + '';
|
||||
|
||||
var {lengthCheck, user, pass} = await basicChecks(data);
|
||||
|
||||
if (lengthCheck)
|
||||
return lengthCheck;
|
||||
|
||||
if (pass != pass2)
|
||||
return { success: 'Failed to confirm password.' };
|
||||
|
||||
return await registerBackend({ user, pass });
|
||||
},
|
||||
|
||||
login: async ({ request, cookies }) => {
|
||||
const data = await request.formData();
|
||||
|
||||
var {lengthCheck, user, pass} = await basicChecks(data);
|
||||
|
||||
if (lengthCheck)
|
||||
return lengthCheck;
|
||||
|
||||
var result = await loginBackend({ user, pass });
|
||||
|
||||
if (result.token) {
|
||||
cookies.set('token',result.token, {
|
||||
maxAge: 60 * 60 * 24 * 7,
|
||||
path: '/'
|
||||
});
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
};
|
|
@ -1,33 +1,46 @@
|
|||
<script>
|
||||
import Area from '$lib/Area.svelte';
|
||||
import { handleSubmit } from '$lib/util.js';
|
||||
|
||||
/** @type {import('./$types').PageData} */
|
||||
export let data;
|
||||
/** @type {import('./$types').ActionData} */
|
||||
export let form;
|
||||
export let form = {};
|
||||
|
||||
let submitFunc = async e => form = JSON.parse(await handleSubmit(e))
|
||||
</script>
|
||||
|
||||
<Area>
|
||||
<Area handleSubmit=''>
|
||||
<p slot="header">
|
||||
Log in / Register
|
||||
Log in
|
||||
</p>
|
||||
<form slot="main" method='POST'>
|
||||
<p>
|
||||
Username: <input name='user'>
|
||||
</p>
|
||||
<p>
|
||||
Password: <input type='password' name='pass'>
|
||||
</p>
|
||||
<p>
|
||||
Confirm Password: <input type='password' name='pass2'>
|
||||
</p>
|
||||
<p>
|
||||
<input formaction="?/login" type='submit' value='Log in'>
|
||||
</p>
|
||||
<p>
|
||||
<input formaction="?/register" type='submit' value='Register'>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
<span slot='main'>
|
||||
<h2>Login</h2>
|
||||
<form action='/api/login' on:submit|preventDefault={submitFunc} method='POST'>
|
||||
<p>
|
||||
Username: <input name='user'>
|
||||
</p>
|
||||
<p>
|
||||
Password: <input type='password' name='pass'>
|
||||
</p>
|
||||
<p>
|
||||
<input type='submit' value='Log in'>
|
||||
</p>
|
||||
</form>
|
||||
<h2>Register</h2>
|
||||
<form action='/api/register' on:submit|preventDefault={submitFunc} method='POST'>
|
||||
<p>
|
||||
Username: <input name='user'>
|
||||
</p>
|
||||
<p>
|
||||
Password: <input type='password' name='pass'>
|
||||
</p>
|
||||
<p>
|
||||
Confirm Password: <input type='password' name='pass2'>
|
||||
</p>
|
||||
<p>
|
||||
<input type='submit' value='Register'>
|
||||
</p>
|
||||
</form>
|
||||
</span>
|
||||
<p slot="footer">
|
||||
{#if form?.success}
|
||||
<p>{form?.success}</p>
|
||||
|
|
33
src/routes/api/[route]/+server.js
Normal file
33
src/routes/api/[route]/+server.js
Normal file
|
@ -0,0 +1,33 @@
|
|||
import { backend } from '../../../lib/db.js';
|
||||
|
||||
/** @type {import('./$types').RequestHandler} */
|
||||
export async function GET({ url, cookies, params }) {
|
||||
var backendParams = {cookies};
|
||||
|
||||
for (const [key, value] of url.searchParams) {
|
||||
backendParams[key] = value;
|
||||
}
|
||||
|
||||
return await main({backendParams, route: params.route});
|
||||
}
|
||||
|
||||
/** @type {import('./$types').RequestHandler} */
|
||||
export async function POST({ url, cookies, request, params }) {
|
||||
var backendParams = {cookies};
|
||||
|
||||
for (const [key, value] of (await request.formData()).entries()) {
|
||||
backendParams[key] = value;
|
||||
}
|
||||
|
||||
return await main({backendParams, route: params.route});
|
||||
}
|
||||
|
||||
async function main({backendParams, route}) {
|
||||
if (Object.keys(backend).indexOf(route) == -1) {
|
||||
return new Response(JSON.stringify({success: 'route doesn\'t exist'}));
|
||||
}
|
||||
|
||||
var resData = await backend[route](backendParams);
|
||||
|
||||
return new Response(JSON.stringify(resData));
|
||||
};
|
|
@ -1,10 +0,0 @@
|
|||
import { postGetBulkBackend } from '../../../lib/db.js';
|
||||
|
||||
/** @type {import('./$types').RequestHandler} */
|
||||
export async function GET({ url, cookies }) {
|
||||
var page = url.searchParams.get('page') * 1;
|
||||
|
||||
var postData = await postGetBulkBackend({ rows: 5, page });
|
||||
|
||||
return new Response(JSON.stringify(postData));
|
||||
};
|
|
@ -1,10 +0,0 @@
|
|||
import { postGetBackend } from '../../../lib/db.js';
|
||||
|
||||
/** @type {import('./$types').RequestHandler} */
|
||||
export async function GET({ url, cookies }) {
|
||||
var id = url.searchParams.get('post');
|
||||
|
||||
var postData = await postGetBackend({ id });
|
||||
|
||||
return new Response(JSON.stringify(postData));
|
||||
};
|
|
@ -1,11 +0,0 @@
|
|||
import { tokenBackend } from '../../../lib/db.js';
|
||||
|
||||
|
||||
/** @type {import('./$types').RequestHandler} */
|
||||
export async function GET({ url, cookies }) {
|
||||
var token = cookies.get('token') || '';
|
||||
|
||||
var username = await tokenBackend({token});
|
||||
|
||||
return new Response(username + '');
|
||||
};
|
|
@ -1,17 +0,0 @@
|
|||
import { tokenBackend, voteBackend } from '../../../lib/db.js';
|
||||
|
||||
/** @type {import('./$types').RequestHandler} */
|
||||
export async function GET({ url, cookies }) {
|
||||
var token = cookies.get('token') || '';
|
||||
|
||||
var user = await tokenBackend({token});
|
||||
|
||||
if (!user) return new Response('fail');
|
||||
|
||||
var id = url.searchParams.get('post');
|
||||
var vote = url.searchParams.get('vote');
|
||||
|
||||
voteBackend({user,id,vote});
|
||||
|
||||
return new Response();
|
||||
};
|
|
@ -1,17 +1,9 @@
|
|||
import { tokenBackend, postCreateBackend } from '../../lib/db.js';
|
||||
import { backend } from '../../lib/db.js';
|
||||
import { checkLength, checkRegex } from '../../lib/util.js';
|
||||
|
||||
/** @type {import('./$types').Actions} */
|
||||
export const actions = {
|
||||
create: async ({ request, cookies }) => {
|
||||
|
||||
var user = await tokenBackend({
|
||||
token: cookies.get('token')
|
||||
});
|
||||
|
||||
if (!user)
|
||||
return {'success': 'Not logged in.'}
|
||||
|
||||
const data = await request.formData();
|
||||
const content = data.get('content') + '';
|
||||
|
||||
|
@ -20,7 +12,7 @@ export const actions = {
|
|||
if (lengthCheck)
|
||||
return lengthCheck;
|
||||
|
||||
await postCreateBackend({user, content});
|
||||
await backend.postCreate({user, content});
|
||||
|
||||
return {'success': 'Successfully posted.'};
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<script>
|
||||
import Area from '$lib/Area.svelte';
|
||||
|
||||
/** @type {import('./$types').PageData} */
|
||||
export let data;
|
||||
import { handleSubmit } from '$lib/util.js';
|
||||
|
||||
/** @type {import('./$types').ActionData} */
|
||||
export let form;
|
||||
</script>
|
||||
|
@ -18,7 +18,7 @@
|
|||
<p slot="header">
|
||||
Create Post
|
||||
</p>
|
||||
<form slot="main" method='POST'>
|
||||
<form slot="main" action='/api/postCreate' method='POST' on:submit|preventDefault={async e => form = JSON.parse(await handleSubmit(e)) }>
|
||||
<p>
|
||||
<textarea name='content'></textarea>
|
||||
</p>
|
||||
|
|
|
@ -2,25 +2,21 @@ import { redirect } from '@sveltejs/kit';
|
|||
|
||||
/** @type {import('./$types').PageLoad} */
|
||||
export async function load({ fetch, params, url }) {
|
||||
var search = url.searchParams;
|
||||
|
||||
var voteType = search.get('vote');
|
||||
|
||||
var id = params.post;
|
||||
|
||||
if (voteType) {
|
||||
var voteRes = await fetch(`/api/vote?post=${id}&vote=${voteType}`);
|
||||
var voteJson = await voteRes.text();
|
||||
|
||||
if (voteJson == 'fail') {
|
||||
throw redirect(302, '/account');
|
||||
}
|
||||
}
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
|
||||
const res = await fetch(`/api/post?post=${id}`);
|
||||
const postJson = await res.json();
|
||||
var f = (new FormData());
|
||||
|
||||
f.append('id',id);
|
||||
const res = await fetch(`/api/postGet`, {
|
||||
method: 'POST',
|
||||
body: f
|
||||
});
|
||||
const postJson = (await res.json()).data;
|
||||
|
||||
console.log(postJson);
|
||||
|
||||
return postJson;
|
||||
}
|
|
@ -3,8 +3,6 @@
|
|||
|
||||
/** @type {import('./$types').PageData} */
|
||||
export let data;
|
||||
/** @type {import('./$types').ActionData} */
|
||||
export let form;
|
||||
</script>
|
||||
|
||||
<Post
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue