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

PXY: Удаление и получение обработчиков

This commit is contained in:
Anton Titovets
2025-01-29 22:47:33 +03:00
parent 448c3584c4
commit 8de3153cb8
4 changed files with 6772 additions and 6543 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -53,7 +53,7 @@
// Путь - Строка - Путь к файлу проекта - path
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - результат создания
// Структура Из КлючИЗначение - Результат создания
Функция СоздатьПроект(Знач Путь) Экспорт
Возврат НормализоватьПроект(Путь);
@@ -65,16 +65,14 @@
//
// Параметры:
// Проект - Строка - Путь к файлу проекта - proj
// Имя - Строка - Имя нового обработчика - name
// СекретныйКлюч - Строка - Секретный ключ для URL обработчика - secret
// ФункцияОПИ - Строка - Имя функции Открытого пакета интеграций - func
// Метод - Строка - HTTP метод, который будет обрабатывать обработчик: GET, POST, MULTIPART - method
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - результат добавления обработчика
Функция ДобавитьОбработчикЗапросов(Знач Проект, Знач Имя, Знач СекретныйКлюч, Знач Метод = "GET") Экспорт
// Структура Из КлючИЗначение - Результат добавления обработчика
Функция ДобавитьОбработчикЗапросов(Знач Проект, Знач ФункцияОПИ, Знач Метод = "GET") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
OPI_ПреобразованиеТипов.ПолучитьСтроку(СекретныйКлюч);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ФункцияОПИ);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Метод);
Результат = ПроверитьСуществованиеПроекта(Проект);
@@ -85,16 +83,82 @@
Проект = Результат["path"];
КонецЕсли;
МассивДанных = Новый Массив;
МассивДанных.Добавить(Новый Структура("name,secret,method", Имя, СекретныйКлюч, Метод));
СекретныйКлюч = ПолучитьУникальныйКлючОбработчика(Проект);
Если ТипЗнч(СекретныйКлюч) = Тип("Структура") Тогда
СекретныйКлюч.Вставить("message", "Не удалось сформировать UID обработчика. Попробуйте еще раз");
Возврат СекретныйКлюч;
КонецЕсли;
СтруктураЗаписи = Новый Структура;
СтруктураЗаписи.Вставить("function", ФункцияОПИ);
СтруктураЗаписи.Вставить("id" , СекретныйКлюч);
СтруктураЗаписи.Вставить("method" , Метод);
СтруктураЗаписи.Вставить("active" , Истина);
ИмяТаблицыОбработчиков = КонстантноеЗначение("ТаблицаОбработчиков");
Результат = OPI_SQLite.ДобавитьЗаписи(ИмяТаблицыОбработчиков, МассивДанных, , Проект);
Результат = OPI_SQLite.ДобавитьЗаписи(ИмяТаблицыОбработчиков, СтруктураЗаписи, Ложь, Проект);
Если Результат["result"] Тогда
Результат = Новый Структура;
Результат.Вставить("result" , Истина);
Результат.Вставить("key" , СекретныйКлюч);
Результат.Вставить("url_example", "localhost:port/" + СекретныйКлюч);
КонецЕсли;
Возврат Результат;
КонецФункции
// Получить список обработчиков запросов
// Получает список обработчиков в проекте
//
// Параметры:
// Проект - Строка - Путь к файлу проекта - proj
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Список обработчиков
Функция ПолучитьСписокОбработчиковЗапросов(Знач Проект) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Проект);
Таблица = КонстантноеЗначение("ТаблицаОбработчиков");
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, , , , , Проект);
Возврат Результат;
КонецФункции
// Удалить обработчик запросов
// Удаляет обработчик запросов из базы
//
// Параметры:
// Проект - Строка - Путь к файлу проекта - proj
// КлючОбработчика - Строка - Ключ обработчика - handler
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Результат удаления
Функция УдалитьОбработчикЗапросов(Знач Проект, Знач КлючОбработчика) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(КлючОбработчика);
Таблица = КонстантноеЗначение("ТаблицаОбработчиков");
СтруктураФильтра = Новый Структура;
СтруктураФильтра.Вставить("field", "id");
СтруктураФильтра.Вставить("type" , "=");
СтруктураФильтра.Вставить("value", КлючОбработчика);
СтруктураФильтра.Вставить("raw" , Ложь);
Результат = OPI_SQLite.УдалитьЗаписи(Таблица, СтруктураФильтра, Проект);
Возврат Результат;
КонецФункции
// Запустить
// Запускает прокси сервер интеграций
//
@@ -102,7 +166,7 @@
// Порт - Число - Порт запуска сервера - port
// Проект - Строка - Путь к файлу проекта - proj
// Возвращаемое значение:
// Структура Из КлючИЗначение - результат остановки сервера
// Структура Из КлючИЗначение - Результат остановки сервера
Функция Запустить(Знач Порт, Знач Проект) Экспорт
OPI_ПреобразованиеТипов.ПолучитьЧисло(Порт);
@@ -228,6 +292,7 @@
Если Не Результат["result"] Тогда
УдалитьФайлы(Путь);
Возврат Результат;
КонецЕсли;
Возврат Результат;
@@ -237,10 +302,10 @@
Функция СоздатьТаблицуОбработчиков(Путь)
СтруктураТаблицы = Новый Структура();
СтруктураТаблицы.Вставить("id" , "INTEGER PRIMARY KEY");
СтруктураТаблицы.Вставить("name" , "TEXT");
СтруктураТаблицы.Вставить("secret", "TEXT");
СтруктураТаблицы.Вставить("method", "TEXT");
СтруктураТаблицы.Вставить("id" , "TEXT PRIMARY KEY NOT NULL UNIQUE");
СтруктураТаблицы.Вставить("function", "TEXT");
СтруктураТаблицы.Вставить("method" , "TEXT");
СтруктураТаблицы.Вставить("active" , "BOOLEAN");
ИмяТаблицыОбработчиков = КонстантноеЗначение("ТаблицаОбработчиков");
Результат = OPI_SQLite.СоздатьТаблицу(ИмяТаблицыОбработчиков, СтруктураТаблицы, Путь);
@@ -249,6 +314,45 @@
КонецФункции
Функция ПолучитьУникальныйКлючОбработчика(Путь)
СекретныйКлюч = ПолучитьUUID(9);
Таблица = КонстантноеЗначение("ТаблицаОбработчиков");
СтруктураФильтра = Новый Структура;
СтруктураФильтра.Вставить("field", "id");
СтруктураФильтра.Вставить("type" , "=");
СтруктураФильтра.Вставить("value", СекретныйКлюч);
СтруктураФильтра.Вставить("raw" , Ложь);
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, , СтруктураФильтра, , , Путь);
Если Не Результат["result"] Тогда
Возврат Результат;
КонецЕсли;
Пока Результат["data"].Количество() > 0 Цикл
СекретныйКлюч = ПолучитьUUID(9);
СтруктураФильтра["value"] = СекретныйКлюч;
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, , СтруктураФильтра, , , Путь);
Если Не Результат["result"] Тогда
Возврат Результат;
КонецЕсли;
КонецЦикла;
Возврат СекретныйКлюч;
КонецФункции
Функция ПолучитьUUID(Знач Длина)
Возврат Лев(СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", ""), Длина);
КонецФункции
#КонецОбласти
#Область Обработчики

View File

@@ -2149,9 +2149,9 @@
КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя);
Возврат Модуль;
КонецФункции

