Websocket User-API

Обзор

Websocket User-API служит для подключения пользовательских приложений. Требует авторизации и настройки websocket-подключения на конкретные API, доступные пользователю по правам (поле opts.roles сущности user).

Авторизация подключения user-api

Запрос login в рамках user-api может производиться с указанием домена, имени пользователя и пароля.

Запрос авторизации с указанием логина, пароля и домена:
["login", {"qid":0.19082918216295153,"login":"admin","pwd":"123","td":"test.era-platform.ru"}]
Запрос авторизации по активной сессии:
[
  "login",
  {
    "qid":0.19082918216295153,
    "rsessionid":"06b64123-0176-13d6-89ab-02004c4f4f50"
  }
]

Идентификатор активной сессии может быть взят приложением либо из REST-API /rest/v1/iam/sessions/current, либо из cookie-файла EraSessionId в браузере, который появляется после проведения авторизации в базовом веб-приложении app-root.

Если метод setup вызывается до авторизации, то в ответе на него все API возвращают "ok", но после авторизации в ответ на запрос login сервер отправит модифицированный список запрошенных API (поле `capabilities):

[
  "login_result",
  {
    "qid":0.19082918216295153,
    "result":"ok",
    "td":"test.era-platform.ru",
    "login":"admin",
    "register":"ok",
    "sessionid":"f098f576-0176-1572-b7ce-02004c4f4f50",
    "capabilities": [
      {"key":"scripteditor", "result":"ok"},
      {"key":"scriptnotify", "result":"ok"},
      {"key":"test", "result":"error", "errormsg":"Access denied by IAM (route not found)"}
    ]
  }
]

После авторизации подключения производится его регистрация на сервисе Registrar, где оно поддерживается все время, пока активно. Информация о подключениях доступна клиентам сервиса Registrar, в том числе через API и из сценариев (компоненты "Операция", например, где возможен поиск с фильтрацией и маскировкой). Идентификаторы подключений могут использоваться в компоненте сценариев "Операция с websocket-подключением" для отправки событий и запросов удаленному приложению/системе, а также управлять обменом файлами.

websocktemp - каталог для временных файлов

Каждое websocket-подключение привязано к сессии пользователя. На каждом веб-сервере, обслуживающем websocket-подключение, находится временный каталог этой сессии, доступ к которому есть:

  • у приложений через REST-API /rest/v1/fs/targets/websocktemp в рамках той же сессии;

  • у сценариев компонентом "Операция с websocket-подключением" с выбранной категорией "файлы websocktemp".

Каталог websocktemp и всё его содержимое автоматически удаляется с веб-сервера в следующих случаях:

  • сервер или роль веб-сервера перезагрузились;

  • по истечении 30 секунд после закрытия последнего websocket-подключения в рамках этой сессии на этом веб-сервере, если к этому времени не появилось новых websocket-подключений с этой сессией.

Состояния

Вне зависимости от того, какие api подключены с помощью метода setup, сервер всегда уведомляет каждое подключение об изменениях состояния авторизованного пользователя.

[
  "user_state_changed",
  {
    "presence": "registered",
    "state": "undefined"
  }
]
  • presence - состояние, которое заказывается самим пользователем. Рассматривается системой как раздел (например: registered, away, callcenter).

  • state - дочернее состояние внутри конкретного presence. Генерируется сервером на основании внутренней логики обслуживания (например: free, busy, break внутри callcenter).

Информация о подключении

Запрос информации о подключении
[
  "connection_info",
  {
    "qid":930293482233
  }
]
Ответ
[
  "connection_info_result",
  {
    "qid":930293482233,
    "result":"ok",
    "site":"main_site",
    "ownertype":"user",
    "domain":"test.rootdomain.ru",
    "userid":"e7adf0aa-05b7-8163-948c-3392a9660db9",
    "sessionid":"0de5ea8b-017d-9458-00d5-7cd30a921f58",
    "connectionid":"aa1bd0bb-017d-9638-e89d-7cd30a921f58",
    "capabilities":["rest","scripteditor","scriptnotify","subscr"],
    "datetime":"2021-12-07T18:48:54.191Z",
    "timestamp":1638902934191,
    "webservers":["http://192.168.0.112:80"],
    "roles":["admin","crud","monitor","scripteditor","stat","test"],
    "timezone":"default",
    "userlogin":"admin",
    "username":"Administrator"
  }
]

Доступные User-API

Могут быть настроены и подклчюены следующие capabilities:

  • inited - служебный модуль, подключаемый автоматически, для обработки запросов setup и login.

  • loggedin - служебный модуль, подключаемый автоматически после авторизации, для обработки запроса setup и отправки событий user_state_changed.

  • scriptnotify - модуль для отправки уведомлений из сценариев.

  • scripteditor - модуль для обслуживания клиентского приложения редактора сценариев.

  • rest - управление классами системы (статическими и динамическими).

  • subscr - модуль для обслуживания запросов подписки на события и уведомления.

  • webconstr - плагин для обмена событиями с веб-приложениями, написанными на веб-конструкторе.

Поддерживается подключение плагинов, реализующих и другие произвольные User-API и соответствующие capabilities.