Редагування groovy скриптів бізнес-процесів в admin-portal
Загальний опис проблеми та рішення
Розробка бізнес-процесів регламенту реєстру включає в себе розробку Groovy скриптів, що відображають логіку роботи кроків бізнес-процесу. Адмін-портал дозволяє проводити розробку бізнес-процесів регламенту реєстру. Набагато ефективніше вести розробку Groovy скриптів в спеціалізованих засобах розробки, таких як IDE (Desktop або Web версії).
Розширення адмін-порталу використанням rich веб редакторів редагування Groovy скриптів покращить user experience до рівня використання Desktop IDE інструментів, а також зменшить час на постійне переміщення скриптів в Desktop IDE для редагування та назад в BPMN.IO візуальний конструктор бізнес-процесів
Результати POC для ознайомлення з LSP протоколом та веб-редактором коду MonacoEditor |
Функціональні можливості редактору
Наступні функціональні можливості в рівній мірі використовуються для двох функціональних сценаріїв: створення нового кроку бізнес-процесу та редагування або перегляд існуючого. |
-
Автодоповнення у вигляді випадаючого списку варіантів виклику
-
Відображення результату аналізу коду на наявність помилок за допомогою language server
-
Показ Hoover тултипу з javadoc інформацією
-
Використання різних кольорів при перегляді коду
-
Автодоповнення для DDM JUEL функцій:
-
initiator
-
completer
-
system_user
-
submission
-
sign_submission
-
get_variable
-
set_variable
-
set_transient_variable
-
process_caller
-
message_payload
-
Основні принципи
-
Monaco editor в якості Web інструменту розробки groovy скриптів
-
Використання сторонніх Language Server’s (LS’s) для отримання підказок, переліку для автодоповнення та результату помилок семантичного аналізу Groovy скриптів
-
Використання Language Server Protocol для комунікації між Language Server та Monaco editor
-
Використання lsp4j для менеджменту (orchestration) LS’s
-
Транспортний протокол комунікації між Monaco editor та LS - WebSocket over HTTP (HTTPS)
-
Логічний протокол комунікації (структура payload в повідомленнях транспортного протоколу) між Monaco editor та LS - Json-RPC
Високорівневий дизайн
Опис та призначення компонентів
Назва | Мова програмування | Опис |
---|---|---|
JavaScript |
Візуальний веб-редактор коду |
|
Remote LS’s |
Java, LSP4J |
Екземпляри LS сервісів, що реалізує LSP протокол та виконують перевірку клієнтського коду з поверненням результатів перевірки в форматі Json-RPC(LSP). |
LS Manager, Websocket Manager |
Java, Spring |
Spring boot web controller. Створює необхідні екземпляри LS. Створює WebSocket та використовує відповідний LS екземпляр для аналізу та перевірки коду з візуального редактору клієнту. |
LSP комунікація
-
В якості транспортного протоколу використовується WSS протокол
-
В якості RPC взаємодії використовується LSP протокол версії 3.17
WebSocket комунікація
-
В якості транспортного протоколу використовується WSS
-
Для налаштування Web-socket зв’язку зі сторони UI layer використовується monaco-languageclient.
-
Для організації websocket backend частини використовується spring-websocket.
Кількість екземплярів LS
-
Кожне вікно з monaco editor використовує свій окремий web-socket instance для з’єднання з LS
-
Кожний web-socket використовує окремий екземпляр LS.
-
Всі LS екземпляри знаходяться в одному JVM екземплярі. Технічно кожний екземпляр LS це новий екземпляр з інтерфейсом
org.eclipse.lsp4j.services.LanguageServer
.
Масштабування
В поточній версії розгортання сервісу пропонується використовувати лише вертикальне масштабування (RAM, CPU). Оскільки використовується підхід розміщення всіх LS в рамках однієї JVM, тому не очікується значного збільшення використання обчислювальних ресурсів під час збільшення кількості одночасно працюючих кліентів LS.
Горизонтальне маштабування можливе шляхом додавання Load Balancer для LSP (WebSocket JSON-RPC) трафіку. Out of scope. |
Моделювання загроз
Area | Назва | Опис | Значення ліміту |
---|---|---|---|
Kong |
WSS трафік через Kong |
Налаштування пропускання трафіку через admin kong шляхом використання Upgrade headers. WebSocket kong manual |
|
Авторизація під час handshake процесу |
Поточна авторизація на admin kong. |
||
Максимальний розмір запиту |
Ліміт для payload всередині LSP (JSON-RPC). Використати Request Size Limiting |
65kb (30kb after SC) |
|
Socket timeout |
Idle time для сокету, через який він автоматично закривається. Необхідна конфігурація як на BE так і на FE side. Kong config property |
60s (should be by default) |
|
Socket open Rate limit |
Ліміт на кількість запитів на створення web-socket |
10 per minute per user |
|
Java application |
Конфігурація CORS |
Налаштувати CORS для |
|
Chart configuration |
RAM limit |
Встановити RAM ліміт шляхом налаштування resources.requests.memory в Chart deployment |
1GB |
Технологічний стек
Назва | Версія | Ліцензія | Опис |
---|---|---|---|
0.34.1 |
Візуальний веб-редактор коду |
||
4.0.3 |
Language server клієнт, що підключається до Monaco editor та використовується для з’єднання з віддаленими language серверами використовуючи LSP протокол) |
||
8.0.2 |
Транзитивна залежність з monaco-languageclient |
||
0.19 |
Бібліотека для менеджменту екземплярів LS. Використовується для запуску LS коду. |
||
- |
Реалізує LSP протокол та виконую перевірку Groovy коду з поверненням результатів перевірки в форматі Json-RPC |
||
2.6.1 |
Розширення до Spring Framework для спрощення побудови аплікацій на базі Spring завдяки автоматичній конфігурації та наявності spring boot стартерів |
||
2.6.1 |
Розширення для Spring для менеджменту веб-сокетів в серверних додатках (використовує spring-websocket:5.3.13) |
Інтерфейс управління
BPMN.io буде розширено додатковою кнопкою визову модального вікна редагування groovy скриптів.

