From: nupplaPhil Date: Thu, 20 Feb 2020 22:08:19 +0000 (+0100) Subject: Move "NewPassword" to a common "user" console command X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=4d436c10df9de356b4758e7b2ce80d8f9d1c7e3b;p=friendica.git Move "NewPassword" to a common "user" console command --- diff --git a/src/Console/NewPassword.php b/src/Console/NewPassword.php deleted file mode 100644 index 118428866c..0000000000 --- a/src/Console/NewPassword.php +++ /dev/null @@ -1,126 +0,0 @@ -. - * - */ - -namespace Friendica\Console; - -use Friendica\App; -use Friendica\Core\L10n; -use Friendica\Database\Database; -use Friendica\Model\User; -use RuntimeException; - -/** - * tool to set a new password for a user - * - * With this tool, you can set a new password for a user - */ -class NewPassword extends \Asika\SimpleConsole\Console -{ - protected $helpOptions = ['h', 'help', '?']; - - /** - * @var App\Mode - */ - private $appMode; - /** - * @var L10n - */ - private $l10n; - /** - * @var Database - */ - private $dba; - - protected function getHelp() - { - $help = << [] [-h|--help|-?] [-v] - -Description - Creates a new password for a user without using the "forgot password" functionality. - -Options - -h|--help|-? Show help information - -v Show more debug information. -HELP; - return $help; - } - - public function __construct(App\Mode $appMode, L10n $l10n, Database $dba, array $argv = null) - { - parent::__construct($argv); - - $this->appMode = $appMode; - $this->l10n = $l10n; - $this->dba = $dba; - } - - protected function doExecute() - { - if ($this->getOption('v')) { - $this->out('Class: ' . __CLASS__); - $this->out('Arguments: ' . var_export($this->args, true)); - $this->out('Options: ' . var_export($this->options, true)); - } - - if (count($this->args) == 0) { - $this->out($this->getHelp()); - return 0; - } - - if (count($this->args) > 2) { - throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments'); - } - - if ($this->appMode->isInstall()) { - throw new RuntimeException('Database isn\'t ready or populated yet'); - } - - $nick = $this->getArgument(0); - - $user = $this->dba->selectFirst('user', ['uid'], ['nickname' => $nick]); - if (!$this->dba->isResult($user)) { - throw new RuntimeException($this->l10n->t('User not found')); - } - - $password = $this->getArgument(1); - if (is_null($password)) { - $this->out($this->l10n->t('Enter new password: '), false); - $password = \Seld\CliPrompt\CliPrompt::hiddenPrompt(true); - } - - try { - $result = User::updatePassword($user['uid'], $password); - - if (!$this->dba->isResult($result)) { - throw new \Exception($this->l10n->t('Password update failed. Please try again.')); - } - - $this->out($this->l10n->t('Password changed.')); - } catch (\Exception $e) { - throw new RuntimeException($e->getMessage(), $e->getCode(), $e); - } - - return 0; - } -} diff --git a/src/Console/User.php b/src/Console/User.php new file mode 100644 index 0000000000..c12ab33832 --- /dev/null +++ b/src/Console/User.php @@ -0,0 +1,146 @@ +. + * + */ + +namespace Friendica\Console; + +use Friendica\App; +use Friendica\Core\L10n; +use Friendica\Database\Database; +use Friendica\Model\User as UserModel; +use RuntimeException; + +/** + * tool to set a new password for a user + * + * With this tool, you can set a new password for a user + */ +class User extends \Asika\SimpleConsole\Console +{ + protected $helpOptions = ['h', 'help', '?']; + + /** + * @var App\Mode + */ + private $appMode; + /** + * @var L10n + */ + private $l10n; + /** + * @var Database + */ + private $dba; + + protected function getHelp() + { + $help = << password [] [-h|--help|-?] [-v] + +Description + Modify user settings per console commands. + +Options + -h|--help|-? Show help information + -v Show more debug information. +HELP; + return $help; + } + + public function __construct(App\Mode $appMode, L10n $l10n, Database $dba, array $argv = null) + { + parent::__construct($argv); + + $this->appMode = $appMode; + $this->l10n = $l10n; + $this->dba = $dba; + } + + protected function doExecute() + { + if ($this->getOption('v')) { + $this->out('Class: ' . __CLASS__); + $this->out('Arguments: ' . var_export($this->args, true)); + $this->out('Options: ' . var_export($this->options, true)); + } + + if (count($this->args) == 0) { + $this->out($this->getHelp()); + return 0; + } + + if (count($this->args) < 2) { + throw new \Asika\SimpleConsole\CommandArgsException('Not enough arguments.'); + } + + if ($this->appMode->isInstall()) { + throw new RuntimeException('Database isn\'t ready or populated yet'); + } + + $nick = $this->getArgument(0); + + $user = $this->dba->selectFirst('user', ['uid'], ['nickname' => $nick]); + if (!$this->dba->isResult($user)) { + throw new RuntimeException($this->l10n->t('User not found')); + } + + $command = $this->getArgument(1); + + switch ($command) { + case 'password': + return $this->setPassword($user); + default: + throw new \Asika\SimpleConsole\CommandArgsException('Wrong command.'); + } + } + + /** + * Sets a new password + * + * @param array $user The user + * + * @return int Return code of this command + */ + private function setPassword(array $user) + { + $password = $this->getArgument(2); + + if (is_null($password)) { + $this->out($this->l10n->t('Enter new password: '), false); + $password = \Seld\CliPrompt\CliPrompt::hiddenPrompt(true); + } + + try { + $result = UserModel::updatePassword($user['uid'], $password); + + if (!$this->dba->isResult($result)) { + throw new \Exception($this->l10n->t('Password update failed. Please try again.')); + } + + $this->out($this->l10n->t('Password changed.')); + } catch (\Exception $e) { + throw new RuntimeException($e->getMessage(), $e->getCode(), $e); + } + + return 0; + } +} diff --git a/src/Core/Console.php b/src/Core/Console.php index 70835db9c4..86178c209d 100644 --- a/src/Core/Console.php +++ b/src/Core/Console.php @@ -57,7 +57,7 @@ Commands: autoinstall Starts automatic installation of friendica based on values from htconfig.php lock Edit site locks maintenance Set maintenance mode for this node - newpassword Set a new password for a given user + user User management php2po Generate a messages.po file from a strings.php file po2php Generate a strings.php file from a messages.po file typo Checks for parse errors in Friendica files @@ -85,7 +85,7 @@ HELP; 'autoinstall' => Friendica\Console\AutomaticInstallation::class, 'lock' => Friendica\Console\Lock::class, 'maintenance' => Friendica\Console\Maintenance::class, - 'newpassword' => Friendica\Console\NewPassword::class, + 'user' => Friendica\Console\User::class, 'php2po' => Friendica\Console\PhpToPo::class, 'po2php' => Friendica\Console\PoToPhp::class, 'typo' => Friendica\Console\Typo::class,