summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2014-04-03 17:04:16 +0200
committerThomas Müller <thomas.mueller@tmit.eu>2014-04-03 17:04:16 +0200
commit14a53819777f5cb829aa15f8d749c9ae71d39b4e (patch)
treebd32bfd88a60ac20a7d5a00a559fffb705a9279e
parentc0ebc1dfb1108b7cbe0fa134def00aa6ce0066b3 (diff)
parente2969062ca172b46713653ac243bb849a54ca7d7 (diff)
downloadnextcloud-server-14a53819777f5cb829aa15f8d749c9ae71d39b4e.tar.gz
nextcloud-server-14a53819777f5cb829aa15f8d749c9ae71d39b4e.zip
Merge branch 'master' into fs-backend-registration
Conflicts: apps/files_external/templates/settings.php
-rw-r--r--apps/files_external/lib/webdav.php2
-rw-r--r--apps/files_external/templates/settings.php294
-rw-r--r--tests/lib/files/storage/storage.php21
3 files changed, 172 insertions, 145 deletions
diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php
index b43c65e8e6c..dc98dcfb808 100644
--- a/apps/files_external/lib/webdav.php
+++ b/apps/files_external/lib/webdav.php
@@ -267,7 +267,7 @@ class DAV extends \OC\Files\Storage\Common {
$curl = curl_init();
curl_setopt($curl, CURLOPT_USERPWD, $this->user . ':' . $this->password);
- curl_setopt($curl, CURLOPT_URL, $this->createBaseUri() . str_replace(' ', '%20', $target));
+ curl_setopt($curl, CURLOPT_URL, $this->createBaseUri() . $this->encodePath($target));
curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curl, CURLOPT_INFILE, $source); // file pointer
curl_setopt($curl, CURLOPT_INFILESIZE, filesize($path));
diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php
index 84d9d3408d1..0d04e35e7fe 100644
--- a/apps/files_external/templates/settings.php
+++ b/apps/files_external/templates/settings.php
@@ -1,162 +1,170 @@
-<form id="files_external">
- <fieldset class="personalblock">
- <legend><strong><?php p($l->t('External Storage')); ?></strong></legend>
- <table id="externalStorage" data-admin='<?php print_unescaped(json_encode($_['isAdminPage'])); ?>'>
- <thead>
+<form id="files_external" class="section">
+ <h2><?php p($l->t('External Storage')); ?></h2>
+ <?php if (isset($_['dependencies']) and ($_['dependencies']<>'')) print_unescaped(''.$_['dependencies'].''); ?>
+ <table id="externalStorage" class="grid" data-admin='<?php print_unescaped(json_encode($_['isAdminPage'])); ?>'>
+ <thead>
<tr>
<th></th>
<th><?php p($l->t('Folder name')); ?></th>
<th><?php p($l->t('External storage')); ?></th>
<th><?php p($l->t('Configuration')); ?></th>
<!--<th><?php p($l->t('Options')); ?></th> -->
- <?php if ($_['isAdminPage']) print_unescaped('<th>'.$l->t('Applicable').'</th>'); ?>
+ <?php if ($_['isAdminPage']) print_unescaped('<th>'.$l->t('Available for').'</th>'); ?>
<th>&nbsp;</th>
</tr>
- </thead>
- <tbody width="100%">
- <?php $_['mounts'] = array_merge($_['mounts'], array('' => array())); ?>
- <?php foreach ($_['mounts'] as $mountPoint => $mount): ?>
- <tr <?php print_unescaped(($mountPoint != '') ? 'class="'.OC_Util::sanitizeHTML($mount['class']).'"' : 'id="addMountPoint"'); ?>>
- <td class="status">
- <?php if (isset($mount['status'])): ?>
- <span class="<?php p(($mount['status']) ? 'success' : 'error'); ?>"></span>
- <?php endif; ?>
+ </thead>
+ <tbody width="100%">
+ <?php $_['mounts'] = array_merge($_['mounts'], array('' => array())); ?>
+ <?php foreach ($_['mounts'] as $mount): ?>
+ <tr <?php print_unescaped(isset($mount['mountpoint']) ? 'class="'.OC_Util::sanitizeHTML($mount['class']).'"' : 'id="addMountPoint"'); ?>>
+ <td class="status">
+ <?php if (isset($mount['status'])): ?>
+ <span class="<?php p(($mount['status']) ? 'success' : 'error'); ?>"></span>
+ <?php endif; ?>
+ </td>
+ <td class="mountPoint"><input type="text" name="mountPoint"
+ value="<?php p(isset($mount['mountpoint']) ? $mount['mountpoint'] : ''); ?>"
+ placeholder="<?php p($l->t('Folder name')); ?>" /></td>
+ <?php if (!isset($mount['mountpoint'])): ?>
+ <td class="backend">
+ <select id="selectBackend" data-configurations='<?php print_unescaped(json_encode($_['backends'])); ?>'>
+ <option value="" disabled selected
+ style="display:none;"><?php p($l->t('Add storage')); ?></option>
+ <?php foreach ($_['backends'] as $class => $backend): ?>
+ <option value="<?php p($class); ?>"><?php p($backend['backend']); ?></option>
+ <?php endforeach; ?>
+ </select>
</td>
- <td class="mountPoint"><input type="text" name="mountPoint"
- value="<?php p($mountPoint); ?>"
- placeholder="<?php p($l->t('Folder name')); ?>" /></td>
- <?php if ($mountPoint == ''): ?>
- <td class="backend">
- <select id="selectBackend" data-configurations='<?php print_unescaped(json_encode($_['backends'])); ?>'>
- <option value="" disabled selected
- style="display:none;"><?php p($l->t('Add storage')); ?></option>
- <?php foreach ($_['backends'] as $class => $backend): ?>
- <option value="<?php p($class); ?>"><?php p($backend['backend']); ?></option>
- <?php endforeach; ?>
- </select>
- </td>
- <?php else: ?>
- <td class="backend"
- data-class="<?php p($mount['class']); ?>"><?php p($mount['backend']); ?></td>
- <?php endif; ?>
- <td class ="configuration" width="100%">
- <?php if (isset($mount['configuration'])): ?>
- <?php foreach ($mount['configuration'] as $parameter => $value): ?>
- <?php if (isset($_['backends'][$mount['class']]['configuration'][$parameter])): ?>
- <?php $placeholder = $_['backends'][$mount['class']]['configuration'][$parameter]; ?>
- <?php if (strpos($placeholder, '*') !== false): ?>
- <input type="password"
- data-parameter="<?php p($parameter); ?>"
- value="<?php p($value); ?>"
- placeholder="<?php p(substr($placeholder, 1)); ?>" />
- <?php elseif (strpos($placeholder, '!') !== false): ?>
- <label><input type="checkbox"
- data-parameter="<?php p($parameter); ?>"
- <?php if ($value == 'true'): ?> checked="checked"<?php endif; ?>
- /><?php p(substr($placeholder, 1)); ?></label>
- <?php elseif (strpos($placeholder, '&') !== false): ?>
- <input type="text"
- class="optional"
- data-parameter="<?php p($parameter); ?>"
- value="<?php p($value); ?>"
- placeholder="<?php p(substr($placeholder, 5)); ?>" />
- <?php elseif (strpos($placeholder, '#') !== false): ?>
- <input type="hidden"
- data-parameter="<?php p($parameter); ?>"
- value="<?php p($value); ?>" />
- <?php else: ?>
- <input type="text"
- data-parameter="<?php p($parameter); ?>"
- value="<?php p($value); ?>"
- placeholder="<?php p($placeholder); ?>" />
- <?php endif; ?>
+ <?php else: ?>
+ <td class="backend"
+ data-class="<?php p($mount['class']); ?>"><?php p($mount['backend']); ?></td>
+ <?php endif; ?>
+ <td class ="configuration" width="100%">
+ <?php if (isset($mount['options'])): ?>
+ <?php foreach ($mount['options'] as $parameter => $value): ?>
+ <?php if (isset($_['backends'][$mount['class']]['configuration'][$parameter])): ?>
+ <?php
+ $placeholder = $_['backends'][$mount['class']]['configuration'][$parameter];
+ $is_optional = FALSE;
+ if (strpos($placeholder, '&') === 0) {
+ $is_optional = TRUE;
+ $placeholder = substr($placeholder, 1);
+ }
+ ?>
+ <?php if (strpos($placeholder, '*') === 0): ?>
+ <input type="password"
+ <?php if ($is_optional): ?> class="optional"<?php endif; ?>
+ data-parameter="<?php p($parameter); ?>"
+ value="<?php p($value); ?>"
+ placeholder="<?php p(substr($placeholder, 1)); ?>" />
+ <?php elseif (strpos($placeholder, '!') === 0): ?>
+ <label><input type="checkbox"
+ data-parameter="<?php p($parameter); ?>"
+ <?php if ($value == 'true'): ?> checked="checked"<?php endif; ?>
+ /><?php p(substr($placeholder, 1)); ?></label>
+ <?php elseif (strpos($placeholder, '#') === 0): ?>
+ <input type="hidden"
+ data-parameter="<?php p($parameter); ?>"
+ value="<?php p($value); ?>" />
+ <?php else: ?>
+ <input type="text"
+ <?php if ($is_optional): ?> class="optional"<?php endif; ?>
+ data-parameter="<?php p($parameter); ?>"
+ value="<?php p($value); ?>"
+ placeholder="<?php p($placeholder); ?>" />
<?php endif; ?>
- <?php endforeach; ?>
- <?php if (isset($_['backends'][$mount['class']]['custom']) && !in_array('files_external/js/'.$_['backends'][$mount['class']]['custom'], \OC_Util::$scripts)): ?>
- <?php OCP\Util::addScript('files_external', $_['backends'][$mount['class']]['custom']); ?>
<?php endif; ?>
+ <?php endforeach; ?>
+ <?php if (isset($_['backends'][$mount['class']]['custom']) && !in_array('files_external/js/'.$_['backends'][$mount['class']]['custom'], \OC_Util::$scripts)): ?>
+ <?php OCP\Util::addScript('files_external', $_['backends'][$mount['class']]['custom']); ?>
<?php endif; ?>
- </td>
- <?php if ($_['isAdminPage']): ?>
- <td class="applicable"
- align="right"
- data-applicable-groups='<?php if (isset($mount['applicable']['groups']))
- print_unescaped(json_encode($mount['applicable']['groups'])); ?>'
- data-applicable-users='<?php if (isset($mount['applicable']['users']))
- print_unescaped(json_encode($mount['applicable']['users'])); ?>'>
- <select class="chzn-select"
- multiple style="width:20em;"
- data-placeholder="<?php p($l->t('None set')); ?>">
- <option value="all" <?php if (isset($mount['applicable']['users']) && in_array('all', $mount['applicable']['users'])) print_unescaped('selected="selected"');?> ><?php p($l->t('All Users')); ?></option>
- <optgroup label="<?php p($l->t('Groups')); ?>">
- <?php foreach ($_['groups'] as $group): ?>
- <option value="<?php p($group); ?>(group)"
- <?php if (isset($mount['applicable']['groups']) && in_array($group, $mount['applicable']['groups'])): ?>
- selected="selected"
- <?php endif; ?>><?php p($group); ?></option>
- <?php endforeach; ?>
- </optgroup>
- <optgroup label="<?php p($l->t('Users')); ?>">
- <?php foreach ($_['users'] as $user): ?>
- <option value="<?php p($user); ?>"
- <?php if (isset($mount['applicable']['users']) && in_array($user, $mount['applicable']['users'])): ?>
- selected="selected"
- <?php endif; ?>><?php p($_['userDisplayNames'][$user]); ?></option>
- <?php endforeach; ?>
- </optgroup>
- </select>
- </td>
<?php endif; ?>
- <td <?php if ($mountPoint != ''): ?>class="remove"
- <?php else: ?>style="visibility:hidden;"
- <?php endif ?>><img alt="<?php p($l->t('Delete')); ?>"
- title="<?php p($l->t('Delete')); ?>"
- class="svg action"
- src="<?php print_unescaped(image_path('core', 'actions/delete.svg')); ?>" /></td>
- </tr>
- <?php endforeach; ?>
- </tbody>
- </table>
- <?php if (isset($_['dependencies']) and ($_['dependencies']<>'')) print_unescaped(''.$_['dependencies'].''); ?>
+ </td>
+ <?php if ($_['isAdminPage']): ?>
+ <td class="applicable"
+ align="right"
+ data-applicable-groups='<?php if (isset($mount['applicable']['groups']))
+ print_unescaped(json_encode($mount['applicable']['groups'])); ?>'
+ data-applicable-users='<?php if (isset($mount['applicable']['users']))
+ print_unescaped(json_encode($mount['applicable']['users'])); ?>'>
+ <select class="chzn-select"
+ multiple style="width:20em;"
+ data-placeholder="<?php p($l->t('No user or group')); ?>">
+ <option value="all"
+ <?php if (empty($mount['class']) || (isset($mount['applicable']['users']) && in_array('all', $mount['applicable']['users']))) print_unescaped('selected="selected"');?> >
+ <?php p($l->t('All Users')); ?>
+ </option>
+ <optgroup label="<?php p($l->t('Groups')); ?>">
+ <?php foreach ($_['groups'] as $group): ?>
+ <option value="<?php p($group); ?>(group)"
+ <?php if (isset($mount['applicable']['groups']) && in_array($group, $mount['applicable']['groups'])): ?>
+ selected="selected"
+ <?php endif; ?>><?php p($group); ?></option>
+ <?php endforeach; ?>
+ </optgroup>
+ <optgroup label="<?php p($l->t('Users')); ?>">
+ <?php foreach ($_['users'] as $user): ?>
+ <option value="<?php p($user); ?>"
+ <?php if (isset($mount['applicable']['users']) && in_array($user, $mount['applicable']['users'])): ?>
+ selected="selected"
+ <?php endif; ?>><?php p($_['userDisplayNames'][$user]); ?></option>
+ <?php endforeach; ?>
+ </optgroup>
+ </select>
+ </td>
+ <?php endif; ?>
+ <td <?php if (isset($mount['mountpoint'])): ?>class="remove"
+ <?php else: ?>style="visibility:hidden;"
+ <?php endif ?>><img alt="<?php p($l->t('Delete')); ?>"
+ title="<?php p($l->t('Delete')); ?>"
+ class="svg action"
+ src="<?php print_unescaped(image_path('core', 'actions/delete.svg')); ?>" /></td>
+ </tr>
+ <?php endforeach; ?>
+ </tbody>
+ </table>
+ <br />
+
+ <?php if ($_['isAdminPage']): ?>
<br />
+ <input type="checkbox" name="allowUserMounting" id="allowUserMounting"
+ value="1" <?php if ($_['allowUserMounting'] == 'yes') print_unescaped(' checked="checked"'); ?> />
+ <label for="allowUserMounting"><?php p($l->t('Enable User External Storage')); ?></label> <span id="userMountingMsg" class="msg"></span>
- <?php if ($_['isAdminPage']): ?>
- <br />
- <input type="checkbox"
- name="allowUserMounting"
- id="allowUserMounting"
- value="1" <?php if ($_['allowUserMounting'] == 'yes') print_unescaped(' checked="checked"'); ?> />
- <label for="allowUserMounting"><?php p($l->t('Enable User External Storage')); ?></label><br/>
- <em><?php p($l->t('Allow users to mount their own external storage')); ?></em>
- <?php endif; ?>
- </fieldset>
+ <p id="userMountingBackups"<?php if ($_['allowUserMounting'] != 'yes'): ?> class="hidden"<?php endif; ?>>
+ <?php p($l->t('Allow users to mount the following external storage')); ?><br />
+ <?php $i = 0; foreach ($_['personal_backends'] as $class => $backend): ?>
+ <input type="checkbox" id="allowUserMountingBackends<?php p($i); ?>" name="allowUserMountingBackends[]" value="<?php p($class); ?>" <?php if ($backend['enabled']) print_unescaped(' checked="checked"'); ?> />
+ <label for="allowUserMountingBackends<?php p($i); ?>"><?php p($backend['backend']); ?></label> <br />
+ <?php $i++; ?>
+ <?php endforeach; ?>
+ </p>
+ <?php endif; ?>
</form>
<?php if ( ! $_['isAdminPage']): ?>
- <form id="files_external"
- method="post"
- enctype="multipart/form-data"
- action="<?php p(OCP\Util::linkTo('files_external', 'ajax/addRootCertificate.php')); ?>">
- <fieldset class="personalblock">
- <legend><strong><?php p($l->t('SSL root certificates'));?></strong></legend>
- <table id="sslCertificate" data-admin='<?php print_unescaped(json_encode($_['isAdminPage'])); ?>'>
- <tbody width="100%">
- <?php foreach ($_['certs'] as $rootCert): ?>
- <tr id="<?php p($rootCert) ?>">
- <td class="rootCert"><?php p($rootCert) ?></td>
- <td <?php if ($rootCert != ''): ?>class="remove"
- <?php else: ?>style="visibility:hidden;"
- <?php endif; ?>><img alt="<?php p($l->t('Delete')); ?>"
- title="<?php p($l->t('Delete')); ?>"
- class="svg action"
- src="<?php print_unescaped(image_path('core', 'actions/delete.svg')); ?>" /></td>
- </tr>
- <?php endforeach; ?>
- </tbody>
- </table>
- <input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']); ?>">
- <input type="file" id="rootcert_import" name="rootcert_import">
- <input type="submit" name="cert_import" value="<?php p($l->t('Import Root Certificate')); ?>" />
- </fieldset>
- </form>
+<form id="files_external" class="section"
+ method="post"
+ enctype="multipart/form-data"
+ action="<?php p(OCP\Util::linkTo('files_external', 'ajax/addRootCertificate.php')); ?>">
+ <h2><?php p($l->t('SSL root certificates'));?></h2>
+ <table id="sslCertificate" data-admin='<?php print_unescaped(json_encode($_['isAdminPage'])); ?>'>
+ <tbody width="100%">
+ <?php foreach ($_['certs'] as $rootCert): ?>
+ <tr id="<?php p($rootCert) ?>">
+ <td class="rootCert"><?php p($rootCert) ?></td>
+ <td <?php if ($rootCert != ''): ?>class="remove"
+ <?php else: ?>style="visibility:hidden;"
+ <?php endif; ?>><img alt="<?php p($l->t('Delete')); ?>"
+ title="<?php p($l->t('Delete')); ?>"
+ class="svg action"
+ src="<?php print_unescaped(image_path('core', 'actions/delete.svg')); ?>" /></td>
+ </tr>
+ <?php endforeach; ?>
+ </tbody>
+ </table>
+ <input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']); ?>">
+ <input type="file" id="rootcert_import" name="rootcert_import">
+ <input type="submit" name="cert_import" value="<?php p($l->t('Import Root Certificate')); ?>" />
+</form>
<?php endif; ?>
diff --git a/tests/lib/files/storage/storage.php b/tests/lib/files/storage/storage.php
index 6ec35dfbc92..38cd17ac8c9 100644
--- a/tests/lib/files/storage/storage.php
+++ b/tests/lib/files/storage/storage.php
@@ -310,7 +310,7 @@ abstract class Storage extends \PHPUnit_Framework_TestCase {
$this->assertFalse($this->instance->file_exists('folder'));
}
- public function hashProvider(){
+ public function hashProvider() {
return array(
array('Foobar', 'md5'),
array('Foobar', 'sha1'),
@@ -326,4 +326,23 @@ abstract class Storage extends \PHPUnit_Framework_TestCase {
$this->assertEquals(hash($type, $data), $this->instance->hash($type, 'hash.txt'));
$this->assertEquals(hash($type, $data, true), $this->instance->hash($type, 'hash.txt', true));
}
+
+ public function testHashInFileName() {
+ $this->instance->file_put_contents('#test.txt', 'data');
+ $this->assertEquals('data', $this->instance->file_get_contents('#test.txt'));
+
+ $this->instance->mkdir('#foo');
+ $this->instance->file_put_contents('#foo/test.txt', 'data');
+ $this->assertEquals('data', $this->instance->file_get_contents('#foo/test.txt'));
+
+ $dh = $this->instance->opendir('#foo');
+ $content = array();
+ while ($file = readdir($dh)) {
+ if ($file != '.' and $file != '..') {
+ $content[] = $file;
+ }
+ }
+
+ $this->assertEquals(array('test.txt'), $content);
+ }
}