Browse Source

Make disableTls a core RemoteFilesystem option - per method invites human error

Pádraic Brady 11 years ago
parent
commit
a2bf14e381

+ 7 - 5
src/Composer/Command/DiagnoseCommand.php

@@ -151,12 +151,14 @@ EOT
             $result[] = '<error>Composer is configured to use SSL/TLS protection but the openssl extension is not available.</error>';
             $result[] = '<error>Composer is configured to use SSL/TLS protection but the openssl extension is not available.</error>';
         }
         }
 
 
-        $remoteFilesystemOptions = array();
-        if (!is_null($config->get('cafile'))) {
-            $remoteFilesystemOptions = array('ssl'=>array('cafile'=>$config->get('cafile')));
+        $rfsOptions = array();
+        if ($disableTls) {
+            if (!is_null($config->get('cafile'))) {
+                $rfsOptions = array('ssl'=>array('cafile'=>$config->get('cafile')));
+            }
         }
         }
         try {
         try {
-            $this->rfs = new RemoteFilesystem($this->getIO(), $remoteFilesystemOptions, $disableTls);
+            $this->rfs = new RemoteFilesystem($this->getIO(), $rfsOptions, $disableTls);
         } catch (TransportException $e) {
         } catch (TransportException $e) {
             if (preg_match('|cafile|', $e->getMessage())) {
             if (preg_match('|cafile|', $e->getMessage())) {
                 $result[] = '<error>[' . get_class($e) . '] ' . $e->getMessage() . '</error>';
                 $result[] = '<error>[' . get_class($e) . '] ' . $e->getMessage() . '</error>';
@@ -168,7 +170,7 @@ EOT
         }
         }
 
 
         try {
         try {
-            $json = $this->rfs->getContents('packagist.org', $protocol . '://packagist.org/packages.json', false, array(), $disableTls);
+            $json = $this->rfs->getContents('packagist.org', $protocol . '://packagist.org/packages.json', false);
         } catch (\Exception $e) {
         } catch (\Exception $e) {
             array_unshift($result, '[' . get_class($e) . '] ' . $e->getMessage());
             array_unshift($result, '[' . get_class($e) . '] ' . $e->getMessage());
         }
         }

+ 6 - 4
src/Composer/Command/SelfUpdateCommand.php

@@ -75,11 +75,13 @@ EOT
         }
         }
 
 
         $remoteFilesystemOptions = array();
         $remoteFilesystemOptions = array();
