Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление


Между веб интерфейсом платформы и бекендом HTTP API, который может быть использован, в том числе, для скриптов и автоматизации.

Разграничение доступа

Для разграничения доступа на платформе Wimark используются иерархические локации. Каждый объект CPE, WLAN, Radius, Firewal и т.д. может быть привязан к локации по ее UUID.

Для этого при создании / удалении объекта используется поле base_location внутри JSON объекта.

Авторизация

Для доступа к API необходимо авторизоваться на платформе.

Для этого нужно сделать запрос POST /auth/login с указанием пользователя и его пароля:

# POST /auth/login {"username":"admin","password":"qwerty123"}

В ответ придет сгенерированный JWT токен:

# Response /auth/login {"status":"success","statuscode":"","data":{"count":13,"total":0,"items":{"id":"103390aa-665d-453a-9c27-6d2c9a38fce4","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MjY0NjA3ODgsImxvY2F0aW9uIjoiZTY4NDI0ZWItNGFkMC00NTMxLTlmM2ItMmNiZTFkNTRhZjI5Iiwicm9sZSI6ImFkbWluIiwic2FsdCI6MTUyNjI4Nzk4ODE1NywidXNlcl9pZCI6IjEwMzM5MGFhLTY2NWQtNDUzYS05YzI3LTZkMmM5YTM4ZmNlNCIsInVzZXJuYW1lIjoid2ltYXJrIn0.YW9V4bF52tuINoGdZ4nJzMhhGJtEf47SgAvzHKK4fBE","username":"admin"},"itemslist":[]}}

Токен из response.data.items.token необходимо передавать с каждым запросом через заголовок HTTP запроса к API. Время жизни токена - 30 суток.
"Authorization": "Bearer <response.data.items.token>"

Работа с локациями

API: /api/locations

Создание объекта локации:

{"action":"C","items":{"0":{"name":"test/location"}}}

После выполнения указанного запроса будут созданы 2 локации (если таких имен не было раньше) и в ответ придет следующий JSON:

{"status":"success","statuscode":"","data":{"count":2,"total":0,"items":{"a12fe8fa-f4c7-4819-8f66-64de131d1e0b":{"id":"a12fe8fa-f4c7-4819-8f66-64de131d1e0b","name":"/test/location/"},"d1d4a22f-d013-44a3-a9e2-b6b3deb79502":{"id":"d1d4a22f-d013-44a3-a9e2-b6b3deb79502","name":"/test/"}}}}

Созданные локации можно использовать при создании других объектов. Если не заполнять поле base_location, то по-умолчанию выставляется локация пользователя, от которого идут запросы.
При удалении локации удаляются все нижестоящие локации, а объекты назначаются на первую вышестоящую в иерархии локацию. Локацию с именем “/” (root) удалить нельзя.

Поиск локации:

{"action":"R"}

Пример ответа (Возвращает все локации):

