= 5) { $storedBitCount -= 5; $output .= SHA1::$BASE32_ALPHABET[$storedData >> $storedBitCount]; $storedData &= ((1 << $storedBitCount) - 1); } } //while # deal with leftover data if ($storedBitCount > 0) { $storedData <<= (5-$storedBitCount); $output .= SHA1::$BASE32_ALPHABET[$storedData]; } return $output; } //base32encode } function convert_username($name) { if (strpos($name, '@')) { $name = strtolower($name); $hashed = sha1($name, true); $name = strtolower(SHA1::base32encode($hashed)); } return $name; } require_once 'weave_storage.php'; $db = new WeaveStorage(null); $action = ''; $name = ''; $pwd = ''; $rname = ''; $ret_code = 1; # remember, argc counter normally starts with value '0'! if ($argc > 1) { $i = 1; while ($i < $argc) { switch ($argv[$i]) { case '-c': $action = 'create'; break; case '-d': $action = 'delete'; break; case '-h': $action = 'help'; break; case '-l': $action = 'list'; break; case '-p': $action = 'password'; break; case '-u': # username $name = trim($argv[$i + 1]); $i++; break; case '-s': # secret password $pwd = trim($argv[$i + 1]); $i++; break; default: break; } $i++; } # echo "argc : $argc\n"; # echo "action: $action\n"; # echo "user : $name\n"; # echo "pass : $pwd\n"; switch ($action) { case 'create': $rname = $name; if (strpos($name, '@')) $name = convert_username($name); if ($db->create_user($name, $pwd, $rname)) { $ret_code = 0; } break; case 'delete': if (strpos($name, '@')) $name = convert_username($name); if ($db->delete_user($name)) { $ret_code = 0; } break; case 'help': echo "Interactive usage:\n"; echo " create_user_silent - start program interactively\n"; echo "\n"; echo "Command line usage:\n"; echo " create_user_silent -c -u username|email address -s password - create new user\n"; echo " create_user_silent -d -u username|email address - delete existing user\n"; echo " create_user_silent -h - show this help\n"; echo " create_user_silent -l - list all users\n"; echo " create_user_silent -p -u username|email address -s password - change password\n"; break; case 'list': if ($db->get_collection_list) { $ret_code = 0; } break; case 'password': if (strpos($name, '@')) $name = convert_username($name); if ($db->change_password($name,$pwd)) { $ret_code = 0; } break; } } else { fwrite(STDOUT, "(c)reate, (d)elete or change (p)assword: "); switch (substr(fgets(STDIN), 0, 1)) { case 'c': # create fwrite(STDOUT, "Please enter email address: "); $name = trim(fgets(STDIN)); $rname = $name; if (strpos($name, '@')) $name = convert_username($name); fwrite(STDOUT, "Please enter password: "); $pwd = trim(fgets(STDIN)); if ($db->create_user($name, $pwd, $rname)) echo "$name created\n"; else echo "An error occured\n"; break; case 'd': # delete fwrite(STDOUT, "Please enter email address: "); $name = trim(fgets(STDIN)); if (strpos($name, '@')) $name = convert_username($name); if ($db->delete_user($name)) echo "$name deleted\n"; else echo "An error occured\n"; break; case 'p': # change password fwrite(STDOUT, "Please enter email address: "); $name = trim(fgets(STDIN)); if (strpos($name, '@')) $name = convert_username($name); fwrite(STDOUT, "Please enter new password: "); $password = trim(fgets(STDIN)); if ($db->change_password($name,$password)) echo "password changed for $name\n"; else echo "An error occured\n"; break; default: echo "unknown command"; } } ?>