1
0
mirror of https://github.com/infina15/oproxy.git synced 2026-04-26 20:53:08 +02:00
2023-12-30 00:43:39 +03:00
2023-12-29 18:01:58 +03:00
2023-12-29 11:36:33 +03:00
2023-12-29 18:01:58 +03:00
2023-12-29 11:36:33 +03:00
2023-12-29 18:01:58 +03:00
2023-12-29 11:40:42 +03:00
2023-12-29 18:01:58 +03:00
2023-12-30 00:43:39 +03:00

oproxy - TCP прокси-сервер хранилища конфигураций 1С

Написан на нативном OneScript. Вдохновлен winow

Для работы прокси-сервера необходимо установить и настроить tcp сервер хранилищ 1С

  • Не работает с файловым вариантом хранилища
  • Не работает с хранилищем по HTTP, только TCP
  • Но нативная HTTP публикация может смотреть на порт прокси (то есть вы будете пользоваться HTTP хранилищем, но внутри него поток данных будет проходить через прокси)

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

Например, при помещении версии в хранилище можно проверить комментарий на соответствие регулярному выражению в зависимости от имени системы, либо произвести вызов к Jira и проверить что задача с таким номером существует. Запретить помещать версии в определенные часы, вызвать старт пайплайна в GitLab или Jenkins, запустить GitSync, обратиться к API кофемашины, отправить случайный мем в Телеграме - все на что у вас хватит фантазии и скиллов в программировании на OneScript.

Принцип работы

Прокси сервер:

  • слушает указанный tcp-порт
  • получает пакеты данных от конфигуратора
  • анализирует их
  • отправляет пакеты tcp-серверу хранилища
  • может не отправлять данные серверу хранилища, а вернуть в конфигуратор ошибку (по условию написанному вами в коде)

Чтобы не нарушить целостность хранилища 1С, прокси не изменяет данные, которые идут из конфигуратора в хранилище и обратно. Данные передаются в неизменном виде. Прокси может только прервать передачу данных в сторону хранилища и вернуть ошибку в конфигуратор.

Есть 2 варианта установки ошибки:

  • при создании версии хранилища (Поместить в хранилище...)
  • при изменении версии хранилища (в истории хранилища)

Прокси сервер запускается из отдельной папки, в которой функция инициализации создаст файл "ПроверкиПроксиСервера.os" для написания проверок/вызовов/веб-хуков. В этом файле изначально есть 2 функции для обработки 2 вариантов установки ошибки. Этот скрипт редактируется пользователем прокси-сервера и используется прокси-сервером. Скрипт "ПроверкиПроксиСервера.os" не является частью дистрибутива прокси-сервера, полностью отдан во владение пользователю. Главное чтобы в нем были все необходимые (целых две) для прокси-сервера функции :)

Установка

opm install oproxy

Инициализация

После установки следует создать каталог, в котором будет располагаться файл с проверками/веб-хуками/вызовами пайплайнов/анекдотами. Например D:\oproxy_catalog. Перейти в этот каталог и вызвать функцию инициализации:

cd D:\oproxy_catalog
oproxy init

В каталоге создастся файл ПроверкиПроксиСервера.os.

В нем 2 функции:

Функция ОбработкаПомещенияВХранилище(ПараметрыЗапроса)
Функция ОбработкаИзмененияВерсииХранилища(ПараметрыЗапроса)

ПараметрыЗапроса - это структура, в которой всегда есть поля:

  • ИмяСистемы - Строка - название хранилища в нижнем регистре. Название такое же, как при подключении конфигуратора к хранилищу. Например для подключения tcp://server.local:1544/baza ИмяСистемы будет baza
  • ИмяМетода - Строка - DevDepot_commitObjects (для помещения в хранилище) или DevDepot_changeVersion (для изменения версии хранилища)
  • ВерсияПлатформы - Строка - версия платформы, с которой обращается конфигуратор, например 8.3.22.2143
  • Комментарий - Строка - текст, который пользователь указал при помещении или изменении версии хранилища в поле "Комментарий"
  • Проверять - Булево - всегда Истина
  • ИмяПользователя - Строка - имя пользователя хранилища, под которым произошло обращение

