#!/bin/bash

declare -A app
app['name']='Carbon Reductor'
app['appname']='reductor'

declare -A autoupdate
autoupdate['widget']='menu "Настройки выгрузок единого реестра" "Все параметры обязательны, требование РосКомНадзора"'
autoupdate['enabled']='0'
autoupdate['enabled.widget']='checkbox "Включить автоматическое обновление списков" "В ядро URL будут записываться только в активированной версии."'
autoupdate['operator']=''
autoupdate['operator.widget']='inputbox "Название вашей компании" "Требуется для формирования XML-запроса к zapret-info"'
autoupdate['inn']=''
autoupdate['inn.widget']='inputbox "ИНН 10 цифр" "Требуется для формирования XML-запроса к zapret-info"'
autoupdate['ogrn']=''
autoupdate['ogrn.widget']='inputbox "ОГРН 13 цифр" "Требуется для формирования XML-запроса к zapret-info"'
autoupdate['email']=''
autoupdate['email.widget']='inputbox "Почта для связи" "Требуется для формирования XML-запроса к zapret-info"'
autoupdate['exportkey']=''
autoupdate['exportkey.widget']='cmd "Установка сертификата с USB-Token" "/usr/local/Reductor/bin/pfx2pem.sh" "Необходимо для работы обновления списка с zapret-info"'
autoupdate['url']='http://reductor-signatures.carbonsoft.ru'
autoupdate['skip_sign_request']='0'
autoupdate['own']='0'
autoupdate['own.widget']='checkbox "Обновлять список со своего сервера, а не РКН" "В случае если у вас производится выгрузка на своём сервере, можно забирать dump.xml с него"'
autoupdate['own_url']=''
autoupdate['own_url.widget']='inputbox "URL с dump.xml на своём сервере" ""'

declare -A reg
reg['widget']='cmd_output "Регистрация Carbon Reductor" "/usr/local/Reductor/bin/reg_util info"'
reg['regnumber']=''
reg['regnumber.widget']='inputbox "Регистрационный номер" "Выдаётся автоматически при обращении к серверу регистрации."'
reg['installcode']=''
reg['installcode.widget']='readonly "Код установки" "Привязан к конкретному компьютеру, берётся автоматически."'
reg['actcode']=''
reg['actcode.widget']='readonly "Код активации" "Обновляется автоматически каждые 10 дней при оплаченной подписке."'

declare -A filter
filter['widget']='menu "Настройка алгоритма фильтрации" "Блокировка доменов полностью, блокировка https по IP и прочее"'

filter['https.widget']='readonly "Настройки фильтрации HTTPS:" ""'
filter['https']=''
filter['https_space']=''
filter['https_space.widget']='readonly "" ""'
filter['https_by_ip']='1'
filter['https_by_ip.widget']='checkbox "Блокировать https-ресурсы по IP" "IP адреса будут добавлены в ipset"'
filter['https_by_ip_on_http']='0'
filter['https_by_ip_on_http.widget']='checkbox "Блокировать HTTP-ресурсы по IP на 443 порту" "IP адреса будут добавлены в ipset https_reductor"'
filter['https_by_nslookup']='1'
filter['https_by_nslookup.widget']='checkbox "Использовать nslookup для определения IP адреса" "Нужно в случае, если в реестре указаны неактуальные IP адреса для ресурсов, или нужно заблокировать все IP адреса на которых этот ресурс доступен"'
filter['sni']='1'
filter['sni.widget']='checkbox "Фильтровать HTTPS по SNI" "Модуль, анализирующий Server Name в Client Hello-пакетах."'
filter['comment']=''
filter['comment.widget']='readonly "" ""'

