aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/Feed.svelte
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-12-24 05:22:50 -0800
committerAdam Soltys <[email protected]>2022-12-24 05:22:50 -0800
commit10c20c0c5b130c389680e37e4e4aba8e2abdbf1e (patch)
tree6862c7f94c899b3dad177b16698c08abc678eefb /src/components/Feed.svelte
parente1a34bbc86600c6dfb782ac936030379deb6365a (diff)
downloadcoinos-ui-10c20c0c5b130c389680e37e4e4aba8e2abdbf1e.tar.gz
coinos-ui-10c20c0c5b130c389680e37e4e4aba8e2abdbf1e.zip
password prompt and pin fixes
Diffstat (limited to 'src/components/Feed.svelte')
-rw-r--r--src/components/Feed.svelte74
1 files changed, 37 insertions, 37 deletions
diff --git a/src/components/Feed.svelte b/src/components/Feed.svelte
index 00226692..0ccda7b8 100644
--- a/src/components/Feed.svelte
+++ b/src/components/Feed.svelte
@@ -1,55 +1,51 @@
<script>
+ import { onMount } from 'svelte';
import { Avatar } from '$comp';
import { browser } from '$app/environment';
import VirtualScroll from 'svelte-virtual-scroll-list';
- import { punk } from '$lib/utils';
- import { Buffer } from 'buffer';
- import { entropyToMnemonic, mnemonicToSeedSync } from 'bip39';
import { enhance } from '$app/forms';
- import { bech32m } from 'bech32';
- import { calculateId, signId } from 'nostr';
- import { bip32, stretch, post } from '$lib/utils';
+ import { post, punk, failure } from '$lib/utils';
+ import { Password } from '$comp';
+ import { password, passwordPrompt } from '$lib/store';
+ import { send } from '$lib/nostr';
export let events;
export let user;
- const { decode, fromWords } = bech32m;
-
- let message;
+ let message, submitting;
+ $: submitting && $password && submit();
let submit = async () => {
- let mnemonic, key, password, seed, entropy, child, privkey;
- entropy = Buffer.from(
- await crypto.subtle.decrypt(
- { name: 'AES-GCM', iv: new Uint8Array(16) },
- await stretch(password, Buffer.from(user.salt, 'hex')),
- Uint8Array.from(fromWords(decode(user.cipher, 180).words))
- ),
- 'hex'
- ).toString('hex');
+ submitting = true;
+ try {
+ let mnemonic, key, seed, entropy, child, privkey;
+ if (!$password) return ($passwordPrompt = true);
+
+ try {
+ await post('/password', { password: $password });
+ } catch (e) {
+ return ($passwordPrompt = true);
+ }
- mnemonic = entropyToMnemonic(entropy);
- seed = mnemonicToSeedSync(mnemonic);
- key = bip32.fromSeed(seed);
- child = key.derivePath("m/44'/1237'/0'/0/0");
- privkey = child.privateKey;
+ let event = {
+ pubkey: user.pubkey,
+ created_at: Math.floor(Date.now() / 1000),
+ kind: 1,
+ content: message,
+ tags: []
+ };
- let event = {
- pubkey: user.pubkey,
- created_at: Math.floor(Date.now() / 1000),
- kind: 1,
- content: message,
- tags: []
- };
+ await send(event, user, $password);
- event.id = await calculateId(event);
- event.sig = await signId(privkey, event.id);
- await post(`/${user.username}`, { event });
+ event.user = user;
+ event.seen = event.created_at;
- event.user = user;
- event.seen = event.created_at;
- events[event.id] = event;
- events = events;
+ events[event.id] = event;
+ events = events;
+ } catch (e) {
+ failure('Problem posting event');
+ console.log(e);
+ }
};
let distance = (date) => {
@@ -78,6 +74,10 @@
<svelte:window bind:innerWidth={w} />
+{#if $passwordPrompt}
+ <Password {user} />
+{/if}
+
<form on:submit|preventDefault={submit} class="flex justify-center gap-4 max-w-2xl mx-auto">
<div class="grow">
<input