Сменить пароль пользователя в Phabricator - PullRequest
0 голосов
/ 23 июня 2019

Допустим, у меня есть пользователь в Phabricator, и мне нужно сменить его пароль (например, система электронной почты вышла из строя и мне нужно установить пароль СЕЙЧАС).

Как я могу это сделать?

1 Ответ

0 голосов
/ 23 июня 2019

Похоже, что администраторы Phabricator по какой-то причине считают, что администраторы не должны иметь полного доступа к администрированию пользователей и не предоставляют инструменты для такой задачи (например, https://stackoverflow.com/a/21249019/754982). Один из вариантов - взломать базу данных напрямую, другойсостоит в том, чтобы добавить функциональность в инструмент account_admin.php, который раньше имел эту функциональность (https://secure.phabricator.com/D18901?id=45357).

. Я отправляю патч для этого скрипта, который снова добавляет функциональность. Я не пытаюсь сделать PR длякодовая база Phabricator, однако я не верю, что она будет принята.

From 3340df50268d612c16ac17f48f69a9952688f47e Mon Sep 17 00:00:00 2001
From: root <user@localhost>
Date: Sun, 23 Jun 2019 02:44:24 +0200
Subject: [PATCH] Added possibility of changing passwords

---
 scripts/user/account_admin.php | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/scripts/user/account_admin.php b/scripts/user/account_admin.php
index 4e4500a2f..d5aa5f76e 100755
--- a/scripts/user/account_admin.php
+++ b/scripts/user/account_admin.php
@@ -112,6 +112,18 @@ if ($is_new) {
   $create_email = $email;
 }

+$changed_pass = false;
+// This disables local echo, so the user's password is not shown as they type
+// it.
+phutil_passthru('stty -echo');
+$password = phutil_console_prompt(
+  pht('Enter a password for this user [blank to leave unchanged]:'));
+phutil_passthru('stty echo');
+if (strlen($password)) {
+  $changed_pass = $password;
+}
+
+
 $is_system_agent = $user->getIsSystemAgent();
 $set_system_agent = phutil_console_confirm(
   pht('Is this user a bot?'),
@@ -148,6 +160,11 @@ if ($is_new) {
   printf($tpl, pht('Email'), '', $create_email);
 }

+printf($tpl, pht('Password'), null,
+  ($changed_pass !== false)
+    ? pht('Updated')
+    : pht('Unchanged'));
+
 printf(
   $tpl,
   pht('Bot'),
@@ -200,6 +217,17 @@ $user->openTransaction();
     $editor->updateUser($user, $verify_email);
   }

+  if ($changed_pass !== false) {
+    $password_envelope = new PhutilOpaqueEnvelope($changed_pass);
+
+    $account_type = PhabricatorAuthPassword::PASSWORD_TYPE_ACCOUNT;
+    $password_object = PhabricatorAuthPassword::initializeNewPassword($user, $account_type);
+
+    $password_object
+      ->setPassword($password_envelope, $user)
+      ->save();
+  }
+
   $editor->makeSystemAgentUser($user, $set_system_agent);

   $xactions = array();
@@ -223,6 +251,7 @@ $user->openTransaction();

   $transaction_editor->applyTransactions($user, $xactions);

+
 $user->saveTransaction();

 echo pht('Saved changes.')."\n";
-- 
2.20.1
...