mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-03-25 21:39:21 +02:00
PXY: Доработка модуля
This commit is contained in:
parent
b09569de12
commit
673fe1153c
12882
service/dictionaries/en.json
vendored
12882
service/dictionaries/en.json
vendored
File diff suppressed because it is too large
Load Diff
279
src/ru/OInt/core/Modules/OPI_ПроксиИнтеграций.os
vendored
Normal file
279
src/ru/OInt/core/Modules/OPI_ПроксиИнтеграций.os
vendored
Normal file
@ -0,0 +1,279 @@
|
||||
// OneScript: ./OInt/core/Modules/OPI_ПроксиИнтеграций.os
|
||||
// Lib: Методы прокси интеграций
|
||||
// CLI: proxy
|
||||
|
||||
// MIT License
|
||||
|
||||
// Copyright (c) 2023 Anton Tsitavets
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
// BSLLS:Typo-off
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
// BSLLS:NumberOfOptionalParams-off
|
||||
// BSLLS:UsingServiceTag-off
|
||||
// BSLLS:LineLength-off
|
||||
|
||||
//@skip-check module-structure-top-region
|
||||
//@skip-check module-structure-method-in-regions
|
||||
//@skip-check wrong-string-literal-content
|
||||
//@skip-check method-too-many-params
|
||||
//@skip-check constructor-function-return-section
|
||||
|
||||
// Раскомментировать, если выполняется OneScript
|
||||
#Использовать "../../tools"
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#Область НастройкиПрокси
|
||||
|
||||
// Создать проект
|
||||
// Создает файл проекта по выбранному пути
|
||||
//
|
||||
// Параметры:
|
||||
// Путь - Строка - Путь к файлу проекта - path
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура Из КлючИЗначение - результат создания
|
||||
Функция СоздатьПроект(Знач Путь) Экспорт
|
||||
|
||||
Возврат НормализоватьПроект(Путь);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Добавить обработчик запроса
|
||||
// Добавляет новый обработчик в проект
|
||||
//
|
||||
// Параметры:
|
||||
// Проект - Строка - Путь к файлу проекта - proj
|
||||
// Имя - Строка - Имя нового обработчика - name
|
||||
// СекретныйКлюч - Строка - Секретный ключ для URL обработчика - secret
|
||||
// Метод - Строка - HTTP метод, который будет обрабатывать обработчик - method
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура Из КлючИЗначение - результат добавления обработчика
|
||||
Функция ДобавитьОбработчикЗапроса(Знач Проект, Знач Имя, Знач СекретныйКлюч, Знач Метод = "GET") Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(СекретныйКлюч);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Метод);
|
||||
|
||||
Результат = ПроверитьСуществованиеПроекта(Проект);
|
||||
|
||||
Если Не Результат["result"] Тогда
|
||||
Возврат Результат;
|
||||
Иначе
|
||||
Проект = Результат["path"];
|
||||
КонецЕсли;
|
||||
|
||||
МассивДанных = Новый Массив;
|
||||
МассивДанных.Добавить(Новый Структура("name,secret,method", Имя, СекретныйКлюч, Метод));
|
||||
|
||||
ИмяТаблицыОбработчиков = КонстантноеЗначение("ТаблицаОбработчиков");
|
||||
Результат = OPI_SQLite.ДобавитьЗаписи(ИмяТаблицыОбработчиков, МассивДанных, , Проект);
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Запустить
|
||||
// Запускает прокси сервер интеграций
|
||||
//
|
||||
// Параметры:
|
||||
// Порт - Число - Порт запуска сервера - port
|
||||
// Проект - Строка - Путь к файлу проекта - proj
|
||||
// Возвращаемое значение:
|
||||
// Структура Из КлючИЗначение - результат остановки сервера
|
||||
Функция Запустить(Знач Порт, Знач Проект) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьЧисло(Порт);
|
||||
|
||||
ТипСервер = Тип("ВебСервер");
|
||||
|
||||
ПараметрыСервера = Новый Массив(1);
|
||||
ПараметрыСервера[0] = Порт;
|
||||
|
||||
ВебСервер = Новый(ТипСервер, ПараметрыСервера);
|
||||
|
||||
ВебСервер.ДобавитьОбработчикЗапросов(ЭтотОбъект, "ОсновнаяОбработка");
|
||||
ВебСервер.Запустить();
|
||||
|
||||
Возврат СформироватьОтвет(Истина, "Остановлен");
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#Область Проект
|
||||
|
||||
Функция ПроверитьСуществованиеПроекта(Путь)
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||
|
||||
ФайлПроекта = Новый Файл(Путь);
|
||||
Текст = "Файл проекта существует!";
|
||||
Результат = Истина;
|
||||
|
||||
Если Не ФайлПроекта.Существует() Тогда
|
||||
Текст = "Файл проекта по указанному пути не найден!";
|
||||
Результат = Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если ФайлПроекта.ЭтоКаталог() Тогда
|
||||
Текст = "Передан путь к каталогу, а не файл проекта!";
|
||||
Результат = Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураОтвета = СформироватьОтвет(Результат, Текст, ФайлПроекта.ПолноеИмя);
|
||||
|
||||
Возврат СтруктураОтвета;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция НормализоватьПроект(Путь)
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
|
||||
|
||||
ФайлБазы = Новый Файл(Путь);
|
||||
|
||||
Если ФайлБазы.ЭтоКаталог() Тогда
|
||||
|
||||
Счетчик = 1;
|
||||
|
||||
Пока ФайлБазы.Существует() Цикл
|
||||
|
||||
Путь = Путь + "/new_project_" + Строка(Счетчик) + ".oint";
|
||||
ФайлБазы = Новый Файл(Путь);
|
||||
|
||||
Счетчик = Счетчик + 1;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ПолныйПуть = ФайлБазы.ПолноеИмя;
|
||||
|
||||
Если Не ФайлБазы.Существует() Тогда
|
||||
|
||||
Результат = СоздатьНовыйПроект(ПолныйПуть);
|
||||
|
||||
Если Результат["result"] Тогда
|
||||
Текст = "Файл проекта успешно создан!";
|
||||
Ответ = СформироватьОтвет(Истина, Текст, ПолныйПуть);
|
||||
Иначе
|
||||
Ответ = Результат;
|
||||
КонецЕсли;
|
||||
|
||||
Иначе
|
||||
|
||||
Текст = "Файл проекта по заданному пути уже существует!";
|
||||
Ответ = СформироватьОтвет(Ложь, Текст, ПолныйПуть);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СформироватьОтвет(Знач Результат, Знач Текст, Знач Путь = "")
|
||||
|
||||
Ответ = Новый Структура("result,message", Ложь, Текст);
|
||||
|
||||
Если ЗначениеЗаполнено(Путь) Тогда
|
||||
Ответ.Вставить("path", Путь);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция КонстантноеЗначение(Знач Ключ)
|
||||
|
||||
Если Ключ = "ТаблицаОбработчиков" Тогда Возврат "handlers"
|
||||
Иначе Возврат "" КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьНовыйПроект(Путь)
|
||||
|
||||
ПустойФайл = ПолучитьДвоичныеДанныеИзСтроки("");
|
||||
ПустойФайл.Записать(Путь);
|
||||
|
||||
Результат = СоздатьТаблицуОбработчиков(Путь);
|
||||
|
||||
Если Не Результат["reuslt"] Тогда
|
||||
УдалитьФайлы(Путь);
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьТаблицуОбработчиков(Путь)
|
||||
|
||||
СтруктураТаблицы = Новый Структура();
|
||||
СтруктураТаблицы.Вставить("id" , "INTEGER PRIMARY KEY");
|
||||
СтруктураТаблицы.Вставить("name" , "TEXT");
|
||||
СтруктураТаблицы.Вставить("secret", "TEXT");
|
||||
СтруктураТаблицы.Вставить("method", "TEXT");
|
||||
|
||||
ИмяТаблицыОбработчиков = КонстантноеЗначение("ТаблицаОбработчиков");
|
||||
Результат = OPI_SQLite.СоздатьТаблицу(ИмяТаблицыОбработчиков, СтруктураТаблицы, Путь);
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Обработчики
|
||||
|
||||
Процедура ОсновнаяОбработка(Контекст, СледующийОбработчик) Экспорт
|
||||
|
||||
Попытка
|
||||
ОбработатьЗапрос(Контекст);
|
||||
Исключение
|
||||
|
||||
Ошибка = ОписаниеОшибки();
|
||||
|
||||
Контекст.Ответ.КодСостояния = 500;
|
||||
Контекст.Ответ.Записать(Ошибка);
|
||||
|
||||
КонецПопытки
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработатьЗапрос(Контекст)
|
||||
|
||||
// Путь = Контекст.Запрос.Путь;
|
||||
|
||||
Контекст.Ответ.КодСостояния = 200;
|
||||
Контекст.Ответ.Записать("Hello world!");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
1
src/ru/OInt/lib.config
vendored
1
src/ru/OInt/lib.config
vendored
@ -28,4 +28,5 @@
|
||||
<module name="OPI_Криптография" file="tools/Modules/internal/Modules/OPI_Криптография.os"/>
|
||||
<module name="OPI_ПолучениеДанныхТестов" file="tools/Modules/OPI_ПолучениеДанныхТестов.os"/>
|
||||
<module name="OPI_ПреобразованиеТипов" file="tools/Modules/OPI_ПреобразованиеТипов.os"/>
|
||||
<module name="OPI_ПроксиИнтеграций" file="core/Modules/OPI_ПроксиИнтеграций.os"/>
|
||||
</package-def>
|
||||
|
@ -2138,9 +2138,9 @@
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьОбщийМодуль(Знач Имя)
|
||||
|
||||
|
||||
Модуль = Вычислить(Имя);
|
||||
|
||||
|
||||
Возврат Модуль;
|
||||
КонецФункции
|
||||
|
||||
|
@ -60,18 +60,18 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Добавить обработчик запроса
|
||||
// Добавить обработчик запросов
|
||||
// Добавляет новый обработчик в проект
|
||||
//
|
||||
// Параметры:
|
||||
// Проект - Строка - Путь к файлу проекта - proj
|
||||
// Имя - Строка - Имя нового обработчика - name
|
||||
// СекретныйКлюч - Строка - Секретный ключ для URL обработчика - secret
|
||||
// Метод - Строка - HTTP метод, который будет обрабатывать обработчик - method
|
||||
// Проект - Строка - Путь к файлу проекта - proj
|
||||
// Имя - Строка - Имя нового обработчика - name
|
||||
// СекретныйКлюч - Строка - Секретный ключ для URL обработчика - secret
|
||||
// Метод - Строка - HTTP метод, который будет обрабатывать обработчик: GET, POST, MULTIPART - method
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура Из КлючИЗначение - результат добавления обработчика
|
||||
Функция ДобавитьОбработчикЗапроса(Знач Проект, Знач Имя, Знач СекретныйКлюч, Знач Метод = "GET") Экспорт
|
||||
Функция ДобавитьОбработчикЗапросов(Знач Проект, Знач Имя, Знач СекретныйКлюч, Знач Метод = "GET") Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(СекретныйКлюч);
|
||||
|
Loading…
x
Reference in New Issue
Block a user