diff --git a/src/pages/create/index.tsx b/src/pages/create/index.tsx index 1a3d207..f7a11ee 100644 --- a/src/pages/create/index.tsx +++ b/src/pages/create/index.tsx @@ -130,8 +130,10 @@ export const CreatePage = () => { }) } - if (userInput.startsWith('npub')) { - const pubkey = npubToHex(userInput) + const input = userInput.toLowerCase() + + if (input.startsWith('npub')) { + const pubkey = npubToHex(input) if (pubkey) { addUser(pubkey) setUserInput('') @@ -141,12 +143,12 @@ export const CreatePage = () => { return } - if (userInput.includes('@')) { + if (input.includes('@')) { setIsLoading(true) setLoadingSpinnerDesc('Querying for nip05') - const nip05Profile = await queryNip05(userInput) + const nip05Profile = await queryNip05(input) .catch((err) => { - console.error(`error occurred in querying nip05: ${userInput}`, err) + console.error(`error occurred in querying nip05: ${input}`, err) return null }) .finally(() => { @@ -390,9 +392,18 @@ export const CreatePage = () => { )}&key=${encodeURIComponent(encryptionKey)}` ) } else { - saveAs(blob, 'request.sigit') - setTextToCopy(encryptionKey) - setOpenCopyModel(true) + if (signers[0] && signers[0].pubkey === usersPubkey) { + // Create a File object with the Blob data + const file = new File([blob], `compressed.sigit`, { + type: 'application/sigit' + }) + + navigate(appPrivateRoutes.sign, { state: { file, encryptionKey } }) + } else { + saveAs(blob, 'request.sigit') + setTextToCopy(encryptionKey) + setOpenCopyModel(true) + } } } diff --git a/src/pages/sign/index.tsx b/src/pages/sign/index.tsx index ccbe2ef..4f39a67 100644 --- a/src/pages/sign/index.tsx +++ b/src/pages/sign/index.tsx @@ -23,7 +23,7 @@ import { MuiFileInput } from 'mui-file-input' import { Event, kinds, verifyEvent } from 'nostr-tools' import { useEffect, useState } from 'react' import { useSelector } from 'react-redux' -import { useNavigate, useSearchParams } from 'react-router-dom' +import { useNavigate, useSearchParams, useLocation } from 'react-router-dom' import { toast } from 'react-toastify' import { LoadingSpinner } from '../../components/LoadingSpinner' import { UserComponent } from '../../components/username' @@ -69,6 +69,9 @@ enum SignedStatus { export const SignPage = () => { const navigate = useNavigate() + const location = useLocation() + const { file, encryptionKey: encKey } = location.state || {} + const [searchParams, setSearchParams] = useSearchParams() const [displayInput, setDisplayInput] = useState(false) @@ -217,11 +220,23 @@ export const SignPage = () => { .finally(() => { setIsLoading(false) }) + } else if (file && encKey) { + decrypt(file, decodeURIComponent(encKey)) + .then((arrayBuffer) => { + if (arrayBuffer) handleDecryptedArrayBuffer(arrayBuffer) + }) + .catch((err) => { + console.error(`error occurred in decryption`, err) + toast.error(err.message || `error occurred in decryption`) + }) + .finally(() => { + setIsLoading(false) + }) } else { setIsLoading(false) setDisplayInput(true) } - }, [searchParams]) + }, [searchParams, file, encKey]) const decrypt = async (file: File, key: string) => { setLoadingSpinnerDesc('Decrypting file')