-        if (!is_null($config->get('cafile'))) {
+        if ($disableTls === false) {
+            if (!is_null($config->get('cafile'))) {
             $remoteFilesystemOptions = array('ssl'=>array('cafile'=>$config->get('cafile')));
             $remoteFilesystemOptions = array('ssl'=>array('cafile'=>$config->get('cafile')));
-        }
-        if (!is_null($input->get('cafile'))) {
-            $remoteFilesystemOptions = array('ssl'=>array('cafile'=>$input->get('cafile')));
+            }
+            if (!is_null($input->get('cafile'))) {
+                $remoteFilesystemOptions = array('ssl'=>array('cafile'=>$input->get('cafile')));
+            }
         }
         }
         try {
         try {
             $remoteFilesystem = new RemoteFilesystem($this->getIO(), $remoteFilesystemOptions, $disableTls);
             $remoteFilesystem = new RemoteFilesystem($this->getIO(), $remoteFilesystemOptions, $disableTls);

+ 11 - 8
src/Composer/Util/RemoteFilesystem.php

@@ -33,6 +33,7 @@ class RemoteFilesystem
     private $progress;
     private $progress;
     private $lastProgress;
     private $lastProgress;
     private $options;
     private $options;
+    private $disableTls = false;
 
 
     /**
     /**
      * Constructor.
      * Constructor.
@@ -52,9 +53,11 @@ class RemoteFilesystem
             $this->options = $this->getTlsDefaults();
             $this->options = $this->getTlsDefaults();
             if (isset($options['ssl']['cafile'])
             if (isset($options['ssl']['cafile'])
             && (!is_readable($options['ssl']['cafile'])
             && (!is_readable($options['ssl']['cafile'])
-            || !\openssl_x509_parse(file_get_contents($options['ssl']['cafile'])))) { //check return value and test (it's subject to change)
+            || !\openssl_x509_parse(file_get_contents($options['ssl']['cafile'])))) {
                 throw new TransportException('The configured cafile was not valid or could not be read.');
                 throw new TransportException('The configured cafile was not valid or could not be read.');
             }
             }
+        } else {
+            $this->disableTls = true;
         }
         }
 
 
         // handle the other externally set options normally.
         // handle the other externally set options normally.
@@ -72,9 +75,9 @@ class RemoteFilesystem
      *
      *
      * @return bool true
      * @return bool true
      */
      */
-    public function copy($originUrl, $fileUrl, $fileName, $progress = true, $options = array(), $disableTls = false) //REFACTOR: to constructor for TLS opt
+    public function copy($originUrl, $fileUrl, $fileName, $progress = true, $options = array())
     {
     {
-        return $this->get($originUrl, $fileUrl, $options, $fileName, $progress, $disableTls);
+        return $this->get($originUrl, $fileUrl, $options, $fileName, $progress);
     }
     }
 
 
     /**
     /**
@@ -87,9 +90,9 @@ class RemoteFilesystem
      *
      *
      * @return string The content
      * @return string The content
      */
      */
-    public function getContents($originUrl, $fileUrl, $progress = true, $options = array(), $disableTls = false)
+    public function getContents($originUrl, $fileUrl, $progress = true, $options = array())
     {
     {
-        return $this->get($originUrl, $fileUrl, $options, null, $progress, $disableTls);
+        return $this->get($originUrl, $fileUrl, $options, null, $progress);
     }
     }
 
 
     /**
     /**
@@ -116,7 +119,7 @@ class RemoteFilesystem
      *
      *
      * @return bool|string
      * @return bool|string
      */
      */
-    protected function get($originUrl, $fileUrl, $additionalOptions = array(), $fileName = null, $progress = true, $disableTls = false)
+    protected function get($originUrl, $fileUrl, $additionalOptions = array(), $fileName = null, $progress = true)
     {
     {
         $this->bytesMax = 0;
         $this->bytesMax = 0;
         $this->originUrl = $originUrl;
         $this->originUrl = $originUrl;
@@ -130,7 +133,7 @@ class RemoteFilesystem
             $this->io->setAuthentication($originUrl, urldecode($match[1]), urldecode($match[2]));
             $this->io->setAuthentication($originUrl, urldecode($match[1]), urldecode($match[2]));
         }
         }
 
 
-        $options = $this->getOptionsForUrl($originUrl, $additionalOptions, $disableTls);
+        $options = $this->getOptionsForUrl($originUrl, $additionalOptions);
 
 
         if ($this->io->isDebug()) {
         if ($this->io->isDebug()) {
             $this->io->write((substr($fileUrl, 0, 4) === 'http' ? 'Downloading ' : 'Reading ') . $fileUrl);
             $this->io->write((substr($fileUrl, 0, 4) === 'http' ? 'Downloading ' : 'Reading ') . $fileUrl);
@@ -341,7 +344,7 @@ class RemoteFilesystem
         }
         }
 
 
         // Setup remaining TLS options - the matching may need monitoring, esp. www vs none in CN
         // Setup remaining TLS options - the matching may need monitoring, esp. www vs none in CN
-        if ($disableTls === false) {
+        if ($this->disableTls === false) {
             if (!preg_match("|^https?://|", $originUrl)) {
             if (!preg_match("|^https?://|", $originUrl)) {
                 $host = $originUrl;
                 $host = $originUrl;
             } else {
             } else {

+ 1 - 1
tests/Composer/Test/Mock/RemoteFilesystemMock.php

@@ -28,7 +28,7 @@ class RemoteFilesystemMock extends RemoteFilesystem
         $this->contentMap = $contentMap;
         $this->contentMap = $contentMap;
     }
     }
 
 
-    public function getContents($originUrl, $fileUrl, $progress = true, $options = array(), $disableTls = false)
+    public function getContents($originUrl, $fileUrl, $progress = true, $options = array())
     {
     {
         if (!empty($this->contentMap[$fileUrl])) {
         if (!empty($this->contentMap[$fileUrl])) {
             return $this->contentMap[$fileUrl];
             return $this->contentMap[$fileUrl];