From 0c0293482553d102316af6b881c8dfc2ce0a3e1d Mon Sep 17 00:00:00 2001 From: Phillip Date: Mon, 8 May 2023 15:05:23 +0300 Subject: [PATCH] added file param to publish --- .../core/components/qdn-action-encryption.js | 18 +++++++++++++ .../plugins/core/qdn/browser/browser.src.js | 26 ++++++++++++++++--- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/qortal-ui-plugins/plugins/core/components/qdn-action-encryption.js b/qortal-ui-plugins/plugins/core/components/qdn-action-encryption.js index ef041d5f..4ca2a2d7 100644 --- a/qortal-ui-plugins/plugins/core/components/qdn-action-encryption.js +++ b/qortal-ui-plugins/plugins/core/components/qdn-action-encryption.js @@ -2,6 +2,24 @@ import nacl from '../../../../qortal-ui-crypto/api/deps/nacl-fast.js' import ed2curve from '../../../../qortal-ui-crypto/api/deps/ed2curve.js' +export const fileToBase64 = (file) => + new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.readAsDataURL(file); + reader.onload = () => { + const dataUrl = reader.result; + if (typeof dataUrl === "string") { + const base64String = dataUrl.split(',')[1]; + resolve(base64String); + } else { + reject(new Error('Invalid data URL')); + } + }; + reader.onerror = (error) => { + reject(error); + }; + }); + export function uint8ArrayToBase64(uint8Array) { diff --git a/qortal-ui-plugins/plugins/core/qdn/browser/browser.src.js b/qortal-ui-plugins/plugins/core/qdn/browser/browser.src.js index 6533414f..83667fa5 100644 --- a/qortal-ui-plugins/plugins/core/qdn/browser/browser.src.js +++ b/qortal-ui-plugins/plugins/core/qdn/browser/browser.src.js @@ -24,7 +24,7 @@ import { QORT_DECIMALS } from 'qortal-ui-crypto/api/constants'; import nacl from '../../../../../qortal-ui-crypto/api/deps/nacl-fast.js' import ed2curve from '../../../../../qortal-ui-crypto/api/deps/ed2curve.js' import { mimeToExtensionMap } from '../../components/qdn-action-constants'; -import { base64ToUint8Array, encryptData, uint8ArrayToBase64 } from '../../components/qdn-action-encryption'; +import { base64ToUint8Array, encryptData, fileToBase64, uint8ArrayToBase64 } from '../../components/qdn-action-encryption'; const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }); class WebBrowser extends LitElement { @@ -841,7 +841,7 @@ class WebBrowser extends LitElement { case actions.PUBLISH_QDN_RESOURCE: { // optional fields: encrypt:boolean recipientPublicKey:string - const requiredFields = ['service', 'name', 'data64']; + const requiredFields = ['service', 'name']; const missingFields = []; requiredFields.forEach((field) => { @@ -858,6 +858,12 @@ class WebBrowser extends LitElement { response = JSON.stringify(data); break } + if (!data.file && !data.data64) { + let data = {}; + data['error'] = "No data or file was submitted"; + response = JSON.stringify(data); + break + } // Use "default" if user hasn't specified an identifer const service = data.service; const name = data.name; @@ -907,6 +913,8 @@ class WebBrowser extends LitElement { } } + + const res2 = await showModalAndWait( actions.PUBLISH_QDN_RESOURCE, { @@ -917,6 +925,9 @@ class WebBrowser extends LitElement { } ); if (res2.action === 'accept') { + if (data.file && !data.encrypt) { + data64 = await fileToBase64(data.file) + } const worker = new WebWorker(); try { this.loader.show(); @@ -1016,7 +1027,7 @@ class WebBrowser extends LitElement { } const resourcesMap = resources.map(async (resource) => { - const requiredFields = ['service', 'name', 'data64']; + const requiredFields = ['service', 'name']; const missingFields = []; requiredFields.forEach((field) => { @@ -1031,6 +1042,11 @@ class WebBrowser extends LitElement { throw new Error(errorMsg) } + if (!resource.file && !resource.data64) { + + throw new Error('No data or file was submitted') + } + const service = resource.service; const name = resource.name; let identifier = resource.identifier; @@ -1067,7 +1083,9 @@ class WebBrowser extends LitElement { } } - + if (resource.file && !data.encrypt) { + data64 = await fileToBase64(resource.file) + } const worker = new WebWorker();