From 14fcff8aa8296d94affd4df37f8b57e3760fbb50 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Sun, 18 Aug 2013 15:32:34 +0200 Subject: [PATCH] Allow the authentications to be loaded in the IO independently --- src/Composer/Factory.php | 11 +---- src/Composer/IO/BaseIO.php | 75 +++++++++++++++++++++++++++++++++ src/Composer/IO/ConsoleIO.php | 39 +---------------- src/Composer/IO/IOInterface.php | 9 ++++ src/Composer/IO/NullIO.php | 33 +-------------- 5 files changed, 87 insertions(+), 80 deletions(-) create mode 100644 src/Composer/IO/BaseIO.php diff --git a/src/Composer/Factory.php b/src/Composer/Factory.php index 2e27193a1..b63ad13f1 100644 --- a/src/Composer/Factory.php +++ b/src/Composer/Factory.php @@ -208,16 +208,7 @@ class Factory // Configuration defaults $config = static::createConfig(); $config->merge($localConfig); - - // reload oauth token from config if available - if ($tokens = $config->get('github-oauth')) { - foreach ($tokens as $domain => $token) { - if (!preg_match('{^[a-z0-9]+$}', $token)) { - throw new \UnexpectedValueException('Your github oauth token for '.$domain.' contains invalid characters: "'.$token.'"'); - } - $io->setAuthentication($domain, $token, 'x-oauth-basic'); - } - } + $io->loadConfiguration($config); $vendorDir = $config->get('vendor-dir'); $binDir = $config->get('bin-dir'); diff --git a/src/Composer/IO/BaseIO.php b/src/Composer/IO/BaseIO.php new file mode 100644 index 000000000..8e8a65eaf --- /dev/null +++ b/src/Composer/IO/BaseIO.php @@ -0,0 +1,75 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\IO; + +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Helper\HelperSet; +use Composer\Config; + +class BaseIO implements IOInterface +{ + protected $authentications = array(); + + /** + * {@inheritDoc} + */ + public function getAuthentications() + { + return $this->authentications; + } + + /** + * {@inheritDoc} + */ + public function hasAuthentication($repositoryName) + { + return isset($this->authentications[$repositoryName]); + } + + /** + * {@inheritDoc} + */ + public function getAuthentication($repositoryName) + { + if (isset($this->authentications[$repositoryName])) { + return $this->authentications[$repositoryName]; + } + + return array('username' => null, 'password' => null); + } + + /** + * {@inheritDoc} + */ + public function setAuthentication($repositoryName, $username, $password = null) + { + $this->authentications[$repositoryName] = array('username' => $username, 'password' => $password); + } + + /** + * {@inheritDoc} + */ + public function loadConfiguration(Config $config) + { + // reload oauth token from config if available + if ($tokens = $config->get('github-oauth')) { + foreach ($tokens as $domain => $token) { + if (!preg_match('{^[a-z0-9]+$}', $token)) { + throw new \UnexpectedValueException('Your github oauth token for '.$domain.' contains invalid characters: "'.$token.'"'); + } + $io->setAuthentication($domain, $token, 'x-oauth-basic'); + } + } + } +} diff --git a/src/Composer/IO/ConsoleIO.php b/src/Composer/IO/ConsoleIO.php index 154bed80b..39c070db2 100644 --- a/src/Composer/IO/ConsoleIO.php +++ b/src/Composer/IO/ConsoleIO.php @@ -22,12 +22,11 @@ use Symfony\Component\Console\Helper\HelperSet; * @author François Pluchino * @author Jordi Boggiano */ -class ConsoleIO implements IOInterface +class ConsoleIO extends BaseIO { protected $input; protected $output; protected $helperSet; - protected $authentications = array(); protected $lastMessage; private $startTime; @@ -225,40 +224,4 @@ class ConsoleIO implements IOInterface // not able to hide the answer, proceed with normal question handling return $this->ask($question); } - - /** - * {@inheritDoc} - */ - public function getAuthentications() - { - return $this->authentications; - } - - /** - * {@inheritDoc} - */ - public function hasAuthentication($repositoryName) - { - $auths = $this->getAuthentications(); - - return isset($auths[$repositoryName]); - } - - /** - * {@inheritDoc} - */ - public function getAuthentication($repositoryName) - { - $auths = $this->getAuthentications(); - - return isset($auths[$repositoryName]) ? $auths[$repositoryName] : array('username' => null, 'password' => null); - } - - /** - * {@inheritDoc} - */ - public function setAuthentication($repositoryName, $username, $password = null) - { - $this->authentications[$repositoryName] = array('username' => $username, 'password' => $password); - } } diff --git a/src/Composer/IO/IOInterface.php b/src/Composer/IO/IOInterface.php index 168e47a77..b17da6128 100644 --- a/src/Composer/IO/IOInterface.php +++ b/src/Composer/IO/IOInterface.php @@ -12,6 +12,8 @@ namespace Composer\IO; +use Composer\Config; + /** * The Input/Output helper interface. * @@ -155,4 +157,11 @@ interface IOInterface * @param string $password The password */ public function setAuthentication($repositoryName, $username, $password = null); + + /** + * Loads authentications from a config instance + * + * @param Config $config + */ + public function loadConfiguration(Config $config); } diff --git a/src/Composer/IO/NullIO.php b/src/Composer/IO/NullIO.php index 3895d8b7f..f3ecde0cb 100644 --- a/src/Composer/IO/NullIO.php +++ b/src/Composer/IO/NullIO.php @@ -17,7 +17,7 @@ namespace Composer\IO; * * @author Christophe Coevoet */ -class NullIO implements IOInterface +class NullIO extends BaseIO { /** * {@inheritDoc} @@ -104,35 +104,4 @@ class NullIO implements IOInterface { return null; } - - /** - * {@inheritDoc} - */ - public function getAuthentications() - { - return array(); - } - - /** - * {@inheritDoc} - */ - public function hasAuthentication($repositoryName) - { - return false; - } - - /** - * {@inheritDoc} - */ - public function getAuthentication($repositoryName) - { - return array('username' => null, 'password' => null); - } - - /** - * {@inheritDoc} - */ - public function setAuthentication($repositoryName, $username, $password = null) - { - } }