aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-10-04 00:42:00 -0700
committerAdam Soltys <[email protected]>2022-10-04 00:42:00 -0700
commit81fc48aa58d932a19fb578e47170c06b3992d03a (patch)
tree30b06d929a175f0e74ef1da87e3d474f9068ad6c
parent63f1a6780bab85ebb48ca1fc142cc6beaf772faa (diff)
downloadcoinos-ui-81fc48aa58d932a19fb578e47170c06b3992d03a.tar.gz
coinos-ui-81fc48aa58d932a19fb578e47170c06b3992d03a.zip
refactoring
-rw-r--r--src/components/AppHeader.svelte1
-rw-r--r--src/components/LandingHeader.svelte1
-rw-r--r--src/components/Qr.svelte2
-rw-r--r--src/components/Tip.svelte1
-rw-r--r--src/lib/socket.js1
-rw-r--r--src/lib/upload.js5
-rw-r--r--src/lib/utils.js14
-rw-r--r--src/routes/+layout.server.js2
-rw-r--r--src/routes/+layout.svelte13
-rw-r--r--src/routes/[username]/+page.server.js6
-rw-r--r--src/routes/[username]/+page.svelte7
-rw-r--r--src/routes/[username]/receive/+page.server.js21
-rw-r--r--src/routes/[username]/receive/+page.svelte3
-rw-r--r--src/routes/[username]/settings/+page.server.js18
-rw-r--r--src/routes/[username]/settings/+page.svelte21
-rw-r--r--src/routes/[username]/settings/_account.svelte7
-rw-r--r--src/routes/[username]/settings/_pos.svelte20
-rw-r--r--src/routes/[username]/settings/_security.svelte9
-rw-r--r--src/routes/enable2fa/+server.js2
-rw-r--r--src/routes/invoice/[id]/+page.svelte9
-rw-r--r--src/routes/launch/+page.svelte1
-rw-r--r--src/routes/login/+page.server.js6
-rw-r--r--src/routes/logout/+page.server.js1
-rw-r--r--src/routes/logout/done/+page.svelte1
-rw-r--r--src/routes/send/+page.server.js5
25 files changed, 83 insertions, 94 deletions
diff --git a/src/components/AppHeader.svelte b/src/components/AppHeader.svelte
index fca11272..dc266abc 100644
--- a/src/components/AppHeader.svelte
+++ b/src/components/AppHeader.svelte
@@ -127,6 +127,7 @@
? $tempProfileFiles.profile
: `/api/public/${subject.username}-profile.png`}
class="w-full h-full object-cover object-center overflow-hidden"
+ alt={subject.username}
/>
</a>
</div>
diff --git a/src/components/LandingHeader.svelte b/src/components/LandingHeader.svelte
index 1f12e049..35b9de06 100644
--- a/src/components/LandingHeader.svelte
+++ b/src/components/LandingHeader.svelte
@@ -7,6 +7,7 @@
export let howItWorks;
export let faq;
export let about;
+ export let user;
let showMobileMenu = false;
const mobileMenuButtonClick = (section) => {
diff --git a/src/components/Qr.svelte b/src/components/Qr.svelte
index 988faf25..2a7c6103 100644
--- a/src/components/Qr.svelte
+++ b/src/components/Qr.svelte
@@ -4,7 +4,7 @@
import { onMount } from 'svelte';
import { copy } from '$lib/utils';
- export let image, text, qr, disabled;
+ export let image, text, qr;
let toggle = () => screenfull.toggle(qr.firstChild);
diff --git a/src/components/Tip.svelte b/src/components/Tip.svelte
index 8509405c..83bf0dfa 100644
--- a/src/components/Tip.svelte
+++ b/src/components/Tip.svelte
@@ -26,7 +26,6 @@
let apply = async () => {
if (customTipAmount > 0) {
tipPercent = (customTipAmount / amountFiat) * 100;
- console.log('TIP PERCENT', tipPercent);
update();
showMobileTip = false;
showCustomAmount = false;
diff --git a/src/lib/socket.js b/src/lib/socket.js
index dac2935e..6317595b 100644
--- a/src/lib/socket.js
+++ b/src/lib/socket.js
@@ -37,6 +37,7 @@ const maxReconnectDelay = 16000;
let currentReconnectDelay = initialReconnectDelay;
export function connect(t) {
+ console.log('CONNECT');
token = t;
clearInterval(interval);
diff --git a/src/lib/upload.js b/src/lib/upload.js
index d43148fb..4b03059c 100644
--- a/src/lib/upload.js
+++ b/src/lib/upload.js
@@ -1,7 +1,4 @@
-import { get } from 'svelte/store';
-import { token } from '$lib/store';
-
-export const upload = async (file, type, progress) => {
+export const upload = async (file, type, progress, token) => {
let url = `/api/upload/${type}`;
let formData = new FormData();
formData.append('file', file);
diff --git a/src/lib/utils.js b/src/lib/utils.js
index a4c77d58..7a988469 100644
--- a/src/lib/utils.js
+++ b/src/lib/utils.js
@@ -38,17 +38,6 @@ export const post = (url, body, headers) => {
});
};
-export const put = (url, body, headers) => {
- headers = { ...headers, 'content-type': 'application/json' };
- return fetch(base + url, {
- method: 'PUT',
- body: JSON.stringify(body),
- headers
- }).then(async (r) => {
- if (!r.ok) throw new Error('put failed');
- });
-};
-
export const copy = (text) => {
navigator.clipboard.writeText(text);
success('Copied!');
@@ -109,14 +98,11 @@ export const info = (m) => {
export const login = async (user, cookies) => {
let maxAge = 30 * 24 * 60 * 60;
let { token } = await post('/login', user);
- console.log('logged in', token);
let expires = new Date();
expires.setSeconds(expires.getSeconds() + maxAge);
- console.log('cs');
cookies.set('token', token, { path: '/' });
- console.log('bs');
};
export const auth = (cookies) => ({ authorization: `Bearer ${cookies.get('token')}` });
diff --git a/src/routes/+layout.server.js b/src/routes/+layout.server.js
index 4beaad93..84e5ce5c 100644
--- a/src/routes/+layout.server.js
+++ b/src/routes/+layout.server.js
@@ -18,7 +18,7 @@ export async function load({ cookies, request, url, params }) {
if (token && token !== 'undefined') {
try {
- user = await get('/me', { accept: 'application/json', authorization: `Bearer ${token}` });
+ user = await get('/me', auth(cookies));
} catch (e) {
throw redirect(307, '/logout');
}
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index 118caa48..a07d2fb1 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -15,6 +15,8 @@
export let data;
let { user, rate: r, token, rates } = data;
+ $: update(data);
+ let update = () => ({ user, rate: r, token, rates } = data);
$rate = r;
$: $selectedRate = user && $rate * (rates[user.currency] / rates.USD);
@@ -26,16 +28,9 @@
locale.subscribe((lng) => {
if (lng) localStorage.setItem(localeLocalStorageKey, lng);
});
-
- if (protectedRoutes.find((p) => $page.url.pathname.match(p))) {
- if (!token) {
- goto('/login');
- warning($t('error.signIn'));
- }
- }
-
- connect(token);
});
+
+ $: browser && connect(token);
</script>
<SvelteToast options={{ reversed: true, intro: { y: 192 } }} />
diff --git a/src/routes/[username]/+page.server.js b/src/routes/[username]/+page.server.js
index 1bd8c434..d6f2978c 100644
--- a/src/routes/[username]/+page.server.js
+++ b/src/routes/[username]/+page.server.js
@@ -5,9 +5,3 @@ export async function load({ params }) {
let { username } = params;
return get(`/users/${username}`);
}
-
-export async function PUT({ request }) {
- let { token } = cookie.parse(request.headers.get('cookie') || '');
- let { user } = await request.json();
- await post(`/user`, user, { authorization: `Bearer ${token}` });
-}
diff --git a/src/routes/[username]/+page.svelte b/src/routes/[username]/+page.svelte
index 5eab4ad2..48039c7b 100644
--- a/src/routes/[username]/+page.svelte
+++ b/src/routes/[username]/+page.svelte
@@ -2,11 +2,12 @@
import { browser } from '$app/environment';
import { onMount } from 'svelte';
import { Icon, PageNotFound } from '$comp';
- import { subject, user } from '$lib/store';
import { copy } from '$lib/utils';
import { t } from '$lib/translations';
export let data;
+ let { subject } = data;
+
let lightningAddress = `${data?.username}@coinos.io`;
onMount(async () => {
@@ -38,10 +39,10 @@
<div class="flex xl:block justify-center items-center my-20 px-3">
<div class="space-y-10 xl:space-y-0">
<div class="xl:ml-[calc(15vw-64px)] space-y-2 w-full md:w-72">
- <h1 class="text-3xl font-bold">{$subject.username}</h1>
+ <h1 class="text-3xl font-bold">{subject.username}</h1>
<p class="text-secondary">
- {$subject.address && $subject.address !== 'null' ? $subject.address : ''}
+ {subject.address && subject.address !== 'null' ? subject.address : ''}
</p>
<!-- TODO
diff --git a/src/routes/[username]/receive/+page.server.js b/src/routes/[username]/receive/+page.server.js
index 8d523213..60e94f0e 100644
--- a/src/routes/[username]/receive/+page.server.js
+++ b/src/routes/[username]/receive/+page.server.js
@@ -1,12 +1,21 @@
-import { auth, post } from '$lib/utils';
+import { auth, get, post } from '$lib/utils';
+import { redirect } from '@sveltejs/kit';
export const actions = {
- default: async ({ cookies, request, parent }) => {
- let { rate, user } = await parent();
- let invoice = Object.fromEntries(await request.formData());
- invoice.rate = rate;
+ default: async ({ cookies, request }) => {
+ let form = await request.formData();
+
+ let invoice = {
+ amount: parseInt(form.get('amount')),
+ network: 'lightning',
+ prompt: form.get('prompt') === 'true',
+ rate: await get('/rate')
+ };
+
+ let user = { username: form.get('username') };
let { uuid } = await post('/invoice', { invoice, user }, auth(cookies));
- throw redirect(303, `/invoice/${uuid}`);
+
+ throw redirect(307, `/invoice/${uuid}`);
}
};
diff --git a/src/routes/[username]/receive/+page.svelte b/src/routes/[username]/receive/+page.svelte
index 3c65279d..d205e6e6 100644
--- a/src/routes/[username]/receive/+page.svelte
+++ b/src/routes/[username]/receive/+page.svelte
@@ -6,11 +6,12 @@
export let data;
let amount;
- let { currency } = data.user;
+ let { currency, username } = data.user;
</script>
<form method="POST" class="flex justify-center items-center mt-24 mb-3 px-3" use:enhance>
<input type="hidden" name="amount" value={amount} />
+ <input type="hidden" name="username" value={username} />
<input type="hidden" name="prompt" value="true" />
<div class="space-y-3 w-full md:w-[300px] mx-auto">
diff --git a/src/routes/[username]/settings/+page.server.js b/src/routes/[username]/settings/+page.server.js
new file mode 100644
index 00000000..49019e9e
--- /dev/null
+++ b/src/routes/[username]/settings/+page.server.js
@@ -0,0 +1,18 @@
+import { invalid } from '@sveltejs/kit';
+import { auth, get, post } from '$lib/utils';
+
+export const actions = {
+ default: async ({ cookies, request }) => {
+ let user = {
+ ...(await get('/me', auth(cookies))),
+ ...Object.fromEntries(await request.formData())
+ };
+ try {
+ await post(`/user`, user, auth(cookies));
+ } catch (e) {
+ return invalid(400, { message: e.message });
+ }
+
+ return { success: true };
+ }
+};
diff --git a/src/routes/[username]/settings/+page.svelte b/src/routes/[username]/settings/+page.svelte
index 410ed1bf..91031e41 100644
--- a/src/routes/[username]/settings/+page.svelte
+++ b/src/routes/[username]/settings/+page.svelte
@@ -1,14 +1,21 @@
<script>
+ import { enhance } from '$app/forms';
import Account from './_account.svelte';
import Pos from './_pos.svelte';
import Security from './_security.svelte';
import { Icon } from '$comp';
import { t } from '$lib/translations';
- import { failure, success, put } from '$lib/utils';
- import { user, avatarUpload, bannerUpload } from '$lib/store';
+ import { failure, success } from '$lib/utils';
+ import { avatarUpload, bannerUpload } from '$lib/store';
import { upload } from '$lib/upload';
+ export let data;
+
+ let { user, rates, token } = data;
+ $: update(data);
+ let update = () => ({ user, rates } = data);
+
let tab = 'account';
let tabs = [
@@ -21,12 +28,12 @@
let save = async () => {
try {
- await put('/user', $user);
+ console.log('Uploading files...');
if ($avatarUpload) {
- await upload($avatarUpload.file, $avatarUpload.type, $avatarUpload.progress);
+ await upload($avatarUpload.file, $avatarUpload.type, $avatarUpload.progress, token);
}
if ($bannerUpload) {
- await upload($bannerUpload.file, $bannerUpload.type, $bannerUpload.progress);
+ await upload($bannerUpload.file, $bannerUpload.type, $bannerUpload.progress, token);
}
success('Settings saved');
} catch (e) {
@@ -35,7 +42,7 @@
};
</script>
-<form on:submit|preventDefault={save} class="mb-[154px]">
+<form method="POST" class="mb-[154px]" use:enhance on:submit={save}>
<div class="mt-24 mb-20 px-3 md:px-0 w-full md:w-[400px] mx-auto space-y-8">
<h1 class="text-center text-3xl md:text-4xl font-semibold mb-10">
{$t('user.settings.header')}
@@ -51,7 +58,7 @@
{/each}
</div>
- <svelte:component this={comp} />
+ <svelte:component this={comp} {user} {rates} />
</div>
<div
class="z-10 fixed bottom-0 bg-white shadow border-t w-full flex justify-center items-center py-3"
diff --git a/src/routes/[username]/settings/_account.svelte b/src/routes/[username]/settings/_account.svelte
index 8a20df43..918a01bf 100644
--- a/src/routes/[username]/settings/_account.svelte
+++ b/src/routes/[username]/settings/_account.svelte
@@ -5,6 +5,8 @@
import { t } from '$lib/translations';
import { upload } from '$lib/upload';
+ export let user;
+
let selectedTheme = 1;
let revealPassword = false;
let password;
@@ -69,14 +71,15 @@
<div>
<label for="username" class="font-bold mb-1 block">{$t('user.settings.username')}</label>
<input disabled type="text" name="username" bind:value={user.username} />
+ <input type="hidden" name="username" bind:value={user.username} />
</div>
<div class="relative">
<label for="password" class="block font-bold block mb-1">{$t('user.settings.newPassword')}</label>
{#if revealPassword}
- <input type="text" bind:value={password} />
+ <input name="password" type="text" bind:value={password} />
{:else}
- <input type="password" bind:value={password} />
+ <input name="password" type="password" bind:value={password} />
{/if}
<button
type="button"
diff --git a/src/routes/[username]/settings/_pos.svelte b/src/routes/[username]/settings/_pos.svelte
index edf54d91..cf4a5ece 100644
--- a/src/routes/[username]/settings/_pos.svelte
+++ b/src/routes/[username]/settings/_pos.svelte
@@ -1,26 +1,18 @@
<script>
import { Icon, Toggle } from '$comp';
import { t } from '$lib/translations';
- import { success, failure, put } from '$lib/utils';
+ import { success, failure } from '$lib/utils';
- const fiats = Object.keys($rates);
+ export let rates, user;
- const updateFiat = async (e) => {
- try {
- $user.currency = e.target.value;
- let r = await put('/' + $user.username, { user: $user });
- success('Local currency updated');
- } catch (e) {
- failure(e.message);
- }
- };
+ const fiats = Object.keys(rates);
</script>
<div>
<label for="currency" class="font-bold block mb-1">{$t('user.settings.localCurrency')}</label>
- <select name="currency" on:change={updateFiat} class="select-styles block py-3 w-full">
+ <select name="currency" class="select-styles block py-3 w-full">
{#each fiats as fiat}
- <option value={fiat} selected={$user.currency === fiat}>{fiat}</option>
+ <option value={fiat} selected={user.currency === fiat}>{fiat}</option>
{/each}
</select>
</div>
@@ -28,7 +20,7 @@
<!-- TODO
<div>
<label for="unit" class="font-bold block mb-1">{$t('user.settings.btcUnit')}</label>
- <select disabled name="unit" class="select-styles block py-3 w-full" bind:value={$user.unit}>
+ <select disabled name="unit" class="select-styles block py-3 w-full" bind:value={user.unit}>
<option value="SAT">{$t('user.settings.satoshis')} (SAT)</option>
<option value="BTC">{$t('user.settings.bitcoin')} (BTC)</option>
</select>
diff --git a/src/routes/[username]/settings/_security.svelte b/src/routes/[username]/settings/_security.svelte
index 3c0009dc..2a490aa4 100644
--- a/src/routes/[username]/settings/_security.svelte
+++ b/src/routes/[username]/settings/_security.svelte
@@ -3,8 +3,9 @@
import { t } from '$lib/translations';
import { Icon, Qr } from '$comp';
import { Pincode, PincodeInput } from 'svelte-pincode';
- import { user } from '$lib/store';
- import { put, success, failure } from '$lib/utils';
+ import { post, success, failure } from '$lib/utils';
+
+ export let user;
let settingPin, setting2fa, disabling2fa;
@@ -30,7 +31,7 @@
let enable2fa = async (twoFa) => {
try {
if (setting2fa && token.length === 6) {
- await put('/enable2fa', { token });
+ await post('/enable2fa', { token });
success('2FA enabled');
user.twofa = 1;
toggleEnabling();
@@ -44,7 +45,7 @@
let disable2fa = async () => {
try {
if (disabling2fa && token.length === 6) {
- await put('/disable2fa', { token });
+ await post('/disable2fa', { token });
success('2FA disabled');
user.twofa = 0;
toggleDisabling();
diff --git a/src/routes/enable2fa/+server.js b/src/routes/enable2fa/+server.js
index 3120e613..344850da 100644
--- a/src/routes/enable2fa/+server.js
+++ b/src/routes/enable2fa/+server.js
@@ -1,6 +1,6 @@
import { auth, post } from '$lib/utils';
-export async function PUT({ cookies, request }) {
+export async function POST({ cookies, request }) {
let body = await request.json();
let res = await post('/2fa', body, auth(cookies));
diff --git a/src/routes/invoice/[id]/+page.svelte b/src/routes/invoice/[id]/+page.svelte
index 9e0f9654..9d140bd5 100644
--- a/src/routes/invoice/[id]/+page.svelte
+++ b/src/routes/invoice/[id]/+page.svelte
@@ -149,15 +149,6 @@
</div>
<style>
- input[type='number']::-webkit-inner-spin-button,
- input[type='number']::-webkit-outer-spin-button {
- -webkit-appearance: none;
- }
-
- input[type='number'] {
- -moz-appearance: textfield;
- }
-
.full-shadow {
box-shadow: inset 0 0 0 1000px rgba(0, 0, 0, 0.25);
}
diff --git a/src/routes/launch/+page.svelte b/src/routes/launch/+page.svelte
index 833e0f08..58a50088 100644
--- a/src/routes/launch/+page.svelte
+++ b/src/routes/launch/+page.svelte
@@ -5,7 +5,6 @@
let { user } = data;
$: link = user ? '/launch/purchase' : '/register';
$redirect = '/launch/purchase';
- console.log('set redirect', $redirect);
</script>
<div class="flex mt-20 px-8">
diff --git a/src/routes/login/+page.server.js b/src/routes/login/+page.server.js
index 28a5d78a..d26d16ed 100644
--- a/src/routes/login/+page.server.js
+++ b/src/routes/login/+page.server.js
@@ -6,10 +6,10 @@ export const actions = {
let user = Object.fromEntries(await request.formData());
try {
await login(user, cookies);
- throw redirect(303, `/${user.username}/dashboard`);
} catch (e) {
- console.log('OW');
- return invalid(403, { error: 'Login failed' });
+ return invalid(400, { message: 'Login failed' });
}
+
+ throw redirect(303, `/${user.username}/dashboard`);
}
};
diff --git a/src/routes/logout/+page.server.js b/src/routes/logout/+page.server.js
index d51dcfbc..caacbbfd 100644
--- a/src/routes/logout/+page.server.js
+++ b/src/routes/logout/+page.server.js
@@ -1,5 +1,4 @@
import { redirect } from '@sveltejs/kit';
-import cookie from 'cookie';
const opts = {
expires: new Date(0),
diff --git a/src/routes/logout/done/+page.svelte b/src/routes/logout/done/+page.svelte
index 47d48c54..2553843d 100644
--- a/src/routes/logout/done/+page.svelte
+++ b/src/routes/logout/done/+page.svelte
@@ -2,7 +2,6 @@
import { onMount } from 'svelte';
import { goto } from '$app/navigation';
import { close } from '$lib/socket';
-
onMount(() => {
close();
goto('/');
diff --git a/src/routes/send/+page.server.js b/src/routes/send/+page.server.js
index d0fefdee..4108bcb5 100644
--- a/src/routes/send/+page.server.js
+++ b/src/routes/send/+page.server.js
@@ -7,7 +7,6 @@ export const actions = {
default: async ({ request }) => {
const values = await request.formData();
const t = values.get('text');
- console.log('parsing', t);
if (!t) return;
// lightning
@@ -17,22 +16,18 @@ export const actions = {
// bitcoin
if (validate(t)) {
- console.log('bitcoin');
throw redirect(303, `/send/bitcoin/${t}`);
}
// ln address
if (t.includes('@') && t.includes('.')) {
- console.log('ln address');
let [name, domain] = t.split('@');
try {
let lnurl = await get(`/encode?domain=${domain}&name=${name}`);
- console.log('lnurl', lnurl);
} catch (e) {}
}
// user
- console.log('username');
return invalid(403, { error: 'Failed to parse destination' });
}