| 
<?php/*
 * AssetsInstallerPlugin.php
 *
 * @(#) $Id: AssetsInstallerPlugin.php,v 1.2 2014/01/06 09:12:53 mlemos Exp $
 *
 */
 
 namespace mlemos\Composer;
 
 use Composer\Composer;
 use Composer\Plugin\PluginInterface;
 use Composer\IO\IOInterface;
 use Composer\EventDispatcher\EventSubscriberInterface;
 use Composer\Plugin\PluginEvents;
 use Composer\Plugin\PreFileDownloadEvent;
 
 class AssetsInstallerPlugin implements PluginInterface, EventSubscriberInterface
 {
 protected $composer;
 protected $io;
 private $authentication;
 
 public function activate(Composer $composer, IOInterface $io)
 {
 $this->composer = $composer;
 $this->io = $io;
 $installer = new AssetsInstaller($io, $composer);
 $package = $composer->getPackage();
 $extra = $package->getExtra();
 if(IsSet($extra['assets']))
 $installer->setAssets($extra['assets']);
 $composer->getInstallationManager()->addInstaller($installer);
 }
 
 public static function getSubscribedEvents()
 {
 return array(
 PluginEvents::PRE_FILE_DOWNLOAD => array(
 array('onPreFileDownload', 0)
 ),
 );
 }
 
 public function onPreFileDownload(PreFileDownloadEvent $event)
 {
 if(!IsSet($this->authentication))
 {
 $this->authentication = array();
 $fileName = 'auth.json';
 if(file_exists($fileName))
 {
 if($this->io->isDebug())
 $this->io->write('Reading autentication configuration from '.$fileName);
 $json = file_get_contents($fileName);
 $auth = json_decode($json);
 if(GetType($auth) === 'object'
 && IsSet($auth->config)
 && GetType($auth->config) === 'object'
 && IsSet($auth->config->{'basic-auth'})
 && GetType($auth->config->{'basic-auth'}) === 'object')
 {
 foreach($auth->config->{'basic-auth'} as $url => $credentials)
 {
 $host = parse_url($url, PHP_URL_HOST);
 if(!IsSet($host))
 $host = $url;
 if(!IsSet($credentials->username))
 {
 if($this->io->isDebug())
 $this->io->write('The autentication credentials for '.$host.' are missing the username');
 }
 elseif(!IsSet($credentials->password))
 {
 if($this->io->isDebug())
 $this->io->write('The autentication credentials for '.$host.' are missing the password');
 }
 else
 {
 $this->authentication[$host] = array(
 'username'=>$credentials->username,
 'password'=>$credentials->password
 );
 }
 }
 }
 elseif($this->io->isDebug())
 $this->io->write('The autentication definitions in the configuration file '.$fileName.' are not valid');
 }
 }
 $host = parse_url($event->getProcessedUrl(), PHP_URL_HOST);
 if(IsSet($this->authentication[$host]))
 $this->io->setAuthentication($host, $this->authentication[$host]['username'], $this->authentication[$host]['password']);
 }
 };
 
 ?>
 |