summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorTobias Kaminsky <tobiasKaminsky@users.noreply.github.com>2017-12-06 16:19:17 +0100
committerGitHub <noreply@github.com>2017-12-06 16:19:17 +0100
commit430f60db21bbda895825bdb37632b5d68dff1f6e (patch)
treecf1fac2ea8bbbfaeeaf17a575657a7bbb7777e5b /apps
parentc32cb6b4b79baeb86f5702d20db0d4b6ed874d86 (diff)
parent7bc28f14de8c3d77ec611a4ffd8ad48dc6093cea (diff)
downloadnextcloud-server-430f60db21bbda895825bdb37632b5d68dff1f6e.tar.gz
nextcloud-server-430f60db21bbda895825bdb37632b5d68dff1f6e.zip
Merge pull request #6670 from nextcloud/handle-encryption-state-in-web-interface
Handle encryption state in web interface
Diffstat (limited to 'apps')
-rw-r--r--apps/files/js/filelist.js15
-rw-r--r--apps/files/tests/js/filelistSpec.js64
2 files changed, 70 insertions, 9 deletions
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 10efa54496a..fa9819b78b5 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -950,7 +950,8 @@
type: $el.attr('data-type'),
etag: $el.attr('data-etag'),
permissions: parseInt($el.attr('data-permissions'), 10),
- hasPreview: $el.attr('data-has-preview') === 'true'
+ hasPreview: $el.attr('data-has-preview') === 'true',
+ isEncrypted: $el.attr('data-e2eencrypted') === 'true'
};
var size = $el.attr('data-size');
if (size) {
@@ -1152,7 +1153,10 @@
if (type === 'dir') {
mime = mime || 'httpd/unix-directory';
- if (fileData.mountType && fileData.mountType.indexOf('external') === 0) {
+ if (fileData.isEncrypted) {
+ icon = OC.MimeType.getIconUrl('dir-encrypted');
+ dataIcon = icon;
+ } else if (fileData.mountType && fileData.mountType.indexOf('external') === 0) {
icon = OC.MimeType.getIconUrl('dir-external');
dataIcon = icon;
}
@@ -1173,7 +1177,8 @@
"data-mtime": mtime,
"data-etag": fileData.etag,
"data-permissions": permissions,
- "data-has-preview": fileData.hasPreview !== false
+ "data-has-preview": fileData.hasPreview !== false,
+ "data-e2eencrypted": fileData.isEncrypted === true
});
if (dataIcon) {
@@ -1444,7 +1449,9 @@
path = fileData.path || this.getCurrentDirectory(),
permissions = parseInt(fileData.permissions, 10) || 0;
- if (fileData.isShareMountPoint) {
+ var isEndToEndEncrypted = (type === 'dir' && fileData.isEncrypted);
+
+ if (!isEndToEndEncrypted && fileData.isShareMountPoint) {
permissions = permissions | OC.PERMISSION_UPDATE;
}
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index 64fc6876493..83926b24fee 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -217,6 +217,7 @@ describe('OCA.Files.FileList tests', function() {
expect($tr.attr('data-permissions')).toEqual('31');
expect($tr.attr('data-mime')).toEqual('text/plain');
expect($tr.attr('data-mtime')).toEqual('123456');
+ expect($tr.attr('data-e2eencrypted')).toEqual('false');
expect($tr.find('a.name').attr('href'))
.toEqual(OC.webroot + '/remote.php/webdav/subdir/testName.txt');
expect($tr.find('.nametext').text().trim()).toEqual('testName.txt');
@@ -246,6 +247,7 @@ describe('OCA.Files.FileList tests', function() {
expect($tr.attr('data-permissions')).toEqual('31');
expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
expect($tr.attr('data-mtime')).toEqual('123456');
+ expect($tr.attr('data-e2eencrypted')).toEqual('false');
expect($tr.find('.filesize').text()).toEqual('1 KB');
expect($tr.find('.date').text()).not.toEqual('?');
@@ -271,6 +273,7 @@ describe('OCA.Files.FileList tests', function() {
expect($tr.attr('data-permissions')).toEqual('31');
expect($tr.attr('data-mime')).toBeUndefined();
expect($tr.attr('data-mtime')).toEqual('123456');
+ expect($tr.attr('data-e2eencrypted')).toEqual('false');
expect($tr.find('.filesize').text()).toEqual('Pending');
expect($tr.find('.date').text()).not.toEqual('?');
@@ -293,10 +296,20 @@ describe('OCA.Files.FileList tests', function() {
expect($tr.attr('data-permissions')).toEqual('31');
expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
expect($tr.attr('data-mtime')).toEqual('123456');
+ expect($tr.attr('data-e2eencrypted')).toEqual('false');
expect($tr.find('.filesize').text()).toEqual('Pending');
expect($tr.find('.date').text()).not.toEqual('?');
});
+ it('generates dir element with true e2eencrypted attribute when calling add() with minimal data including isEncrypted', function() {
+ var fileData = {
+ type: 'dir',
+ name: 'testFolder',
+ isEncrypted: true
+ };
+ var $tr = fileList.add(fileData);
+ expect($tr.attr('data-e2eencrypted')).toEqual('true');
+ });
it('generates file element with no permissions when permissions are explicitly none', function() {
var fileData = {
type: 'dir',
@@ -1442,6 +1455,32 @@ describe('OCA.Files.FileList tests', function() {
expect(OC.TestUtil.getImageUrl($td.find('.thumbnail'))).toEqual(OC.webroot + '/core/img/filetypes/folder.svg');
expect(previewLoadStub.notCalled).toEqual(true);
});
+ it('render encrypted folder icon for encrypted root', function() {
+ var fileData = {
+ type: 'dir',
+ mimetype: 'httpd/unix-directory',
+ name: 'test dir',
+ isEncrypted: true
+ };
+ var $tr = fileList.add(fileData);
+ var $td = $tr.find('td.filename');
+ expect(OC.TestUtil.getImageUrl($td.find('.thumbnail'))).toEqual(OC.webroot + '/core/img/filetypes/folder-encrypted.svg');
+ expect(previewLoadStub.notCalled).toEqual(true);
+ });
+ it('render encrypted folder icon for encrypted subdir', function() {
+ var fileData = {
+ type: 'dir',
+ mimetype: 'httpd/unix-directory',
+ name: 'test dir',
+ isEncrypted: true
+ };
+ var $tr = fileList.add(fileData);
+ var $td = $tr.find('td.filename');
+ expect(OC.TestUtil.getImageUrl($td.find('.thumbnail'))).toEqual(OC.webroot + '/core/img/filetypes/folder-encrypted.svg');
+ expect(previewLoadStub.notCalled).toEqual(true);
+ // default icon override
+ expect($tr.attr('data-icon')).toEqual(OC.webroot + '/core/img/filetypes/folder-encrypted.svg');
+ });
it('render external storage icon for external storage root', function() {
var fileData = {
type: 'dir',
@@ -2086,7 +2125,8 @@ describe('OCA.Files.FileList tests', function() {
size: 12,
etag: 'abc',
permissions: OC.PERMISSION_ALL,
- hasPreview: true
+ hasPreview: true,
+ isEncrypted: false
});
expect(files[1]).toEqual({
id: 3,
@@ -2097,7 +2137,8 @@ describe('OCA.Files.FileList tests', function() {
size: 58009,
etag: '123',
permissions: OC.PERMISSION_ALL,
- hasPreview: true
+ hasPreview: true,
+ isEncrypted: false
});
expect(files[2]).toEqual({
id: 4,
@@ -2108,7 +2149,8 @@ describe('OCA.Files.FileList tests', function() {
size: 250,
etag: '456',
permissions: OC.PERMISSION_ALL,
- hasPreview: true
+ hasPreview: true,
+ isEncrypted: false
});
expect(files[0].id).toEqual(1);
expect(files[0].name).toEqual('One.txt');
@@ -2130,7 +2172,8 @@ describe('OCA.Files.FileList tests', function() {
size: 12,
etag: 'abc',
permissions: OC.PERMISSION_ALL,
- hasPreview: true
+ hasPreview: true,
+ isEncrypted: false
});
expect(files[1]).toEqual({
id: 4,
@@ -2141,7 +2184,8 @@ describe('OCA.Files.FileList tests', function() {
size: 250,
etag: '456',
permissions: OC.PERMISSION_ALL,
- hasPreview: true
+ hasPreview: true,
+ isEncrypted: false
});
});
describe('Download', function() {
@@ -3231,6 +3275,16 @@ describe('OCA.Files.FileList tests', function() {
expect(fileInfo.mimetype).toEqual('text/plain');
expect(fileInfo.type).toEqual('file');
expect(fileInfo.path).not.toBeDefined();
+ expect(fileInfo.isEncrypted).toEqual(false);
+ });
+ it('sets isEncrypted attribute if data includes true e2eencrypted', function() {
+ testFiles[3].isEncrypted = true;
+
+ fileList.setFiles(testFiles);
+ $tr = fileList.findFileEl('somedir');
+
+ var fileInfo = fileList.elementToFile($tr);
+ expect(fileInfo.isEncrypted).toEqual(true);
});
it('adds path attribute if available', function() {
$tr.attr('data-path', '/subdir');