summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/files/ajax/delete.php4
-rw-r--r--apps/files/ajax/newfile.php3
-rw-r--r--apps/files/js/filelist.js14
-rw-r--r--apps/files/tests/js/filelistSpec.js34
-rw-r--r--apps/files_encryption/settings-personal.php1
-rw-r--r--apps/files_external/js/settings.js4
-rw-r--r--apps/user_ldap/lib/access.php10
-rw-r--r--apps/user_ldap/user_ldap.php2
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