From e7a57c9aa10dd3c91bd4e11ad6265e049e5ccdce Mon Sep 17 00:00:00 2001 From: Davinci Date: Tue, 14 May 2024 16:48:09 +0200 Subject: [PATCH] chore: addressing comments --- src/controllers/NostrController.ts | 35 ----------------------------- src/pages/decrypt/index.tsx | 12 +++------- src/types/errors/DecryptionError.ts | 20 +++++++++++++++++ src/utils/crypto.ts | 25 ++++++++++++--------- 4 files changed, 38 insertions(+), 54 deletions(-) create mode 100644 src/types/errors/DecryptionError.ts diff --git a/src/controllers/NostrController.ts b/src/controllers/NostrController.ts index 27ec0e8..a2b0f1e 100644 --- a/src/controllers/NostrController.ts +++ b/src/controllers/NostrController.ts @@ -359,39 +359,4 @@ export class NostrController extends EventEmitter { generateDelegatedKey = (): string => { return NDKPrivateKeySigner.generate().privateKey! } - - /** - * Creates Nostr HTTP Auth token - * @param npub npub in hex format - * @param nostrTags tags to be included in the authevent (auth token) - */ -createNostrHttpAuthToken = async ( - nostrTags: string[][] = [] -): Promise => { - const createdAt = Math.round(Date.now() / 1000) - - const authEvent = new NDKEvent(undefined) - authEvent.kind = 27235 - authEvent.tags = nostrTags - authEvent.content = `sigit-${createdAt}` - authEvent.created_at = createdAt - - await this.signEvent(authEvent.rawEvent() as UnsignedEvent) - - console.info('Signed auth event') - - const base64Encoded = this.base64EncodeSignedEvent(authEvent.rawEvent()) - - return base64Encoded -} - -base64EncodeSignedEvent = (event: NostrEvent) => { - try { - const authEventSerialized = JSON.stringify(event) - const token = btoa(authEventSerialized) - return token - } catch (error) { - throw new Error('An error occurred in JSON.stringy of signedAuthEvent') - } -} } diff --git a/src/pages/decrypt/index.tsx b/src/pages/decrypt/index.tsx index 7d954dd..6b20491 100644 --- a/src/pages/decrypt/index.tsx +++ b/src/pages/decrypt/index.tsx @@ -8,6 +8,7 @@ import styles from './style.module.scss' import { toast } from 'react-toastify' import { useSearchParams } from 'react-router-dom' import axios from 'axios' +import { DecryptionError } from '../../types/errors/DecryptionError' export const DecryptZip = () => { const [searchParams] = useSearchParams() @@ -60,17 +61,10 @@ export const DecryptZip = () => { const arrayBuffer = await decryptArrayBuffer( encryptedArrayBuffer, encryptionKey - ).catch((err) => { + ).catch((err: DecryptionError) => { console.log('err in decryption:>> ', err) - if (err.message.toLowerCase().includes('expected')) { - toast.error(`The Key seems to be invalid length or format`) - } else if (err.message.includes('The JWK "alg" member was inconsistent')) { - toast.error(`The Key seems to be invalid.`) - } else { - toast.error(err.message || 'An error occurred while decrypting file.') - } - + toast.error(err.message) setIsLoading(false) return null }) diff --git a/src/types/errors/DecryptionError.ts b/src/types/errors/DecryptionError.ts new file mode 100644 index 0000000..58117ab --- /dev/null +++ b/src/types/errors/DecryptionError.ts @@ -0,0 +1,20 @@ +export class DecryptionError extends Error { + public message: string = '' + + constructor( + public inputError: any + ) { + super() + + if (inputError.message.toLowerCase().includes('expected')) { + this.message = `The decryption key length or format is invalid` + } else if (inputError.message.includes('The JWK "alg" member was inconsistent')) { + this.message = `The decryption key is invalid.` + } else { + this.message = inputError.message || 'An error occurred while decrypting file.' + } + + this.name = 'DecryptionError' + Object.setPrototypeOf(this, DecryptionError.prototype) + } +} \ No newline at end of file diff --git a/src/utils/crypto.ts b/src/utils/crypto.ts index dc55c47..dd344b3 100644 --- a/src/utils/crypto.ts +++ b/src/utils/crypto.ts @@ -4,6 +4,7 @@ import { stringToHex, uint8ArrayToHexString } from '.' +import { DecryptionError } from '../types/errors/DecryptionError' const ENCRYPTION_ALGO_NAME = 'AES-GCM' @@ -63,14 +64,18 @@ export const decryptArrayBuffer = async ( encryptedData: ArrayBuffer, key: string ) => { - const { cryptoKey, iv } = await importKey(key) - - // Decrypt the data - const decryptedData = await window.crypto.subtle.decrypt( - { name: ENCRYPTION_ALGO_NAME, iv }, - cryptoKey, - encryptedData - ) - - return decryptedData + try { + const { cryptoKey, iv } = await importKey(key) + + // Decrypt the data + const decryptedData = await window.crypto.subtle.decrypt( + { name: ENCRYPTION_ALGO_NAME, iv }, + cryptoKey, + encryptedData + ) + + return decryptedData + } catch (err) { + throw new DecryptionError(err) + } }