namespace Friendica\Core\Console;
use Friendica\Core\L10n;
-use Friendica\Model\Contact;
+use Friendica\Database\DBA;
use Friendica\Model\User;
-use Friendica\Core\Config;
-use Friendica\Database\DBM;
-use dba;
+use RuntimeException;
/**
* @brief tool to set a new password for a user
$help = <<<HELP
console newpassword - Creates a new password for a given user
Usage
- bin/console newpassword <nickname> <password> [-h|--help|-?] [-v]
+ bin/console newpassword <nickname> [<password>] [-h|--help|-?] [-v]
Description
Creates a new password for a user without using the "forgot password" functionality.
protected function doExecute()
{
- $a = get_app();
+ $a = \get_app();
if ($this->getOption('v')) {
$this->out('Class: ' . __CLASS__);
throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments');
}
- require_once '.htconfig.php';
- $result = \dba::connect($db_host, $db_user, $db_pass, $db_data);
- unset($db_host, $db_user, $db_pass, $db_data);
-
- if (!$result) {
- throw new \RuntimeException('Unable to connect to database');
+ if ($a->getMode()->isInstall()) {
+ throw new RuntimeException('Database isn\'t ready or populated yet');
}
$nick = $this->getArgument(0);
- $password = $this->getArgument(1);
- $user = dba::selectFirst('user', ['uid'], ['nickname' => $nick]);
- if (!DBM::is_result($user)) {
- throw new \RuntimeException(L10n::t('User not found'));
+ $user = DBA::selectFirst('user', ['uid'], ['nickname' => $nick]);
+ if (!DBA::isResult($user)) {
+ throw new RuntimeException(L10n::t('User not found'));
}
- if (!Config::get('system', 'disable_password_exposed', false) && User::isPasswordExposed($password)) {
- throw new \RuntimeException(L10n::t('The new password has been exposed in a public data dump, please choose another.'));
+ $password = $this->getArgument(1);
+ if (is_null($password)) {
+ $this->out(L10n::t('Enter new password: '), false);
+ $password = \Seld\CliPrompt\CliPrompt::hiddenPrompt(true);
}
- if (!User::updatePassword($user['uid'], $password)) {
- throw new \RuntimeException(L10n::t('Password update failed. Please try again.'));
- }
+ try {
+ $result = User::updatePassword($user['uid'], $password);
+
+ if (!DBA::isResult($result)) {
+ throw new \Exception(L10n::t('Password update failed. Please try again.'));
+ }
- $this->out(L10n::t('Password changed.'));
+ $this->out(L10n::t('Password changed.'));
+ } catch (\Exception $e) {
+ throw new RuntimeException($e->getMessage(), $e->getCode(), $e);
+ }
return 0;
}