]> source.dussan.org Git - nextcloud-server.git/commitdiff
cache the path of the certificate bundle 31605/head
authorRobin Appelman <robin@icewind.nl>
Thu, 17 Mar 2022 13:52:33 +0000 (14:52 +0100)
committerRobin Appelman <robin@icewind.nl>
Thu, 17 Mar 2022 13:58:56 +0000 (14:58 +0100)
Signed-off-by: Robin Appelman <robin@icewind.nl>
lib/private/Security/CertificateManager.php

index 6f3b01e23b9a19f1ab02e978e3bcc89bf0a91b79..74ea59c379299a4bed5e5b02cd24a40acc191c92 100644 (file)
@@ -61,6 +61,8 @@ class CertificateManager implements ICertificateManager {
        /** @var ISecureRandom */
        protected $random;
 
+       private ?string $bundlePath = null;
+
        /**
         * @param \OC\Files\View $view relative to data/
         * @param IConfig $config
@@ -190,6 +192,7 @@ class CertificateManager implements ICertificateManager {
                if (!Filesystem::isValidPath($name) or Filesystem::isFileBlacklisted($name)) {
                        throw new \Exception('Filename is not valid');
                }
+               $this->bundlePath = null;
 
                $dir = $this->getPathToCertificates() . 'uploads/';
                if (!$this->view->file_exists($dir)) {
@@ -217,6 +220,8 @@ class CertificateManager implements ICertificateManager {
                if (!Filesystem::isValidPath($name)) {
                        return false;
                }
+               $this->bundlePath = null;
+
                $path = $this->getPathToCertificates() . 'uploads/';
                if ($this->view->file_exists($path . $name)) {
                        $this->view->unlink($path . $name);
@@ -241,15 +246,18 @@ class CertificateManager implements ICertificateManager {
         */
        public function getAbsoluteBundlePath(): string {
                try {
-                       if (!$this->hasCertificates()) {
-                               return \OC::$SERVERROOT . '/resources/config/ca-bundle.crt';
-                       }
+                       if (!$this->bundlePath) {
+                               if (!$this->hasCertificates()) {
+                                       $this->bundlePath = \OC::$SERVERROOT . '/resources/config/ca-bundle.crt';
+                               }
 
-                       if ($this->needsRebundling()) {
-                               $this->createCertificateBundle();
-                       }
+                               if ($this->needsRebundling()) {
+                                       $this->createCertificateBundle();
+                               }
 
-                       return $this->view->getLocalFile($this->getCertificateBundle());
+                               $this->bundlePath = $this->view->getLocalFile($this->getCertificateBundle());
+                       }
+                       return $this->bundlePath;
                } catch (\Exception $e) {
                        return \OC::$SERVERROOT . '/resources/config/ca-bundle.crt';
                }