diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/files/ajax/delete.php | 4 | ||||
-rw-r--r-- | apps/files/ajax/newfile.php | 3 | ||||
-rw-r--r-- | apps/files/js/filelist.js | 14 | ||||
-rw-r--r-- | apps/files/tests/js/filelistSpec.js | 34 | ||||
-rw-r--r-- | apps/files_encryption/settings-personal.php | 1 | ||||
-rw-r--r-- | apps/files_external/js/settings.js | 4 | ||||
-rw-r--r-- | apps/user_ldap/lib/access.php | 10 | ||||
-rw-r--r-- | apps/user_ldap/user_ldap.php | 2 |
8 files changed, 56 insertions, 16 deletions
diff --git a/apps/files/ajax/delete.php b/apps/files/ajax/delete.php index aed53d5db5a..538bdf99cc6 100644 --- a/apps/files/ajax/delete.php +++ b/apps/files/ajax/delete.php @@ -27,7 +27,9 @@ $success = true; //Now delete foreach ($files as $file) { if (\OC\Files\Filesystem::file_exists($dir . '/' . $file) && - !\OC\Files\Filesystem::unlink($dir . '/' . $file)) { + !(\OC\Files\Filesystem::isDeletable($dir . '/' . $file) && + \OC\Files\Filesystem::unlink($dir . '/' . $file)) + ) { $filesWithError .= $file . "\n"; $success = false; } diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php index 1b971785a44..72540894e69 100644 --- a/apps/files/ajax/newfile.php +++ b/apps/files/ajax/newfile.php @@ -119,6 +119,9 @@ if($source) { $freeSpace = $storageStats['freeSpace']; foreach($meta['wrapper_data'] as $header) { + if (strpos($header, ':') === false){ + continue; + } list($name, $value) = explode(':', $header); if ('content-length' === strtolower(trim($name))) { $length = (int) trim($value); diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index d08e77f5a5a..ebdf32ee44b 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -479,7 +479,8 @@ mimetype: $el.attr('data-mime'), type: $el.attr('data-type'), size: parseInt($el.attr('data-size'), 10), - etag: $el.attr('data-etag') + etag: $el.attr('data-etag'), + permissions: parseInt($el.attr('data-permissions'), 10) }; }, @@ -1562,7 +1563,7 @@ this.$el.find('.selectedActions').addClass('hidden'); } else { - canDelete = (this.getDirectoryPermissions() & OC.PERMISSION_DELETE); + canDelete = (this.getDirectoryPermissions() & OC.PERMISSION_DELETE) && this.isSelectedDeletable(); this.$el.find('.selectedActions').removeClass('hidden'); this.$el.find('#headerSize a>span:first').text(OC.Util.humanFileSize(summary.totalSize)); var selection = ''; @@ -1583,6 +1584,15 @@ }, /** + * Check whether all selected files are deletable + */ + isSelectedDeletable: function() { + return _.reduce(this.getSelectedFiles(), function(deletable, file) { + return deletable && (file.permissions & OC.PERMISSION_DELETE); + }, true); + }, + + /** * Returns whether all files are selected * @return true if all files are selected, false otherwise */ diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index 86ba4d41df9..3a51fc2073c 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -97,7 +97,8 @@ describe('OCA.Files.FileList tests', function() { name: 'One.txt', mimetype: 'text/plain', size: 12, - etag: 'abc' + etag: 'abc', + permissions: OC.PERMISSION_ALL }, { id: 2, type: 'file', @@ -105,6 +106,7 @@ describe('OCA.Files.FileList tests', function() { mimetype: 'image/jpeg', size: 12049, etag: 'def', + permissions: OC.PERMISSION_ALL }, { id: 3, type: 'file', @@ -112,13 +114,15 @@ describe('OCA.Files.FileList tests', function() { mimetype: 'application/pdf', size: 58009, etag: '123', + permissions: OC.PERMISSION_ALL }, { id: 4, type: 'dir', name: 'somedir', mimetype: 'httpd/unix-directory', size: 250, - etag: '456' + etag: '456', + permissions: OC.PERMISSION_ALL }]; fileList = new OCA.Files.FileList($('#app-content-files')); @@ -1478,6 +1482,17 @@ describe('OCA.Files.FileList tests', function() { $('.select-all').click(); expect(fileList.$el.find('.delete-selected').hasClass('hidden')).toEqual(true); }); + it('show doesnt show the delete action if one or more files are not deletable', function () { + fileList.setFiles(testFiles); + $('#permissions').val(OC.PERMISSION_READ | OC.PERMISSION_DELETE); + $('.select-all').click(); + expect(fileList.$el.find('.delete-selected').hasClass('hidden')).toEqual(false); + testFiles[0].permissions = OC.PERMISSION_READ; + $('.select-all').click(); + fileList.setFiles(testFiles); + $('.select-all').click(); + expect(fileList.$el.find('.delete-selected').hasClass('hidden')).toEqual(true); + }); }); describe('Actions', function() { beforeEach(function() { @@ -1494,7 +1509,8 @@ describe('OCA.Files.FileList tests', function() { mimetype: 'text/plain', type: 'file', size: 12, - etag: 'abc' + etag: 'abc', + permissions: OC.PERMISSION_ALL }); expect(files[1]).toEqual({ id: 3, @@ -1502,7 +1518,8 @@ describe('OCA.Files.FileList tests', function() { name: 'Three.pdf', mimetype: 'application/pdf', size: 58009, - etag: '123' + etag: '123', + permissions: OC.PERMISSION_ALL }); expect(files[2]).toEqual({ id: 4, @@ -1510,7 +1527,8 @@ describe('OCA.Files.FileList tests', function() { name: 'somedir', mimetype: 'httpd/unix-directory', size: 250, - etag: '456' + etag: '456', + permissions: OC.PERMISSION_ALL }); }); it('Removing a file removes it from the selection', function() { @@ -1523,7 +1541,8 @@ describe('OCA.Files.FileList tests', function() { mimetype: 'text/plain', type: 'file', size: 12, - etag: 'abc' + etag: 'abc', + permissions: OC.PERMISSION_ALL }); expect(files[1]).toEqual({ id: 4, @@ -1531,7 +1550,8 @@ describe('OCA.Files.FileList tests', function() { name: 'somedir', mimetype: 'httpd/unix-directory', size: 250, - etag: '456' + etag: '456', + permissions: OC.PERMISSION_ALL }); }); describe('Download', function() { diff --git a/apps/files_encryption/settings-personal.php b/apps/files_encryption/settings-personal.php index e9875518f67..1618bd8a4d9 100644 --- a/apps/files_encryption/settings-personal.php +++ b/apps/files_encryption/settings-personal.php @@ -28,7 +28,6 @@ $result = false; if ($recoveryAdminEnabled || !$privateKeySet) {
\OCP\Util::addscript('files_encryption', 'settings-personal');
- \OCP\Util::addScript('settings', 'personal');
$tmpl->assign('recoveryEnabled', $recoveryAdminEnabled);
$tmpl->assign('recoveryEnabledForUser', $recoveryEnabledForUser);
diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index 3f166f53df7..7ea82f4bcb3 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -452,14 +452,14 @@ $(document).ready(function() { OC.AppConfig.setValue('files_external', 'allow_user_mounting', 'no'); $('#userMountingBackends').addClass('hidden'); } - OC.msg.finishedSaving('#userMountingMsg', {status: 'success', data: {message: t('settings', 'Saved')}}); + OC.msg.finishedSaving('#userMountingMsg', {status: 'success', data: {message: t('files_external', 'Saved')}}); }); $('input[name="allowUserMountingBackends\\[\\]"]').bind('change', function() { OC.msg.startSaving('#userMountingMsg'); var userMountingBackends = $('input[name="allowUserMountingBackends\\[\\]"]:checked').map(function(){return $(this).val();}).get(); OC.AppConfig.setValue('files_external', 'user_mounting_backends', userMountingBackends.join()); - OC.msg.finishedSaving('#userMountingMsg', {status: 'success', data: {message: t('settings', 'Saved')}}); + OC.msg.finishedSaving('#userMountingMsg', {status: 'success', data: {message: t('files_external', 'Saved')}}); // disable allowUserMounting if(userMountingBackends.length === 0) { diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php index 8a0191e4244..3ff1a9985c2 100644 --- a/apps/user_ldap/lib/access.php +++ b/apps/user_ldap/lib/access.php @@ -1084,12 +1084,18 @@ class Access extends LDAPUtility implements user\IUserTools { /** * escapes (user provided) parts for LDAP filter * @param string $input, the provided value + * @param bool $allowAsterisk wether in * at the beginning should be preserved * @return string the escaped string */ - public function escapeFilterPart($input) { + public function escapeFilterPart($input, $allowAsterisk = false) { + $asterisk = ''; + if($allowAsterisk && strlen($input) > 0 && $input[0] === '*') { + $asterisk = '*'; + $input = mb_substr($input, 1, null, 'UTF-8'); + } $search = array('*', '\\', '(', ')'); $replace = array('\\*', '\\\\', '\\(', '\\)'); - return str_replace($search, $replace, $input); + return $asterisk . str_replace($search, $replace, $input); } /** diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index b7846625d9e..8bd9dd9e8c5 100644 --- a/apps/user_ldap/user_ldap.php +++ b/apps/user_ldap/user_ldap.php @@ -93,7 +93,7 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface { * Get a list of all users. */ public function getUsers($search = '', $limit = 10, $offset = 0) { - $search = $this->access->escapeFilterPart($search); + $search = $this->access->escapeFilterPart($search, true); $cachekey = 'getUsers-'.$search.'-'.$limit.'-'.$offset; //check if users are cached, if so return |