summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Machniak <alec@alec.pl>2012-11-20 10:37:13 +0100
committerAleksander Machniak <alec@alec.pl>2012-11-20 10:37:13 +0100
commit9290303e80801a31569386c1a030ca6ed7dd34b5 (patch)
tree8fa330c92d653d6cd07cecbc7abfc21b766b8002
parent2b55d4f4204bdb8c97865e01b960c1d1f23ac0b7 (diff)
Move prompt_silent() and get_opt() to rcube_utils class
-rwxr-xr-xbin/moduserprefs.sh2
-rwxr-xr-xbin/msgexport.sh5
-rwxr-xr-xbin/msgimport.sh5
-rwxr-xr-xbin/update.sh2
-rw-r--r--program/include/clisetup.php68
-rw-r--r--program/include/rcube_bc.inc10
-rw-r--r--program/include/rcube_utils.php75
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;
+ }
+ }
}