summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern Schiessle <schiessle@owncloud.com>2015-01-20 20:34:34 +0100
committerBjoern Schiessle <schiessle@owncloud.com>2015-01-26 16:58:52 +0100
commit5ba19ba7fcda12e21fe37e8686218122936c9a68 (patch)
tree12b22f6dd3421bc674be128626ed688f9580b2a8
parent67da1f7e5ac9fc5472b6041dcfdc81a4b8428379 (diff)
downloadnextcloud-server-5ba19ba7fcda12e21fe37e8686218122936c9a68.tar.gz
nextcloud-server-5ba19ba7fcda12e21fe37e8686218122936c9a68.zip
certificate manager should always use a \OC\Files\View otherwise we will get problems for different primary storages
-rw-r--r--apps/files_sharing/lib/external/manager.php27
-rw-r--r--lib/private/security/certificatemanager.php32
-rw-r--r--lib/private/server.php4
-rw-r--r--tests/lib/security/certificatemanager.php4
4 files changed, 48 insertions, 19 deletions
diff --git a/apps/files_sharing/lib/external/manager.php b/apps/files_sharing/lib/external/manager.php
index 35dcabbe50e..8985aeb3fce 100644
--- a/apps/files_sharing/lib/external/manager.php
+++ b/apps/files_sharing/lib/external/manager.php
@@ -42,6 +42,7 @@ class Manager {
* @param \OCP\IDBConnection $connection
* @param \OC\Files\Mount\Manager $mountManager
* @param \OC\Files\Storage\StorageFactory $storageLoader
+ * @param \OC\HTTPHelper $httpHelper
* @param string $uid
*/
public function __construct(\OCP\IDBConnection $connection, \OC\Files\Mount\Manager $mountManager,
@@ -53,6 +54,19 @@ class Manager {
$this->uid = $uid;
}
+ /**
+ * add new server-to-server share
+ *
+ * @param string $remote
+ * @param string $token
+ * @param string $password
+ * @param string $name
+ * @param string $owner
+ * @param boolean $accepted
+ * @param string $user
+ * @param int $remoteId
+ * @return mixed
+ */
public function addShare($remote, $token, $password, $name, $owner, $accepted=false, $user = null, $remoteId = -1) {
$user = $user ? $user : $this->uid;
@@ -174,7 +188,12 @@ class Manager {
return ($result['success'] && $status['ocs']['meta']['statuscode'] === 100);
}
- public static function setup($params) {
+ /**
+ * setup the server-to-server mounts
+ *
+ * @param array $params
+ */
+ public static function setup(array $params) {
$externalManager = new \OCA\Files_Sharing\External\Manager(
\OC::$server->getDatabaseConnection(),
\OC\Files\Filesystem::getMountManager(),
@@ -186,6 +205,12 @@ class Manager {
$externalManager->setupMounts();
}
+ /**
+ * remove '/user/files' from the path and trailing slashes
+ *
+ * @param string $path
+ * @return string
+ */
protected function stripPath($path) {
$prefix = '/' . $this->uid . '/files';
return rtrim(substr($path, strlen($prefix)), '/');
diff --git a/lib/private/security/certificatemanager.php b/lib/private/security/certificatemanager.php
index 0744546177f..7bc83766365 100644
--- a/lib/private/security/certificatemanager.php
+++ b/lib/private/security/certificatemanager.php
@@ -21,10 +21,17 @@ class CertificateManager implements ICertificateManager {
protected $uid;
/**
+ * @var \OC\Files\View
+ */
+ protected $view;
+
+ /**
* @param string $uid
+ * @param \OC\Files\View $view relative zu data/
*/
- public function __construct($uid) {
+ public function __construct($uid, \OC\Files\View $view) {
$this->uid = $uid;
+ $this->view = $view;
}
/**
@@ -34,18 +41,18 @@ class CertificateManager implements ICertificateManager {
*/
public function listCertificates() {
$path = $this->getPathToCertificates() . 'uploads/';
- if (!is_dir($path)) {
+ if (!$this->view->is_dir($path)) {
return array();
}
$result = array();
- $handle = opendir($path);
+ $handle = $this->view->opendir($path);
if (!is_resource($handle)) {
return array();
}
while (false !== ($file = readdir($handle))) {
if ($file != '.' && $file != '..') {
try {
- $result[] = new Certificate(file_get_contents($path . $file), $file);
+ $result[] = new Certificate($this->view->file_get_contents($path . $file), $file);
} catch(\Exception $e) {}
}
}
@@ -60,10 +67,10 @@ class CertificateManager implements ICertificateManager {
$path = $this->getPathToCertificates();
$certs = $this->listCertificates();
- $fh_certs = fopen($path . '/rootcerts.crt', 'w');
+ $fh_certs = $this->view->fopen($path . '/rootcerts.crt', 'w');
foreach ($certs as $cert) {
$file = $path . '/uploads/' . $cert->getName();
- $data = file_get_contents($file);
+ $data = $this->view->file_get_contents($file);
if (strpos($data, 'BEGIN CERTIFICATE')) {
fwrite($fh_certs, $data);
fwrite($fh_certs, "\r\n");
@@ -87,17 +94,14 @@ class CertificateManager implements ICertificateManager {
}
$dir = $this->getPathToCertificates() . 'uploads/';
- if (!file_exists($dir)) {
- //path might not exist (e.g. non-standard OC_User::getHome() value)
- //in this case create full path using 3rd (recursive=true) parameter.
- //note that we use "normal" php filesystem functions here since the certs need to be local
- mkdir($dir, 0700, true);
+ if (!$this->view->file_exists($dir)) {
+ $this->view->mkdir($dir);
}
try {
$file = $dir . $name;
$certificateObject = new Certificate($certificate, $name);
- file_put_contents($file, $certificate);
+ $this->view->file_put_contents($file, $certificate);
$this->createCertificateBundle();
return $certificateObject;
} catch (\Exception $e) {
@@ -117,8 +121,8 @@ class CertificateManager implements ICertificateManager {
return false;
}
$path = $this->getPathToCertificates() . 'uploads/';
- if (file_exists($path . $name)) {
- unlink($path . $name);
+ if ($this->view->file_exists($path . $name)) {
+ $this->view->unlink($path . $name);
$this->createCertificateBundle();
}
return true;
diff --git a/lib/private/server.php b/lib/private/server.php
index 672245c3528..15c33e1905f 100644
--- a/lib/private/server.php
+++ b/lib/private/server.php
@@ -251,7 +251,7 @@ class Server extends SimpleContainer implements IServerContainer {
$config = $c->getConfig();
$user = $c->getUserSession()->getUser();
$uid = $user ? $user->getUID() : null;
- return new HTTPHelper($config, new \OC\Security\CertificateManager($uid));
+ return new HTTPHelper($config, new \OC\Security\CertificateManager($uid, new \OC\Files\View()));
});
$this->registerService('EventLogger', function (Server $c) {
if (defined('DEBUG') and DEBUG) {
@@ -645,7 +645,7 @@ class Server extends SimpleContainer implements IServerContainer {
}
$uid = $user->getUID();
}
- return new CertificateManager($uid);
+ return new CertificateManager($uid, new \OC\Files\View());
}
/**
diff --git a/tests/lib/security/certificatemanager.php b/tests/lib/security/certificatemanager.php
index 83980a6755c..1167fe3d868 100644
--- a/tests/lib/security/certificatemanager.php
+++ b/tests/lib/security/certificatemanager.php
@@ -28,7 +28,7 @@ class CertificateManagerTest extends \Test\TestCase {
\OC\Files\Filesystem::tearDown();
\OC_Util::setupFS($this->username);
- $this->certificateManager = new CertificateManager($this->username);
+ $this->certificateManager = new CertificateManager($this->username, new \OC\Files\View());
}
protected function tearDown() {
@@ -85,4 +85,4 @@ class CertificateManagerTest extends \Test\TestCase {
$this->assertSame('/' . $this->username . '/files_external/rootcerts.crt', $this->certificateManager->getCertificateBundle());
}
-} \ No newline at end of file
+}