From 114068c5318ba329c5b15bdb6397ca2309106e3e Mon Sep 17 00:00:00 2001 From: Wiktor Furman Date: Tue, 15 Oct 2019 15:29:48 +0200 Subject: [PATCH 1/2] Strip tracking url parameters --- app/ui/downloadPassword.js | 4 ++- test/integration/download-tests.js | 25 +++++++++++++++++++ .../pages/desktop/download_page.js | 19 +++++++------- test/integration/pages/desktop/home_page.js | 3 +++ 4 files changed, 40 insertions(+), 11 deletions(-) diff --git a/app/ui/downloadPassword.js b/app/ui/downloadPassword.js index 1b505618..bbecbfa4 100644 --- a/app/ui/downloadPassword.js +++ b/app/ui/downloadPassword.js @@ -72,7 +72,9 @@ module.exports = function(state, emit) { const password = el.value; if (password.length > 0) { document.getElementById('password-btn').disabled = true; - state.fileInfo.url = window.location.href; + // Strip any url parameters between fileId and secretKey + const fileInfoUrl = window.location.href.replace(/\?.+#/, '#'); + state.fileInfo.url = fileInfoUrl; state.fileInfo.password = password; emit('getMetadata'); } diff --git a/test/integration/download-tests.js b/test/integration/download-tests.js index 8781a0f4..21005ece 100644 --- a/test/integration/download-tests.js +++ b/test/integration/download-tests.js @@ -82,4 +82,29 @@ describe('Firefox Send', function() { // check if upload and download file sizes are equal assert.equal(uploadSize, downloadSize); }); + + it(`should upload and download file with added tracking parameter`, function() { + const trackingUrl = + '?fbclid=IaMFak3Tr4ck1ng1d_SDlP0shBk8SM2EN3cCLFKpHVl-k-Pvv0sf9Zy0tnTu9srqVY'; + const password = 'strongpassword'; + + browser.chooseFile( + homePage.uploadInput, + `${testFilesPath}/${testFiles[0]}` + ); + browser.waitForExist(homePage.addPassword); + browser.click(homePage.addPassword); + browser.waitForExist(homePage.passwordInput); + browser.setValue(homePage.passwordInput, password); + browser.click(homePage.uploadButton); + browser.waitForExist(homePage.shareUrl); + const shareUrl = browser.getValue(homePage.shareUrl); + const downloadPage = new DownloadPage( + shareUrl.replace('#', `${trackingUrl}#`) + ); + downloadPage.open(); + downloadPage.downloadUsingPassword(password); + browser.waitForExist(downloadPage.downloadComplete); + assert.ok(fs.existsSync(path.join(downloadDir, testFiles[0]))); + }); }); diff --git a/test/integration/pages/desktop/download_page.js b/test/integration/pages/desktop/download_page.js index 0e9b727c..8bbb8458 100644 --- a/test/integration/pages/desktop/download_page.js +++ b/test/integration/pages/desktop/download_page.js @@ -4,23 +4,22 @@ const Page = require('./page'); class DownloadPage extends Page { constructor(path) { super(path); - this.fileId = /download\/(\w+)\/#/.exec(path)[1]; + this.fileId = /download\/(\w+)\/\??.*#/.exec(path)[1]; this.downloadButton = '#download-btn'; this.downloadComplete = '#download-complete'; + this.passwordInput = '#password-input'; + this.passwordButton = '#password-btn'; } - /** - * @function waitForPageToLoad - * @returns {Object} An object representing the page. - * @throws ElementNotFound - */ - waitForPageToLoad() { - super.waitForPageToLoad(); - browser.waitForExist(this.downloadButton); - return this; + downloadUsingPassword(password) { + browser.waitForExist(this.passwordInput); + browser.setValue(this.passwordInput, password); + browser.click(this.passwordButton); + return browser.click(this.downloadButton); } download() { + browser.waitForExist(this.downloadButton); return browser.click(this.downloadButton); } } diff --git a/test/integration/pages/desktop/home_page.js b/test/integration/pages/desktop/home_page.js index 5679f1b8..ff613a7e 100644 --- a/test/integration/pages/desktop/home_page.js +++ b/test/integration/pages/desktop/home_page.js @@ -10,6 +10,9 @@ class HomePage extends Page { this.progress = 'progress'; this.shareUrl = '#share-url'; this.downloadCountSelect = '#expire-after-dl-count-select'; + this.addPassword = '#add-password'; + this.passwordInput = '#password-input'; + this.passwordButton = '#password-btn'; } waitForPageToLoad() { From ad9577daaf75014a5292200b05e6f57b5c2041ea Mon Sep 17 00:00:00 2001 From: Wiktor Furman Date: Tue, 15 Oct 2019 15:50:09 +0200 Subject: [PATCH 2/2] Update package-lock --- package-lock.json | 82 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 76 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1c948db3..0a49415a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4092,6 +4092,11 @@ "randomfill": "^1.0.3" } }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, "css": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", @@ -7287,6 +7292,27 @@ "stream-events": "^1.0.4" }, "dependencies": { + "configstore": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.0.tgz", + "integrity": "sha512-eE/hvMs7qw7DlcB5JPRnthmrITuHMmACUJAp89v6PT6iOqzoLS7HRWhBtuHMlhNHo2AhUSA/3Dh1bKNJHcublQ==", + "requires": { + "dot-prop": "^5.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "dot-prop": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.1.0.tgz", + "integrity": "sha512-n1oC6NBF+KM9oVXtjmen4Yo7HyAVWV2UUl50dCYJdw2924K6dX9bf9TTTWaKtYlRn0FEtxG27KS80ayVLixxJA==", + "requires": { + "is-obj": "^2.0.0" + } + }, "duplexify": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", @@ -7298,6 +7324,11 @@ "stream-shift": "^1.0.0" } }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -7326,6 +7357,17 @@ "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } + }, + "write-file-atomic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.0.tgz", + "integrity": "sha512-EIgkf60l2oWsffja2Sf2AL384dx328c0B+cIYPTQq5q2rOYuDV00/iPFBOUiDKKwKMOhkymH8AidPaRvzfxY+Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } } } }, @@ -7667,8 +7709,7 @@ "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, "grapheme-splitter": { "version": "1.0.4", @@ -8392,8 +8433,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "indent-string": { "version": "3.2.0", @@ -9989,6 +10029,21 @@ "sourcemap-codec": "^1.4.1" } }, + "make-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", + "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, "make-plural": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-4.3.0.tgz", @@ -14885,8 +14940,7 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "simple-swizzle": { "version": "0.2.2", @@ -16613,6 +16667,14 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, "ua-parser-js": { "version": "0.7.20", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.20.tgz", @@ -16755,6 +16817,14 @@ "imurmurhash": "^0.1.4" } }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "^2.0.0" + } + }, "unist-util-find-all-after": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.4.tgz",