Login with NSEC and HEX private key formats. Proper errors. #66
@ -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
|
||||
m marked this conversation as resolved
|
||||
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}
|
||||
y marked this conversation as resolved
Outdated
y
commented
Shouldn't Shouldn't `nsec` be one of the options?
m
commented
@b said that we should not display it so we do not encourage users to use it. But it is visible in the error message if user types in something wrong. @b said that we should not display it so we do not encourage users to use it. But it is visible in the error message if user types in something wrong.
|
||||
onChange={(e) => setInputValue(e.target.value)}
|
||||
sx={{ width: '100%', mt: 2 }}
|
||||
|
Loading…
Reference in New Issue
Block a user
Please remove not used code