В этом файле можно написать свои проверки и вызовы. Например файл может быть такой:

Функция ОбработкаПомещенияВХранилище(ПараметрыЗапроса)
    СообщениеОбОшибке = "";
    Если ПараметрыЗапроса.ИмяБазы = "baza1" Тогда
        Если НЕ СтрНачинаетсяС(ПараметрыЗапроса.Комментарий, "ERP-") Тогда
            СообщениеОбОшибке = "Комментарий должен начинаться с ""ERP-""!";
        Иначе
            //...
        КонецЕсли;
    КонецЕсли;
    Если НЕ ПустаяСтрока(СообщениеОбОшибке) Тогда
        ОтправитьДоносНачальникуВТелеграм(ПараметрыЗапроса.ИмяПользователя, ПараметрыЗапроса.Комментарий);
    Иначе
        ОтправитьКомандуЗаваркиКофе_В_АПИ_КофеМашины();
    КонецЕсли;
    Возврат СообщениеОбОшибке;
КонецФункции
Функция ОбработкаИзмененияВерсииХранилища(ПараметрыЗапроса)
    СообщениеОбОшибке = "";
    Если ДеньНедели() = 5 Тогда
        СообщениеОбОшибке = "По пятницам комментарии не меняем";
    Иначе
        ОткатитьГитДоВерсииИПерезапуститьГитСинк();
    КонецЕсли;
    Возврат СообщениеОбОшибке;
КонецФункции

А там уж на что у вас фантазии хватит.

Запуск сервера

Запускать прокси-сервер необходимо из того каталога, где лежит файл ПроверкиПроксиСервера.os, т.к. прокси будет искать файл именно в каталоге запуска.

oproxy start --proxy-port 2555 --storage-server localhost --storage-port 2544

Где:

  • --proxy-port - Число - номер порта, по которому прокси будет слушать соединения (и который надо будет указывать в конфигураторе)
  • --storage-server - Строка - имя сервера, на котором развернут tcp сервер хранилища 1С. Пишется без "tcp://", без номера порта, просто имя сервера. Если прокси запускается на той же машине, где развернут сервер хранилища, можно указать localhost или 127.0.0.1
  • --storage-port - Число - порт развернутого tcp хранилища 1С

Для приведенного выше примера, если у нас сервер называется server.local, а имя базы в хранилище baza1, в конфигураторе надо будет писать адрес tcp://server.local:2555/baza1

Не забудьте в фаерволе операционной системы и/или роутеров открыть порт, указанный в --proxy-port, иначе никто из сети не сможет обращаться к прокси-серверу.

Пример отображения ошибки в конфигураторе

error

Как запустить в фоне

Рекомендую запускать с помощью NSSM для Windows. Рабочий каталог - тот, в котором лежит файл ПроверкиПроксиСервера.os. Команда запуска - в предыдущем пункте.

Кроссплатформенность и производительность

Протестировано на Windows Server с 1С 8.3.22.2143 и OneScript 1.8.4.5. Потребление ОЗУ ~50-100 МБ, иногда может вырастать чуть больше на тяжелых операциях, но вскоре сборщик мусора эту память освободит. ERP и бухгалтерия работают с той же скоростью, как и напрямую по tcp. Проверено создание хранилища, подключение, отключение, сравнение версий в разных вариациях, выгрузка файла CF из версии хранилища, захват и помещение объектов конфигурации, в том числе и глобальные, и прочее-прочее-прочее...

Про Linux и MacOS не знаю - буду рад отзывам!

Приятного использования!

Если вы нашли ошибку работы в прокси или хотите в него добавить какой-то функционал - пожалуйста, напишите в issues. Если у вас есть желание доработать/отрефакторить прокси - ждем ваших pull requests <3

S
Description
TCP прокси-сервер хранилища конфигураций 1С
Readme 429 KiB
Languages
1C Enterprise 100%