Внешняя настройка приложений
Иногда, после установки приложений, необходимо выполнить его первоначальную настройку в соответствии с определенными требованиями. Во всех продуктах ISPsystem на основе Core встроен механизм внешней настройки установленного приложения как при их непосредственной установке, так и при обновлении и в любой другой момент эксплуатации.
Как это работает
Во время установки любой из наших панелей, после проверки лицензии, панель получает из лицензии специальный адрес сервера настройки "settingurl", наличие которого говорит ей о том, что для дальнейшей установки необходимо получить инструкции по указанному адресу. "settingurl" добавляется в лицензии пользователя, если для этого пользователя сделана соответствующая настройка в билинге my.ispsystem.com.
Далее, панель выполняет переход по указанному адресу, где в качестве параметра запроса указывает идентификатор текущей лицензии.
Сервер производит поиск лицензии и в случае ее обнаружения, возвращает XML-документ ответа зашифрованный при помощи алгоритма XXTEA и преобразованный в его шестнадцатеричное представление, где в качестве ключа шифрования использован ключ активации лицензии.
Панель производит расшифровку ответа с помощью известного ей ключа активации лицензии и, в случае успеха, начинает выполнение описанных там инструкций.
Примечание: В случаях, когда серверу самостоятельно необходимо инициализировать внешнюю настройку, он производит вызов функции "xset.up" клиентской панели. После чего, панель начинает выполнение описанных выше действий и к параметрам запроса добавляет все параметры указанные при инициализации, т.е. вызове "xset.up". Таким образом, функция "xset.up" является своего рода обратным вызовом.
XML-документ ответа
Формат ответа
<?xml version="1.0" encoding="UTF-8"?> <doc> <func name="xset.up.param"> <arg name="grant">x.x.x.x</arg> </func> <func name="имя функции"> <arg name="имя параметра">значение</arg> </func> ... </doc>
Таким образом, сервер присылает панели набор команд, которые необходимо выполнить в данный момент.
Список разрешенных на сегодня функций следующий:
- ipaddrlist.delete
- ipaddrlist.edit
- dnsparam
- xset.up.param
- slaveserver.delete
- slaveserver.edit
- backup2.settings
Специальная функция "xset.up.param", сообщает панели с каких IP-адресов разрешено инициализировать процесс внешней настройки.
Пример сервера внешней настройки
Создаем файл /tmp/settings.py следующего вида
#!/usr/bin/env python from flup.server.fcgi import WSGIServer from xxtea import encrypt import struct def app(environ, start_response): status = '200 OK' response_headers = [('Content-type','text/plain')] start_response(status, response_headers) data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><doc><func name=\"ipaddrlist.edit\">ваши настройки</func></doc>" key = "1515848-bXy1Avllp4E5VnyI1394582400" # ключ активации моей лицензии! вам необходимо получить его из биллинга по переданному ID ln = len(data) data += "\0" * ((4 — (ln % 4)) & 3) data += struct.pack("i", ln); return [ encrypt(data, key, True) ] WSGIServer(app, bindAddress=('localhost', 9002)).run()
В конфигурационный файл nginx добавляем следующий блок
server { listen 80; root /tmp; location /setting.py { fastcgi_pass 127.0.0.1:9002; include fastcgi_params; } }
Запускаем скрипт и перезапускаем nginx.
Теперь, если в лицензию включить параметр settingurl с адресом вашего сервера и произвести установку панели, то будут выполнены переданные вашим сервером инструкции.
Параметры settingurl
Панель будет обращаться к settingurl после установки/обновления каждого модуля.
В запросе будет передано два параметра. Это elid со значением install или update.
И module с именем модуля, которой был установлен (этот параметр имеет пустое значение для основного пакета)