Login with NSEC and HEX private key formats. Proper errors. #66

Merged
b merged 5 commits from issue-45 into main 2024-05-24 08:35:33 +00:00
2 changed files with 45 additions and 9 deletions

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 = hexToBytes(inputValue)
m marked this conversation as resolved
Review

Please remove not used code

Please remove not used code
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"
value={inputValue}
y marked this conversation as resolved Outdated
Outdated
Review

Shouldn't nsec be one of the options?

Shouldn't `nsec` be one of the options?
Outdated
Review

@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 }}

View File

@ -208,7 +208,7 @@ export const ProfilePage = () => {
</Box>
</Box>
<Box className={styles.head}>
<Box sx={{lineHeight: 1}} className={styles.npubNip}>
<Box sx={{ lineHeight: 1 }} className={styles.npubNip}>
<Box
sx={{
display: 'flex'
@ -216,7 +216,7 @@ export const ProfilePage = () => {
>
{profileMetadata && (
<Typography
sx={{ margin: '5px 0 5px 0'}}
sx={{ margin: '5px 0 5px 0' }}
variant="h6"
className={styles.bold}
>
@ -240,11 +240,19 @@ export const ProfilePage = () => {
</Box>
<Box>
{profileMetadata?.nip05 &&
textElementWithCopyIcon(profileMetadata.nip05, undefined, 15)}
textElementWithCopyIcon(
profileMetadata.nip05,
undefined,
15
)}
</Box>
<Box>
{profileMetadata?.lud16 &&
textElementWithCopyIcon(profileMetadata.lud16, undefined, 15)}
textElementWithCopyIcon(
profileMetadata.lud16,
undefined,
15
)}
</Box>
</Box>