UNPKG

@foreverrbum/ethsign

Version:

This package will allow you to electronically sign documents within your application

117 lines (101 loc) 3.8 kB
import CryptoJS from 'crypto-js'; import fleekStorage from '@fleekhq/fleek-storage-js' import { storeNotif } from './dashboard'; export const isFileWithPassword = async (fileHash) => { // TODO: integrate storageProvider if (!fileHash) return false; const myFile = await fleekStorage.getFileFromHash({ hash: fileHash, }) let decryptedDataArray; try { decryptedDataArray = decryptDataArrayFromStringAES( myFile, "" ); } catch (error) { //doc has password return true; } //doc has no password return false; } const getFileArrayFL = async (password, fileHash, returnPromise, formatMessage) => { const myFile = await fleekStorage.getFileFromHash({ hash: fileHash, }) let decryptedDataArray; try { decryptedDataArray = decryptDataArrayFromStringAES( myFile, password ); } catch (error) { storeNotif(formatMessage({id: 'INVALID_PASSWORD'}), formatMessage({id: 'PASSWORD_ENTERED_UNABLE_TO_DECRYPT'}), 'danger') return false; } if(returnPromise){ return Promise.resolve(decryptedDataArray) }else{ return decryptedDataArray } } export const getFileArray = async (password, fileHash, storageProvider, returnPromise, formatMessage) => { if (!fileHash) return false; if (storageProvider='FL'){ const decryptedDataArray = await getFileArrayFL(password, fileHash, returnPromise, formatMessage); return(decryptedDataArray); }else if (storageProvider == 'IP'){ // TODO: add getFileArrayIP code and add chinese transalations }else{ storeNotif(formatMessage({id: 'ERROR'}), formatMessage({id: 'NO_DOCUMENT_FOUND'}), 'danger') return false; } } export const getCommentArrs = async (commentData, password, formatMessage) => { return Promise.all(commentData.map(comment => getFileArray(password, comment.commentHash, comment.provider, true, formatMessage))) } export const downloadFile = async (password, fileHash, name, close, storageProvider, formatMessage) => { const decryptedDataArray = await getFileArray(password, fileHash, storageProvider, false, formatMessage) if (decryptedDataArray != false) { createAndDownloadBlobFile( decryptedDataArray, name ); storeNotif(formatMessage({id: 'DOWNLOAD'}), formatMessage({id: 'DOWNLOAD_STARTING'}), 'info') close(); } else { return false; } } function decryptDataArrayFromStringAES(encryptedString, password) { if (password == undefined) password = ""; const bytes = CryptoJS.AES.decrypt(encryptedString, password); const decrypted = JSON.parse(bytes.toString(CryptoJS.enc.Utf8)); const decryptedDataArray = new Uint8Array(decrypted.data); return decryptedDataArray; } export const createAndDownloadBlobFile = (body, fileName) => { const blob = new Blob([body]); downloadBlob(blob, fileName); } export const downloadBlob = (blob, fileName) => { if (navigator.msSaveBlob) { // IE 10+ navigator.msSaveBlob(blob, fileName); } else { const link = document.createElement('a'); // Browsers that support HTML5 download attribute if (link.download !== undefined) { const url = URL.createObjectURL(blob); link.setAttribute('href', url); // link.setAttribute('download', fileName); link.setAttribute('target', '_blank'); link.style.visibility = 'hidden'; document.body.appendChild(link); link.click(); document.body.removeChild(link); } } } export default { downloadFile, getFileArray, isFileWithPassword, downloadBlob}