1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-08-10 22:41:43 +02:00

Начало прокси

This commit is contained in:
Anton Titovets
2025-01-28 20:58:24 +03:00
parent 5448c16c48
commit 5efb62debe
15 changed files with 7220 additions and 6949 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,10 @@
#Использовать cmdline
#Использовать oint
// #Использовать oint
#Использовать "../../../OInt"
#Использовать "../../tools"
#Использовать "../../help"
#Использовать "../../data"
#Использовать "internal"
Перем Версия; // Версия программы
Перем Отладка; // Флаг вывода отладочной информации
@@ -125,7 +127,7 @@
Справка.ВывестиСправкуПоПараметрам(ПараметрыМетода);
КонецЕсли;
ТекстВыполнения = СформироватьСтрокуВызоваМетода(Параметры, ПараметрыМетода, Модуль, Метод);
ТекстВыполнения = ОбработкаКоманд.СформироватьСтрокуВызоваМетода(Параметры, ПараметрыМетода, Модуль, Метод);
Если Отладка Или Тестирование Тогда
Сообщить(ТекстВыполнения, СтатусСообщения.Внимание);
@@ -174,55 +176,6 @@
КонецПроцедуры
Функция СформироватьСтрокуВызоваМетода(Знач ПереданныеПараметры, Знач ПараметрыМетода, Знач Модуль, Знач Метод)
ТекстВыполнения = "";
СтрокаВызова = Модуль + "." + Метод + "(";
Счетчик = 0;
Для Каждого НеобходимыйПараметр Из ПараметрыМетода Цикл
ИмяПараметра = НеобходимыйПараметр.Параметр;
ЗначениеПараметра = ПереданныеПараметры.Получить(ИмяПараметра);
Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда
ИмяПараметра = "Параметр" + СтрЗаменить(ИмяПараметра, "--", "_");
ТекстВыполнения = ТекстВыполнения
+ Символы.ПС
+ ИмяПараметра
+ " = """
+ СтрЗаменить(ЗначениеПараметра, """", """""")
+ """;";
Если ТребуетсяОбработкаУправляющихПоследовательностей(ИмяПараметра, ЗначениеПараметра) Тогда
ТекстВыполнения = ТекстВыполнения + "
|OPI_Tools.ReplaceEscapeSequences(" + ИмяПараметра + ");
|";
КонецЕсли;
СтрокаВызова = СтрокаВызова + ИмяПараметра + ", ";
Счетчик = Счетчик + 1;
Иначе
СтрокаВызова = СтрокаВызова + " , ";
КонецЕсли;
КонецЦикла;
ЛишниеСимволы = 2;
СтрокаВызова = Лев(СтрокаВызова, СтрДлина(СтрокаВызова) - ЛишниеСимволы);
СтрокаВызова = СтрокаВызова + ");";
СтрокаВызова = "Ответ = " + СтрокаВызова;
ТекстВыполнения = ТекстВыполнения + Символы.ПС + СтрокаВызова;
Возврат ТекстВыполнения;
КонецФункции
Процедура УстановитьРежимОтладки(Знач Параметры)
Если Параметры["--debug"] Тогда
@@ -354,18 +307,6 @@
КонецФункции
Функция ТребуетсяОбработкаУправляющихПоследовательностей(Знач ИмяПараметра, Знач ЗначениеПараметра)
ФайлПараметра = Новый Файл(ЗначениеПараметра);
ЗначениеПараметраСокр = СокрЛП(ЗначениеПараметра);
Возврат Не СтрНачинаетсяС(ЗначениеПараметраСокр, "{")
И Не СтрНачинаетсяС(ЗначениеПараметраСокр, "[")
И Не ФайлПараметра.Существует()
И Не ИмяПараметра = "Параметр_out";
КонецФункции
#КонецОбласти
#КонецОбласти

View File

@@ -0,0 +1,60 @@
Функция СформироватьСтрокуВызоваМетода(Знач ПереданныеПараметры, Знач ПараметрыМетода, Знач Модуль, Знач Метод) Экспорт
ТекстВыполнения = "";
СтрокаВызова = Модуль + "." + Метод + "(";
Счетчик = 0;
Для Каждого НеобходимыйПараметр Из ПараметрыМетода Цикл
ИмяПараметра = НеобходимыйПараметр.Параметр;
ЗначениеПараметра = ПереданныеПараметры.Получить(ИмяПараметра);
Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда
ИмяПараметра = "Параметр" + СтрЗаменить(ИмяПараметра, "--", "_");
ТекстВыполнения = ТекстВыполнения
+ Символы.ПС
+ ИмяПараметра
+ " = """
+ СтрЗаменить(ЗначениеПараметра, """", """""")
+ """;";
Если ТребуетсяОбработкаУправляющихПоследовательностей(ИмяПараметра, ЗначениеПараметра) Тогда
ТекстВыполнения = ТекстВыполнения + "
|OPI_Инструменты.ЗаменитьУправляющиеПоследовательности(" + ИмяПараметра + ");
|";
КонецЕсли;
СтрокаВызова = СтрокаВызова + ИмяПараметра + ", ";
Счетчик = Счетчик + 1;
Иначе
СтрокаВызова = СтрокаВызова + " , ";
КонецЕсли;
КонецЦикла;
ЛишниеСимволы = 2;
СтрокаВызова = Лев(СтрокаВызова, СтрДлина(СтрокаВызова) - ЛишниеСимволы);
СтрокаВызова = СтрокаВызова + ");";
СтрокаВызова = "Ответ = " + СтрокаВызова;
ТекстВыполнения = ТекстВыполнения + Символы.ПС + СтрокаВызова;
Возврат ТекстВыполнения;
КонецФункции
Функция ТребуетсяОбработкаУправляющихПоследовательностей(Знач ИмяПараметра, Знач ЗначениеПараметра)
ФайлПараметра = Новый Файл(ЗначениеПараметра);
ЗначениеПараметраСокр = СокрЛП(ЗначениеПараметра);
Возврат Не СтрНачинаетсяС(ЗначениеПараметраСокр, "{")
И Не СтрНачинаетсяС(ЗначениеПараметраСокр, "[")
И Не ФайлПараметра.Существует()
И Не ИмяПараметра = "Параметр_out";
КонецФункции

View File

@@ -0,0 +1,45 @@
Function ПолучитьСостав() Export
CompositionTable = New ValueTable();
CompositionTable.Columns.Add("Библиотека");
CompositionTable.Columns.Add("Модуль");
CompositionTable.Columns.Add("Метод");
CompositionTable.Columns.Add("МетодПоиска");
CompositionTable.Columns.Add("Параметр");
CompositionTable.Columns.Add("Описание");
CompositionTable.Columns.Add("ОписаниеМетода");
CompositionTable.Columns.Add("Область");
NewLine = CompositionTable.Add();
NewLine.Библиотека = "proxy";
NewLine.Модуль = "ПроtowithandHost";
NewLine.Метод = "Start";
NewLine.МетодПоиска = "ЗАПУСТAndТЬ";
NewLine.Параметр = "--port";
NewLine.Описание = "Servers port";
NewLine.Область = "Service";
NewLine.ОписаниеМетода = "Launches integration proxy server";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "proxy";
NewLine.Модуль = "ПроtowithandHost";
NewLine.Метод = "Start";
NewLine.МетодПоиска = "ЗАПУСТAndТЬ";
NewLine.Параметр = "--proj";
NewLine.Описание = "Project filepath";
NewLine.Область = "Service";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "proxy";
NewLine.Модуль = "ПроtowithandHost";
NewLine.Метод = "Start";
NewLine.МетодПоиска = "ЗАПУСТAndТЬ";
NewLine.Параметр = "--pass";
NewLine.Описание = "Project password";
NewLine.Область = "Service";
Return CompositionTable;
EndFunction

View File

@@ -6,6 +6,7 @@
Функция ПолучитьСоответствиеКомандМодулей() Экспорт
СоответствиеКомандМодулей = Новый Соответствие();
СоответствиеКомандМодулей.Вставить("proxy", "ПроксиСервер");
СоответствиеКомандМодулей.Вставить("tools", "Утилиты");
СоответствиеКомандМодулей.Вставить("airtable", "OPI_Airtable");
СоответствиеКомандМодулей.Вставить("bitrix24", "OPI_Bitrix24");

View File

@@ -0,0 +1,3 @@
Процедура ОсновнаяОбработка(Контекст, СледующийОбработчик) Экспорт
КонецПроцедуры

View File

@@ -0,0 +1,34 @@
// CLI: proxy
#Использовать "internal"
#Область СлужебныйПрограммныйИнтерфейс
// Запустить
// Запускает прокси сервер интеграций
//
// Параметры:
// Порт - Число - Порт запуска сервера - port
// Проект - Строка - Путь к файлу проекта - proj
// Пароль - Строка - Пароль проекта - pass
// Возвращаемое значение:
// Строка - пустая строка
Функция Запустить(Знач Порт, Знач Проект, Знач Пароль) Экспорт
OPI_ПреобразованиеТипов.ПолучитьЧисло(Порт);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Проект);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Пароль);
ВебСервер = Новый ВебСервер(Порт);
Обработчик = Новый ОбработчикЗапросов();
ВебСервер.ДобавитьОбработчикЗапросов(Обработчик, "ОсновнаяОбработка");
ВебСервер.Запустить();
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#КонецОбласти

