From 56d6e48ad4901fb23c1ddd3fac90f7b3557fc54c Mon Sep 17 00:00:00 2001 From: Chakib Benziane Date: Tue, 19 Mar 2019 22:14:59 +0100 Subject: [PATCH] working init update --- package.json | 1 + server | 2 +- src/api.js | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/index.js | 1 + src/upload.vue | 17 ++++++++----- src/worker.js | 46 ++++++++++++++++++++++++++++------- yarn.lock | 14 +++++++++++ 7 files changed, 130 insertions(+), 16 deletions(-) create mode 100644 src/api.js diff --git a/package.json b/package.json index ccbb625..7cf973f 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "vue-template-compiler": "^2.6.9" }, "dependencies": { + "babel-polyfill": "^6.26.0", "vue": "^2.6.8", "vue-hot-reload-api": "^2.3.3" }, diff --git a/server b/server index 1a72909..423ba0e 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit 1a72909f51a76b41fc4824f0eefef1cf503c8d0e +Subproject commit 423ba0e52ceb70b685af6118eead2d9d77e25469 diff --git a/src/api.js b/src/api.js new file mode 100644 index 0000000..8ebd359 --- /dev/null +++ b/src/api.js @@ -0,0 +1,65 @@ +import 'babel-polyfill'; + +let apiPort = '8880' +if (process.env.API_PORT !== undefined) { + apiPort = process.env.API_PORT; +} + +function getEndpoint (path) { + return new URL(path, apiEndpoint).toString() +} + +const endPoints = { + get upload () { + return getEndpoint('upload') + } + +} + +const apiEndpoint = function() { + let currentLoc = self.location; + let endpoint = new URL(currentLoc); + + endpoint.port = apiPort; + + return endpoint.toString() +}() + +class Upload { + + constructor(files) { + this.files = Array.from(files) + this.timestamp = new Date() + } + + get payload() { + return { + files: this.files, + timestamp: this.timestamp, + } + } + + async create() { + let req = new Request(endPoints.upload, { + method: 'POST', + body: JSON.stringify(this.payload) + }) + + //let result = await fetch(req); + let res = await fetch(req) + .catch((e) => { console.error(e) }) + + + if (!res.ok) { + throw(`${res.status}: ` + (await res.json()).error) + } + + return res.json() + } +} + +export default { + endpoint: apiEndpoint, + endPoints: endPoints, + Upload: Upload +} diff --git a/src/index.js b/src/index.js index 3183ac9..4bd297f 100644 --- a/src/index.js +++ b/src/index.js @@ -5,6 +5,7 @@ import App from './App.vue'; import GetWorker from './workerInterface.js' + window.app = new Vue({ el: '#app', template: '', diff --git a/src/upload.vue b/src/upload.vue index 70e2148..d8c6f70 100644 --- a/src/upload.vue +++ b/src/upload.vue @@ -35,14 +35,19 @@ export default { this.fileCount = event.target.files.length this.files = event.target.files + w.post({ + msg: 'new-upload', + payload: [...this.files], + }) + // Get sha256 of files - for (let file of this.files) { - w.post({ - msg: 'file-sha256', - payload: file - }) +// for (let file of this.files) { +// w.post({ +// msg: 'file-sha256', +// payload: file +// }) +// } - } } } } diff --git a/src/worker.js b/src/worker.js index d90bd96..4a4b026 100644 --- a/src/worker.js +++ b/src/worker.js @@ -1,6 +1,8 @@ //This worker will be used for cryptographic, long running and API calls //to keep the UI free -// + +import Api from './api.js' + const name = 'main' function hexString(buffer) { @@ -15,21 +17,43 @@ function hexString(buffer) { return hexCodes.join(''); } -function getSHA256(file){ - const fileName = file.name +async function getSHA256(file){ // Read as array buffer - fileReader = new FileReaderSync(); - buffer = fileReader.readAsArrayBuffer(file); + let fileReader = new FileReaderSync(); + let buffer = fileReader.readAsArrayBuffer(file); + + // Return hex encoded sha256 + return crypto.subtle.digest('SHA-256', buffer) + .then(v => { return hexString(v) }) + +} + +async function newUpload(files){ + let payloadFiles = await Promise.all(files.map(async (f) => { + return { + lastModified: f.lastModified, + type: f.type, + name: f.name, + size: f.size, + sha256: await getSHA256(f) + } + })) // Get sha256 - crypto.subtle.digest('SHA-256', buffer).then( digest => { - console.log(`SHA256 for ${fileName}: `, hexString(digest)); - }) + //for (let file of files) { + // let sha256 = getSHA256(file) + // file.sha256 = sha256 + // console.log(files) + + //} + + let upload = new Api.Upload(payloadFiles) + return upload.create() } -onmessage = function(e) { +self.onmessage = e => { switch (e.data.msg) { case 'init': @@ -40,6 +64,10 @@ onmessage = function(e) { getSHA256(e.data.payload) break; + case 'new-upload': + newUpload(e.data.payload) + break; + default: console.log(`${name} worker: need {msg: "message type", ... }`) diff --git a/yarn.lock b/yarn.lock index 4a50353..f490830 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1343,6 +1343,15 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-polyfill@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + babel-preset-env@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" @@ -5059,6 +5068,11 @@ regenerate@^1.2.1, regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= + regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"