(password, 8+ chars, on stdin)\n"); exit(2); } $rHome = rtrim(getenv('XC_VM_HOME') ?: '/home/xc_vm', '/'); require_once $rHome . '/bootstrap.php'; XC_Bootstrap::boot(XC_Bootstrap::CONTEXT_CLI, ['process' => 'XC_VM[E2E admin]']); global $db; // group_id 1 is the seeded Administrators group (bin/install/database.sql). $rAdminGroup = 1; $rHash = Authenticator::hashPassword($rPassword); // fetchOne() answers an empty array, not false, when nothing matches. $rExisting = $db->fetchOne('SELECT `id` FROM `users` WHERE `username` = ?', $rUsername); if (!empty($rExisting['id'])) { $db->query('UPDATE `users` SET `password` = ?, `member_group_id` = ?, `status` = 1 WHERE `id` = ?', $rHash, $rAdminGroup, $rExisting['id']); echo 'Updated administrator ' . $rUsername . ' (id ' . $rExisting['id'] . ")\n"; exit(0); } $rArray = QueryHelper::verifyPostTable('users'); $rArray['username'] = $rUsername; $rArray['password'] = $rHash; $rArray['email'] = ''; $rArray['date_registered'] = time(); $rArray['last_login'] = null; $rArray['member_group_id'] = $rAdminGroup; $rArray['ip'] = ''; $rArray['notes'] = 'E2E test administrator (tests/e2e/tools/create-admin.php)'; $rPrepare = QueryHelper::prepareArray($rArray); if (!$db->query('INSERT INTO `users`(' . $rPrepare['columns'] . ') VALUES(' . $rPrepare['placeholder'] . ');', ...$rPrepare['data'])) { fwrite(STDERR, "Insert failed.\n"); exit(1); } echo 'Created administrator ' . $rUsername . ' (id ' . $db->last_insert_id() . ")\n";