{ 'status': 'success', 'statuscode': '', 'data':{ 'count':3, 'total':3, 'items':{}, 'itemslist':[{ 'address': '', 'coords':{ 'lat':0, 'lng':0}, 'create_at': '2022-10-31T10:58:58.251Z', 'custom_styles':{ 'bodybackgroundcolor': '', 'bodycolor': '', 'footerbackgroundcolor': '', 'headerbackgroundcolor': '', 'headercolor': '', 'sidebarbackgroundactivelink': '', 'sidebarbackgroundcolor': '', 'sidebarbackgroundhoverlink': '', 'sidebarcolor': '' }, 'custom_styles_enable': False, 'description': '', 'id': '5b6c60de-2e28-4a70-8724-7e89ca504aec', 'limits':{ 'cpe':0, 'heatmap':0, 'portal':0, 'radar':0}, 'loc_id': 'P51P7J9tp', 'manager': '', 'name': '/wimark/location/', 'owner': '240ac710-8b67-4865-a7fb-05c3ba7b7406', 'party':{ 'formal_name': '', 'inn': '', 'kpp': '', 'name': '', 'ogrn': '', 'phone': '' }, 'tags':[]},{ 'address': 'Moscow', 'coords':{ 'lat':55.711124, 'lng':37.652399}, 'create_at': '2022-10-25T11:25:31.916Z', 'custom_styles':{ 'bodybackgroundcolor': '', 'bodycolor': '', 'footerbackgroundcolor': '', 'headerbackgroundcolor': '', 'headercolor': '', 'sidebarbackgroundactivelink': '', 'sidebarbackgroundcolor': '', 'sidebarbackgroundhoverlink': '', 'sidebarcolor': '' }, 'custom_styles_enable': False, 'description': 'superuser location', 'id': '63b2deb5-08f6-428d-acd5-c95d530499fd', 'limits':{ 'cpe':0, 'heatmap':0, 'portal':0, 'radar':0}, 'loc_id': 'E1asaSraM', 'manager': '', 'name': '/', 'owner': '', 'party':{ 'formal_name': '', 'inn': '', 'kpp': '', 'name': '', 'ogrn': '', 'phone': '' }, 'tags':[]},{ 'address': '', 'coords':{ 'lat':0, 'lng':0}, 'create_at': '2022-10-31T10:58:58.249Z', 'custom_styles':{ 'bodybackgroundcolor': '', 'bodycolor': '', 'footerbackgroundcolor': '', 'headerbackgroundcolor': '', 'headercolor': '', 'sidebarbackgroundactivelink': '', 'sidebarbackgroundcolor': '', 'sidebarbackgroundhoverlink': '', 'sidebarcolor': '' }, 'custom_styles_enable': False, 'description': '', 'id': 'c8e3b4d5-0192-4931-a7ea-70579aedc62d', 'limits':{ 'cpe':0, 'heatmap':0, 'portal':0, 'radar':0}, 'loc_id': '951gNJraM', 'manager': '', 'name': '/wimark/', 'owner': '240ac710-8b67-4865-a7fb-05c3ba7b7406', 'party':{ 'formal_name': '', 'inn': '', 'kpp': '', 'name': '', 'ogrn': '', 'phone': '' }, 'tags':[]}]}}

Работа с пользователями

API: /api/users
Чтение / обновление / удаление : с помощью POST запроса с указанием поля action R (read) | U (update) | D (delete)

Создание пользователя

{"action":"C","items":{"0":{"role":"admin","base_location":"53117f16-62bc-4942-8fb6-8185f0c37dc8","username":"some_user","password":"12345678"}}}

В ответ при успешном добавлении:

{"status":"success","statuscode":"","data":{"count":1,"total":0,"items":{"5694adf4-1d8f-4167-b3dd-8d4db3e08e62":{"id":"5694adf4-1d8f-4167-b3dd-8d4db3e08e62","username":"some_user","password":"hashed","email":"","photo":"","base_location":"53117f16-62bc-4942-8fb6-8185f0c37dc8","role":"admin","created_at":1560440585,"created_by":"3f3ba5b8-33c8-415d-83b5-2643c991e7d8","first_login":0,"last_login":0,"login_number":0,}}}}

Поиск пользователей

{"action":"R"}

Пример ответа (Возвращает всех пользователей):

{ 'status': 'success', 'statuscode': '', 'data':{ 'count':2, 'total':2, 'items':{}, 'itemslist':[{ 'access':{ 'ads': False, 'analytics': False, 'nms': False, 'polls': False, 'portal': False }, 'active_until':0, 'base_location': '63b2deb5-08f6-428d-acd5-c95d530499fd', 'bee_pro_bis_id':0, 'bee_pro_ctn': '', 'block': False, 'company': '', 'created_at':1667211486, 'created_by': '240ac710-8b67-4865-a7fb-05c3ba7b7406', 'description': '', 'email': '', 'first_login':0, 'id': '6cb6e9ec-ed76-421a-83c0-e3ad1ecf4568', 'last_login':0, 'login_number':0, 'mac_mask': False, 'password': '', 'permissions':{}, 'phone': '', 'photo': '', 'role': 'operator', 'username': 'wimark123' },{ 'access':{ 'ads': False, 'analytics': False, 'nms': False, 'polls': False, 'portal': False }, 'active_until':0, 'base_location': '63b2deb5-08f6-428d-acd5-c95d530499fd', 'bee_pro_bis_id':0, 'bee_pro_ctn': '', 'block': False, 'company': '', 'created_at':1667207826, 'created_by': '240ac710-8b67-4865-a7fb-05c3ba7b7406', 'description': '', 'email': '', 'first_login':1667207865, 'id': 'b964be78-5049-48c6-8ef6-77f0dafc7093', 'last_login':1667207865, 'login_number':1, 'mac_mask': False, 'password': '', 'permissions':{}, 'phone': '', 'photo': '', 'role': 'operator', 'username': 'test123' }]}}

