1
0
Fork 0
composer/src/Composer/IO/ConsoleIO.php

215 lines
5.5 KiB
PHP
Raw Normal View History

<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* 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\Input\InputDefinition;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Formatter\OutputFormatterInterface;
use Symfony\Component\Console\Helper\HelperSet;
2012-01-17 22:07:33 +00:00
/**
* The Input/Output helper.
*
* @author François Pluchino <francois.pluchino@opendisplay.com>
*/
class ConsoleIO implements IOInterface
{
protected $input;
protected $output;
protected $helperSet;
2012-01-17 13:53:50 +00:00
protected $authorizations = array();
protected $lastUsername;
protected $lastPassword;
/**
* Constructor.
*
2012-01-17 09:29:54 +00:00
* @param InputInterface $input The input instance
* @param OutputInterface $output The output instance
* @param HelperSet $helperSet The helperSet instance
*/
2012-01-17 09:29:54 +00:00
public function __construct(InputInterface $input, OutputInterface $output, HelperSet $helperSet)
{
$this->input = $input;
$this->output = $output;
$this->helperSet = $helperSet;
}
/**
* {@inheritDoc}
*/
public function isInteractive()
{
return $this->input->isInteractive();
}
/**
* {@inheritDoc}
*/
2012-01-17 22:07:33 +00:00
public function write($messages, $newline = true)
{
2012-01-17 22:07:33 +00:00
$this->output->write($messages, $newline);
}
/**
* {@inheritDoc}
*/
2012-01-18 11:51:37 +00:00
public function overwrite($messages, $newline = true, $size = 80)
{
for ($place = $size; $place > 0; $place--) {
2012-01-18 09:35:02 +00:00
$this->write("\x08", false);
}
2012-01-18 09:35:02 +00:00
$this->write($messages, false);
for ($place = ($size - strlen($messages)); $place > 0; $place--) {
2012-01-18 09:35:02 +00:00
$this->write(' ', false);
}
// clean up the end line
for ($place = ($size - strlen($messages)); $place > 0; $place--) {
2012-01-18 09:35:02 +00:00
$this->write("\x08", false);
}
if ($newline) {
2012-01-18 09:35:02 +00:00
$this->write('');
}
}
/**
* {@inheritDoc}
*/
public function ask($question, $default = null)
{
return $this->helperSet->get('dialog')->ask($this->output, $question, $default);
}
/**
* {@inheritDoc}
*/
public function askConfirmation($question, $default = true)
{
return $this->helperSet->get('dialog')->askConfirmation($this->output, $question, $default);
}
2012-01-17 22:07:33 +00:00
/**
* {@inheritDoc}
*/
public function askAndValidate($question, $validator, $attempts = false, $default = null)
{
return $this->helperSet->get('dialog')->askAndValidate($this->output, $question, $validator, $attempts, $default);
}
/**
* {@inheritDoc}
*/
public function askAndHideAnswer($question)
{
// for windows OS (does not hide the answer in the popup, but it never appears in the STDIN history)
2012-01-22 19:21:14 +00:00
if (defined('PHP_WINDOWS_VERSION_BUILD')) {
$vbscript = sys_get_temp_dir() . '/prompt_password.vbs';
file_put_contents($vbscript,
'wscript.echo(Inputbox("' . addslashes($question) . '","'
. addslashes($question) . '", ""))');
$command = "cscript //nologo " . escapeshellarg($vbscript);
$this->write($question, false);
$value = rtrim(shell_exec($command));
unlink($vbscript);
2012-02-17 11:18:48 +00:00
$this->write('***');
return $value;
}
// for other OS with shell_exec (hide the answer)
$command = "/usr/bin/env bash -c 'echo OK'";
2012-01-17 09:29:54 +00:00
if (rtrim(shell_exec($command)) === 'OK') {
$this->write($question, false);
2012-01-17 22:07:33 +00:00
$command = "/usr/bin/env bash -c 'read -s mypassword && echo \$mypassword'";
$value = rtrim(shell_exec($command));
for ($i = 0; $i < strlen($value); ++$i) {
$this->write('*', false);
}
2012-01-17 22:07:33 +00:00
$this->write('');
2012-01-17 22:07:33 +00:00
return $value;
}
// for other OS without shell_exec (does not hide the answer)
$this->write('');
return $this->ask($question);
}
/**
* {@inheritDoc}
*/
public function getLastUsername()
{
return $this->lastUsername;
}
/**
* {@inheritDoc}
*/
public function getLastPassword()
{
return $this->lastPassword;
}
/**
* {@inheritDoc}
*/
2012-01-17 13:53:50 +00:00
public function getAuthorizations()
{
2012-01-17 13:53:50 +00:00
return $this->authorizations;
}
/**
* {@inheritDoc}
*/
2012-01-17 13:53:50 +00:00
public function hasAuthorization($repositoryName)
{
2012-01-17 13:53:50 +00:00
$auths = $this->getAuthorizations();
return isset($auths[$repositoryName]);
}
/**
* {@inheritDoc}
*/
2012-01-17 13:53:50 +00:00
public function getAuthorization($repositoryName)
{
2012-01-17 13:53:50 +00:00
$auths = $this->getAuthorizations();
return isset($auths[$repositoryName]) ? $auths[$repositoryName] : array('username' => null, 'password' => null);
}
/**
* {@inheritDoc}
*/
2012-01-17 13:53:50 +00:00
public function setAuthorization($repositoryName, $username, $password = null)
{
2012-01-17 13:53:50 +00:00
$auths = $this->getAuthorizations();
$auths[$repositoryName] = array('username' => $username, 'password' => $password);
2012-01-17 13:53:50 +00:00
$this->authorizations = $auths;
$this->lastUsername = $username;
$this->lastPassword = $password;
}
}