]> source.dussan.org Git - nextcloud-server.git/commitdiff
certificate manager should always use a \OC\Files\View otherwise we will get problems...
authorBjoern Schiessle <schiessle@owncloud.com>
Tue, 20 Jan 2015 19:34:34 +0000 (20:34 +0100)
committerBjoern Schiessle <schiessle@owncloud.com>
Mon, 26 Jan 2015 15:58:52 +0000 (16:58 +0100)
apps/files_sharing/lib/external/manager.php
lib/private/security/certificatemanager.php
lib/private/server.php
tests/lib/security/certificatemanager.php

index 35dcabbe50e142dd8905306bce6d70119aeb6524..8985aeb3fcecdbbe819be7da6292e048d3d3aa46 100644 (file)
@@ -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)), '/');
index 0744546177fab1a262697e91eea02ce70b1357aa..7bc83766365a27a6ebc4f2e332adc670451c9e21 100644 (file)
@@ -20,11 +20,18 @@ 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;
index 672245c352873db3c4e3469922b24c6cc1029f0c..15c33e1905ff82ccdcf57fd87ec8a1566120cbb3 100644 (file)
@@ -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());
        }
 
        /**
index 83980a6755c8b00a0608e6f31b11fa6356e3dbc6..1167fe3d86885e74cb39b10e4ca4af4a3c927a04 100644 (file)
@@ -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
+}