Работа с CPE

API: /api/cpes
Чтение / обновление / удаление : с помощью POST запроса с указанием поля action R (read) | U (update) | D (delete)

Чтение CPE

Для чтения CPE, и других объектов (WLAN, RADIUS, Templates, hs20, users, locations) применяется один общий шаблон. Самое важное в запросе - поле action со значением R. Остальное все опционально. По умолчанию отдаются первые 30 объектов, удовлетворяющих запросу. В поле q можно вставить различные запросы к mongodb например, запрос ниже нацелен на получения первых 300 подключенных к платформе ТД с сортировкой по имени, модель которых равна QTECH QWP-82E и статус connected:

{ "action":"R", "search":"", "page": {"limit":300,"offset":0}, "sort_by":{"field":"name","order":-1}, "q":{"model.name": "QTECH QWP-82E","connected":true} }

Запрос ниже нацелен на получения первых 300 подключенных к платформе ТД с сортировкой по имени из локации с ID c15..298:

{"action":"R","search":"","page":{"limit":300,"offset":0},"sort_by":{"field":"name","order":-1},"q":{"base_location":"c15e4754-4539-4be1-a6ca-749be5681298","connected":true}}

В ответе соответственно будет JSON следующей структуры:

{"status":"success", # или error "statuscode":"", # или описание ошибки "data":{ # data "count":1, # длина списка itemslist "total":1, # сколько всего данных удовлетворили запросу "itemslist":[]}}

И конкректно на запрос по CPE выше имеем следующий ответ:

{"status":"success","statuscode":"","data":{"count":1,"total":1,"itemslist":[{"base_location":"4969622a-5935-416a-b1ff-440fe43287fd","clients":{ },"config":{"beeline_config":{"nas_ip":"192.168.1.38"},"description":"","dhcpcap_config":{"enabled":true,"msgtypefilter":[ ]},"firewall":{"l2_chain":"","l3_filter":{"ip_list":[ ],"mac_list":[ ]},"nat_access":false,"wan_access_block":false},"firmware":{"checksum":"","file":"","mode":"check","storage":"","timeout":0},"gre_peer_addr":"","lbs_config":{"blacklist":[ ],"clienttimeout":0,"emptywatcher":false,"enabled":false,"filtermode":"None","maxcachequeue":0,"maxquiet":0,"reportperiod":0,"whitelist":[ ]},"log_config":{"enabled":false,"log_ip":"","log_port":0,"log_prefix":"","log_proto":""},"name":"","net_manual":{ },"stats_config":{"enabled":true,"reportperiod":60},"tunnels":{ },"wifi":{"radio0":{"bandmode":"11g","bandwidth":"HT20","basic_rate":"","channels":[4],"country":"RU","frequency":"2.4","legacy_rates":"0","log_level":"0","max_inactivity":0,"maxclients":0,"mintxpower":"","power":{"auto":false,"range":[0,15]},"require_mode":"off","scanningconfig":{"enabled":true,"reportperiod":0,"scannumber":0,"scantimeout":0},"supported_rates":null,"txpower":"","wlans":[ ]},"radio1":{"bandmode":"11a","bandwidth":"HE80","basic_rate":"","channels":[149],"country":"RU","frequency":"5","legacy_rates":"0","log_level":"0","max_inactivity":0,"maxclients":0,"mintxpower":"","power":{"auto":false,"range":[0,20]},"require_mode":"off","scanningconfig":{"enabled":true,"reportperiod":0,"scannumber":0,"scantimeout":0},"supported_rates":null,"txpower":"","wlans":["033e6a26-42df-42b7-81b8-eeec16c57c19","56951c46-3b1d-4e1b-8e49-aae779422ed1"]}},"wifi_lock":false,"wifi_manual":{ },"wired":{ },"wmsnmpd":{"default":{"community":"public","enabled":true,"interfaces":["lan","wan"],"listen_interface":"lan","location":"wimarkovo"}}},"config_not_send":false,"config_status":"offline","connected":false,"description":"dubai danya","first_connection":1660128498,"id":"c30009d8-73be-c6ee-f216-44d1fab238a7","last_connection":1666197211,"last_disconnection":1666197308,"last_error":{"description":"","module":"","module_id":"","recommendation":"","type":""},"latitude":0,"longitude":0,"model":{"id":"13b42565-ec28-481d-93df-6831c53fb037","name":"YunCore AX820","short":"yuncore,ax820"},"name":"Qtech-38a6","rrm_group":{ },"state":{"firmware":{"current_md5":"","features":["cpeagent","dhcp-cap","ethernet-accounting","firewall","firmware","get","lbs","network","openwrt","radius","scanning","snmp","statistic","tc","ubus","uci","umdns","wifi"],"has_update":false,"version":{"build":0,"commit":"31dc8dacc99b894a475f2057780ab67c4d81fa8b","version":"v1.9.4"}},"l2tp_state":{"enabled":true,"host":"wm-dev","host_addr":"45.89.25.58","host_tunnel":0,"local_addr":"192.168.1.38","local_iface":"","local_tunnel":1,"tunnel_type":"none"},"net_manual":{"alan":{".type":"interface","proto":"static"},"ipsec_lo":{".type":"interface","ifname":"lo","proto":"static"},"lan":{".type":"interface","ipv6":"0","proto":"dhcp"},"loopback":{".type":"interface","proto":"static"},"nat_wlan_1":{".type":"interface","proto":"static","type":"bridge"},"nat_wlan_2":{".type":"interface","proto":"static","type":"bridge"},"wwan":{".type":"interface","proto":"wwan"}},"network":{"gateway":"192.168.1.1","ipaddr":"192.168.1.38","ipaddrs":[{"ipaddr":"192.168.1.38","netmask":"255.255.255."}],"macaddr":"44:D1:FA:B2:38:A7"},"tunnels":{ },"wan":{"iface":"lan","proto":"dhcp"},"wifi":{"radio0":{"bandmode":"11g","bandwidth":"HT20","channel":"4","enabled":false,"frequency":"2.4","txpower":"15","wlanstates":{ }},"radio1":{"bandmode":"11a","bandwidth":"HE80","channel":"149","enabled":false,"frequency":"5","txpower":"20","wlanstates":{ }}},},"tags":[ ]}]}}

Привязка CPE к Локации

API: /api/bulk/locations/cpes

Для массовой привязки точек доступа к локации следует послать следующего вида запрос:

{"action":"U","ids":["4174f9dd-648f-0785-6640-7a6a417b618f"], # cpe ids "items":{"0":{"base_location":"ae4cb1af-2af5-47ec-8cfd-5fa911b7a166" # location id }}}


Работа с WLAN

API: /api/wlans
Создание

Создание ssid без пароля с именем name-wifi-ssifap1i

{ "action": "C", "items": { "0": { "ssid": "name-wifi-ssifap1i" } } }


Создание ssid с типом безопасности WPA2 PERSONAL, именем name-wifi-ssifap1i и паролем 12345678

{ "action": "C", "items": { "0": { "ssid": "name-wifi-ssifap1i", "security": { "type": "wpa2personal", "data": { "psk": "12345678" } } } } }

Чтение

{ "action": "R" }


Работа с шаблонами

API: /api/cpe_config_templates

Создание

Создание шаблона с именем test-api фильтрами: подсеть 10.30.40.0/24 и mac префиксом 90:B8:32:49, шаблон будет добавлять ssid с id 10b5f52d-70d4-47f2-b59d-4ddfe1a6a493 на все ТД подходящие под условие выше.

{ "action": "C", "items": { "0": { "name": "test-api", "base_location": "1864a500-d4d0-44ad-9094-a68c956b0b3e", "is_auto": true, "subnet": { "ipaddr": "10.30.40.0", "netmask": "255.255.255.0" }, "mac_prefix": "90:B8:32:49", "is_always": true, "template": { "location": "1864a500-d4d0-44ad-9094-a68c956b0b3e", "wlans": ["10b5f52d-70d4-47f2-b59d-4ddfe1a6a493"] } } } }

Чтение

{ "action": "R" }


Работа с точками доступа

API: /api/cpes

Создание
Создание ТД с id 4174f9dd-648f-0785-6640-001fce06d222

{ "action": "C", "items": { "4174f9dd-648f-0785-6640-001fce06d222": { } } }

Чтение

{ "action": "R" }