cli-prompt-1.0.3/000077500000000000000000000000001306321533500136025ustar00rootroot00000000000000cli-prompt-1.0.3/.gitignore000066400000000000000000000000101306321533500155610ustar00rootroot00000000000000/vendor/cli-prompt-1.0.3/LICENSE000066400000000000000000000020421306321533500146050ustar00rootroot00000000000000Copyright (c) 2015 Jordi Boggiano Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. cli-prompt-1.0.3/README.md000066400000000000000000000026511306321533500150650ustar00rootroot00000000000000CLI-Prompt ========== While prompting for user input using `fgets()` is quite easy, sometimes you need to prompt for sensitive information. In these cases, the characters typed in by the user should not be directly visible, and this is quite a pain to do in a cross-platform way. This tiny package fixes just that for you: ```php Prompts the user for input and hides what they type. If this fails for any > reason and `$allowFallback` is set to `true` the prompt will be done using > the usual `fgets()` and characters will be visible. - `Seld\CliPrompt\CliPrompt::prompt();` > Regular user prompt for input with characters being shown on screen. In both cases, the trailing newline the user enters when submitting the answer is trimmed. Requirements ------------ PHP 5.3 and above License ------- CLI-Prompt is licensed under the MIT License - see the LICENSE file for details Acknowledgments --------------- - This project uses hiddeninput.exe to prompt for passwords on Windows, sources and details can be found on the [github page of the project](https://github.com/Seldaek/hidden-input). cli-prompt-1.0.3/composer.json000066400000000000000000000011631306321533500163250ustar00rootroot00000000000000{ "name": "seld/cli-prompt", "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type", "type": "library", "keywords": ["cli", "console", "hidden", "input", "prompt"], "license": "MIT", "require": { "php": ">=5.3" }, "authors": [ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be" } ], "autoload": { "psr-4": { "Seld\\CliPrompt\\": "src/" } }, "extra": { "branch-alias": { "dev-master": "1.x-dev" } } } cli-prompt-1.0.3/res/000077500000000000000000000000001306321533500143735ustar00rootroot00000000000000cli-prompt-1.0.3/res/example.php000066400000000000000000000004471306321533500165440ustar00rootroot00000000000000 * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Seld\CliPrompt; class CliPrompt { /** * Prompts the user for input and shows what they type * * @return string */ public static function prompt() { $stdin = fopen('php://stdin', 'r'); $answer = self::trimAnswer(fgets($stdin, 4096)); fclose($stdin); return $answer; } /** * Prompts the user for input and hides what they type * * @param bool $allowFallback If prompting fails for any reason and this is set to true the prompt * will be done using the regular prompt() function, otherwise a * \RuntimeException is thrown. * @return string * @throws RuntimeException on failure to prompt, unless $allowFallback is true */ public static function hiddenPrompt($allowFallback = false) { // handle windows if (defined('PHP_WINDOWS_VERSION_BUILD')) { // fallback to hiddeninput executable $exe = __DIR__.'\\..\\res\\hiddeninput.exe'; // handle code running from a phar if ('phar:' === substr(__FILE__, 0, 5)) { $tmpExe = sys_get_temp_dir().'/hiddeninput.exe'; // use stream_copy_to_stream instead of copy // to work around https://bugs.php.net/bug.php?id=64634 $source = fopen($exe, 'r'); $target = fopen($tmpExe, 'w+'); stream_copy_to_stream($source, $target); fclose($source); fclose($target); unset($source, $target); $exe = $tmpExe; } $output = shell_exec($exe); // clean up if (isset($tmpExe)) { unlink($tmpExe); } if ($output !== null) { // output a newline to be on par with the regular prompt() echo PHP_EOL; return self::trimAnswer($output); } } if (file_exists('/usr/bin/env')) { // handle other OSs with bash/zsh/ksh/csh if available to hide the answer $test = "/usr/bin/env %s -c 'echo OK' 2> /dev/null"; foreach (array('bash', 'zsh', 'ksh', 'csh', 'sh') as $sh) { if ('OK' === rtrim(shell_exec(sprintf($test, $sh)))) { $shell = $sh; break; } } if (isset($shell)) { $readCmd = ($shell === 'csh') ? 'set mypassword = $<' : 'read -r mypassword'; $command = sprintf("/usr/bin/env %s -c 'stty -echo; %s; stty echo; echo \$mypassword'", $shell, $readCmd); $output = shell_exec($command); if ($output !== null) { // output a newline to be on par with the regular prompt() echo PHP_EOL; return self::trimAnswer($output); } } } // not able to hide the answer if (!$allowFallback) { throw new \RuntimeException('Could not prompt for input in a secure fashion, aborting'); } return self::prompt(); } private static function trimAnswer($str) { return preg_replace('{\r?\n$}D', '', $str); } }