Mercurial > hg > fapweb
diff keygen.php @ 0:8019b357cc03
Initial import.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 04 Dec 2012 19:07:18 +0200 |
parents | |
children | 4c5f651aa107 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/keygen.php Tue Dec 04 19:07:18 2012 +0200 @@ -0,0 +1,139 @@ +#!/usr/bin/php +<? +require "mconfig.inc.php"; +require "msite.inc.php"; + +$keyChars = "abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ123456789"; +$maxItems = 4; +$maxRows = 25; + +function garg($index) +{ + global $argc, $argv; + if ($index < $argc) + return strtolower($argv[$index]); + else + return FALSE; +} + +function gSQLError($sql) +{ + global $db; + echo "Error executing SQL query: ".implode("; ", $db->errorInfo())." in statement \"".$sql."\"\n"; + exit; +} + +if ($argc < 2) +{ + echo "Usage: ".$argv[0]." <mode> [args]\n". + "Where mode is one of following:\n". + "\n". + " generate <#> Generate # MORE vote keys. If previously\n". + " generated keys exist, # keys will be added.\n". + "\n". + " print [all] Print list of list of UNactive keys\n". + " (unless 'all' option is specified)\n". + "\n"; + exit; +} + +if (!stConnectSQLDB()) + die("Could not connect to SQL database.\n"); + +switch (substr(garg(1), 0, 2)) +{ + case "ge": + // Check arguments for sanity + if (($num = garg(2)) === FALSE) + { + echo "No number of keys specified.\n"; + exit; + } + + if ($num < 1 || $num > 1000) + { + echo "Invalid number of keys.\n"; + exit; + } + + echo "Generating keys .."; + for ($i = 0; $i < $num; ) + { + echo "."; + + // Generate one keycode + $key = ""; + for ($n = 0; $n < stGetSetting("votekeylen", 8); $n++) + $key .= $keyChars[rand() % strlen($keyChars)]; + + // Check if it already exists, to avoid duplicates + $sql = stPrepareSQL("SELECT * FROM voters WHERE key=%s", $key); + if (($res = @$db->query($sql)) !== FALSE) + { + if ($res->fetchColumn() === FALSE) + { + // Nope, add into database + $sql = stPrepareSQL( + "INSERT INTO voters (key,name,enabled) VALUES (%s,'',0)", + $key); + + if (($res = $db->query($sql)) === FALSE) + gSQLError($sql); + + $i++; + } + } + else + { + gSQLError($sql); + } + } + echo "\nGenerated ".$i." new keys.\n"; + break; + + case "pr": + // Print keys + $all = garg(2) == "all"; + $sql = "SELECT * FROM voters ".($all ? "" : "WHERE enabled=0 ")."ORDER BY id ASC"; + if (($res = @$db->query($sql)) !== FALSE) + { + $rows = 0; + $nitem = 0; + $total = 0; + + foreach ($res as $item) + { + $total++; + printf("%s%04d - %8s", + $item["enabled"] ? "*" : " ", + $item["id"], $item["key"]); + + if (++$nitem >= $maxItems) + { + $nitem = 0; + echo "\n"; + + if (++$rows % $maxRows == 0) + echo "\f\n"; + } + else + echo " | "; + } + + if ($nitem > 0) + echo "\n"; + + echo "Total of ".$total." ".($all ? "keys (all printed)" : "unactive keys")."\n"; + } + else + { + gSQLError($sql); + } + break; + + default: + echo "Unknown operating mode '".garg(1)."'.\n"; + break; +} + +?> \ No newline at end of file