From eb819fd547784899a6508e231fc8c242974f696c Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Mon, 12 Feb 2018 17:19:53 +0100 Subject: [PATCH] ignoring of mac specific hiden entries in zip file --- .../src/main/js/gui/admin/AddProjectDialog.js | 19 ++++++++-- .../js/gui/admin/AddProjectDialog-test.js | 36 ++++++++++++++++++- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js index 64679faba0..d9eb87fa1d 100644 --- a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js +++ b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js @@ -159,7 +159,7 @@ AddProjectDialog.prototype.createGeneralTabContent = function () { name: "project-file" }); fileInput.addEventListener("change", function () { - return self.callListeners("onFileUpload", fileInput.files[0]); + return self.callListeners("onFileUpload", fileInput.files[0]).then(null, GuiConnector.alert); }, false); self.addListener("onFileUpload", function (e) { var file = e.arg; @@ -936,6 +936,8 @@ AddProjectDialog.prototype.createZipEntry = function (jsZipEntry, zipObject) { data.description = ""; } }); + } else if (this.isIgnoredZipEntry(filename)) { + type = undefined; } else if (filename.indexOf("\\") === -1 && filename.indexOf("/") === -1) { type = "MAP"; data.root = true; @@ -972,7 +974,11 @@ AddProjectDialog.prototype.createZipEntry = function (jsZipEntry, zipObject) { } return processingPromise.then(function () { - return new ZipEntry({filename: filename, type: type, data: data}); + if (type !== undefined) { + return new ZipEntry({filename: filename, type: type, data: data}); + } else { + return null; + } }); }; @@ -986,6 +992,15 @@ AddProjectDialog.prototype.setZipEntries = function (entries) { }; +AddProjectDialog.prototype.isIgnoredZipEntry = function (filename) { + var lowercaseString = filename.toLowerCase(); + if (lowercaseString.startsWith("__macosx") || lowercaseString.startsWith(".ds_store")) { + return true; + } else { + return false; + } +}; + AddProjectDialog.prototype.getEntryByFilename = function (filename) { var self = this; var entries = self.getZipEntries(); diff --git a/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js b/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js index 97133089ed..f76d54a2d7 100644 --- a/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js +++ b/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js @@ -172,7 +172,7 @@ describe('AddProjectDialog', function () { dialog.setProjectId("(invalid id)"); return dialog.checkValidity().then(function () { assert.notOk("Expected validity to reject"); - }).catch(function(error){ + }).catch(function (error) { assert.ok(error instanceof ValidationError); }); }).then().finally(function () { @@ -198,4 +198,38 @@ describe('AddProjectDialog', function () { }); }); + describe('isIgnoredZipEntry', function () { + it('valid entry', function () { + var dialog = new AddProjectDialog({ + element: testDiv, + customMap: null + }); + + assert.notOk(dialog.isIgnoredZipEntry("images/a.png")); + assert.notOk(dialog.isIgnoredZipEntry("main.xml")); + return dialog.destroy(); + }); + it('invalid MAC OS entry', function () { + var dialog = new AddProjectDialog({ + element: testDiv, + customMap: null + }); + + // noinspection SpellCheckingInspection + assert.ok(dialog.isIgnoredZipEntry("__MACOSX/.desc")); + assert.ok(dialog.isIgnoredZipEntry("__macosx/.desc")); + return dialog.destroy(); + }); + it('invalid old MAC OS entry', function () { + var dialog = new AddProjectDialog({ + element: testDiv, + customMap: null + }); + + assert.ok(dialog.isIgnoredZipEntry(".DS_Store/.desc")); + assert.ok(dialog.isIgnoredZipEntry(".ds_store/.desc")); + return dialog.destroy(); + }); + }); + }); -- GitLab