Перейти к основному содержимому

Внешние виджеты

Todo переписать https://swimlanes.io/u/-rBiNaRI7 и вставить диаг ниже где ссылка

Концепт:

Host = Bs.UI (приложение в которое встраивается iframe)

Plugin - любая страница, которая может включать в себя plugin-sdk.js для общения с хостом, но может быть полностью статичная

https://swimlanes.io/u/-rBiNaRI7

Внешний сервис должен взять на себя хранение сессии, например в redis хранить ключ, по которому будет получен весь контекст запроса. Временные key-value db удобны в отсутствии криптографии и автоматически протухающих ссылках.

Host запрашивает сервис по ссылке href передавая контекст в get параметрах

Например, итоговая ссылка на запрос будет http://whatever/api/init-collateral-widget?id=123&targetOrigin=http...

id = ид сущности контекста

targetOrigin = ссылка в хост для отправки событий. Если js sdk не используется, то можно игнорировать

{
"status": "ok",
"timestamp": 1522615252240,
"data": {
"redirectTo": "http://whatever/view-collateral-widget?sessionId=aaaaaaaaaaaaaaaaa123"
}
}

PS. после внедрения SSO схема сохранит обратную совместимость

Настройка Bs.UI

settings/ExtraServices.xml

<?xml version="1.0" encoding="UTF-8" ?>
<settings>
<services>
<service
authenticate="true"
entity="collateral"
code="demo"
href="http://whatever/api/init-collateral-widget"
purpose="sidebar"
>Название виджета залогов</service>
</services>
</settings>

service.authenticate="true" (будет ли отправлен bsauth при инициализации сессии) service.entity="collateral" (сущность в контексте которой работает виджет) service.code="demo" (уникальное кодовое название виджета) service.href="http://whatever/api/init-collateral-widget" (ссылка на инициализацию) service.purpose="sidebar" (назначение виджета, влияет на его отображение и положение)

Примеры

Пример plugin страницы с возможностью отправки событий в host

<!doctype html>
<html lang="en">
<head>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css">
</head>
<body>
<p>
<a href="#" class="btn btn-primary" onclick="BS_SDK.navigate.client(123)">BS_SDK.navigate.client(123)</a>
<a href="#" class="btn btn-primary" onclick="BS_SDK.navigate.loanApp(123)">BS_SDK.navigate.loanApp(123)</a>
</p>
<p>
<a href="#" class="btn btn-warning" onclick="BS_SDK.notifications.success('success')">BS_SDK.notification.success('success')</a>
<a href="#" class="btn btn-warning" onclick="BS_SDK.notifications.info('info')">BS_SDK.notification.info('info')</a>
</p>

<script src="https://cdn.brainysoft.ru/sdk/sdk-plugin/1.0/index.js"></script>

<script>
(function() {
consttargetOrigin = (new URLSearchParams(window.location.search)).get('_target_origin');
window['BS_SDK'].setTargetOrigin(targetOrigin);
})();
</script>
</body>
</html>