filter['forbidden.title.widget']='readonly "Настройки редиректа запросов" ""'
filter['forbidden.title']=''
filter['forbidden.space']=''
filter['forbidden.space.widget']='readonly "" ""'
filter['forbidden']='1'
filter['forbidden.widget']='checkbox "Перенаправление на страницу-заглушку" "Модуля для редиректа на страницу с заглушкой - ipt_FORBIDDEN"'
filter['forbidden_url']='http://denypage.ru'
filter['forbidden_url.widget']='inputbox "URL страницы-заглушки" "На неё будут перенаправляться пользователи при открытии запрещённых сайтов"'
filter['forbidden_url_local']='1'
filter['forbidden_url_local.widget']='checkbox "Заглушка на этом сервере" "При включении проверка IP адреса будет производиться только на уровне nginx"'
filter['forbidden_log']='1'
filter['forbidden_log.widget']='checkbox "Логировать срабатывания" "Повышает нагрузку на сервер при больших объёмах трафика, но облегчает отладку"'
filter['save_domain']='0'
filter['save_domain.widget']='checkbox "Добавлять домен в редирект" "Абонентов будет редиректить на http://заглушка?domain=заблокированный_домен"'
filter['comment2']=''
filter['comment2.widget']='readonly "" ""'
filter['dns']='1'
filter['dns.widget']='checkbox "Использовать фильтрацию DNS" "Модули для обработки DNS-трафикана xt_dnsmatch / ipt_DNSREPLY"'
filter['dns_ip']='95.213.143.204'
filter['dns_ip.widget']='inputbox "IP для DNS-ответов" "При запросе запрещённого ресурса reductor пошлёт поддельный ответ с этим IP от имени DNS-сервера. Порт указывать нет смысла."'
filter['dns_separate_exact_and_mask']='0'
filter['dns_separate_exact_and_mask.widget']='checkbox "DNS-маски только при необходимости" "Крайне нерекомендуемая к использованию функция, опасна штрафами от РКН"'
filter['dns_proxy_url_https']='0'
filter['dns_proxy_url_https.widget']='checkbox "Слать домены HTTPS URL в прокси по DNS" "Список будет формироваться при разборе реестра и провайдером вручную"'
filter['dns_proxy_hsts']='0'
filter['dns_proxy_hsts.widget']='checkbox "Слать HSTS домены в прокси по DNS" "youtube и подобные. Список предположительно будет формироваться на стороне CarbonSoft"'
filter['dns_proxy_ip']=''
filter['dns_proxy_ip.widget']='inputbox "IP-адрес прокси-сервера" "Необходимо для отправки туда соединений, которые иначе не отфильтровать по URL"'
filter['bgp_proxy_hsts']='0'
filter['bgp_proxy_hsts.widget']='checkbox "Слать IP адреса HSTS в прокси по BGP" "youtube и подобные. Список доменов предположительно будет формироваться на стороне CarbonSoft и дополняться результатами резолва"'
filter['bgp_proxy_url_https']='0'
filter['bgp_proxy_url_https.widget']='checkbox "Слать IP доменов HTTPS-URL в прокси по BGP" "Список IP будет формироваться при запуске резолвера и дополняться провайдером вручную"'
filter['dns_log_level']='0'
filter['dns_log_level.widget']='inputbox "Уровень логирования DNS" "0 - ничего не логируем, 1 - срабатывания, 2 - проверки. Всё кроме 0 сильно снижает производительность фильтрации и может приводить к пропускам блокировок."'
filter['comment3']=''
filter['comment3.widget']='readonly "" ""'
filter['other.title.widget']='readonly "Прочие настройки" ""'
filter['other.title']=''
filter['other.space']=''
filter['other.space.widget']='readonly "" ""'
filter['router']='0'
filter['minjust']='1'
filter['minjust.widget']='checkbox "Использовать список МинЮста" "Использовать список с http://minjust.ru/ru/extremist-materials"'
filter['minjust.update']='1'
filter['minjust.update.widget']='checkbox "Автоматически обновлять список МинЮста." "Экспериментальная опция."'
filter['workaround']='1'
filter['workaround.widget']='checkbox "Использовать хотфикс-списки Carbon Soft" "Нужно для фильтрации некоторых ресурсов до обновления на версию с исправлением обработки списков."'
filter['notrack']='1'
filter['notrack.widget']='checkbox "Включить NOTRACK для пакетов с зеркала" "Опасная опция, может привести к нестабильной работе инета на сервере и отсутствию выгрузок"'
filter['cardsharing']='1'
filter['cardsharing.widget']='checkbox "Фильтровать кардшаринг и др. протоколы" ""'
filter['ipv6']='0'
filter['ipv6.widget']='checkbox "Фильтровать IPv6" "Слабо протестировано"'
filter['revisor_ip']=''
filter['revisor_ip.widget']='inputbox "IP адрес ревизора или сателлита" "К нему будут применяться более агрессивные правила фильтрации и обходы обходов блокировок, которые реальные люди не делают"'
filter['revisor_route_and_nat']='0'
filter['revisor_route_and_nat.widget']='checkbox "Редуктор - шлюз сателлита" "Указанный IP будет разрешён в конце файрвола + SNAT. Не забудьте настроить dhcpd"'
filter['maintainance']='1'
filter['maintainance.widget']='checkbox "Включать режим обслуживания при обновлениях модулей" "Модули обновляются в среднем раз в 2-3 месяца, обновление длится 30 секунд. Укажите IP ревизора, чтобы полная блокировка доступа в сеть на это время применялась только к нему."'

