summaryrefslogtreecommitdiff
path: root/program/include
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2010-09-29 08:30:56 +0000
committerthomascube <thomas@roundcube.net>2010-09-29 08:30:56 +0000
commitbd911ba8143f07fa4f14b682ddcd559a69a208e8 (patch)
tree26f5584eee7ca9be933cfafd0ff2e99599519b3a /program/include
parent9d2a3a819a588f0fad2aaac0b330bafe594954ec (diff)
Pool some code for command line tools; avoid displaying password on shell (#1486947); fix msgexport now using the new imap wrapper
Diffstat (limited to 'program/include')
-rw-r--r--program/include/clisetup.php90
1 files changed, 90 insertions, 0 deletions
diff --git a/program/include/clisetup.php b/program/include/clisetup.php
new file mode 100644
index 000000000..fbea98063
--- /dev/null
+++ b/program/include/clisetup.php
@@ -0,0 +1,90 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/clisetup.php |
+ | |
+ | This file is part of the Roundcube Webmail client |
+ | Copyright (C) 2010, Roundcube Dev, - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | Setup the command line environment and provide some utitlity |
+ | functions. |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id$
+
+*/
+
+if (php_sapi_name() != 'cli') {
+ die('Not on the "shell" (php-cli).');
+}
+
+require_once 'iniset.php';
+
+
+/**
+ * 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];
+ if (substr($arg, 0, 2) == '--')
+ {
+ $sp = strpos($arg, '=');
+ $key = substr($arg, 2, $sp - 2);
+ $value = substr($arg, $sp+1);
+ }
+ else if ($arg{0} == '-')
+ {
+ $key = substr($arg, 1);
+ $value = $_SERVER['argv'][++$i];
+ }
+ else
+ continue;
+
+ $args[$key] = preg_replace(array('/^["\']/', '/["\']$/'), '', $value);
+
+ 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;
+ }
+}
+
+?> \ No newline at end of file