10 Фев

Восстановление FusionPBX при удалении самого первого домена.

Спиздил статью вот отсюда на всякий случай.

При удалении самого первого домена может случиться с ним несчастье, — перестанет пускать админа (  обычно это admin или superadmin ) на веб-консоль для управления!

Но Вам это поможет только в том случае, если Вы не удалили _все_ домены из FusionPBX перед этим. Если-же удалили все то лучше просто снести папку fusionpbx из /var/www, и обязательно удалить базу !!! После чего запустить наш инсталяционный скрит опять.

В принципе всегда можно все снести папки /usr/local/freeswitch и /var/www/fusionpbx , снести базы и начать все с нуля, но я решил разобраться, смогу-ли я восстановить только пользователя, не пересоздавая все.

Итак, первым делом подключаемся к нашей базе, если конечно она у Вас, как и у меня, в PostgreSQL:
root#/bin/su -l postgres -c psql
\c fusionpbx

Проверяем, а действительно-ли у нас юзеров нету:
select * from v_users;
У меня вывело девственно чистую табличку :-(
Теперь нам нужно будет сгенерировать новый UUID для нашего админа, и будем мы это делать средствами самого postgresql.
Первым делом нужно в нем включить, отключенную по умолчанию, эту возможность:
CREATE EXTENSION "uuid-ossp";
И вот теперь можно приступить к восстановлению нашего админа:

(1) Опредляем uuid нашего домена, и копируем значение из колонки domain_uuid
select * from v_domains;
(2) Теперь нам нужно завести прописать пользователя, но для этого нам потребуется сгенерировать для него хитрый пароль который состоит из двух частей, а точнее из md5 пароля и так называемого salt.
Для этого открываем вторую консоль и выполняем пару действий:
a) Генерируем пароль для нашей Fusionpbx. (погуглить)
b) Сохраняем в блокнотик что нам выдал скрипт, и наше значение ‘salt’ которое мы использовали, кстати лучше будет если по длине оно будет не меньше длины пароля.
(3) Добавляем запись в табличку v_users:
insert into v_users ( user_uuid, domain_uuid, username, password, salt ) values ( uuid_generate_v4(), 'domain-uuid-from-1', 'superbigadmin', 'password-from-2', 'salt-from-2');
Естественно нам нужно заменить предварительно(!) в этом инсерте на свои ранее записанные: domain-uuid, password и salt.
Если мы все правильно сделали то уже теперь можно зайти на веб-интрфейс и подивиться что меню совершнно пустое. Ну это просто потому что наш пользователь для системы просто ‘нуль без палочки’, т.е. еще вовсе не superadmin, а обычный.
(4) Указываем что наш пользователь обладает правами SuperAdmin-а:
4.1) Узнаем какой uuid у нашего вновь созданного пользователя, нас особо интересует поле domain_uuid:
select username,user_uuid,domain_uuid from v_users;
4.2) Основное действие, где надо предварительно заменить все «from-«:
insert into v_group_users values ( uuid_generate_v4(), 'from-domain_uuid', 'superadmin', 'from-user_uuid' );
Все, можно выпольнить выход из postgresql набрав
\q
Так-же стоит выполнить выход из вебки администрирования, прсто добавив logout.php в конце URL, и вроде как все.
Для уверенности полной все перестартовать, например для простоты выполнив reboot.
Для чистоты информации отмечу что все выполнялось на Debian Wheezy версии 7.2, а вот версия PostgreSQL 9.1 (дока по этой версии)