declare -A network
network['widget']='cmd "Настройка сканирования трафика" "/usr/local/Reductor/bin/setup_network.sh; exit 0" "Настройка приёма зеркала трафика с коммутатора"'

declare -A statistic
statistic['widget']='cmd "Статистика работы" "/usr/local/Reductor/bin/show_stat.sh" "Количество проверенных/проверяемых пакетов, URL в списка и прочее."'

declare -A updater
updater['widget']='cmd "Запуск обновления списков" "/usr/local/Reductor/bin/update.sh" "Запустить скачивание списка от роскомнадзора вручную, необязательно."'

declare -A diagnostic
diagnostic['widget']='cmd "Диагностика" /usr/local/Reductor/bin/diagnostic.sh "Проверить причины, которые могут мешать работе Reductor"'

declare -A about
about['widget']='file_content "О продукте" "/usr/local/Reductor/etc/issue" "Информация о Carbon Reductor"'

declare -A reductorupdate
reductorupdate['widget']='menu "Обновление Carbon Reductor" "Настройки обновления Carbon Reductor."'
reductorupdate['update.widget']='cmd "Обновить Carbon Reductor" "/usr/local/Reductor/bin/autoupdate.sh; exit 0;" "Будет установлена новая версия Carbon Reductor с сохранением настроек."'
reductorupdate['update']=''
reductorupdate['autoupdate.widget']='checkbox "Скачивать все обновления" "Включить проверку новых версий раз в день"'
reductorupdate['autoupdate']='1'
reductorupdate['autoupdate_critical.widget']='checkbox "Скачивать критические обновления" "Включить проверку новых версий с критическими обновлениями раз в день"'
reductorupdate['autoupdate_critical']='1'
reductorupdate['webupdate.widget']='cmd "Обновить веб-интерфейс Carbon Reductor" "/usr/local/Reductor/bin/install_web_interface.sh; exit 0;" "Только если уже установлен."'
reductorupdate['webupdate']=''
reductorupdate['branch']='master'

declare -A misc
misc['widget']='menu "Прочие настройки" "Например логирование"'
misc['diagnostic']='1'
misc['diagnostic.widget']='checkbox "Включить диагностику раз в час" "Отчёт будет отсылаться по email"'
misc['diagnostic2support']='1'
misc['diagnostic2support.widget']='checkbox "Слать отчёт об ошибках разработчикам" ""'
misc['diagnostic2admin']='1'
misc['diagnostic2admin.widget']='checkbox "Слать отчёт об ошибках администратору" ""'
misc['diagnostic_email']='feedback.reductor@carbonsoft.ru'
misc['diagnostic.fallback_dns']='8.8.8.8'
misc['diagnostic.fallback_dns.widget']='inputbox "DNS сервер на случай сбоев" "Если не резолвятся выгрузки, будет прописан первым в resolv.conf"'
misc['admin_email']=''
misc['admin_email.widget']='inputbox "Дополнительные e-mail администраторов" "Заполнять нужно через пробел, без запятых, точек итд"'
misc['admin_notify']='0'
misc['admin_notify.widget']='checkbox "Напоминать администратору о задолженностях" "Редиректит 5 пакетов с IP администратора на заглушку раз в час"'
misc['skipnetworkcheck']='0'
misc['skipnetworkcheck.widget']='checkbox "Не проверять настройки сети при старте" "Включите при использовании нестандартных схем зеркала"'
misc['checkcert.widget']='cmd "Данные об используемом сертификате" "/usr/local/Reductor/bin/check_cert_date" "Срок действия сертификата"'
misc['checkcert']=''
misc['cleansignatures.widget']='cmd "Очистить кэш сигнатур" "> /usr/local/Reductor/cache/signatures.cache" "Будут заново загружены при рестарте или обновлении списков"'
misc['cleansignatures']=''
misc['optimize_routing']='0'
misc['optimize_routing.widget']='checkbox "Не оптимизировать нагрузку на подсистему роутинга" "Чистит таблицу mangle PREROUTING"'
misc['install_web_interface.widget']='cmd "Установить альфа-версию веб-интерфейса" /usr/local/Reductor/bin/install_web_interface.sh "Возможны баги, так-как альфа."'
misc['install_web_interface']=''
misc['autorps']='1'
misc['autorps.widget']='checkbox "Включить RPS для сетёвок с 1 очередью" "Снижает нагрузку для бюджетных сетевых карт"'
misc['nomirror']='0'