View File

@@ -53,7 +53,7 @@
// Путь - Строка - Путь к файлу проекта - path
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - результат создания
// Структура Из КлючИЗначение - Результат создания
Функция СоздатьПроект(Знач Путь) Экспорт
Возврат НормализоватьПроект(Путь);
@@ -65,16 +65,14 @@
//
// Параметры:
// Проект - Строка - Путь к файлу проекта - proj
// Имя - Строка - Имя нового обработчика - name
// СекретныйКлюч - Строка - Секретный ключ для URL обработчика - secret
// ФункцияОПИ - Строка - Имя функции Открытого пакета интеграций - func
// Метод - Строка - HTTP метод, который будет обрабатывать обработчик: GET, POST, MULTIPART - method
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - результат добавления обработчика
Функция ДобавитьОбработчикЗапросов(Знач Проект, Знач Имя, Знач СекретныйКлюч, Знач Метод = "GET") Экспорт
// Структура Из КлючИЗначение - Результат добавления обработчика
Функция ДобавитьОбработчикЗапросов(Знач Проект, Знач ФункцияОПИ, Знач Метод = "GET") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
OPI_ПреобразованиеТипов.ПолучитьСтроку(СекретныйКлюч);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ФункцияОПИ);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Метод);
Результат = ПроверитьСуществованиеПроекта(Проект);
@@ -85,16 +83,82 @@
Проект = Результат["path"];
КонецЕсли;
МассивДанных = Новый Массив;
МассивДанных.Добавить(Новый Структура("name,secret,method", Имя, СекретныйКлюч, Метод));
СекретныйКлюч = ПолучитьУникальныйКлючОбработчика(Проект);
Если ТипЗнч(СекретныйКлюч) = Тип("Структура") Тогда
СекретныйКлюч.Вставить("message", "Не удалось сформировать UID обработчика. Попробуйте еще раз");
Возврат СекретныйКлюч;
КонецЕсли;
СтруктураЗаписи = Новый Структура;
СтруктураЗаписи.Вставить("function", ФункцияОПИ);
СтруктураЗаписи.Вставить("id" , СекретныйКлюч);
СтруктураЗаписи.Вставить("method" , Метод);
СтруктураЗаписи.Вставить("active" , Истина);
ИмяТаблицыОбработчиков = КонстантноеЗначение("ТаблицаОбработчиков");
Результат = OPI_SQLite.ДобавитьЗаписи(ИмяТаблицыОбработчиков, МассивДанных, , Проект);
Результат = OPI_SQLite.ДобавитьЗаписи(ИмяТаблицыОбработчиков, СтруктураЗаписи, Ложь, Проект);
Если Результат["result"] Тогда
Результат = Новый Структура;
Результат.Вставить("result" , Истина);
Результат.Вставить("key" , СекретныйКлюч);
Результат.Вставить("url_example", "localhost:port/" + СекретныйКлюч);
КонецЕсли;
Возврат Результат;
КонецФункции
// Получить список обработчиков запросов
// Получает список обработчиков в проекте
//
// Параметры:
// Проект - Строка - Путь к файлу проекта - proj
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Список обработчиков
Функция ПолучитьСписокОбработчиковЗапросов(Знач Проект) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Проект);
Таблица = КонстантноеЗначение("ТаблицаОбработчиков");
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, , , , , Проект);
Возврат Результат;
КонецФункции
// Удалить обработчик запросов
// Удаляет обработчик запросов из проекта
//
// Параметры:
// Проект - Строка - Путь к файлу проекта - proj
// КлючОбработчика - Строка - Ключ обработчика - handler
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Результат удаления
Функция УдалитьОбработчикЗапросов(Знач Проект, Знач КлючОбработчика) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(КлючОбработчика);
Таблица = КонстантноеЗначение("ТаблицаОбработчиков");
СтруктураФильтра = Новый Структура;
СтруктураФильтра.Вставить("field", "id");
СтруктураФильтра.Вставить("type" , "=");
СтруктураФильтра.Вставить("value", КлючОбработчика);
СтруктураФильтра.Вставить("raw" , Ложь);
Результат = OPI_SQLite.УдалитьЗаписи(Таблица, СтруктураФильтра, Проект);
Возврат Результат;
КонецФункции
// Запустить
// Запускает прокси сервер интеграций
//
@@ -102,7 +166,7 @@
// Порт - Число - Порт запуска сервера - port
// Проект - Строка - Путь к файлу проекта - proj
// Возвращаемое значение:
// Структура Из КлючИЗначение - результат остановки сервера
// Структура Из КлючИЗначение - Результат остановки сервера
Функция Запустить(Знач Порт, Знач Проект) Экспорт
OPI_ПреобразованиеТипов.ПолучитьЧисло(Порт);
@@ -228,6 +292,7 @@
Если Не Результат["result"] Тогда
УдалитьФайлы(Путь);
Возврат Результат;
КонецЕсли;
Возврат Результат;
@@ -237,10 +302,10 @@
Функция СоздатьТаблицуОбработчиков(Путь)
СтруктураТаблицы = Новый Структура();
СтруктураТаблицы.Вставить("id" , "INTEGER PRIMARY KEY");
СтруктураТаблицы.Вставить("name" , "TEXT");
СтруктураТаблицы.Вставить("secret", "TEXT");
СтруктураТаблицы.Вставить("method", "TEXT");
СтруктураТаблицы.Вставить("id" , "TEXT PRIMARY KEY NOT NULL UNIQUE");
СтруктураТаблицы.Вставить("function", "TEXT");
СтруктураТаблицы.Вставить("method" , "TEXT");
СтруктураТаблицы.Вставить("active" , "BOOLEAN");
ИмяТаблицыОбработчиков = КонстантноеЗначение("ТаблицаОбработчиков");
Результат = OPI_SQLite.СоздатьТаблицу(ИмяТаблицыОбработчиков, СтруктураТаблицы, Путь);
@@ -249,6 +314,45 @@
КонецФункции
Функция ПолучитьУникальныйКлючОбработчика(Путь)
СекретныйКлюч = ПолучитьUUID(9);
Таблица = КонстантноеЗначение("ТаблицаОбработчиков");
СтруктураФильтра = Новый Структура;
СтруктураФильтра.Вставить("field", "id");
СтруктураФильтра.Вставить("type" , "=");
СтруктураФильтра.Вставить("value", СекретныйКлюч);
СтруктураФильтра.Вставить("raw" , Ложь);
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, , СтруктураФильтра, , , Путь);
Если Не Результат["result"] Тогда
Возврат Результат;
КонецЕсли;
Пока Результат["data"].Количество() > 0 Цикл
СекретныйКлюч = ПолучитьUUID(9);
СтруктураФильтра["value"] = СекретныйКлюч;
Результат = OPI_SQLite.ПолучитьЗаписи(Таблица, , СтруктураФильтра, , , Путь);
Если Не Результат["result"] Тогда
Возврат Результат;
КонецЕсли;
КонецЦикла;
Возврат СекретныйКлюч;
КонецФункции
Функция ПолучитьUUID(Знач Длина)
Возврат Лев(СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", ""), Длина);
КонецФункции
#КонецОбласти
#Область Обработчики