From 2eb4912dbf3e0c26b8945ee7a64ac0ff1c9ce9ce Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 30 Mar 2018 19:17:12 +0000 Subject: [PATCH 1/6] New functionality to set a password for a given user --- src/Core/Console.php | 2 + src/Core/Console/NewPassword.php | 91 ++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 src/Core/Console/NewPassword.php diff --git a/src/Core/Console.php b/src/Core/Console.php index eb6e08057a..02a0b66ae2 100644 --- a/src/Core/Console.php +++ b/src/Core/Console.php @@ -22,6 +22,7 @@ class Console extends \Asika\SimpleConsole\Console 'globalcommunityblock' => __NAMESPACE__ . '\Console\GlobalCommunityBlock', 'globalcommunitysilence' => __NAMESPACE__ . '\Console\GlobalCommunitySilence', 'maintenance' => __NAMESPACE__ . '\Console\Maintenance', + 'newpassword' => __NAMESPACE__ . '\Console\NewPassword', 'php2po' => __NAMESPACE__ . '\Console\PhpToPo', 'po2php' => __NAMESPACE__ . '\Console\PoToPhp', 'typo' => __NAMESPACE__ . '\Console\Typo', @@ -42,6 +43,7 @@ Commands: globalcommunitysilence Silence remote profile from global community page help Show help about a command, e.g (bin/console help config) maintenance Set maintenance mode for this node + newpassword Set an new password for a given user 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 diff --git a/src/Core/Console/NewPassword.php b/src/Core/Console/NewPassword.php new file mode 100644 index 0000000000..9d40e454bb --- /dev/null +++ b/src/Core/Console/NewPassword.php @@ -0,0 +1,91 @@ + + * @author Hypolite Petovan + */ +class NewPassword extends \Asika\SimpleConsole\Console +{ + protected $helpOptions = ['h', 'help', '?']; + + 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; + } + + protected function doExecute() + { + $a = get_app(); + + 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'); + } + + 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'); + } + + $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')); + } + + 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.')); + } + + if (!User::updatePassword($user['uid'], $password)) { + throw new \RuntimeException(L10n::t('Password update failed. Please try again.')); + } + + $this->out(L10n::t('Password changed.', $nick)); + + return 0; + } +} From 491db963dbeb65e3b9ecee79a48580312c35b110 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 30 Mar 2018 19:57:14 +0000 Subject: [PATCH 2/6] Changed comments --- src/Core/Console.php | 2 +- src/Core/Console/NewPassword.php | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Core/Console.php b/src/Core/Console.php index 02a0b66ae2..a1143ae1d9 100644 --- a/src/Core/Console.php +++ b/src/Core/Console.php @@ -43,7 +43,7 @@ Commands: globalcommunitysilence Silence remote profile from global community page help Show help about a command, e.g (bin/console help config) maintenance Set maintenance mode for this node - newpassword Set an new password for a given user + newpassword Set a new password for a given user 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 diff --git a/src/Core/Console/NewPassword.php b/src/Core/Console/NewPassword.php index 9d40e454bb..d44286d28f 100644 --- a/src/Core/Console/NewPassword.php +++ b/src/Core/Console/NewPassword.php @@ -10,15 +10,13 @@ use Friendica\Database\DBM; use dba; /** - * @brief tool to block an account from the node + * @brief tool to set a new password for a user * - * With this tool, you can block an account in such a way, that no postings - * or comments this account writes are accepted to the node. + * With this tool, you can set a new password for a user * * License: AGPLv3 or later, same as Friendica * - * @author Tobias Diekershoff - * @author Hypolite Petovan + * @author Michael Vogel */ class NewPassword extends \Asika\SimpleConsole\Console { @@ -84,7 +82,7 @@ HELP; throw new \RuntimeException(L10n::t('Password update failed. Please try again.')); } - $this->out(L10n::t('Password changed.', $nick)); + $this->out(L10n::t('Password changed.')); return 0; } From 3b81c6615029752bfddf80dc6c097dff1ce5c424 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Fri, 30 Mar 2018 22:56:04 -0400 Subject: [PATCH 3/6] Use $argv instead of $_SERVER['argv'] --- bin/console.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/console.php b/bin/console.php index 90e4be3928..9c25279d37 100755 --- a/bin/console.php +++ b/bin/console.php @@ -6,4 +6,4 @@ include_once dirname(__DIR__) . '/boot.php'; $a = new Friendica\App(dirname(__DIR__)); \Friendica\BaseObject::setApp($a); -(new Friendica\Core\Console())->execute(); +(new Friendica\Core\Console($argv))->execute(); From 80cca09a538935ed2a733cf86e100c68bdb9151e Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 31 Mar 2018 03:33:19 +0000 Subject: [PATCH 4/6] Fix: Avoid a WSOD when saving the profile --- mod/profiles.php | 1 + 1 file changed, 1 insertion(+) diff --git a/mod/profiles.php b/mod/profiles.php index bec09e2d07..8bb09aa6dd 100644 --- a/mod/profiles.php +++ b/mod/profiles.php @@ -14,6 +14,7 @@ use Friendica\Core\PConfig; use Friendica\Core\System; use Friendica\Core\Worker; use Friendica\Database\DBM; +use Friendica\Model\Contact; use Friendica\Model\GContact; use Friendica\Model\Item; use Friendica\Model\Profile; From 3d487c263ea5c294418cd6cf2d5fc5bb9ffaacae Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 31 Mar 2018 08:19:19 +0000 Subject: [PATCH 5/6] Fixes missing command line argument --- src/App.php | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/App.php b/src/App.php index 2330bc1185..55623e1e81 100644 --- a/src/App.php +++ b/src/App.php @@ -212,12 +212,6 @@ class App . $this->basepath . DIRECTORY_SEPARATOR . 'library' . PATH_SEPARATOR . $this->basepath); - - if (is_array($_SERVER['argv']) && $_SERVER['argc'] > 1 && substr(end($_SERVER['argv']), 0, 4) == 'http') { - $this->set_baseurl(array_pop($_SERVER['argv'])); - $_SERVER['argc'] --; - } - if ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 9) === 'pagename=') { $this->query_string = substr($_SERVER['QUERY_STRING'], 9); @@ -868,9 +862,6 @@ class App array_unshift($args, ((x($this->config, 'php_path')) && (strlen($this->config['php_path'])) ? $this->config['php_path'] : 'php')); - // add baseurl to args. cli scripts can't construct it - $args[] = $this->get_baseurl(); - for ($x = 0; $x < count($args); $x ++) { $args[$x] = escapeshellarg($args[$x]); } From 3eb7ab2d9e18df44d1dbbdb1d3805335a0fac362 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 31 Mar 2018 09:34:36 +0000 Subject: [PATCH 6/6] Fix the version sorting in the federation statistics --- mod/admin.php | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/mod/admin.php b/mod/admin.php index 3cbb70d3c5..4ae5eb70b0 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -635,8 +635,21 @@ function admin_page_federation(App $a) $v = $newVv; } - foreach ($v as $key => $vv) - $v[$key]["version"] = trim(strip_tags($vv["version"])); + // Assure that the versions are sorted correctly + $v2 = []; + $versions = []; + foreach ($v as $vv) { + $version = trim(strip_tags($vv["version"])); + $v2[$version] = $vv; + $versions[] = $version; + } + + usort($versions, 'version_compare'); + + $v = []; + foreach ($versions as $version) { + $v[] = $v2[$version]; + } // the 3rd array item is needed for the JavaScript graphs as JS does // not like some characters in the names of variables...