declare -A billing
billing['widget']='menu "Интеграция с биллингом" "Использование Reductor для редиректа неавторизованных пользователей"'
billing['negbal']='0'
billing['negbal.widget']='checkbox "Перенаправление неавторизованных пользоваталей" "Модуля для редиректа на страницу с заглушкой - ipt_FORBIDDEN"'
billing['ip']=''
billing['ip.widget']='inputbox "IP адрес биллинга" ""'
billing['negbal_ip']=''
billing['negbal_dns_ip']='127.0.0.2'
billing['negbal_ip.widget']='inputbox "IP negbal страницы-заглушки" "Временный workaround для исключения зацикливания, позже будет более лаконичное решение"'
billing['negbal_url']=''
billing['negbal_url.widget']='inputbox "URL negbal страницы-заглушки" "На неё будут перенаправляться пользователи при отрицательном балансе"'
billing['blocked_ip']=''
billing['blocked_dns_ip']='127.0.0.3'
billing['blocked_ip.widget']='inputbox "IP blocked страницы-заглушки" "Временный workaround для исключения зацикливания, позже будет более лаконичное решение"'
billing['blocked_url']=''
billing['blocked_url.widget']='inputbox "URL blocked страницы-заглушки" "На неё будут перенаправляться пользователи при отрицательном балансе"'
billing['noauth_ip']=''
billing['noauth_dns_ip']='127.0.0.4'
billing['noauth_ip.widget']='inputbox "IP noauth страницы-заглушки" "Временный workaround для исключения зацикливания, позже будет более лаконичное решение"'
billing['noauth_url']=''
billing['noauth_url.widget']='inputbox "URL noauth страницы-заглушки" "На неё будут перенаправляться неавторизованные пользователи"'
billing['subnet']=''
billing['subnet.widget']='inputbox "Подсеть абонентов" "Из-за технических ограничений маска не меньше /16"'
billing['nocheckauth']='1'
billing['nocheckauth.widget']='checkbox "Не проверять авторизацию пользователей" "Удобная опция для отладки синхронизации"'
billing['justsync']='1'
billing['justsync.widget']='checkbox "Синхронизация без редиректов" "Правила редиректа не будут добавляться в файрвол, но ipset будут созданы"'
billing['other_traffic']='0'
billing['other_traffic.widget']='checkbox "Ограничивать весь TCP-трафик" "Отрежет skype, кастомные порты итд"'

declare -A admin
admin['widget']='menu "Управление сервером" "Настройки веб-интерфейса и доступа к нему"'
admin['ip']=''
admin['ip.widget']='inputbox "IP адреса администраторов" "Задавать через пробел"'
admin['web_ip']=''
admin['web_ip.widget']='inputbox "IP адрес для веб-интерфейса" "Если не указан - слушаем на 0.0.0.0"'
admin['web_port']='8080'
admin['web_port.widget']='inputbox "Порт для веб-интерфейса" "Если не указан - слушаем на 80"'

declare -A monitoring
monitoring['enabled']='1'
monitoring['disabled']='0'
monitoring['user']=''
monitoring['password']=''
