From 9290303e80801a31569386c1a030ca6ed7dd34b5 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 20 Nov 2012 10:37:13 +0100 Subject: Move prompt_silent() and get_opt() to rcube_utils class --- bin/moduserprefs.sh | 2 +- bin/msgexport.sh | 5 +-- bin/msgimport.sh | 5 +-- bin/update.sh | 2 +- program/include/clisetup.php | 68 ------------------------------------- program/include/rcube_bc.inc | 10 ++++++ program/include/rcube_utils.php | 75 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 93 insertions(+), 74 deletions(-) diff --git a/bin/moduserprefs.sh b/bin/moduserprefs.sh index 79baf1ea9..a8fc3f655 100755 --- a/bin/moduserprefs.sh +++ b/bin/moduserprefs.sh @@ -31,7 +31,7 @@ function print_usage() // 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(); diff --git a/bin/msgexport.sh b/bin/msgexport.sh index e6c180188..e98e5fee2 100755 --- a/bin/msgexport.sh +++ b/bin/msgexport.sh @@ -71,7 +71,8 @@ function export_mailbox($mbox, $filename) // 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 @@ if (empty($args['user'])) } // prompt for password -$args['pass'] = prompt_silent("Password: "); +$args['pass'] = rcube_utils::prompt_silent("Password: "); // parse $host URL diff --git a/bin/msgimport.sh b/bin/msgimport.sh index 845c585e1..41bcd7e53 100755 --- a/bin/msgimport.sh +++ b/bin/msgimport.sh @@ -17,7 +17,8 @@ function print_usage() // 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 @@ if (empty($args['user'])) // prompt for password if (empty($args['pass'])) { - $args['pass'] = prompt_silent("Password: "); + $args['pass'] = rcube_utils::prompt_silent("Password: "); } // parse $host URL diff --git a/bin/update.sh b/bin/update.sh index f141fa685..59aa596dd 100755 --- a/bin/update.sh +++ b/bin/update.sh @@ -25,7 +25,7 @@ require_once INSTALL_PATH . 'program/include/clisetup.php'; 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']) { diff --git a/program/include/clisetup.php b/program/include/clisetup.php index a9af90a6f..07e318521 100644 --- a/program/include/clisetup.php +++ b/program/include/clisetup.php @@ -27,71 +27,3 @@ require_once INSTALL_PATH . 'program/include/iniset.php'; // 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; - } -} - -?> diff --git a/program/include/rcube_bc.inc b/program/include/rcube_bc.inc index 4130d4dc5..c6620e0db 100644 --- a/program/include/rcube_bc.inc +++ b/program/include/rcube_bc.inc @@ -382,3 +382,13 @@ function send_future_expire_header($offset = 2600000) { 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); +} diff --git a/program/include/rcube_utils.php b/program/include/rcube_utils.php index fd5bda676..2b48e7c97 100644 --- a/program/include/rcube_utils.php +++ b/program/include/rcube_utils.php @@ -883,4 +883,79 @@ class rcube_utils 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; + } + } } -- cgit v1.2.3