diff options
author | Bjoern Schiessle <schiessle@owncloud.com> | 2015-01-20 20:34:34 +0100 |
---|---|---|
committer | Bjoern Schiessle <schiessle@owncloud.com> | 2015-01-26 16:58:52 +0100 |
commit | 5ba19ba7fcda12e21fe37e8686218122936c9a68 (patch) | |
tree | 12b22f6dd3421bc674be128626ed688f9580b2a8 | |
parent | 67da1f7e5ac9fc5472b6041dcfdc81a4b8428379 (diff) | |
download | nextcloud-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.php | 27 | ||||
-rw-r--r-- | lib/private/security/certificatemanager.php | 32 | ||||
-rw-r--r-- | lib/private/server.php | 4 | ||||
-rw-r--r-- | tests/lib/security/certificatemanager.php | 4 |
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 +} |