Aleksander Machniak
2012-11-20 9290303e80801a31569386c1a030ca6ed7dd34b5
Move prompt_silent() and get_opt() to rcube_utils class
7 files modified
167 ■■■■■ changed files
bin/moduserprefs.sh 2 ●●● patch | view | raw | blame | history
bin/msgexport.sh 5 ●●●●● patch | view | raw | blame | history
bin/msgimport.sh 5 ●●●●● patch | view | raw | blame | history
bin/update.sh 2 ●●● patch | view | raw | blame | history
program/include/clisetup.php 68 ●●●●● patch | view | raw | blame | history
program/include/rcube_bc.inc 10 ●●●●● patch | view | raw | blame | history
program/include/rcube_utils.php 75 ●●●●● patch | view | raw | blame | history
bin/moduserprefs.sh
@@ -31,7 +31,7 @@
// get arguments
$args = get_opt(array('u' => 'user', 'd' => 'delete'));
$args = rcube_utils:get_opt(array('u' => 'user', 'd' => 'delete'));
if ($_SERVER['argv'][1] == 'help') {
    print_usage();
bin/msgexport.sh
@@ -71,7 +71,8 @@
// get arguments
$args = get_opt(array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file')) + array('host' => 'localhost', 'mbox' => 'INBOX');
$opts = array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file');
$args = rcube_utils::get_opt($opts) + array('host' => 'localhost', 'mbox' => 'INBOX');
if ($_SERVER['argv'][1] == 'help')
{
@@ -93,7 +94,7 @@
}
// prompt for password
$args['pass'] = prompt_silent("Password: ");
$args['pass'] = rcube_utils::prompt_silent("Password: ");
// parse $host URL
bin/msgimport.sh
@@ -17,7 +17,8 @@
// get arguments
$args = get_opt(array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file')) + array('host' => 'localhost', 'mbox' => 'INBOX');
$opts = array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file');
$args = rcube_utils::get_opt($opts) + array('host' => 'localhost', 'mbox' => 'INBOX');
if ($_SERVER['argv'][1] == 'help')
{
@@ -47,7 +48,7 @@
// prompt for password
if (empty($args['pass']))
{
    $args['pass'] = prompt_silent("Password: ");
    $args['pass'] = rcube_utils::prompt_silent("Password: ");
}
// parse $host URL
bin/update.sh
@@ -25,7 +25,7 @@
require_once INSTALL_PATH . 'installer/rcube_install.php';
// get arguments
$opts = get_opt(array('v' => 'version'));
$opts = rcube_utils::get_opt(array('v' => 'version'));
// ask user if no version is specified
if (!$opts['version']) {
program/include/clisetup.php
@@ -27,71 +27,3 @@
// Unset max. execution time limit, set to 120 seconds in iniset.php
@set_time_limit(0);
/**
 * Parse commandline arguments into a hash array
 */
function get_opt($aliases = array())
{
    $args = array();
    for ($i=1; $i < count($_SERVER['argv']); $i++) {
        $arg   = $_SERVER['argv'][$i];
        $value = true;
        $key   = null;
        if ($arg[0] == '-') {
            $key = preg_replace('/^-+/', '', $arg);
            $sp  = strpos($arg, '=');
            if ($sp > 0) {
                $key   = substr($key, 0, $sp - 2);
                $value = substr($arg, $sp+1);
            }
            else if (strlen($_SERVER['argv'][$i+1]) && $_SERVER['argv'][$i+1][0] != '-') {
                $value = $_SERVER['argv'][++$i];
            }
            $args[$key] = is_string($value) ? preg_replace(array('/^["\']/', '/["\']$/'), '', $value) : $value;
        }
        else {
            $args[] = $arg;
        }
        if ($alias = $aliases[$key]) {
            $args[$alias] = $args[$key];
        }
    }
    return $args;
}
/**
 * from http://blogs.sitepoint.com/2009/05/01/interactive-cli-password-prompt-in-php/
 */
function prompt_silent($prompt = "Password:")
{
  if (preg_match('/^win/i', PHP_OS)) {
    $vbscript = sys_get_temp_dir() . 'prompt_password.vbs';
    file_put_contents($vbscript, 'wscript.echo(InputBox("' . addslashes($prompt) . '", "", "password here"))');
    $command = "cscript //nologo " . escapeshellarg($vbscript);
    $password = rtrim(shell_exec($command));
    unlink($vbscript);
    return $password;
  }
  else {
    $command = "/usr/bin/env bash -c 'echo OK'";
    if (rtrim(shell_exec($command)) !== 'OK') {
      echo $prompt;
      $pass = trim(fgets(STDIN));
      echo chr(8)."\r" . $prompt . str_repeat("*", strlen($pass))."\n";
      return $pass;
    }
    $command = "/usr/bin/env bash -c 'read -s -p \"" . addslashes($prompt) . "\" mypassword && echo \$mypassword'";
    $password = rtrim(shell_exec($command));
    echo "\n";
    return $password;
  }
}
?>
program/include/rcube_bc.inc
@@ -382,3 +382,13 @@
{
    return rcmail::get_instance()->output->future_expire_header($offset);
}
function get_opt($aliases = array())
{
    return rcube_utils::get_opt($aliases);
}
function prompt_silent($prompt = 'Password:')
{
    return rcube_utils::prompt_silent($prompt);
}
program/include/rcube_utils.php
@@ -883,4 +883,79 @@
        return $as_array ? $arr : join(" ", $arr);
    }
    /**
     * Parse commandline arguments into a hash array
     *
     * @param array $aliases Argument alias names
     *
     * @return array Argument values hash
     */
    public static function get_opt($aliases = array())
    {
        $args = array();
        for ($i=1; $i < count($_SERVER['argv']); $i++) {
            $arg   = $_SERVER['argv'][$i];
            $value = true;
            $key   = null;
            if ($arg[0] == '-') {
                $key = preg_replace('/^-+/', '', $arg);
                $sp  = strpos($arg, '=');
                if ($sp > 0) {
                    $key   = substr($key, 0, $sp - 2);
                    $value = substr($arg, $sp+1);
                }
                else if (strlen($_SERVER['argv'][$i+1]) && $_SERVER['argv'][$i+1][0] != '-') {
                    $value = $_SERVER['argv'][++$i];
                }
                $args[$key] = is_string($value) ? preg_replace(array('/^["\']/', '/["\']$/'), '', $value) : $value;
            }
            else {
                $args[] = $arg;
            }
            if ($alias = $aliases[$key]) {
                $args[$alias] = $args[$key];
            }
        }
        return $args;
    }
    /**
     * Safe password prompt for command line
     * from http://blogs.sitepoint.com/2009/05/01/interactive-cli-password-prompt-in-php/
     *
     * @return string Password
     */
    public static function prompt_silent($prompt = "Password:")
    {
        if (preg_match('/^win/i', PHP_OS)) {
            $vbscript  = sys_get_temp_dir() . 'prompt_password.vbs';
            $vbcontent = 'wscript.echo(InputBox("' . addslashes($prompt) . '", "", "password here"))';
            file_put_contents($vbscript, $vbcontent);
            $command  = "cscript //nologo " . escapeshellarg($vbscript);
            $password = rtrim(shell_exec($command));
            unlink($vbscript);
            return $password;
        }
        else {
            $command = "/usr/bin/env bash -c 'echo OK'";
            if (rtrim(shell_exec($command)) !== 'OK') {
                echo $prompt;
                $pass = trim(fgets(STDIN));
                echo chr(8)."\r" . $prompt . str_repeat("*", strlen($pass))."\n";
                return $pass;
            }
            $command = "/usr/bin/env bash -c 'read -s -p \"" . addslashes($prompt) . "\" mypassword && echo \$mypassword'";
            $password = rtrim(shell_exec($command));
            echo "\n";
            return $password;
        }
    }
}