]> git.mxchange.org Git - friendica.git/blobdiff - src/Core/Console/NewPassword.php
Code standards
[friendica.git] / src / Core / Console / NewPassword.php
index d44286d28f7cc21f82b3207a1ee4c47ca737a082..3cd96ad322bd5107be58c830b56b8d080000698c 100644 (file)
@@ -3,11 +3,9 @@
 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
@@ -27,7 +25,7 @@ class NewPassword extends \Asika\SimpleConsole\Console
                $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.
@@ -41,7 +39,7 @@ HELP;
 
        protected function doExecute()
        {
-               $a = get_app();
+               $a = \get_app();
 
                if ($this->getOption('v')) {
                        $this->out('Class: ' . __CLASS__);
@@ -58,31 +56,34 @@ HELP;
                        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;
        }