Високорівневий план розробки
Необхідні експертизи
-
Java
-
Javascript
-
DevOps
-
QA, AQA
Backend Java activities
-
Створити Spring Boot based backend service ddm-language-server
-
Розробити WebSocket proxy component
-
Підвищити версію LSP4J до 0.19 для GroovyLanguageServer
Javascript activities
-
Інтеграція Monaco editor в BPMN.IO редактор бізнес-процесів
-
Інтеграція Monaco-editor з ddm-language-server використовуючи monaco-languageclient
DevOps activities
-
Onboard https://github.com/GroovyLanguageServer/groovy-language-server: add codebase into gerrit and create pipeline around
-
Створити deploy-templates та Dockerfile для service ddm-language-server (openjdk based image)
-
Конфігурація AdminKong для пропускання трафіку в ddm-language-server. Додати websocket proxy headers в конфігурацію Kong
-
Конфігурація плагінів Kong для перевірки security лімітів
-
Додати в
environment-js
зміннуlanguageServerUrl
з відносною адресою ddm-laguage-server
Безпека
Бізнес Дані
Категорія Даних |
Опис |
Конфіденційність |
Цілісність |
Доступність |
Проміжні дані бізнес-процесів, що містять відкриту інформацію |
Дані бізнес форм та процесів що не містять інформацію з обмеженим доступом |
Низька |
Висока |
Середня |
Операційні журнали |
Списки зафіксованих/залогованих звернень до сервісу та журнали його роботи |
Середня |
Висока |
Висока |
Механізми протидії ризикам безпеки та відповідність вимогам безпеки
Ризик |
Засоби контролю безпеки |
Реалізація |
Пріорітет |
Порушення цілісності та конфіденційності даних при передачі |
Використання HTTPS та WSS |
Враховано в початковому дизайні |
Високий |
Небезпечне завершення сеансу на стороні сервера |
Під час виходу з системи ініційованого користувачем або при автоматичному закінченні терміну дії сесії будь-яка комунікація з веб сокетом повинна бути зупинена |
Не враховано в початковому дизайні |
Високий |
Відмова в обслуговуванні через вичерпання обчислювальних ресурсів (DOS) спричинине відсутністю обмежень для веб сокетів |
|
Враховано в початковому дизайні |
Високий |
Відмова в обслуговуванні через вичерпання обчислювальних ресурсів (DOS) спричинине відсутністю обмежень для сервісу на рівні опеншифту |
|
Враховано в початковому дизайні |
Високий |
Відмова в обслуговуванні через вичерпання обчислювальних ресурсів (DOS) спричинине відсутністю обмежень для HTTP запитів на рівні інгрес контролеру Kong |
|
Не враховано в початковому дизайні |
Високий |
Ризик бекдору у компоненті language-server |
|
Частково враховано в початковому дизайні. Неодхідно повністю ізолювати сервіс ddm-language-server від зовнішньої мережі |
Високий |
Ризик виконання вразливості інтерактивних інформаційних систем (XSS) |
|
Враховано в початковому дизайні |
Високий |
Ризик розкриття технічної інформації про систему |
|
Не враховано в початковому дизайні |
Середній |
Десеріалізація ненадійних даних |
|
Не враховано в початковому дизайні |
Середній |
Ризик появи групи веб вразливостей та відповідність вимогам безпеки |
|
Не враховано в початковому дизайні |
Середній |
Ризик закріплення в системі при експлуатації вразливості до системного рівня та подальший бічний рух. Відповідність вимогам. |
|
Не враховано в початковому дизайні |
Середній |
Недостатнє журналювання та відповідність вимогам безпеки |
|
Не враховано в початковому дизайні |
Низький |
Місконфігурація сервісу та/або фреймфорку |
|
Не враховано в початковому дизайні |
Низький |
Система тестування комплексу засобів захисту (КСЗ)
-
Репозиторій з вихідним кодом повинен бути заонборджений до системи керування вразливостями та проходити регулярне тестування
-
Базовий імедж сервісу повинен бути просканований та не містити не вирішенних критичних вразливостей
-
Базовий імедж повинен бути розміщений в довіреному сховищі підконтрольному організації
-
Технологія language-server повинна бути додана до переліку 3rd party продуктів які використовуються (inventory)