fix: login with hex key does not work, missing proper error when nsec or private key is wrong

This commit is contained in:
Davinci 2024-05-22 12:08:02 +02:00
parent bb28e47ff9
commit 213ae79bf5

View File

@ -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 = () => {
<Typography variant="h4">Welcome to Sigit</Typography>
<TextField
onKeyDown={handleInputKeyDown}
label="nip05 login / nip46 bunker string / nsec"
label="nip05 login / nip46 bunker string / nsec / private key (hex)"
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
sx={{ width: '100%', mt: 2 }}