Скрипт создающий sudo юзера



Бывают ситуации, что пароль от админа теряется, а к почте, на которую зареган админ, доступа нет. Данный скрипт создаёт sudo юзера при запуске с рандомным логином и паролем. Дальше уже можно через этого юзера поменять пароль от админа, а залогинившись под админом — удалить только что созданного sudo. Скрипт просто надо закачать в папку с MODX и запустить.

<?php
// Подключаем
define('MODX_API_MODE', true);
$i=0;
$current_dir = dirname(__FILE__) .'/';
$index_php = $current_dir .'index.php';
while (!file_exists($index_php) && $i < 9)
{
	$current_dir = dirname(dirname($index_php)) .'/';
	$index_php = $current_dir .'index.php';
	$i++;
}
if (file_exists($index_php)) { require_once $index_php; }
else { print "Не удалось найти MODX"; die; }

$user = empty($_GET['user']) ? 'user'. rand(99,9999) : $_GET['user'];
$pass = empty($_GET['pass']) ? rand(10000000,99999999) : $_GET['pass'];

$u = $modx->newObject('modUser');
$u->fromArray(array(
	'username' => $user,
	'password' => $pass,
	'active' => 1,
	'primary_group' => 1,
));
$u->setSudo(1);
$p = $modx->newObject('modUserProfile');
$p->fromArray(array(
	'fullname' => $user,
	'email' => $user.'@mail.ru',
));
$u->addOne($p);
$u->save();

if (!empty($u->username)) {
	print '<p><b>user:</b> '. $user .'</p><p><b>pass:</b> '. $pass .'</p>';
}

Второй вариант


Илья Уткин предложил более изящный вариант, который сразу авторизует в админке под юзером, состоящим в группе Администраторов:
<?php
define('MODX_API_MODE', true);
require 'index.php';
$member = $modx->getObject('modUserGroupMember', array('user_group' => 1));
$user = $modx->getObject('modUser', $member->member);
$user->addSessionContext('mgr');
unlink(basename(__FILE__));
$modx->sendRedirect('/manager/');
Данный скрипт нужно положить в корень сайта, где лежит index.php. После запуска скрипт сам себя удалит и авторизует вас в админке, перенаправив в /manager/. Поэтому, если у вас админка лежит в другой папке — надо переписать последнюю строчку скрипта.
Павел Гвоздь
15 февраля 2016, 10:08
modx.pro
32
4 173
+5
Поблагодарить автора Отправить деньги

Комментарии: 7

Василий Наумкин
15 февраля 2016, 13:12
+2
Кучу set() можно заменить на один fromArray().

Профиль отдельно сохранять не нужно, если ты привязываешь его к новому объекту через addOne(). Должен быть всего 1 save() вместо 3х.
    Павел Карелин
    15 февраля 2016, 13:33
    +4
    А можно просто влезть в бд и поменять почту.
      Илья Уткин
      15 февраля 2016, 13:51
      10
      +12
      Вот такой файлик проще
      <?php
      define('MODX_API_MODE', true);
      require 'index.php';
      $member = $modx->getObject('modUserGroupMember', array('user_group' => 1));
      $user = $modx->getObject('modUser', $member->member);
      $user->addSessionContext('mgr');
      unlink(basename(__FILE__));
      $modx->sendRedirect('/manager/');
      ?>

      Он сразу авторизует вас в админке и удалит сам себя. А уже в админке можно поменять логин-пароль.
        Илья Уткин
        15 февраля 2016, 15:13
        0
        Надо, кстати, самому где-нибудь сохранить))
      Сергей Шлоков
      15 февраля 2016, 16:44
      0
      Есть еще вот такой вариант. Но это при условии, конечно, что сессия существует.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        7