API для провайдеров
Пользователь
[user_id]
- идентификатор пользователя провайдера. Может содержать cимволы A-Z, a-z, 0-9 подчеркивание и тире.
Максимальная длинна 32 символа.
Создание пользователя
Новый пользователь создается при попытки создать для него какое-либо свойство: указать категории, присвоить ip.
Удаление пользователя
DELETE /users/[user_id]
Проверка пользователя на существование
HEAD /users/user1
В случае успеха возвращает код HTTP ответа 200. Если пользователь не найден – возвращает код HTTP ответа 404
Получение списка активных пользователей
GET /active_users/
возвращает ответ в формате
["geek", "bugtest", "hammer"]
Под активными подразумеваются пользователи, у которых есть хотя бы один IP-адрес.
Получение списка всех пользователей
GET /users
возвращает ответ в формате
[{ "name": "geek", "safesearch": "off", "safeyoutube": "off", "status": "enabled", "filter": [1, 2], "ip": ["192.168.5.6", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"], "whitelist": ["nic.ru", "yandex.ru"], "blacklist": [] },{ "name": "bugtest", "safesearch": "off", "safeyoutube": "on", "status": "enabled", "filter": [1, 2, 3], "ip": ["192.168.5.8"], "whitelist": ["ya.ru", "google.com"], "blacklist": [] }]
По умолчанию возвращает первые 100 пользователей.
GET /users?start=100&stop=200
Параметры start и stop указывают на то, что надо вернуть пользователей начиная с 100 и до 200
Поиск пользователя
GET /search/user1
возвращает ответ в формате
[{ "name": "user1", "safesearch": "off", "safeyoutube": "off", "status": "enabled", "filter": [], "ip": [], "whitelist": [], "blacklist": [] }]
ищет пользователя user1 по точному совпадению имени или ip адреса
Поиск возможен по ip или имени пользователя. В поиске можно использовать маски.
GET /search/192.168.0.*
Вернет всех пользователей, ip адрес которых начинается с 192.168.0.
GET /search/user*
Вернет всех пользователей, имя которых начинается с user
Получение информации по пользователю:
GET /users/[user_id]
возвращает ответ в формате
{ "name": "[user_id]", "safesearch": "off", "safeyoutube": "off", "status": "enabled", "filter": [3, 4, 5, 6], "ip": ["192.168.5.6", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"], "whitelist": ["yandex.ru", "nic.ru"], "blacklist": [] }
Обновление информации о пользователе
PUT /users/[user_id] Content-type: application/json { "name": "[user_id]" "safesearch": "on", "safeyoutube": "off", "status": "enabled", "filter": [2, 3, 4, 5], "ip": ["192.168.5.8", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"], "whitelist": ["yandex.ru", "nic.ru"], "blacklist" ["mail.ru", "pornhub.com"] }
Отключение фильтрации
Пользователь может отключить фильтрацию без сброса настроек
POST /users/[user_id]/status/disabled Content-type: application/json
Включение фильтрации
POST /users/[user_id]/status/enabled Content-type: application/json
Безопасный поиск
Если опция Безопасный поиск включена и пользователь делает запрос к поисковой системе, то в ответ он получает специальную страницу блокировки, которая осуществляет перенаправление на URL. URL безопасного поиска указывается в файле конфигурации. По умолчанию это http://search.skydns.ru
Включение безопасного поиска по умолчанию
PUT /config/ Content-type: application/json { "safesearch": true }
Отключение безопасного поиска по умолчанию
PUT /config/ Content-type: application/json { "safesearch": false }
Получение настройки безопасного поиска по умолчанию
GET /config/
формат ответа:
{ "filter": [2, 3, 4, 5], "safesearch": true, "safeyoutube": false, "safesearchredirect": "http://search.skydns.ru" }
Включение безопасного поиска по умолчанию для пользователей
PUT /userconfig/ Content-type: application/json { "safesearch": true }
Отключение безопасного поиска по умолчанию для пользователей
PUT /userconfig/ Content-type: application/json { "safesearch": false }
Получение настройки безопасного поиска по умолчанию для пользователей
GET /userconfig/
формат ответа:
{ "filter": [3, 4, 5, 6], "safesearch": true, "safeyoutube": false }
Включение безопасного поиска
POST /users/[user_id]/safesearch/on Content-type: application/json
Отключение безопасного поиска
POST /users/[user_id]/safesearch/off Content-type: application/json
Установка адреса перенаправления безопасного поиска
PUT /config/ Content-type: application/json { "safesearchredirect": "http://search.skydns.ru" }
Очистка адреса перенаправления безопасного поиска
PUT /config/ Content-type: application/json { "safesearchredirect": "" }
Безопасный YouTube
Если эта опция включена, пользователь будет автоматически перенаправляться на безопасную версию YouTube.
Включение безопасного YouTube по умолчанию
PUT /config/ Content-type: application/json { "safeyoutube": true }
Отключение безопасного YouTube по умолчанию
PUT /config/ Content-type: application/json { "safeyoutube": false }
Включение безопасного YouTube по умолчанию для пользователей
PUT /userconfig/ Content-type: application/json { "safeyoutube": true }
Отключение безопасного YouTube по умолчанию для пользователей
PUT /userconfig/ Content-type: application/json { "safeyoutube": false }
Адреса пользователя
Получение ip пользователя
GET /users/[user_id]/ip/
возвращает ответ в формате
["192.168.5.6", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"]
Добавление ip пользователя (происходит добавление к имеющимся)
POST /users/[user_id]/ip/ Content-type: application/json ["127.0.0.1"]
или списка адресов
POST /users/[user_id]/ip/ Content-type: application/json ["127.0.0.1", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"]
Сохранение/обновление ip пользователя (происходит замещение имеющихся)
PUT /users/[user_id]/ip/ Content-type: application/json ["127.0.0.1"]
или списка адресов
PUT /users/[user_id]/ip/ Content-type: application/json ["127.0.0.1", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"]
Удаление всех ip пользователя и отключение его от сервиса
DELETE /users/[user_id]/ip/
Удаление одного из ip пользователя
DELETE /users/[user_id]/ip/[127.0.0.1]
Общая информация
Получение группированного списка категорий с названиями и идентификаторами категорий
GET /categorygroups/
ответ в формате
[{ "group": "Общие", "categories": { "3": "Сайты, распространяющие вирусы", "4": "Фишинг", ... } }, { "group": "Черные сайты", "categories": { "6" : "Наркотики", ... } }, ... ]
Получение списка категорий с названиями и идентификаторами категорий
GET /categories/
возвращает ответ в формате json
{ "3": "Сайты, распространяющие вирусы", "4": "Фишинг", ... }
Получение категорий сайта
GET /site/login.vk.com
Пример ответа:
{ "domain": "vk.com", "categories": [29], }
Здесь vk.com - это домен, который нашелся в нашей базе, а [29] - это список категорий (в данном случае состоящий из одной категории социальные сети). В дальнейшем могут добавляться новые поля.
Категории для блокировки
Добавление категории в список блокируемых по умолчанию
PUT /config/ Content-type: application/json { "filter": [1, 2] }
Удаление категории из списка блокируемых по умолчанию
PUT /config/ Content-type: application/json { "filter": [] }
Добавление категории в список блокируемых по умолчанию для пользователей
PUT /userconfig/ Content-type: application/json { "filter": [1, 2] }
Удаление категории из списка блокируемых по умолчанию для пользователей
PUT /userconfig/ Content-type: application/json { "filter": [] }
Получение списка категорий пользователя
GET /users/[user_id]/filter/
ответ в формате
[1, 2, 3]
Добавление категории в список пользователя
POST /users/[user_id]/filter/ Content-type: application/json [1, 2]
Сохранение нового списка категорий пользователя
PUT /users/[user_id]/filter/ Content-type: application/json [1, 2, 3]
Отключение отдельной категории для пользователя
DELETE /users/[user_id]/filter/2
Отключение всех категорий для пользователя
DELETE /users/[user_id]/filter/
Черный список
Получение черного списка
GET /users/[user_id]/blacklist/
ответ в формате
["www.ya.ru"]
Добавление домена в черный список
POST /users/[user_id]/blacklist/ Content-type: application/json ["www.ya.ru"]
Замена черного списка новым
PUT /users/[user_id]/blacklist/ Content-type: application/json ["www.ya.ru"]
Удаление домена из черного списка
DELETE /users/[user_id]/blacklist/www.ya.ru
Удаление черного списка
DELETE /users/[user_id]/blacklist/
Установка опции Работать только по белому списку
Для работы пользователя в режиме запрещено все, кроме того, что явно занесено в белый список, нужно занести корневой домен в черный список:
POST /users/[user_id]/blacklist/ Content-type: application/json ["-"]
Для удаления корневого домена:
DELETE /users/[user_id]/blacklist/-
Белый список
Получение белого списка
GET /users/[user_id]/whitelist/
ответ в формате
["www.ya.ru"]
Добавление домена в белый список
POST /users/[user_id]/whitelist/ Content-type: application/json ["www.ya.ru"]
Замена белого списка новым
PUT /users/[user_id]/whitelist/ Content-type: application/json ["www.ya.ru"]
Удаление домена из белого списка
DELETE /users/[user_id]/whitelist/www.ya.ru
Удаление белого списка
<pre>DELETE /users/[user_id]/whitelist/
Глобальный черный список (имеет приоритет над списками пользователя)
Получение глобального черного списка
GET /blacklist/
ответ в формате
["www.ya.ru"]
Добавление домена в глобальный черный список
POST /blacklist/ Content-type: application/json ["www.ya.ru"]
Замена глобального черного списка новым
PUT /blacklist/ Content-type: application/json ["www.ya.ru"]
Удаление домена из глобального черного списка
DELETE /blacklist/www.ya.ru
Удаление глобального черного списка
DELETE /blacklist/
Установка опции Работать только по глобальному белому списку
Для работы пользователя в режиме запрещено все, кроме того, что явно занесено в белый список, нужно занести корневой домен в черный список:
POST /blacklist/ Content-type: application/json ["-"]
Для удаления корневого домена:
DELETE /blacklist/-
Глобальный белый список (имеет приоритет над списками пользователя)
Получение глобального белого списка
GET /whitelist/
ответ в формате
["www.ya.ru"]
Добавление домена в глобальный белый список
POST /whitelist/ Content-type: application/json ["www.ya.ru"]
Замена глобального белого списка новым
PUT /whitelist/ Content-type: application/json ["www.ya.ru"]
Удаление домена из глобального белого списка
DELETE /whitelist/www.ya.ru
Удаление глобального белого списка
DELETE /whitelist/
Статистика
Активность пользователя по часам
Где [date_from], [date_to] даты в формате YYYY-MM-DD
GET /users/[user_id]/stat/activity/hour?from=[date_from]&to=[date_to] { "labels": ["2016-06-29 14:00:00", "2016-06-29 15:00:00"], "datasets": [{ "label": "Requests", "data": [375, 275] },{ "label": "Blocks", "data": [13, 0] }] }
Где label - список временных интервалов, datasets список объектов содержащих данные для графиков и легенды графиков, data - список значений соответствующих временным интервалам, label - название графика (Requests - кол-во запросов, Blocks - кол-во блокировок)
Активность пользователя по дням
Где [date_from], [date_to] даты в формате YYYY-MM-DD
GET /users/[user_id]/stat/activity/day?from=[date_from]&to=[date_to] { "labels": ["2016-06-29", "2016-06-30"], "datasets": [{ "label": "Requests", "data": [5770, 3456] },{ "label": "Blocks", "data": [8, 9] }] }
Где labels - список временных интервалов, datasets - список объектов содержащих данные для графиков и легенды графиков, data - список значений соответствующих временным интервалам, label - название графика (Requests - кол-во запросов, Blocks - кол-во блокировок)
Домены
GET /users/[user_id]/stat/domains/[filter]?from=[date_from]&to=[date_to] { "labels": ["example.com", "google.com", "asdfg.com"], "datasets": [{ "label": "Requests", "data": [630, 474, 290] },{ "label": "NXdomain", "data": [0, 0, 290] },{ "label": "Blocks", "data": [630, 0, 0] }] }
Где [date_from], [date_to] даты в формате YYYY-MM-DD
[filter] может принимать значения all (возвращает все домены), www (возвращает только все домены, которые начинаются с www). labels - список доменов, datasets - наборы данных, data - список значений соответствующих каждому домену, label - название графика (Requests - кол-во запросов, Blocks - кол-во блокировок, NXdomain - кол-во ответов домен не существует)
Детальная
GET /users/[user_id]/stat/detail?from=[date_from]&to=[date_to] { "timestamps": ["2016-06-29 15:00:00", "2016-06-29 16:00:00"], "reports": [{ "labels": ["clients4.google.com", "www.google.ru"], "cats": [[48, 251], [48]], "datasets": [{ "label": "Requests", "data": [29, 20] },{ "label": "NXdomain", "data": [0, 0] },{ "label": "Blocks", "data": [0, 0] }] },{ "labels": ["live.github.com", "lb._dns-sd._udp.0.0.200.10.in-addr.arpa", "ssl.gstatic.com"], "cats": [[2], [2], [2]], "datasets": [{ "label": "Requests", "data": [73, 48, 48] },{ "label": "NXdomain", "data": [0, 48, 0] },{ "label": "Blocks", "data": [0, 0, 0] }] }] }
Где [date_from], [date_to] даты в формате YYYY-MM-DD
timestamps - список временных интервалов reports - список отчетов соответствующих временным интервалам labels - список доменов cats - списки категорий для доменов datasets - наборы данных data - список значений соответствующих каждому домену label - название графика (Requests - кол-во запросов, Blocks - кол-во блокировок, NXdomain - кол-во ответов домен не существует)
Статистика без агрегации
Полная статистика пользователя за последний час. Обновляется каждые пять минут.
GET /users/[user_id]/stat/raw { "fields": ["created", "nxdomain", "address", "host", "blockedhost", "reasom", "cats", "blockedcats"], "data": [ ["2016-07-11 17:50:26", "0", "10.200.1.88", "www.tns-counter.ru", "www.tns-counter.ru", "4", [2], [0]], ["2016-07-11 17:50:26", "0", "10.200.1.88", "www.tns-counter.ru", "www.tns-counter.ru", "4", [2], [0]] ] }
Коды ответов
200
OK - Успешный запрос
201
Created - Успешный запрос создание элемента
204
No Content - Успешный запрос с пустым ответом
400
Bad Request - Некорректный запрос
404
Resource is not found - Ресурс не существует
422
Unprocessable Entity - Запрос не содержит требуемые поля
500
Internal server error - Внутренняя ошибка сервера