From 213ae79bf52da893dccc4576dd690cddbb0e4bd8 Mon Sep 17 00:00:00 2001 From: Davinci Date: Wed, 22 May 2024 12:08:02 +0200 Subject: [PATCH] fix: login with hex key does not work, missing proper error when nsec or private key is wrong --- src/pages/login/index.tsx | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/src/pages/login/index.tsx b/src/pages/login/index.tsx index 9c224b7..9539ee7 100644 --- a/src/pages/login/index.tsx +++ b/src/pages/login/index.tsx @@ -20,6 +20,7 @@ import { LoginMethods } from '../../store/auth/types' import { Dispatch } from '../../store/store' import { npubToHex, queryNip05 } from '../../utils' import styles from './style.module.scss' +import { hexToBytes } from '@noble/hashes/utils' export const Login = () => { const [searchParams] = useSearchParams() @@ -92,9 +93,24 @@ export const Login = () => { }) } - const loginWithNsec = async () => { - const nsec = inputValue - const privateKey = nip19.decode(nsec).data as Uint8Array + /** + * Login with NSEC or HEX private key + * @param privateKey in HEX format + */ + const loginWithNsec = async (privateKey?: Uint8Array) => { + let nsec = '' + + if (privateKey) { + nsec = nip19.nsecEncode(privateKey) + } else { + nsec = inputValue + + try { + privateKey = nip19.decode(nsec).data as Uint8Array + } catch(err) { + toast.error(`Error decoding the nsec. ${err}`) + } + } if (!privateKey) { toast.error( @@ -307,7 +323,19 @@ export const Login = () => { return loginWithNsecBunker() } - toast.error('Invalid Input!') + // Check if maybe hex nsec + try { + // const privateKey = nip19.decode(inputValue).data as Uint8Array + const privateKey = hexToBytes(inputValue) + const publickey = getPublicKey(privateKey) + + if (publickey) return loginWithNsec(privateKey) + + } catch(err) { + console.warn('err', err) + } + + toast.error('Invalid format, please use: private key (hex), nsec..., bunker:// or nip05 format.') return } @@ -329,7 +357,7 @@ export const Login = () => { Welcome to Sigit setInputValue(e.target.value)} sx={{ width: '100%', mt: 2 }}