Uni-Fi
Установка Uni-Fi контроллера
Подключение скрипта авторизации
Uni-Fi авторизация проходит через скрипт сgi-bin/guest/s/default/index.cgi
В настройках Uni-Fi выставить тип авторизации: External guest portal, и прописать адрес билинга.
В скрипте index.cgi есть 3 основные функции:
- unifiLogin() - Вход в API
- getJson() - Получение данных из контролера
- sendJson() - Отправка команды
- unifiLogout() - Выход из API
Авторизация клиента проходит в 3 стадии:
- Неавторизированый клиент перенаправляется на
guest/s/default/index.cgi
, с GET параметрами, которые обрабатываются скриптом.
- С страницы пользователя отправляется запрос на Uni-Fi контроллер для получения статуса клиента.
В зависимости от статуса, пользователю показывается форма логина или статус.
Если MAC адреса клиента нет в списке, полученном от контролера, выводится надпись «You have to be redirected via hotspot». - При получении скриптом формы авторизации, отсылается запрос в билинг.
- Если пользователю можно ходить в интернет, скрипт отправляет на Uni-Fi команду для авторизации пользователя.
- Пользователю показывает данные статистики и ссылку на URL, куда он хотел попасть и кнопку «Отключить».
Если уже авторизованный пользователь заходит на ту же страницу, ему показывает данные статуса и кнопку «Отключить»
Подробное описание
В билинге есть сервер доступа Unifi. Там и в config.pl прописаны параметры соединения с сервером.
Поскольку сам Unifi ничего на билинг не отправляет, billd опрашивает unifi каждые 5 минут (плагин ubiquiti_online.pm, период можно поменять в настройках плагинов billd)
клиент подключается к точке. Через некоторое время (от 2 секунд) клиент появится в списке клиентов на контроллере. Когда клиент заходит в интернет (или когда ОС проверит наличие интернета), его отредиректит на портал указанный в настройках Unifi.
Авторизация
Тут вступает index.cgi
портала. По маку, который пришёл в запросе, он в списке клиентов на контроллере находит нужного и сверяет статус клиента.
Дальше, в зависимости от статуса:
- неавторизован - показывает форму логина
- авторизован - показывает форму статуса (там где сначала колёсико крутится)
- не нашёл MAC - отвечает, что нет такого клиента на контроллере.
Когда пользователь вводит свой логин и пароль. На сервер, скриптом страницы, асинхронно отправляется запрос на авторизацию, формируется внутренний запрос к Dv.
в ответе Dv при успешной авторизации возвращаются параметры таймаута сесии и скорости.
С этих параметров, формируется запрос на Unifi для авторизации пользователя на точке.
Если аторизация успешная, скрипт страницы после отображения сообщения, покажет таблицу статуса и запросит дополнительные даные для отображения клиенту. На этой же странице находится кнопка «Отключить», для самостоятельного завершения сесии клиентом.
Для удобности, в верхней части страницы - линк на страницу, куда направлялся пользователь.
Аккаунтинг и продолжительность сесии
Поскольку сам Unifi ничего не отправляет, то обновление даных происходит только, когда выполняется billd.
Billd опрашивает Unifi, и по макам клиентов, определяет к какой учетной записи они принадлежат и добавляет время.
Сама продолжительность сессии подсчитывается только когда сесия закончится, поэтому billd не скидывает абонентов.
Абонентов скидывает сам Unifi по таймауту сесии.
При повторной авторизации, биллинг сверит данные из пользовательского онлайна и если времени онлайна больше, чем позволено для тарифного плана, закончит сесию, и отдаст негативный результат аторизации.
Добавляем сервер доступа в ABIllS
/Настройка/Сервера доступа/