You've already forked OpenIntegrations
							
							
				mirror of
				https://github.com/Bayselonarrend/OpenIntegrations.git
				synced 2025-10-30 23:47:46 +02:00 
			
		
		
		
	PXY: Доработка модуля
This commit is contained in:
		
							
								
								
									
										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_ПреобразованиеТипов.ПолучитьСтроку(СекретныйКлюч); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user