cacert-testmgr/dbadm/create-assurers.php

182 lines
4.8 KiB
PHP
Raw Permalink Normal View History

#!/usr/bin/php
<?php
/**
* Script to create more dummy assurer accounts (for use on the test system)
* which can be used by the test manager to create automated assurances
*
* @author Michael Tänzer
*/
class CreateAssurers {
protected $db;
// define constants for the positions in $argv
const ARGV_SCRIPT = 0;
const ARGV_DB_HOST = 1;
const ARGV_DB_USER = 2;
const ARGV_DB_PASSWD = 3;
const ARGV_DB_NAME = 4;
const ARGV_QUANTITY = 5;
// required length of $argv
const ARGV_LENGTH = 6;
function __construct(mysqli $db){
$this->db = $db;
}
public static function echoUsage($script_name){
print 'Usage: ' . $script_name; ?> <db_host> <db_user> <db_passwd>
<db_name> <quantity>
Script to create more dummy assurer accounts (for use on the test system)
which can be used by the test manager to create automated assurances
<quantity> specifies how many new dummy accounts should be created
<?php
}
public static function main(){
$argc = $_SERVER['argc'];
$argv = $_SERVER['argv'];
if ($argc != self::ARGV_LENGTH){
self::echoUsage($argv[self::ARGV_SCRIPT]);
fwrite(STDERR, "Error: Invalid number of parameters\n");
exit(1);
}
$quantity = (int)($argv[self::ARGV_QUANTITY]);
if (!is_numeric($argv[self::ARGV_QUANTITY]) || $quantity < 0){
self::echoUsage($argv[self::ARGV_SCRIPT]);
fwrite(STDERR, "Error: Last parameter has to be a positive integer\n");
exit(2);
}
// Try to connect to the database
$db = new mysqli($argv[self::ARGV_DB_HOST], $argv[self::ARGV_DB_USER],
$argv[self::ARGV_DB_PASSWD], $argv[self::ARGV_DB_NAME]);
if (mysqli_connect_error()){
fwrite(STDERR, "Error: Could not connect to the data base\n".
"(".mysqli_connect_errno()."): ".mysqli_connect_error());
exit(3);
}
$me = new self($db);
$status = $me->createAssurers($quantity);
$db->close();
exit($status);
}
public function createAssurers($quantity){
// get last assurer
$result = $this->db->query('select `mname` from `users` where `id`=
(select max(`id`) from `users` where `email` like
\'john.doe-___@example.com\')');
$row = $result->fetch_assoc();
if ($row === NULL){
$last_assurer = 0;
printf("1\n");
} else {
$last_assurer = (int)($row['mname']);
printf("2: \$last_assurer: %d\n", $last_assurer);
}
// prepare the statements
$insert_user = $this->db->prepare('insert into `users` set
`email` = ? ,
`password` = \'invalid\' ,
`fname` = ? ,
`mname` = ? ,
`lname` = \'Doe\' ,
`suffix` = \'\' ,
`dob` = ? ,
`Q1` = SHA1(rand()) ,
`Q2` = SHA1(rand()) ,
`Q3` = SHA1(rand()) ,
`Q4` = SHA1(rand()) ,
`Q5` = SHA1(rand()) ,
`A1` = SHA1(rand()) ,
`A2` = SHA1(rand()) ,
`A3` = SHA1(rand()) ,
`A4` = SHA1(rand()) ,
`A5` = SHA1(rand()) ,
`created` = now() ,
`uniqueID` = SHA1(rand()) ,
`verified` = 1 ,
`assurer` = 1 ');
$insert_user->bind_param('ssss', $email, $fname, $mname, $dob);
$insert_email = $this->db->prepare('insert into `email` set
`email` = ? ,
`hash` = \'\' ,
`created` = now() ,
`modified` = now() ,
`memid` = ? ');
$insert_email->bind_param('si', $email, $memid);
$insert_alerts = $this->db->prepare('insert into `alerts` set
`memid` = ? ,
`general` = 0 ,
`country` = 0 ,
`regional` = 0 ,
`radius` = 0 ');
$insert_alerts->bind_param('i', $memid);
$insert_points = $this->db->prepare('insert into `notary` set
`from` = ? ,
`to` = ? ,
`points` = 150 ,
`awarded` = 150 ,
`location` = \'Init Points\' ,
`date` = curdate() ,
`method` = \'Administrative Increase\' ,
`when` = now() ');
$insert_points->bind_param('ii', $memid, $memid);
$insert_cats = $this->db->prepare('insert into `cats_passed` set
`user_id` = ? ,
`pass_date` = now() ,
`variant_id` =
(select `id` from `cats_variant` where `type_id` = 1) ');
$insert_cats->bind_param('i', $memid);
// do the actual work
for ($i = $last_assurer + 1; $i <= $last_assurer + $quantity; $i++){
$email = sprintf('john.doe-%03u@example.com', $i);
$fname = sprintf('John %u', $i);
$mname = sprintf('%u', $i);
$dob = sprintf('19%02u-01-%02u', $i % 90, (int)(($i/90) + 1) );
$insert_user->execute();
$memid = $insert_user->insert_id;
if ($memid == 0){
fwrite(STDERR, "Error: didn't get a valid ID for the user\n");
return 10;
}
$insert_email->execute();
$insert_alerts->execute();
$insert_points->execute();
$insert_cats->execute();
printf('Assurer number %u %s Doe <%s>'."\n".
'born on %s with the ID %d has been added'."\n", $i,
$fname, $email, $dob, $memid);
}
return 0;
}
}
CreateAssurers::main();