From 4dadec5ae9fe56955015f0be404c61c2965ecd5c Mon Sep 17 00:00:00 2001 From: Daniela Arcese Date: Fri, 23 Jun 2017 12:10:53 -0400 Subject: [PATCH 1/7] fix conflicts --- frontend/src/upload.js | 166 ++++++++++++++++++++++++---------------- server/portal_server.js | 17 ++++ views/index.handlebars | 19 +++-- 3 files changed, 128 insertions(+), 74 deletions(-) diff --git a/frontend/src/upload.js b/frontend/src/upload.js index 984787f4..1ef072e6 100644 --- a/frontend/src/upload.js +++ b/frontend/src/upload.js @@ -11,13 +11,18 @@ $(document).ready(function() { $copyBtn.html('Copy'); $('#page-one').show(); - $('#file-list').hide(); + $('#file-list').show(); $('#upload-progress').hide(); $('#share-link').hide(); + for(let i=0; i { - const aux = document.createElement('input'); + var aux = document.createElement('input'); aux.setAttribute('value', $('#link').attr('value')); document.body.appendChild(aux); aux.select(); @@ -52,39 +57,6 @@ $(document).ready(function() { file = event.target.files[0]; } - const $fileList = $('#uploaded-files'); - const row = document.createElement('tr'); - const name = document.createElement('td'); - const link = document.createElement('td'); - const expiry = document.createElement('td'); - const del = document.createElement('td'); - del.setAttribute('align', 'center'); - const btn = document.createElement('button'); - const popupDiv = document.createElement('div'); - const $popupText = $('', { class: 'popuptext' }); - const cellText = document.createTextNode(file.name); - - name.appendChild(cellText); - - // create delete button - btn.innerHTML = 'x'; - btn.classList.add('delete-btn'); - - // create popup - popupDiv.classList.add('popup'); - $popupText.html( - 'Delete Nevermind' - ); - - // add data cells to table row - row.appendChild(name); - row.appendChild(link); - row.appendChild(expiry); - popupDiv.appendChild(btn); - $(popupDiv).append($popupText); - del.appendChild(popupDiv); - row.appendChild(del); - const fileSender = new FileSender(file); fileSender.on('progress', percentComplete => { $('#page-one').hide(); @@ -96,53 +68,111 @@ $(document).ready(function() { .querySelector('#progress-bar') .style.setProperty('--progress', percentComplete + '%'); $('#progress-text').html(`${percentComplete}%`); - if (percentComplete === 100) { - notify('Your upload has finished.'); - } + }); fileSender.upload().then(info => { const url = info.url.trim() + `#${info.secretKey}`.trim(); $('#link').attr('value', url); - link.innerHTML = url; + localStorage.setItem(info.fileId, info.deleteToken); - // delete file - $popupText.find('.del-file').click(e => { - FileSender.delete( - info.fileId, - localStorage.getItem(info.fileId) - ).then(() => { - $(e.target).parents('tr').remove(); - localStorage.removeItem(info.fileId); - }) - .catch(err => { - Raven.captureException(err); - return Promise.reject(err); - }); - }); - - // show popup - del.addEventListener('click', toggleShow); - // hide popup - $popupText.find('.nvm').click(toggleShow); - - $fileList.append(row); //add row to table $('#page-one').hide(); $('#file-list').hide(); $('#upload-progress').hide(); $('#share-link').show(); - }) - .catch(err => { - Raven.captureException(err); - return Promise.reject(err); - }); - function toggleShow() { - $popupText.toggleClass('show'); - } + checkUploads(info.fileId, url); + }); }; window.allowDrop = function(ev) { ev.preventDefault(); }; + + //load previous uploads + function checkUploads(id, url='') { + return new Promise ((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.responseType = 'json'; + xhr.onreadystatechange = () => { + if (xhr.readyState == 4 && xhr.status == 200) { + resolve(xhr.response); + } + else if (xhr.readyState == 4 && xhr.status == 404) { + reject('error code: ' + xhr.status); + } + }; + xhr.onerror = () => { + reject('There was a network error.'); + }; + xhr.open('get', '/file/' + id, true); + xhr.send(); + }).then (response => { + populateFileList(response, url); + }, error => { + console.log(error); + }); + } + + //update file table with current files in localStorage + function populateFileList(file, url) { + console.log(file); + const $fileList = $('#uploaded-files'); + const row = document.createElement('tr'); + const name = document.createElement('td'); + const link = document.createElement('td'); + const expiry = document.createElement('td'); + const del = document.createElement('td'); + del.setAttribute('align', 'center'); + const btn = document.createElement('button'); + const popupDiv = document.createElement('div'); + const $popupText = $('', { class: 'popuptext' }); + const cellText = document.createTextNode(file.name); + const progress = document.createElement('p'); + + name.appendChild(cellText); + + // create delete button + btn.innerHTML = 'x'; + btn.classList.add('delete-btn'); + link.innerHTML = url; + + // create popup + popupDiv.classList.add('popup'); + $popupText.html( + 'Delete Nevermind' + ); + + // delete file + $popupText.find('.del-file').click(e => { + FileSender.delete( + file.fileId, + localStorage.getItem(file.fileId) + ).then(() => { + $(e.target).parents('tr').remove(); + localStorage.removeItem(file.fileId); + }); + }); + + // add data cells to table row + row.appendChild(name); + row.appendChild(link); + row.appendChild(expiry); + popupDiv.appendChild(btn); + $(popupDiv).append($popupText); + del.appendChild(popupDiv); + row.appendChild(del); + + // show popup + del.addEventListener('click', toggleShow); + // hide popup + $popupText.find('.nvm').click(toggleShow); + + $('tbody').append(row); //add row to table + + function toggleShow() { + $popupText.toggleClass('show'); + } + } + }); diff --git a/server/portal_server.js b/server/portal_server.js index 9dc2cf01..6fba066a 100644 --- a/server/portal_server.js +++ b/server/portal_server.js @@ -50,6 +50,23 @@ app.get('/exists/:id', (req, res) => { }).catch(err => res.sendStatus(404)); }); +app.get('/file/:id', (req, res) => { + let id = req.params.id; + storage.filename(id).then(filename => { + storage + .length(id) + .then(contentLength => { + res.json({ + name: filename, + filesize: bytes(contentLength), + fileId: id + }) + }).catch(() => { + console.log('error retrieving id ' + id); + }); + }) +}); + app.get('/download/:id', (req, res) => { const id = req.params.id; storage.filename(id).then(filename => { diff --git a/views/index.handlebars b/views/index.handlebars index ed765aed..4ef0788b 100644 --- a/views/index.handlebars +++ b/views/index.handlebars @@ -38,12 +38,19 @@
- - - - - - + + + + + + + + + + + + +
FileCopy URLExpires inDelete
FileCopy URLExpires inDelete
From 0b4301be9ecfb110973f65eb911d3b42e499fe4d Mon Sep 17 00:00:00 2001 From: Daniela Arcese Date: Fri, 23 Jun 2017 13:35:17 -0400 Subject: [PATCH 2/7] fix Nevermind button --- frontend/src/upload.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/frontend/src/upload.js b/frontend/src/upload.js index 1ef072e6..9e3ca119 100644 --- a/frontend/src/upload.js +++ b/frontend/src/upload.js @@ -166,7 +166,13 @@ $(document).ready(function() { // show popup del.addEventListener('click', toggleShow); // hide popup - $popupText.find('.nvm').click(toggleShow); + $popupText.find('.nvm').click(function(e){ + e.stopPropagation(); + toggleShow(); + }); + $popupText.click(function(e){ + e.stopPropagation(); + }); $('tbody').append(row); //add row to table From b673fad7030ce7a98c9193e06d05c37ea8f4e4c5 Mon Sep 17 00:00:00 2001 From: Daniela Arcese Date: Fri, 23 Jun 2017 15:07:02 -0400 Subject: [PATCH 3/7] load previous uploads from localStorage --- frontend/src/upload.js | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/frontend/src/upload.js b/frontend/src/upload.js index 9e3ca119..af035906 100644 --- a/frontend/src/upload.js +++ b/frontend/src/upload.js @@ -17,7 +17,7 @@ $(document).ready(function() { for(let i=0; i { const url = info.url.trim() + `#${info.secretKey}`.trim(); $('#link').attr('value', url); - - localStorage.setItem(info.fileId, info.deleteToken); + const fileData = { + name: file.name, + fileId: info.fileId, + url: info.url, + secretKey: info.secretKey, + deleteToken: info.deleteToken + }; + localStorage.setItem(info.fileId, JSON.stringify(fileData)); $('#page-one').hide(); $('#file-list').hide(); $('#upload-progress').hide(); $('#share-link').show(); - checkUploads(info.fileId, url); + populateFileList(JSON.stringify(fileData)); }); }; @@ -90,7 +96,7 @@ $(document).ready(function() { }; //load previous uploads - function checkUploads(id, url='') { + function checkUploads(file) { return new Promise ((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.responseType = 'json'; @@ -115,8 +121,9 @@ $(document).ready(function() { } //update file table with current files in localStorage - function populateFileList(file, url) { - console.log(file); + function populateFileList(file) { + file = JSON.parse(file); + const $fileList = $('#uploaded-files'); const row = document.createElement('tr'); const name = document.createElement('td'); @@ -135,7 +142,7 @@ $(document).ready(function() { // create delete button btn.innerHTML = 'x'; btn.classList.add('delete-btn'); - link.innerHTML = url; + link.innerHTML = file.url.trim() + `#${file.secretKey}`.trim();; // create popup popupDiv.classList.add('popup'); @@ -147,7 +154,7 @@ $(document).ready(function() { $popupText.find('.del-file').click(e => { FileSender.delete( file.fileId, - localStorage.getItem(file.fileId) + file.deleteToken ).then(() => { $(e.target).parents('tr').remove(); localStorage.removeItem(file.fileId); From aa8c1afa9df7460c839021ac2454f674104db89a Mon Sep 17 00:00:00 2001 From: Daniela Arcese Date: Fri, 23 Jun 2017 15:17:47 -0400 Subject: [PATCH 4/7] lint --- frontend/src/download.js | 3 +-- frontend/src/fileReceiver.js | 40 ++++++++++++++++++------------------ frontend/src/fileSender.js | 8 ++++---- frontend/src/upload.js | 33 ++++++++++++++--------------- server/portal_server.js | 7 ++++--- 5 files changed, 44 insertions(+), 47 deletions(-) diff --git a/frontend/src/download.js b/frontend/src/download.js index d59691c7..52e71f91 100644 --- a/frontend/src/download.js +++ b/frontend/src/download.js @@ -4,7 +4,6 @@ const $ = require('jquery'); const Raven = window.Raven; - $(document).ready(function() { $('#download-progress').hide(); $('#send-file').click(() => { @@ -63,7 +62,7 @@ $(document).ready(function() { document.body.appendChild(a); a.click(); }) - .catch(err => { + .catch(err => { Raven.captureException(err); return Promise.reject(err); }); diff --git a/frontend/src/fileReceiver.js b/frontend/src/fileReceiver.js index 0b969dbc..d73fae3c 100644 --- a/frontend/src/fileReceiver.js +++ b/frontend/src/fileReceiver.js @@ -64,26 +64,26 @@ class FileReceiver extends EventEmitter { ['encrypt', 'decrypt'] ) ]) - .then(([fdata, key]) => { - const salt = this.salt; - return Promise.all([ - window.crypto.subtle.decrypt( - { - name: 'AES-CBC', - iv: salt - }, - key, - fdata.data - ), - new Promise((resolve, reject) => { - resolve(fdata.fname); - }) - ]); - }) - .catch(err => { - Raven.captureException(err); - return Promise.reject(err); - }); + .then(([fdata, key]) => { + const salt = this.salt; + return Promise.all([ + window.crypto.subtle.decrypt( + { + name: 'AES-CBC', + iv: salt + }, + key, + fdata.data + ), + new Promise((resolve, reject) => { + resolve(fdata.fname); + }) + ]); + }) + .catch(err => { + Raven.captureException(err); + return Promise.reject(err); + }); } } diff --git a/frontend/src/fileSender.js b/frontend/src/fileSender.js index af285f86..ede0b252 100644 --- a/frontend/src/fileSender.js +++ b/frontend/src/fileSender.js @@ -66,8 +66,8 @@ class FileSender extends EventEmitter { window.crypto.subtle.exportKey('jwk', secretKey) ]); }) - .catch(err => { - Raven.captureException(err) + .catch(err => { + Raven.captureException(err); return Promise.reject(err); }) .then(([encrypted, keydata]) => { @@ -106,8 +106,8 @@ class FileSender extends EventEmitter { xhr.send(fd); }); }) - .catch(err => { - Raven.captureException(err) + .catch(err => { + Raven.captureException(err); return Promise.reject(err); }); } diff --git a/frontend/src/upload.js b/frontend/src/upload.js index af035906..aba17737 100644 --- a/frontend/src/upload.js +++ b/frontend/src/upload.js @@ -15,7 +15,7 @@ $(document).ready(function() { $('#upload-progress').hide(); $('#share-link').hide(); - for(let i=0; i { const url = info.url.trim() + `#${info.secretKey}`.trim(); @@ -97,14 +96,13 @@ $(document).ready(function() { //load previous uploads function checkUploads(file) { - return new Promise ((resolve, reject) => { + return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.responseType = 'json'; xhr.onreadystatechange = () => { if (xhr.readyState == 4 && xhr.status == 200) { resolve(xhr.response); - } - else if (xhr.readyState == 4 && xhr.status == 404) { + } else if (xhr.readyState == 4 && xhr.status == 404) { reject('error code: ' + xhr.status); } }; @@ -113,11 +111,14 @@ $(document).ready(function() { }; xhr.open('get', '/file/' + id, true); xhr.send(); - }).then (response => { - populateFileList(response, url); - }, error => { - console.log(error); - }); + }).then( + response => { + populateFileList(response, url); + }, + error => { + console.log(error); + } + ); } //update file table with current files in localStorage @@ -142,7 +143,7 @@ $(document).ready(function() { // create delete button btn.innerHTML = 'x'; btn.classList.add('delete-btn'); - link.innerHTML = file.url.trim() + `#${file.secretKey}`.trim();; + link.innerHTML = file.url.trim() + `#${file.secretKey}`.trim(); // create popup popupDiv.classList.add('popup'); @@ -152,10 +153,7 @@ $(document).ready(function() { // delete file $popupText.find('.del-file').click(e => { - FileSender.delete( - file.fileId, - file.deleteToken - ).then(() => { + FileSender.delete(file.fileId, file.deleteToken).then(() => { $(e.target).parents('tr').remove(); localStorage.removeItem(file.fileId); }); @@ -173,11 +171,11 @@ $(document).ready(function() { // show popup del.addEventListener('click', toggleShow); // hide popup - $popupText.find('.nvm').click(function(e){ + $popupText.find('.nvm').click(function(e) { e.stopPropagation(); toggleShow(); }); - $popupText.click(function(e){ + $popupText.click(function(e) { e.stopPropagation(); }); @@ -187,5 +185,4 @@ $(document).ready(function() { $popupText.toggleClass('show'); } } - }); diff --git a/server/portal_server.js b/server/portal_server.js index 6fba066a..9939a979 100644 --- a/server/portal_server.js +++ b/server/portal_server.js @@ -60,11 +60,12 @@ app.get('/file/:id', (req, res) => { name: filename, filesize: bytes(contentLength), fileId: id - }) - }).catch(() => { + }); + }) + .catch(() => { console.log('error retrieving id ' + id); }); - }) + }); }); app.get('/download/:id', (req, res) => { From 6ee2df5adc908dd1d6ef70680b77d14152278102 Mon Sep 17 00:00:00 2001 From: Daniela Arcese Date: Fri, 23 Jun 2017 15:37:34 -0400 Subject: [PATCH 5/7] removing unused code --- frontend/src/upload.js | 27 --------------------------- server/portal_server.js | 18 ------------------ 2 files changed, 45 deletions(-) diff --git a/frontend/src/upload.js b/frontend/src/upload.js index aba17737..1e5bb5f5 100644 --- a/frontend/src/upload.js +++ b/frontend/src/upload.js @@ -94,33 +94,6 @@ $(document).ready(function() { ev.preventDefault(); }; - //load previous uploads - function checkUploads(file) { - return new Promise((resolve, reject) => { - const xhr = new XMLHttpRequest(); - xhr.responseType = 'json'; - xhr.onreadystatechange = () => { - if (xhr.readyState == 4 && xhr.status == 200) { - resolve(xhr.response); - } else if (xhr.readyState == 4 && xhr.status == 404) { - reject('error code: ' + xhr.status); - } - }; - xhr.onerror = () => { - reject('There was a network error.'); - }; - xhr.open('get', '/file/' + id, true); - xhr.send(); - }).then( - response => { - populateFileList(response, url); - }, - error => { - console.log(error); - } - ); - } - //update file table with current files in localStorage function populateFileList(file) { file = JSON.parse(file); diff --git a/server/portal_server.js b/server/portal_server.js index 9939a979..9dc2cf01 100644 --- a/server/portal_server.js +++ b/server/portal_server.js @@ -50,24 +50,6 @@ app.get('/exists/:id', (req, res) => { }).catch(err => res.sendStatus(404)); }); -app.get('/file/:id', (req, res) => { - let id = req.params.id; - storage.filename(id).then(filename => { - storage - .length(id) - .then(contentLength => { - res.json({ - name: filename, - filesize: bytes(contentLength), - fileId: id - }); - }) - .catch(() => { - console.log('error retrieving id ' + id); - }); - }); -}); - app.get('/download/:id', (req, res) => { const id = req.params.id; storage.filename(id).then(filename => { From eda901ba4addc94b37d029dd6fea3db8ed77b01f Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Fri, 23 Jun 2017 17:05:41 -0700 Subject: [PATCH 6/7] fixed lint --- frontend/src/fileSender.js | 4 ---- frontend/src/upload.js | 14 +++++++------- package-lock.json | 6 +++--- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/frontend/src/fileSender.js b/frontend/src/fileSender.js index ede0b252..c443443a 100644 --- a/frontend/src/fileSender.js +++ b/frontend/src/fileSender.js @@ -66,10 +66,6 @@ class FileSender extends EventEmitter { window.crypto.subtle.exportKey('jwk', secretKey) ]); }) - .catch(err => { - Raven.captureException(err); - return Promise.reject(err); - }) .then(([encrypted, keydata]) => { return new Promise((resolve, reject) => { const file = this.file; diff --git a/frontend/src/upload.js b/frontend/src/upload.js index 1e5bb5f5..4988e001 100644 --- a/frontend/src/upload.js +++ b/frontend/src/upload.js @@ -2,8 +2,6 @@ const FileSender = require('./fileSender'); const { notify } = require('./utils'); const $ = require('jquery'); -const Raven = window.Raven; - $(document).ready(function() { // reset copy button const $copyBtn = $('#copy-btn'); @@ -16,13 +14,13 @@ $(document).ready(function() { $('#share-link').hide(); for (let i = 0; i < localStorage.length; i++) { - let id = localStorage.key(i); + const id = localStorage.key(i); populateFileList(localStorage.getItem(id)); } // copy link to clipboard $copyBtn.click(() => { - var aux = document.createElement('input'); + const aux = document.createElement('input'); aux.setAttribute('value', $('#link').attr('value')); document.body.appendChild(aux); aux.select(); @@ -87,6 +85,7 @@ $(document).ready(function() { $('#share-link').show(); populateFileList(JSON.stringify(fileData)); + notify('Your upload has finished.'); }); }; @@ -96,9 +95,11 @@ $(document).ready(function() { //update file table with current files in localStorage function populateFileList(file) { - file = JSON.parse(file); + try { + file = JSON.parse(file); + } + catch (e) { return } - const $fileList = $('#uploaded-files'); const row = document.createElement('tr'); const name = document.createElement('td'); const link = document.createElement('td'); @@ -109,7 +110,6 @@ $(document).ready(function() { const popupDiv = document.createElement('div'); const $popupText = $('', { class: 'popuptext' }); const cellText = document.createTextNode(file.name); - const progress = document.createElement('p'); name.appendChild(cellText); diff --git a/package-lock.json b/package-lock.json index 3ab4be91..e456c480 100644 --- a/package-lock.json +++ b/package-lock.json @@ -198,9 +198,9 @@ "dev": true }, "aws-sdk": { - "version": "2.76.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.76.0.tgz", - "integrity": "sha1-LDe/BON6tKJrX/fHWD1ZYDTHYwk=" + "version": "2.77.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.77.0.tgz", + "integrity": "sha1-gJCQu4dNj0//ysUxZilYdjjnhlw=" }, "babel-code-frame": { "version": "6.22.0", From d09b97db41d8a62cb9324ff63abe60b57de79132 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Fri, 23 Jun 2017 17:06:08 -0700 Subject: [PATCH 7/7] npm run format --- frontend/src/upload.js | 3 ++- server/config.js | 3 ++- server/portal_server.js | 9 ++++++--- test/local.storage.test.js | 14 ++++++++------ 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/frontend/src/upload.js b/frontend/src/upload.js index 4988e001..6d902b0d 100644 --- a/frontend/src/upload.js +++ b/frontend/src/upload.js @@ -97,8 +97,9 @@ $(document).ready(function() { function populateFileList(file) { try { file = JSON.parse(file); + } catch (e) { + return; } - catch (e) { return } const row = document.createElement('tr'); const name = document.createElement('td'); diff --git a/server/config.js b/server/config.js index c49681b8..efe47a40 100644 --- a/server/config.js +++ b/server/config.js @@ -24,7 +24,8 @@ const conf = convict({ }, sentry_id: { format: String, - default: 'https://cdf9a4f43a584f759586af8ceb2194f2@sentry.prod.mozaws.net/238', + default: + 'https://cdf9a4f43a584f759586af8ceb2194f2@sentry.prod.mozaws.net/238', env: 'P2P_SENTRY_CLIENT' }, sentry_dsn: { diff --git a/server/portal_server.js b/server/portal_server.js index 9dc2cf01..7a4b4af9 100644 --- a/server/portal_server.js +++ b/server/portal_server.js @@ -45,9 +45,12 @@ app.get('/', (req, res) => { app.get('/exists/:id', (req, res) => { const id = req.params.id; - storage.exists(id).then(() => { - res.sendStatus(200); - }).catch(err => res.sendStatus(404)); + storage + .exists(id) + .then(() => { + res.sendStatus(200); + }) + .catch(err => res.sendStatus(404)); }); app.get('/download/:id', (req, res) => { diff --git a/test/local.storage.test.js b/test/local.storage.test.js index d7d33f1b..6dcdd6f2 100644 --- a/test/local.storage.test.js +++ b/test/local.storage.test.js @@ -44,16 +44,18 @@ const storage = proxyquire('../server/storage', { describe('Testing Exists from local filesystem', function() { it('Exists returns true when file exists', function() { exists.callsArgWith(1, null, 1); - return storage.exists('test') - .then(() => assert(1)) - .catch(err => assert.fail()) + return storage + .exists('test') + .then(() => assert(1)) + .catch(err => assert.fail()); }); it('Exists returns false when file does not exist', function() { exists.callsArgWith(1, null, 0); - return storage.exists('test') - .then(() => assert.fail()) - .catch(err => assert(1)) + return storage + .exists('test') + .then(() => assert.fail()) + .catch(err => assert(1)); }); });