View File

@@ -1,5 +1,6 @@
#Использовать cmdline
#Использовать oint
// #Использовать oint
#Использовать "../../../OInt"
#Использовать "../../tools"
#Использовать "../../help"
#Использовать "../../data"

View File

@@ -0,0 +1,45 @@
Функция ПолучитьСостав() Экспорт
ТаблицаСостава = Новый ТаблицаЗначений();
ТаблицаСостава.Колонки.Добавить("Библиотека");
ТаблицаСостава.Колонки.Добавить("Модуль");
ТаблицаСостава.Колонки.Добавить("Метод");
ТаблицаСостава.Колонки.Добавить("МетодПоиска");
ТаблицаСостава.Колонки.Добавить("Параметр");
ТаблицаСостава.Колонки.Добавить("Описание");
ТаблицаСостава.Колонки.Добавить("ОписаниеМетода");
ТаблицаСостава.Колонки.Добавить("Область");
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "proxy";
НоваяСтрока.Модуль = "ПроксиСервер";
НоваяСтрока.Метод = "Запустить";
НоваяСтрока.МетодПоиска = "ЗАПУСТИТЬ";
НоваяСтрока.Параметр = "--port";
НоваяСтрока.Описание = "Порт запуска сервера";
НоваяСтрока.Область = "Служебный программный интерфейс";
НоваяСтрока.ОписаниеМетода = "Запускает прокси сервер интеграций";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "proxy";
НоваяСтрока.Модуль = "ПроксиСервер";
НоваяСтрока.Метод = "Запустить";
НоваяСтрока.МетодПоиска = "ЗАПУСТИТЬ";
НоваяСтрока.Параметр = "--proj";
НоваяСтрока.Описание = "Путь к файлу проекта";
НоваяСтрока.Область = "Служебный программный интерфейс";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "proxy";
НоваяСтрока.Модуль = "ПроксиСервер";
НоваяСтрока.Метод = "Запустить";
НоваяСтрока.МетодПоиска = "ЗАПУСТИТЬ";
НоваяСтрока.Параметр = "--pass";
НоваяСтрока.Описание = "Пароль проекта";
НоваяСтрока.Область = "Служебный программный интерфейс";
Возврат ТаблицаСостава;
КонецФункции

