Login stuff

This commit is contained in:
nate
2024-06-28 05:09:32 -04:00
parent 68600a4c4b
commit 9cd73c12db
10 changed files with 192 additions and 133 deletions

View File

@@ -1,29 +1,45 @@
<script lang="ts">
import UserInterface from '$lib/interfaces/user';
import { ndk } from '$lib/stores/nostr';
import { currentUser } from '$lib/store';
import type { NDKUserProfile, NDKUser } from '@nostr-dev-kit/ndk';
import NDK, { NDKUser } from '@nostr-dev-kit/ndk';
import { get } from 'svelte/store';
import { onMount } from 'svelte';
let image: string | undefined;
const _ndk = get(ndk);
let _ndk = get(ndk);
let sessionProfile: NDKUser | null = null;
onMount(() => {
const sessionProfileObj = sessionStorage.getItem('user');
sessionProfile = sessionProfileObj ? JSON.parse(sessionProfileObj) : null;
if (sessionProfile) {
image = sessionProfile.profile?.image;
}
});
const _currentUser = get(currentUser);
let random = (Math.random() + 1).toString(36).substring(6);
let defaultImage = `https://robohash.org/${random}`;
if (!_ndk.activeUser?.profile?.image) {
image = defaultImage;
} else {
image = _ndk.activeUser.profile.image;
$: {
console.debug(sessionProfile);
image = sessionProfile?.profile?.image;
}
$: {image = _ndk.activeUser?.profile?.image;}
// $: {
// //image = $currentUser?.profile?.image;
// image = _ndk.activeUser?.profile?.image;
// console.debug(image);
// }
$: ndkUpdated(_ndk);
function ndkUpdated(_ndk: NDK) {
console.debug('NDK updated');
if (_ndk.activeUser && _ndk.activeUser.profile && _ndk.activeUser.profile.image) {
image = _ndk.activeUser.profile.image;
} else {
image = defaultImage;
}
_ndk = _ndk;
}
</script>
<figure class="image">

View File

@@ -4,8 +4,10 @@
import { currentUser } from '$lib/store';
import { browser } from '$app/environment';
import { createEventDispatcher } from 'svelte';
import { get } from 'svelte/store';
let noNip07: boolean;
let _ndk = get(ndk);
$: if (browser) {
noNip07 = !window.nostr;
@@ -14,13 +16,14 @@
const dispatch = createEventDispatcher();
async function nip07Login() {
const user = await login($ndk, undefined, 'nip07');
const user = await login('nip07', undefined);
if (!user) alert('Nip07 Login Failed');
else {
$currentUser = user;
$currentUser.fetchProfile();
await $currentUser.fetchProfile();
localStorage.setItem('nostr-key-method', 'nip07');
localStorage.setItem('nostr-target-npub', $currentUser.npub);
_ndk.activeUser = $currentUser;
dispatch('closeModal');
console.debug($currentUser);
}

View File

@@ -1,5 +1,4 @@
<script lang="ts">
import {} from '@nostr-dev-kit/ndk-svelte-components';
import Avatar from '$lib/components/Avatar.svelte';
import { ndk } from '$lib/stores/nostr';
import { currentUser } from '$lib/store';
@@ -9,11 +8,6 @@
let active = false;
let avatarimage: string | undefined;
$: {
avatarimage = $currentUser?.profile?.image;
}
function signIn() {
console.debug('signing in');
dispatch('signin');
@@ -24,8 +18,7 @@
<div class="navbar-brand">
<h1 class="title is-1">CoFabricate</h1>
<!-- svelte-ignore a11y-missing-attribute -->
<a
role="button"
<button
class="navbar-burger"
class:is-active={active}
aria-label="menu"
@@ -37,19 +30,32 @@
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</button>
</div>
<div id="mainMenu" class="navbar-menu" class:is-active={active}>
<div class="navbar-end">
<div class="navbar-item">
<div class="buttons">
<a class="button" href="/">Home</a>
</div>
<div class="navbar-item">
<a class="button" href="/about">About</a>
</div>
<div class="navbar-item">
<button on:click={signIn}>
<Avatar />
</button>
</div>
</div>
</div>
</div>
<!-- <div id="mobileMenu" class="navbar-menu is-hidden-desktop" class:is-active={active}>
<aside class="menu">
</aside>
</div> -->
</nav>
<style>
.nav-menu {
display: flex;
flex-direction: column;
}
</style>

View File

@@ -0,0 +1,10 @@
<script lang="ts">
import { currentUser } from '$lib/store';
import { ndk } from '$lib/stores/nostr';
import { NDKList } from '@nostr-dev-kit/ndk';
import { get, writable } from 'svelte/store';
const $ndk = get(ndk);
export const userBlossom = writable<NDKList | null>(null);
</script>

View File

@@ -1,5 +1,5 @@
import { writable } from "svelte/store";
import { NDKUser } from "@nostr-dev-kit/ndk";
import { writable } from 'svelte/store';
import { NDKUser } from '@nostr-dev-kit/ndk';
export const currentUser = writable<NDKUser | null>(null);
export const currentUserFollowPubkeys = writable<string[] | undefined>(undefined);
@@ -13,7 +13,7 @@ export type ScopeSelection = {
export const currentScope = writable<ScopeSelection>({
label: 'global',
id: 'global',
pubkeys: undefined,
pubkeys: undefined
});
let zapEvent: any;

View File

@@ -1,12 +1,14 @@
import { writable } from 'svelte/store';
import NDKSvelte from '@nostr-dev-kit/ndk-svelte';
//import NDKSvelte from '@nostr-dev-kit/ndk-svelte';
import NDK from '@nostr-dev-kit/ndk';
let relays;
try {
relays = localStorage.getItem('relays');
} catch (e) {}
} catch (e) {
console.error(e);
}
let relayList: string[] = [];
@@ -31,11 +33,10 @@ const _ndk: NDK = new NDK({
_ndk.connect();
console.log(_ndk.activeUser?.profile);
console.debug('Nostr store current user: ', _ndk.activeUser?.profile);
const ndkStore = writable(_ndk);
export const ndk = ndkStore;
const _bunkerNDK = new NDK({

View File

@@ -1,4 +1,12 @@
import { writable } from "svelte/store";
import { get, writable } from 'svelte/store';
// import { ndk } from "$lib/stores/nostr";
// import type { NDKUser } from "@nostr-dev-kit/ndk";
// let $ndk = get(ndk);
// export let user: NDKUser | undefined = undefined;
export type LoginState = 'logging-in' | 'logged-in' | 'contacting-remote-signer' | 'logged-out';
export const loginState = writable<LoginState | null>(null);
// if ($ndk.cacheAdapter?.fetchProfile)

View File

@@ -1,9 +1,9 @@
import { findEphemeralSigner } from "$lib/signers/ephemeral";
import { NDKPrivateKeySigner, type NDKSigner, type NDKUser } from "@nostr-dev-kit/ndk";
import { writable, get as getStore, derived } from "svelte/store";
import ndkStore from "./nostr";
import { currentUser as currentUserStore } from "../store";
import type NDKList from "$lib/ndk-kinds/lists";
import { findEphemeralSigner } from '$lib/signers/ephemeral';
import NDK, { NDKPrivateKeySigner, type NDKSigner, type NDKUser } from '@nostr-dev-kit/ndk';
import { writable, get as getStore, derived } from 'svelte/store';
import { ndk } from './nostr';
import { currentUser as currentUserStore } from '../store';
import type NDKList from '$lib/ndk-kinds/lists';
export type SignerStoreItem = {
signer: NDKPrivateKeySigner;
@@ -30,10 +30,10 @@ export const npubSigners = derived(signers, ($signers) => {
async function getDelegatedSignerName(list: NDKList) {
let name = '';
const currentUser: NDKUser = getStore(currentUserStore);
const currentUser = getStore(currentUserStore);
if (!currentUser?.profile) {
currentUser.ndk = getStore(ndkStore);
if (currentUser && !currentUser.profile) {
currentUser.ndk = getStore(ndk);
await currentUser?.fetchProfile();
}
@@ -51,9 +51,9 @@ export async function getSigner(list: NDKList): Promise<SignerStoreItem> {
if (item) return item;
const ndk = getStore(ndkStore);
let signer = await findEphemeralSigner(ndk, ndk.signer!, {
associatedEventNip19: list.encode(),
const _ndk: NDK = getStore(ndk);
let signer = await findEphemeralSigner(_ndk, _ndk.signer!, {
associatedEventNip19: list.encode()
});
if (signer) {
@@ -62,7 +62,7 @@ export async function getSigner(list: NDKList): Promise<SignerStoreItem> {
signer: signer!,
user: await signer.user(),
saved: true,
id,
id
};
} else {
signer = NDKPrivateKeySigner.generate();
@@ -71,10 +71,10 @@ export async function getSigner(list: NDKList): Promise<SignerStoreItem> {
user: await signer.user(),
saved: false,
name: await getDelegatedSignerName(list),
id,
id
};
}
item.user.ndk = ndk;
item.user.ndk = _ndk;
store.set(id, item);

View File

@@ -13,7 +13,7 @@ import { loginState } from '$lib/stores/sesson';
import { get } from 'svelte/store';
export type LoginMethod = 'none' | 'pk' | 'nip07' | 'nip46';
const $ndk = get(ndk);
let $ndk = get(ndk);
const $bunkerNDK = get(bunkerNDK);
export async function login(method: LoginMethod, userPubkey?: string): Promise<NDKUser | null> {
@@ -25,9 +25,7 @@ export async function login(method: LoginMethod, userPubkey?: string ): Promise<
loginState.set(null);
return null;
case 'pk':
const key = localStorage.getItem('nostr-key');
if (!key) return null;
else return await pkLogin(key);
return await pkLogin();
case 'nip07':
u = await nip07Login($ndk);
console.debug('Logged in as: ', u);
@@ -52,11 +50,20 @@ export async function login(method: LoginMethod, userPubkey?: string ): Promise<
}
}
async function pkLogin(key: string): Promise<NDKUser | null> {
async function pkLogin(): Promise<NDKUser | null> {
const key = localStorage.getItem('nostr-key');
if (!key) return null;
else return await pkSignin(key);
}
async function pkSignin(key: string): Promise<NDKUser | null> {
const signer = new NDKPrivateKeySigner(key);
const u = await signer.user();
if (u) loggedIn(signer, u!, 'pk');
return u;
const user = await signer.user();
if (user) loggedIn(signer, user!, 'pk');
await user.fetchProfile();
currentUser.set(user);
sessionStorage.setItem('user', JSON.stringify(user));
return user;
}
async function nip07Login(ndk: NDK): Promise<NDKUser | null> {
@@ -74,12 +81,19 @@ async function nip07Login(ndk: NDK): Promise<NDKUser | null> {
ndk.signer = new NDKNip07Signer();
user = await ndk.signer?.blockUntilReady();
ndk.activeUser = user;
ndk.activeUser.fetchProfile();
user.ndk = ndk;
console.debug('Nip07 Login user:', user);
console.debug('NDK: ', ndk);
if (user) localStorage.setItem('nostr-key-method', 'nip07');
localStorage.setItem('pubkey', user.pubkey);
} catch (e) {}
await user.fetchProfile();
currentUser.set(user);
sessionStorage.setItem('user', JSON.stringify(user));
$ndk = ndk;
} catch (e) {
console.error(`NIP-07 login error: ${e}`);
}
}
if (user) await user.fetchProfile();
return user;

View File

@@ -1,9 +1,9 @@
import { loginState } from "$lib/stores/sesson";
import { loggedIn, login, type LoginMethod } from "$lib/utils/login";
import { ndk } from "$lib/stores/nostr";
import { get } from "svelte/store";
import { currentUser } from "$lib/store";
import { NDKNip07Signer, NDKUser } from "@nostr-dev-kit/ndk";
import { loginState } from '$lib/stores/sesson';
import { loggedIn, login, type LoginMethod } from '$lib/utils/login';
import { ndk } from '$lib/stores/nostr';
import { get } from 'svelte/store';
import { currentUser } from '$lib/store';
import { NDKNip07Signer, NDKUser } from '@nostr-dev-kit/ndk';
const _ndk = get(ndk);
@@ -14,7 +14,7 @@ export async function browserSetup() {
if (pubkey) {
const u = _ndk.getUser({ pubkey });
u.fetchProfile();
loginState.set('logging-in')
loginState.set('logging-in');
currentUser.set(u);
}
@@ -23,6 +23,7 @@ export async function browserSetup() {
if (!pubkey && method !== 'none') return newSessionTryNip07();
if (method && pubkey) {
console.debug(`logging in with ${method} as ${pubkey}`);
return await login(method, pubkey);
}
}