From cc35206ee41b6c1c4d8a042a688358d71597111a Mon Sep 17 00:00:00 2001 From: Abhinav Adduri Date: Tue, 18 Jul 2017 10:52:32 -0700 Subject: [PATCH 01/11] added functionality to cancel uploads --- frontend/src/fileSender.js | 7 ++++++- frontend/src/upload.js | 9 +++++++-- server/server.js | 13 +++++++++++++ server/storage.js | 4 ++-- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/frontend/src/fileSender.js b/frontend/src/fileSender.js index 44240625..a16b1849 100644 --- a/frontend/src/fileSender.js +++ b/frontend/src/fileSender.js @@ -8,6 +8,7 @@ class FileSender extends EventEmitter { super(); this.file = file; this.iv = window.crypto.getRandomValues(new Uint8Array(12)); + this.uploadXHR = new XMLHttpRequest(); } static delete(fileId, token) { @@ -35,6 +36,10 @@ class FileSender extends EventEmitter { }); } + cancel() { + this.uploadXHR.abort(); + } + upload() { const self = this; self.emit('loading', true); @@ -103,7 +108,7 @@ class FileSender extends EventEmitter { const fd = new FormData(); fd.append('data', blob, file.name); - const xhr = new XMLHttpRequest(); + const xhr = self.uploadXHR; xhr.upload.addEventListener('progress', e => { if (e.lengthComputable) { diff --git a/frontend/src/upload.js b/frontend/src/upload.js index 509dd98c..93b856c2 100644 --- a/frontend/src/upload.js +++ b/frontend/src/upload.js @@ -79,8 +79,7 @@ $(document).ready(function() { $('.upload-window').removeClass('ondrag'); $('#page-one').show(); }); - //cancel the upload - $('#cancel-upload').click(() => {}); + // on file upload by browse or drag & drop function onUpload(event) { event.preventDefault(); @@ -93,6 +92,12 @@ $(document).ready(function() { const expiration = 24 * 60 * 60 * 1000; //will eventually come from a field const fileSender = new FileSender(file); + $('#cancel-upload').click(() => { + fileSender.cancel(); + location.reload(); + notify('Your upload was cancelled.'); + }); + fileSender.on('progress', progress => { $('#page-one').hide(); $('#upload-error').hide(); diff --git a/server/server.js b/server/server.js index 7fa3b08f..8475ff8f 100644 --- a/server/server.js +++ b/server/server.js @@ -219,6 +219,19 @@ app.post('/upload', (req, res, next) => { }); }); }); + + req.on('close', err => { + storage + .forceDelete(newId) + .then(err => { + if (!err) { + log.info('Deleted:', newId); + } + }) + .catch(err => { + log.info('DeleteError:', newId); + }); + }) }); app.get('/__lbheartbeat__', (req, res) => { diff --git a/server/storage.js b/server/storage.js index 5d48b490..68375e47 100644 --- a/server/storage.js +++ b/server/storage.js @@ -234,13 +234,13 @@ function awsDelete(id, delete_token) { if (!reply || delete_token !== reply) { reject(); } else { - redis_client.del(id); const params = { Bucket: conf.s3_bucket, Key: id }; s3.deleteObject(params, function(err, _data) { + redis_client.del(id); err ? reject(err) : resolve(err); }); } @@ -250,13 +250,13 @@ function awsDelete(id, delete_token) { function awsForceDelete(id) { return new Promise((resolve, reject) => { - redis_client.del(id); const params = { Bucket: conf.s3_bucket, Key: id }; s3.deleteObject(params, function(err, _data) { + redis_client.del(id); err ? reject(err) : resolve(err); }); }); From b712a9d175207c363557ef3b3c0d86233da08dd8 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Tue, 18 Jul 2017 11:53:43 -0700 Subject: [PATCH 02/11] escape filename in the ui --- frontend/src/download.js | 2 -- frontend/src/upload.js | 8 ++++---- views/download.handlebars | 6 +++--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/frontend/src/download.js b/frontend/src/download.js index b19d9078..4f1d40b5 100644 --- a/frontend/src/download.js +++ b/frontend/src/download.js @@ -21,7 +21,6 @@ $(document).ready(function() { $('#download-btn').click(download); function download() { const fileReceiver = new FileReceiver(); - const name = document.createElement('p'); fileReceiver.on('progress', progress => { $('#download-page-one').hide(); @@ -82,7 +81,6 @@ $(document).ready(function() { return; }) .then(([decrypted, fname]) => { - name.innerText = fname; const dataView = new DataView(decrypted); const blob = new Blob([dataView]); const downloadUrl = URL.createObjectURL(blob); diff --git a/frontend/src/upload.js b/frontend/src/upload.js index 509dd98c..aaae9582 100644 --- a/frontend/src/upload.js +++ b/frontend/src/upload.js @@ -104,19 +104,19 @@ $(document).ready(function() { $('.percent-number').html(`${Math.floor(percent * 100)}`); }); if (progress[1] < 1000000) { - $('.progress-text').html( + $('.progress-text').text( `${file.name} (${(progress[0] / 1000).toFixed( 1 )}KB of ${(progress[1] / 1000).toFixed(1)}KB)` ); } else if (progress[1] < 1000000000) { - $('.progress-text').html( + $('.progress-text').text( `${file.name} (${(progress[0] / 1000000).toFixed( 1 )}MB of ${(progress[1] / 1000000).toFixed(1)}MB)` ); } else { - $('.progress-text').html( + $('.progress-text').text( `${file.name} (${(progress[0] / 1000000).toFixed( 1 )}MB of ${(progress[1] / 1000000000).toFixed(1)}GB)` @@ -225,7 +225,7 @@ $(document).ready(function() { const url = file.url.trim() + `#${file.secretKey}`.trim(); $('#link').attr('value', url); - $('#copy-text').html( + $('#copy-text').text( 'Copy and share the link to send your file: ' + file.name ); $popupText.attr('tabindex', '-1'); diff --git a/views/download.handlebars b/views/download.handlebars index e1d53c63..4eca5e3c 100644 --- a/views/download.handlebars +++ b/views/download.handlebars @@ -8,7 +8,7 @@ {{#if filename}}
- Download {{{filename}}} ({{{filesize}}}) + Download {{filename}} ({{filesize}})
Your friend is sending you a file with Firefox Send, a service that allows you to share files with a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever. @@ -21,7 +21,7 @@
- Downloading {{{filename}}} ({{{filesize}}}) + Downloading {{filename}} ({{filesize}})
Please leave this tab open while we fetch your file and decrypt it. @@ -34,7 +34,7 @@
-
{{{filename}}}
+
{{filename}}
From ca6efdae55eb1c6e4752afcd5718ff2d27d577b5 Mon Sep 17 00:00:00 2001 From: Daniela Arcese Date: Tue, 18 Jul 2017 15:39:30 -0400 Subject: [PATCH 03/11] fix download svg --- public/resources/illustration_download.svg | 188 +++++++-------------- 1 file changed, 62 insertions(+), 126 deletions(-) diff --git a/public/resources/illustration_download.svg b/public/resources/illustration_download.svg index 85e8c5b9..e2797302 100644 --- a/public/resources/illustration_download.svg +++ b/public/resources/illustration_download.svg @@ -1,126 +1,62 @@ - - - - -illustration_01 -Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + Untitled + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From acfcae5dec0d664c198e32d8999e154548264dab Mon Sep 17 00:00:00 2001 From: Daniela Arcese Date: Tue, 18 Jul 2017 17:16:07 -0400 Subject: [PATCH 04/11] allow send another file link to open in new tab --- frontend/src/download.js | 6 +++--- frontend/src/upload.js | 13 ++----------- views/download.handlebars | 8 ++++---- views/index.handlebars | 8 ++++---- 4 files changed, 13 insertions(+), 22 deletions(-) diff --git a/frontend/src/download.js b/frontend/src/download.js index 4f1d40b5..f0a5aea7 100644 --- a/frontend/src/download.js +++ b/frontend/src/download.js @@ -6,9 +6,9 @@ require('jquery-circle-progress'); const Raven = window.Raven; $(document).ready(function() { $('#download-progress').hide(); - $('.send-new').click(() => { - window.location.replace(`${window.location.origin}`); - }); + //link back to homepage + $('.send-new').attr('href', window.location.origin); + const filename = $('#dl-filename').html(); //initiate progress bar diff --git a/frontend/src/upload.js b/frontend/src/upload.js index 555b7961..9527489a 100644 --- a/frontend/src/upload.js +++ b/frontend/src/upload.js @@ -68,17 +68,8 @@ $(document).ready(function() { fill: '#3B9DFF', size: 158 }); - // link back to home page - $('.send-new').click(() => { - $('#upload-progress').hide(); - $('#share-link').hide(); - $('#upload-error').hide(); - $copyBtn.attr('disabled', false); - $('#link').attr('disabled', false); - $copyBtn.html('Copy to Clipboard'); - $('.upload-window').removeClass('ondrag'); - $('#page-one').show(); - }); + //link back to homepage + $('.send-new').attr('href', window.location); // on file upload by browse or drag & drop function onUpload(event) { diff --git a/views/download.handlebars b/views/download.handlebars index 4eca5e3c..bf47cf68 100644 --- a/views/download.handlebars +++ b/views/download.handlebars @@ -38,9 +38,9 @@
- + {{else}}
This link has expired or never existed in the first place. @@ -52,9 +52,9 @@
Send files through a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever.
- + {{/if}}
diff --git a/views/index.handlebars b/views/index.handlebars index 8dde3b8e..121e9d85 100644 --- a/views/index.handlebars +++ b/views/index.handlebars @@ -74,9 +74,9 @@ - + @@ -88,9 +88,9 @@ There has been an error uploading the file. Upload error - +
From e898f35c4648a88beb50ae83fc2c5b7e868a5667 Mon Sep 17 00:00:00 2001 From: Wil Clouser Date: Tue, 18 Jul 2017 15:57:26 -0700 Subject: [PATCH 05/11] add FAQ. Fixes #186 --- docs/faq.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 docs/faq.md diff --git a/docs/faq.md b/docs/faq.md new file mode 100644 index 00000000..ed15323f --- /dev/null +++ b/docs/faq.md @@ -0,0 +1,32 @@ +## How big of a file can I transfer with Firefox Send? + +There is a 2GB file size limit built in to Send, however, in practice you may +be unable to send files that large. Send encrypts and decrypts the files in +the browser which is great for security but will tax your system resources. In +particular you can expect to see your memory usage go up by at least the size +of the file when the transfer is processing. You can see [the results of some +testing](https://github.com/mozilla/send/issues/170#issuecomment-314107793). +For the most reliable operation on common computers, it’s probably best to stay +under a few hundred megabytes. + +## Why is my browser not supported? + +We’re using the [Web Cryptography JavaScript API with the AES-GCM +algorithm](https://www.w3.org/TR/WebCryptoAPI/#aes-gcm) for our encryption. +Many browsers support this standard and should work fine, but some have not +implemented it yet (mobile browsers lag behind on this, in +particular). + +## How long are files available for? + +Files are available to be downloaded for 24 hours, after which they are removed +from the server. They are also removed immediately after a download completes. + +## Can a file be downloaded more than once? + +Not currently, but we're considering multiple download support in a future +release. + + +*Disclaimer: Send is an experiment and under active development. The answers +here may change as we get feedback from you and the project matures.* From 5b1e2f38f4ca952b7d29f965049e75f0768f6640 Mon Sep 17 00:00:00 2001 From: Daniela Arcese Date: Wed, 19 Jul 2017 10:21:56 -0400 Subject: [PATCH 06/11] change icons --- README.md | 17 -- frontend/src/upload.js | 10 +- public/main.css | 10 +- public/resources/check-16.svg | 4 + public/resources/close-16.svg | 4 + public/resources/copy-16.svg | 4 + .../resources/fontello-24c5e6ad/config.json | 28 --- .../fontello-24c5e6ad/css/fontello.css | 60 ------ .../fontello-24c5e6ad/font/fontello.eot | Bin 5560 -> 0 bytes .../fontello-24c5e6ad/font/fontello.svg | 16 -- .../fontello-24c5e6ad/font/fontello.ttf | Bin 5392 -> 0 bytes .../fontello-24c5e6ad/font/fontello.woff | Bin 3176 -> 0 bytes .../fontello-24c5e6ad/font/fontello.woff2 | Bin 2588 -> 0 bytes public/resources/send_logo_type.svg | 13 +- views/download.handlebars | 101 +++++----- views/index.handlebars | 182 +++++++++--------- views/layouts/main.handlebars | 9 +- 17 files changed, 171 insertions(+), 287 deletions(-) create mode 100644 public/resources/check-16.svg create mode 100644 public/resources/close-16.svg create mode 100644 public/resources/copy-16.svg delete mode 100755 public/resources/fontello-24c5e6ad/config.json delete mode 100755 public/resources/fontello-24c5e6ad/css/fontello.css delete mode 100755 public/resources/fontello-24c5e6ad/font/fontello.eot delete mode 100755 public/resources/fontello-24c5e6ad/font/fontello.svg delete mode 100755 public/resources/fontello-24c5e6ad/font/fontello.ttf delete mode 100755 public/resources/fontello-24c5e6ad/font/fontello.woff delete mode 100755 public/resources/fontello-24c5e6ad/font/fontello.woff2 diff --git a/README.md b/README.md index 34e6dcef..685c3fc1 100644 --- a/README.md +++ b/README.md @@ -48,20 +48,3 @@ Pull requests are always welcome! Feel free to check out the list of ["good firs ## License [Mozilla Public License Version 2.0](LICENSE) - - **Entypo** - - Copyright (C) 2012 by Daniel Bruce - - Author: Daniel Bruce - License: SIL (http://scripts.sil.org/OFL) - Homepage: http://www.entypo.com - - - **Font Awesome** - - Copyright (C) 2016 by Dave Gandy - - Author: Dave Gandy - License: SIL () - Homepage: http://fortawesome.github.com/Font-Awesome/ diff --git a/frontend/src/upload.js b/frontend/src/upload.js index 9527489a..319e35cb 100644 --- a/frontend/src/upload.js +++ b/frontend/src/upload.js @@ -47,7 +47,7 @@ $(document).ready(function() { //disable button for 3s $copyBtn.attr('disabled', true); $('#link').attr('disabled', true); - $copyBtn.html(''); + $copyBtn.html(''); window.setTimeout(() => { $copyBtn.attr('disabled', false); $('#link').attr('disabled', false); @@ -229,10 +229,10 @@ $(document).ready(function() { name.appendChild(cellText); // create delete button - del.innerHTML = ''; + del.innerHTML = ''; - link.innerHTML = ''; - link.style.color = '#0A8DFF'; + link.innerHTML = ''; + link.style.color = '#0A8DFF'; //font colour //copy link to clipboard when icon clicked $(link).click(function() { const aux = document.createElement('input'); @@ -243,7 +243,7 @@ $(document).ready(function() { document.body.removeChild(aux); link.innerHTML = 'Copied!'; window.setTimeout(() => { - link.innerHTML = ''; + link.innerHTML = ''; }, 500); }); diff --git a/public/main.css b/public/main.css index 02a1f69a..2ff4b087 100644 --- a/public/main.css +++ b/public/main.css @@ -35,10 +35,6 @@ a { text-decoration: none; } -span { - cursor: pointer; -} - /** page-one **/ .title { font-size: 33px; @@ -146,6 +142,10 @@ tbody { table-layout: fixed; } +.icon-delete, .icon-copy, .icon-check { + cursor: pointer; +} + /* Popup container */ .popup { position: relative; @@ -166,7 +166,7 @@ tbody { z-index: 1; bottom: 20px; left: 50%; - margin-left: -96px; + margin-left: -88px; transition: opacity 0.5s; opacity: 0; outline: 0; diff --git a/public/resources/check-16.svg b/public/resources/check-16.svg new file mode 100644 index 00000000..84fb098d --- /dev/null +++ b/public/resources/check-16.svg @@ -0,0 +1,4 @@ + + diff --git a/public/resources/close-16.svg b/public/resources/close-16.svg new file mode 100644 index 00000000..1b6d5163 --- /dev/null +++ b/public/resources/close-16.svg @@ -0,0 +1,4 @@ + + diff --git a/public/resources/copy-16.svg b/public/resources/copy-16.svg new file mode 100644 index 00000000..dbaf75db --- /dev/null +++ b/public/resources/copy-16.svg @@ -0,0 +1,4 @@ + + diff --git a/public/resources/fontello-24c5e6ad/config.json b/public/resources/fontello-24c5e6ad/config.json deleted file mode 100755 index 3a91a711..00000000 --- a/public/resources/fontello-24c5e6ad/config.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "", - "css_prefix_text": "icon-", - "css_use_suffix": false, - "hinting": true, - "units_per_em": 1000, - "ascent": 850, - "glyphs": [ - { - "uid": "c8585e1e5b0467f28b70bce765d5840c", - "css": "docs", - "code": 61637, - "src": "fontawesome" - }, - { - "uid": "c709da589c923ba3c2ad48d9fc563e93", - "css": "cancel-1", - "code": 59393, - "src": "entypo" - }, - { - "uid": "14017aae737730faeda4a6fd8fb3a5f0", - "css": "check", - "code": 59394, - "src": "entypo" - } - ] -} \ No newline at end of file diff --git a/public/resources/fontello-24c5e6ad/css/fontello.css b/public/resources/fontello-24c5e6ad/css/fontello.css deleted file mode 100755 index ea18ff91..00000000 --- a/public/resources/fontello-24c5e6ad/css/fontello.css +++ /dev/null @@ -1,60 +0,0 @@ -@font-face { - font-family: 'fontello'; - src: url('../font/fontello.eot?60405031'); - src: url('../font/fontello.eot?60405031#iefix') format('embedded-opentype'), - url('../font/fontello.woff2?60405031') format('woff2'), - url('../font/fontello.woff?60405031') format('woff'), - url('../font/fontello.ttf?60405031') format('truetype'), - url('../font/fontello.svg?60405031#fontello') format('svg'); - font-weight: normal; - font-style: normal; -} -/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ -/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ -/* -@media screen and (-webkit-min-device-pixel-ratio:0) { - @font-face { - font-family: 'fontello'; - src: url('../font/fontello.svg?60405031#fontello') format('svg'); - } -} -*/ - - [class^="icon-"]:before, [class*=" icon-"]:before { - font-family: "fontello"; - font-style: normal; - font-weight: normal; - speak: none; - - display: inline-block; - text-decoration: inherit; - width: 1em; - margin-right: .2em; - text-align: center; - /* opacity: .8; */ - - /* For safety - reset parent styles, that can break glyph codes*/ - font-variant: normal; - text-transform: none; - - /* fix buttons height, for twitter bootstrap */ - line-height: 1em; - - /* Animation center compensation - margins should be symmetric */ - /* remove if not needed */ - margin-left: .2em; - - /* you can be more comfortable with increased icons size */ - /* font-size: 120%; */ - - /* Font smoothing. That was taken from TWBS */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - - /* Uncomment for 3D effect */ - /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ -} - -.icon-cancel-1:before { content: '\e801'; font-size: 1.5em; font-weight: lighter;} /* '' */ -.icon-check:before { content: '\e802'; font-size: 1.5em;} /* '' */ -.icon-docs:before { content: '\f0c5'; font-weight: bolder;} /* '' */ diff --git a/public/resources/fontello-24c5e6ad/font/fontello.eot b/public/resources/fontello-24c5e6ad/font/fontello.eot deleted file mode 100755 index 30b0ddc1472d79c248ad4ef6aa946844ff11fc9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5560 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 tTB4|?qs4CG-gbT-f1HM{rEqnE2`c?7w3#;-dfn diff --git a/public/resources/fontello-24c5e6ad/font/fontello.svg b/public/resources/fontello-24c5e6ad/font/fontello.svg deleted file mode 100755 index 431b9d7c..00000000 --- a/public/resources/fontello-24c5e6ad/font/fontello.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - -Copyright (C) 2017 by original authors @ fontello.com - - - - - - - - - - - - \ No newline at end of file diff --git a/public/resources/fontello-24c5e6ad/font/fontello.ttf b/public/resources/fontello-24c5e6ad/font/fontello.ttf deleted file mode 100755 index 86b99e44530fdbb603db0933ab313bb1c3fe5c5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5392 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 diff --git a/public/resources/fontello-24c5e6ad/font/fontello.woff b/public/resources/fontello-24c5e6ad/font/fontello.woff deleted file mode 100755 index 257665842e2d1a3101109209108f2035b65f1177..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3176 zcmY*bc{G%L8-B(xmKjUd!H}|t%vdV24YIss9kPTOI~jYnSC-dqRFozAGRjg!sYql< zWo9hd*GN>hRERA39)0im&iU?huJhd2^}Fu-{{8Vg&$+|R4GaJX00zPv;5_>Bas8Jc z<^Las);78T0I>tr^B{0yB*`dqYegkc%Lcg~2wSZamhNsuLLjJ(gWTolY`)7T+bt|q z3;-C;ff^48G1$lf#?Bh`rzDfaBeTXSmbzMKu9Qf*B77% z4FXFRxOOEl*aNJEuYx=ZMDik5?nOkA8{Qp{pL0dy8{F{0K^v@uIhwJ2k6WfIo)8CQ zYA6+Aq?I+Z;-Rmh)W$d;4l&P!R0crmJd+Xdr2wE$!y&M!iC_%g|YFL4l!K1RU(Kmf6T2hej~=o27EO z^6Gc1;N%OPtUMF&Z!#z*pYvvKk(l|#1XHrGqKsq28oEYfuSUqEGo6Vzxq=*!n3f20 zthyhY-TClZ-^$djZN7+S7ojU8XXqe2Rhc{P&mDE3++1%_o7(V12)7?}2Gr_oeZq$f zcts+OixTA};R?QlSFd~;45a)haje)!ZemVFbvb1u-t$ZC-_vI2TsGV%L%y7iaab2t zl*nxQ99VFh9R9g?gg)iL?Qm-xzLJ$)sMtL`Ds_ETgLNtSBF!>d=KS9$Jkon+nJl^L zawngOr0DCPw0KhApwG1@YG2?U{l(IN_O$ZSMXG}4(rL$!*fyKl7$J3Pb2-hH9P6^Lh$u~(R*R9CaSmU(~mOgevhVQ ztRxCPV0k06N4P&Pq_ZNZ%)OaEs8z=nyY^EbjFXFO8%&-K?YApNR)wo+H@XB^K3&i` z{`SV|+-j(#OQNGAVY=z|nhfq(*jTu(-^42J(DUYx0t4tXIiy?&)8a|vUa~BEMRurE1pOgYM!Uk;ndqjPmSZ?{&hvGm{z(RfX%lO#{Q1U8S;k(n zU|Wmuy_PTqhsqx4)--v0^OJ3J%aHXX$L3>$SlcRB^>O&nlFx$Tcc00{lNXkDmjq)> z=dq&6~>T9F=-zp({!ULk_BeJZfNq1~gZFOAh zuGr`Hj6C44c{?1gS76)zV2Ck27$xwgJtOGAMOiub4tM)(+R$V1)0!b`CM-j!=)$X- z1!Fbc!H^)&NV6*Y-1QZeH$R}opX^JQ(X-gZb&=U2llC z&@U|do@&AAwtC}y^-8$?b8x)VES@y8Z7RN@+kxeoxjx4 zxEyf&#!t2HR->dOZKlJKQJiF(Yj4->``?6?A2oaGgQPbZk!8{4nVJs26A zdNh4LA^04RyfNnN#;)zoN%6;nF-b(wNMktj-%Io}202=u zF`69jV@zX5ZNx=x6f;T@mTTD;%swQu?=TVkDUs5bE27BqDPJ$FZpc*bJ66r>|E%`T z=y*IKOnA7iOAQD@NT~d}8-u{{mDeCu`36+1{HtLuuP2@pbzgIAik}MWdh}qv>ka>Q z&Ml%~VsvHd2$@_u>Re$~J00W6o3~!v&O{MY#l-$S8yb{JZFT5TG9*H+p9$qyj}_>B zv`Jb1WVzM$ag|5yN`e1#Y0)T`q1q`*_htEppG1y9D=C5DEkY7|1+Dw8#j=Nr@p>~e zk{>y+ZjpZd@c!<2bcviz(z_suS+n71?>^%Z`<&ykhFj2qZMQGM?5F#;3wTQXH$V90 z*H;LvRDC&%zEam>{~R_w5DJ|?VOV#gnaUnr1q+I*Y(XuZm~)%qn}>8r#dXi|%sk2X zWDSsiWvFR&e5Mly+&K~yKB31w`-D0;LXfLUDHPEVWHhDdYMf$zml$}Os)i^*O9K&9 z6wC#aLK&kIzOjdVg+|j*FiZ$if=+07xHO8UD>x50l|9AUltHb{?WVitEv!A>{=OlQ ze9(ra|E7rD`(3^CGjo?m5wYc!aA%iw^{hDdC4@Cq;vP#cvf8Bc@ zzC8nFbcpB^)q_ue$jPm)RzjnU-^R7+`)W59hF!E3T5%%W|1ITPJ4+gLk{GAXpW$X{ zP2VX_!DyeG!<_Byd8P6zmj6eO;LU3r-vVXZwC#mbe_^!CztGfxy^eM)`?8+D*tC7} zVEqZN^tKWU&!&Wm>&*!_NJ6y~7nf+v*7d1hITm7Dur??$MKaJdsl8K{d(QEo%&fj+d2gW50W;WraS#C%?O>ZvC@hpEGYvD~e(Jf^8c*NxEHqPp!SD-^@!HdsE~k zk9|;STQM6aNqmR-Fbb~-E*Ssr7QnnTn=onq7qML_Q28a0j=sD`$0fWwJpA478bd)b zE(D{|@%j+IG%#QX$MnDr_`lB)cC_o+v0rP8caPK+leKm8&w-b#_o~4%(*`~(vRkU{&ua`Ly zST4pC@L#8-A@XGOsgBKIrOvC7nY0w(m(xsW(#>4qp!Ftb zEm`FD@4mmN)aKRlPnwa!r69$2nD3JjOD-XM;bD)~iRHITwx?=kg4~wsFII=1+6%7d z{`jUbSmVj`#yIC_l_e#-}cSRD14;9fv*O1d?5Wrj~sfH&`{6%f< z$9QEA?9x+vI5cAN3}Z~$nzcRot~Es=&5c@>E9fRa7aLl;9vqYHQJSIm#r$pF_`!$h z(B;&6`s!%Tt8Zn=3)fah`Bg;QZqKBbuT@aCOAq%TpZpUo|GWd&IN&sFH7+SDEh|4O zDJv&lTn(eBrfN8rsj4Qfs#Yi|soioX9s*eFz)Hb)^X)w)@T82ZxVW3k0_=4$3V}lO zFbNCV6`#SNmAvDTg)MiGYGU$QFf^&xM_>q2rXro$`?ZNgfpmI$22NCWjvqrdQp&|$ z#Y56*2C7^E0)|kiI7!bi*oe`{Sc1#%6Tx-i-6Un_I^Zvw!70Mdtf AM*si- diff --git a/public/resources/fontello-24c5e6ad/font/fontello.woff2 b/public/resources/fontello-24c5e6ad/font/fontello.woff2 deleted file mode 100755 index ca7498889b931137df9c6afc50a520e5dda87078..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2588 zcmV+%3gh*6Pew8T0RR91016xc4*&oF02L4b013nZ0RR9100000000000000000000 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 diff --git a/public/resources/send_logo_type.svg b/public/resources/send_logo_type.svg index fc8f9ada..8eb7bc32 100644 --- a/public/resources/send_logo_type.svg +++ b/public/resources/send_logo_type.svg @@ -1,13 +1,16 @@ - + - Send + logo design_01 copy Created with Sketch. -
-
- {{#if filename}} -
-
- Download {{filename}} ({{filesize}}) -
-
- Your friend is sending you a file with Firefox Send, a service that allows you to share files with a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever. -
- Download -
- -
-
- -
-
- Downloading {{filename}} ({{filesize}}) -
-
- Please leave this tab open while we fetch your file and decrypt it. -
- -
-
- - % -
-
-
-
{{filename}}
-
-
- - - Try Firefox Send - - {{else}} +
+ {{#if filename}} +
- This link has expired or never existed in the first place. + Download {{filename}} ({{filesize}})
- - diff --git a/views/index.handlebars b/views/index.handlebars index 121e9d85..df4a0266 100644 --- a/views/index.handlebars +++ b/views/index.handlebars @@ -1,113 +1,105 @@ -