View File

@@ -6,6 +6,7 @@
Функция ПолучитьСоответствиеКомандМодулей() Экспорт
СоответствиеКомандМодулей = Новый Соответствие();
СоответствиеКомандМодулей.Вставить("proxy", "ПроксиСервер");
СоответствиеКомандМодулей.Вставить("tools", "Утилиты");
СоответствиеКомандМодулей.Вставить("airtable", "OPI_Airtable");
СоответствиеКомандМодулей.Вставить("bitrix24", "OPI_Bitrix24");

View File

@@ -0,0 +1,8 @@
Процедура ОбработатьМеню(Контекст) Экспорт
Контекст.Ответ.Записать("
|<li hx-get=""/api/content/1"" hx-target=""#content"">Action 1</li>
|<li hx-get=""/api/content/2"" hx-target=""#content"">Action 2</li>
|<li hx-get=""/api/content/3"" hx-target=""#content"">Action 3</li>");
КонецПроцедуры

View File

@@ -0,0 +1,33 @@
Процедура ВернутьСтатику(Контекст, ПутьКФайлу) Экспорт
ПутьКФайлуСтатики = КаталогСтатики() + ПутьКФайлу;
ФайлСтатики = Новый Файл(ПутьКФайлуСтатики);
Если ФайлСтатики.Существует() Тогда
Данные = Новый ФайловыйПоток(ПутьКФайлуСтатики, РежимОткрытияФайла.Открыть);
Данные.КопироватьВ(Контекст.Ответ.Тело);
Данные.Закрыть();
Иначе
Контекст.Ответ.КодСостояния = 404;
КонецЕсли;
КонецПроцедуры
Функция КаталогСтатики()
КаталогОбработчика = СтрЗаменить(ТекущийСценарий().Каталог, "\", "/");
ЭлементыПути = СтрРазделить(КаталогОбработчика, "/");
Для Н = 1 По 6 Цикл
ЭлементыПути.Удалить(ЭлементыПути.ВГраница());
КонецЦикла;
ЭлементыПути.Добавить("web");
ПутьСтатики = СтрСоединить(ЭлементыПути, "/");
ПутьСтатики = ПутьСтатики + "/";
Возврат ПутьСтатики;
КонецФункции

View File

@@ -1,3 +1,34 @@
#Использовать "internal"
Процедура ОсновнаяОбработка(Контекст, СледующийОбработчик) Экспорт
Попытка
ОбработатьЗапрос(Контекст);
Исключение
Контекст.Ответ.КодСостояния = 500;
Контекст.Ответ.Записать(ОписаниеОшибки());
КонецПопытки
КонецПроцедуры
Процедура ОбработатьЗапрос(Контекст)
Путь = Контекст.Запрос.Путь;
Если Путь = "/web" Тогда
Статика.ВернутьСтатику(Контекст, "index.html");
ИначеЕсли Путь = "/api/menu" Тогда
Меню.ОбработатьМеню(Контекст);
Иначе
Контекст.Ответ.КодСостояния = 404;
КонецЕсли;
КонецПроцедуры

View File

@@ -1,19 +1,16 @@
// CLI: proxy
#Использовать "internal"
#Использовать "oint"
#Область СлужебныйПрограммныйИнтерфейс
// Разложить JSON на параметры
// Показывает значения, которые можно получить из переданного JSON и возвращает
// Запустить
// Запускает прокси сервер интеграций
//
// Параметры:
// JSON - Строка - JSON данные - json
// МаксимальныйУровеньВложенности - Число - Ограничение на ур. вложенности разбора. На всю глубину по умолчанию - nesting
// ИмяПараметра - Строка - Имя поля для получения. Выводит весь список, если не указано - name
// Кодировка - Строка - Кодировка, в которой записаны JSON данные - enc
//
// Порт - Число - Порт запуска сервера - port
// Проект - Строка - Путь к файлу проекта - proj
// Пароль - Строка - Пароль проекта - pass
// Возвращаемое значение:
// Строка - пустая строка
Функция Запустить(Знач Порт, Знач Проект, Знач Пароль) Экспорт

59
src/ru/cli/web/index.html Normal file
View File

@@ -0,0 +1,59 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GitHub Actions Interface with HTMX</title>
<script src="https://unpkg.com/htmx.org@1.9.10"></script>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
display: flex;
height: 100vh;
}
.sidebar {
width: 200px;
background-color: #f4f4f4;
padding: 20px;
box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);
}
.sidebar ul {
list-style-type: none;
padding: 0;
}
.sidebar ul li {
margin: 15px 0;
cursor: pointer;
color: #0366d6;
}
.sidebar ul li:hover {
text-decoration: underline;
}
.main-content {
flex-grow: 1;
padding: 20px;
background-color: #fff;
}
</style>
</head>
<body>
<!-- Боковое меню -->
<div class="sidebar">
<ul id="menu" hx-get="/api/menu" hx-trigger="load">
<!-- Пункты меню будут загружены сюда -->
</ul>
</div>
<!-- Основная область -->
<div class="main-content" id="content">
<!-- Рабочая область будет обновляться здесь -->
</div>
<!-- Шаблон для пунктов меню -->
<template id="menu-item-template">
<li hx-get="/api/content/{id}" hx-target="#content">{name}</li>
</template>
</body>
</html>