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 --- program/include/clisetup.php | 68 ------------------------------------- program/include/rcube_bc.inc | 10 ++++++ program/include/rcube_utils.php | 75 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 68 deletions(-) (limited to 'program') 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