Files
aowow/setup/tools/clisetup/account.us.php
Sarjuuk bf184e7555 Core/Setup
* rewritten to be able to dynamicly load it's components
   - CLISetup -> checks for UtilityScripts (config, setup, dbc reader, etc.) -> checks for SetupScripts (individual sql/file generators)
   - each step may now have a help prompt attached. If none are provided, the containing script may provide it's help.
   - all Scripts are self contained modules. No more editing of 3+ files if some component is added/removed
 * removed intermediaries FileGen & SqlGen
 * functional changes
   - allow providing CLI arguments to siteconfig and account UtilityScript and skip the interactive prompts
   - set slot for consumable enchantment items so they are filtrable
   - zones dataset is now localized and generated from GlobalStrings.lua and DungeonMap.dbc. Related data dumps removed.
   - 'aowow' and 'prQueue' executables now have shebangs

    WARNING - command line options have been renamed!
2024-06-20 18:10:12 +02:00

131 lines
4.3 KiB
PHP

<?php
if (!defined('AOWOW_REVISION'))
die('illegal access');
if (!CLI)
die('not in cli mode');
/********************/
/* Account creation */
/********************/
CLISetup::registerUtility(new class extends UtilityScript
{
public $argvOpts = ['a'];
public $optGroup = CLISetup::OPT_GRP_SETUP;
public const COMMAND = 'account';
public const DESCRIPTION = 'Create an account with admin privileges.';
public const APPENDIX = ' [name [password [email]]]';
public const PROMPT = 'Please create your admin account.';
public const NOTE_ERROR = 'There is no user with administrator privileges in the DB.';
public const REQUIRED_DB = [DB_AOWOW];
public const USE_CLI_ARGS = true;
public $runArgs = ['name', 'passw', 'email'];
private $fields = array(
'name' => ['Username', false],
'pass1' => ['Enter Password', true ],
'pass2' => ['Confirm Password', true ],
'email' => ['Email (optional)', false]
);
// args: username, password, email, null // iiin
public function run(&$args) : bool
{
User::useLocale(LOCALE_EN);
Lang::load(LOCALE_EN);
$name = $args[0] ?? '';
$passw = $args[1] ?? '';
$email = $args[2];
if ($name && User::isValidName($name))
unset($this->fields['name']);
else
$name = '';
if ($passw && User::isValidPass($passw))
{
unset($this->fields['pass1']);
unset($this->fields['pass2']);
}
else
$passw = '';
if (is_string($email) && (!strlen($email) || Util::isValidEmail($email)))
unset($this->fields['email']);
else
$email = '';
if ($this->fields && CLI::read($this->fields, $uiAccount))
{
CLI::write();
if (!$name && !User::isValidName($uiAccount['name'], $e))
CLI::write(Lang::account($e == 1 ? 'errNameLength' : 'errNameChars'), CLI::LOG_ERROR);
else if (!$name)
$name = $uiAccount['name'];
if (!$passw && !User::isValidPass($uiAccount['pass1'], $e))
CLI::write(Lang::account($e == 1 ? 'errPassLength' : 'errPassChars'), CLI::LOG_ERROR);
else if (!$passw && $uiAccount['pass1'] != $uiAccount['pass2'])
CLI::write(Lang::account('passMismatch'), CLI::LOG_ERROR);
else if (!$passw)
$passw = $uiAccount['pass1'];
if (!$email && Util::isValidEmail($uiAccount['email']))
$email = $uiAccount['email'];
else if (!$email && $uiAccount['email'])
CLI::write('[account] email invalid ... using default: ' . Cfg::get('CONTACT_EMAIL'), CLI::LOG_INFO);
}
else if ($this->fields)
{
CLI::write();
CLI::write("[account] admin creation aborted", CLI::LOG_INFO);
CLI::write();
return true;
}
if (DB::Aowow()->SelectCell('SELECT 1 FROM ?_account WHERE user = ? AND (status <> ?d OR (status = ?d AND statusTimer > UNIX_TIMESTAMP()))', $name, ACC_STATUS_NEW, ACC_STATUS_NEW))
{
CLI::write('[account] ' . Lang::account('nameInUse'), CLI::LOG_ERROR);
CLI::write();
return false;
}
if (!$name || !$passw)
return false;
if (DB::Aowow()->query('REPLACE INTO ?_account (user, passHash, displayName, joindate, email, allowExpire, userGroups, userPerms) VALUES (?, ?, ?, UNIX_TIMESTAMP(), ?, 0, ?d, 1)',
$name, User::hashCrypt($passw), Util::ucFirst($name), $email ?: Cfg::get('CONTACT_EMAIL'), U_GROUP_ADMIN))
{
$newId = DB::Aowow()->selectCell('SELECT id FROM ?_account WHERE user = ?', $name);
Util::gainSiteReputation($newId, SITEREP_ACTION_REGISTER);
CLI::write("[account] admin ".$name." created successfully", CLI::LOG_OK);
CLI::write();
return true;
}
CLI::write('[account] ' . Lang::main('intError'), CLI::LOG_ERROR);
CLI::write();
return false;
}
public function test(?array &$error = []) : bool
{
$error = [];
return !!DB::Aowow()->selectCell('SELECT `id` FROM ?_account WHERE `userPerms` = 1');
}
});
?>