diff --git a/src/pages/Login.js b/src/pages/Login.js index 97509b8..35b8201 100644 --- a/src/pages/Login.js +++ b/src/pages/Login.js @@ -1,6 +1,6 @@ import { useEffect, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; -import { setPrivateKey } from "../state/Login"; +import { setPrivateKey, setPublicKey } from "../state/Login"; import * as secp from '@noble/secp256k1'; import { bech32 } from "bech32"; import { useNavigate } from "react-router-dom"; @@ -8,21 +8,21 @@ import { useNavigate } from "react-router-dom"; export default function LoginPage() { const dispatch = useDispatch(); const navigate = useNavigate(); - const privateKey = useSelector(s => s.login.privateKey); + const publicKey = useSelector(s => s.login.publicKey); const [key, setKey] = useState(""); function doLogin() { - if(key.startsWith("nsec")) { + if (key.startsWith("nsec")) { let nKey = bech32.decode(key); let buff = bech32.fromWords(nKey.words); let hexKey = secp.utils.bytesToHex(Uint8Array.from(buff)); - if(secp.utils.isValidPrivateKey(hexKey)) { + if (secp.utils.isValidPrivateKey(hexKey)) { dispatch(setPrivateKey(hexKey)); } else { throw "INVALID PRIVATE KEY"; } } else { - if(secp.utils.isValidPrivateKey(key)) { + if (secp.utils.isValidPrivateKey(key)) { dispatch(setPrivateKey(key)); } else { throw "INVALID PRIVATE KEY"; @@ -30,20 +30,43 @@ export default function LoginPage() { } } + async function doNip07Login() { + let pubKey = await window.nostr.getPublicKey(); + dispatch(setPublicKey(pubKey)); + } + + function altLogins() { + let nip07 = 'nostr' in window; + + if (!nip07) { + return null; + } + + return ( + <> +

Other Login Methods

+
+
doNip07Login()}>Login with Extension (NIP-07)
+
+ + ) + } + useEffect(() => { - if(privateKey) { + if (publicKey) { navigate("/"); } - }, [privateKey]); + }, [publicKey]); + return ( <>

Login

Enter your private key:

- setKey(e.target.value)}/> + setKey(e.target.value)} />
doLogin()}>Login
- + {altLogins()} ); } \ No newline at end of file diff --git a/src/state/Login.js b/src/state/Login.js index 19410d9..0ec99c8 100644 --- a/src/state/Login.js +++ b/src/state/Login.js @@ -44,6 +44,9 @@ const LoginSlice = createSlice({ window.localStorage.setItem(PrivateKeyItem, action.payload); state.publicKey = secp.utils.bytesToHex(secp.schnorr.getPublicKey(action.payload, true)); }, + setPublicKey: (state, action) => { + state.publicKey = action.payload; + }, setRelays: (state, action) => { state.relays = action.payload; }, @@ -57,5 +60,5 @@ const LoginSlice = createSlice({ } }); -export const { init, setPrivateKey, setRelays, setFollows, logout } = LoginSlice.actions; +export const { init, setPrivateKey, setPublicKey, setRelays, setFollows, logout } = LoginSlice.actions; export const reducer = LoginSlice.reducer; \ No newline at end of file