From 1c4d9e1e7d6ab14b204e529a3aef5c7077a7f832 Mon Sep 17 00:00:00 2001 From: Sergey Batanov Date: Tue, 4 Jun 2024 22:28:42 +0300 Subject: [PATCH] =?UTF-8?q?#216=20=D0=9D=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B0=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BA=20=D1=85=D0=B0=D0=B1=D1=83.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлены параметры передачи заголовка авторизации и дополнительных заголовков при получении пакетов с сервера. --- ...20\260\320\275\320\264\320\260Opm_Push.os" | 11 +++- ...266\320\265\320\275\320\270\321\217Opm.os" | 45 ++++++++------ ...20\272\320\265\321\202\320\276\320\262.os" | 10 +-- ...20\272\320\265\321\202\320\276\320\262.os" | 61 ++++++++++++++++--- ...200\320\276\320\271\320\272\320\270Opm.os" | 31 ++-------- ...20\272\320\265\321\202\320\276\320\262.os" | 59 ++++++++++++++++++ 6 files changed, 153 insertions(+), 64 deletions(-) create mode 100644 "src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\262\320\265\321\200\321\213\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Push.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Push.os" index feda711..41b0ddb 100644 --- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Push.os" +++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260Opm_Push.os" @@ -171,7 +171,7 @@ Ответ = Соединение.ОтправитьДляОбработки(Запрос); ТелоОтвета = Ответ.ПолучитьТелоКакСтроку(); - Если Ответ.КодСостояния <> 200 Тогда + Если Не КодУспешнойОтправки(Ответ.КодСостояния) Тогда ВызватьИсключение ТелоОтвета; КонецЕсли; @@ -179,6 +179,15 @@ КонецПроцедуры +Функция КодУспешнойОтправки(Знач КодСостояния) + + Возврат КодСостояния = 200 // OK + Или КодСостояния = 201 // CREATED + Или КодСостояния = 202 // ACCEPTED + ; + +КонецФункции + Лог = Логирование.ПолучитьЛог("oscript.app.opm"); ДопустимыеИменаКаналов = Новый Структура; diff --git "a/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217Opm.os" "b/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217Opm.os" index 1a441ad..4d6e0ca 100644 --- "a/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217Opm.os" +++ "b/src/cmd/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217Opm.os" @@ -18,7 +18,7 @@ Если Не НастройкиПроксиЕсть = Неопределено Тогда - НастройкиПрокси = НастройкиOpmИзФайлов.Прокси; + НастройкиПрокси = НастройкиКакСтруктура(НастройкиOpmИзФайлов.Прокси); Сервер = ПолучитьЗначение(НастройкиПрокси, "Сервер", ""); Порт = Число(ПолучитьЗначение(НастройкиПрокси, "Порт", 80)); @@ -57,21 +57,16 @@ Индекс = 1; Для каждого ТекущийСерверПакетов Из СервераПакетов Цикл - - Сервер = ПолучитьЗначение(ТекущийСерверПакетов, "Сервер", ""); - Порт = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Порт", 80)); - ПутьНаСервере = ПолучитьЗначение(ТекущийСерверПакетов, "ПутьНаСервере", "/"); - Имя = ПолучитьЗначение(ТекущийСерверПакетов, "Имя", СтрШаблон("ДопСервер_%1", Индекс)); - РесурсПубликацииПакетов = ПолучитьЗначение(ТекущийСерверПакетов, "РесурсПубликацииПакетов", "/"); - Приоритет = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Приоритет", 0)); - - Если ПустаяСтрока(Сервер) Тогда - Лог.Отладка("Для сервера <%1> не задан адрес", Индекс); + + Попытка + СерверПакетов = СерверыПакетов.ИзНастроек(НастройкиКакСтруктура(ТекущийСерверПакетов), Индекс); + Исключение + Лог.Отладка(ОписаниеОшибки()); Продолжить; - КонецЕсли; - - НастройкиOpm.ДобавитьСерверПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет); - Индекс = Индекс +1; + КонецПопытки; + + НастройкиOpm.ДобавитьСерверПакетов(СерверПакетов); + Индекс = Индекс + 1; КонецЦикла; @@ -176,7 +171,7 @@ Для каждого НастройкаСервера Из ТекущиеНастройки.СервераПакетов Цикл - МассивСерверовПакетов.Добавить(НастройкаСервера); + МассивСерверовПакетов.Добавить(НастройкаСервера.НастройкаДляВыгрузки()); КонецЦикла; @@ -222,13 +217,23 @@ ЧтениеJSON = Новый ЧтениеJSON(); ЧтениеJSON.УстановитьСтроку(Текст); - Настройки = ПрочитатьJSON(ЧтениеJSON, Ложь); + НастройкиКакСоответствие = ПрочитатьJSON(ЧтениеJSON, Истина); ЧтениеJSON.Закрыть(); - Возврат Настройки; + Возврат НастройкиКакСтруктура(НастройкиКакСоответствие); КонецФункции +Функция НастройкиКакСтруктура(Знач НастройкиКакСоответствие) + + Настройки = Новый Структура; + Для Каждого мЭлемент Из НастройкиКакСоответствие Цикл + Настройки.Вставить(мЭлемент.Ключ, мЭлемент.Значение); + КонецЦикла; + + Возврат Настройки; +КонецФункции + Функция ПрочитатьФайл(Знач Путь) Чтение = Новый ЧтениеТекста(Путь); @@ -256,8 +261,10 @@ Функция СформироватьТекстНастроек(Знач Настройки) + НастройкиЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Unix, " "); + Json = Новый ЗаписьJSON(); - Json.УстановитьСтроку(); + Json.УстановитьСтроку(НастройкиЗаписи); ЗаписатьJSON(Json, Настройки); diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\276\320\273\321\203\321\207\320\265\320\275\320\270\321\217\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\276\320\273\321\203\321\207\320\265\320\275\320\270\321\217\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" index 3f83964..13e053c 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\276\320\273\321\203\321\207\320\265\320\275\320\270\321\217\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\276\320\273\321\203\321\207\320\265\320\275\320\270\321\217\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" @@ -229,12 +229,7 @@ Функция СоздатьСерверПакетовПоНастройке(Знач НастройкаСервера) - Возврат Новый СерверПакетов(НастройкаСервера.Имя, - НастройкаСервера.Сервер, - НастройкаСервера.ПутьНаСервере, - НастройкаСервера.РесурсПубликацииПакетов, - НастройкаСервера.Порт, - НастройкаСервера.Приоритет) + Возврат НастройкаСервера; КонецФункции @@ -257,8 +252,7 @@ Процедура ОбновитьИндексыКешейПакетов() Если Не ЗначениеЗаполнено(ИндексКешаПакетов) - Или Не ЗначениеЗаполнено(ИндексДоступныхПакетов)Тогда - + Или Не ЗначениеЗаполнено(ИндексДоступныхПакетов) Тогда ОбновитьИндексКешаПакетов(); ОбновитьИндексДоступныхПакетов(); КонецЕсли; diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\262\320\265\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\262\320\265\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" index a940782..e52b8db 100644 --- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\262\320\265\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\262\320\265\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" @@ -1,16 +1,20 @@ Перем Лог; -Перем Имя; -Перем Сервер; -Перем ПутьНаСервере; -Перем Порт; -Перем Приоритет; +Перем Имя Экспорт; +Перем Сервер Экспорт; +Перем ПутьНаСервере Экспорт; +Перем Порт Экспорт; +Перем Приоритет Экспорт; Перем Соединение; -Перем РесурсПубликацииПакетов; +Перем РесурсПубликацииПакетов Экспорт; +Перем Авторизация Экспорт; +Перем ДополнительныеЗаголовки Экспорт; Перем ПакетыХаба; -Процедура ПриСозданииОбъекта(Знач ИмяСервера, Знач АдресСервер, Знач ВходящийПутьНаСервере = "", Знач ВходящийРесурсПубликацииПакетов = "", Знач ВходящийПорт = 80, Знач ВходящийПриоритет = 0) +Процедура ПриСозданииОбъекта(Знач ИмяСервера, Знач АдресСервер, Знач ВходящийПутьНаСервере = "", + Знач ВходящийРесурсПубликацииПакетов = "", Знач ВходящийПорт = 80, Знач ВходящийПриоритет = 0, + Знач ВходящаяАвторизация = Неопределено, Знач Заголовки = Неопределено) Имя = ИмяСервера; Сервер = АдресСервер; @@ -18,6 +22,8 @@ Порт = ВходящийПорт; Приоритет = ВходящийПриоритет; РесурсПубликацииПакетов = ВходящийРесурсПубликацииПакетов; + Авторизация = ВходящаяАвторизация; + ДополнительныеЗаголовки = Заголовки; КонецПроцедуры @@ -37,11 +43,12 @@ Порт = ?(Порт = Неопределено, 80, Порт); Настройки = НастройкиOpm.ПолучитьНастройки(); + Таймаут = 60; Если Настройки.ИспользоватьПрокси Тогда НастройкиПрокси = НастройкиOpm.ПолучитьИнтернетПрокси(); - Соединение = Новый HTTPСоединение(Сервер, Порт, , , НастройкиПрокси); + Соединение = Новый HTTPСоединение(Сервер, Порт, , , НастройкиПрокси, Таймаут); Иначе - Соединение = Новый HTTPСоединение(Сервер, Порт); + Соединение = Новый HTTPСоединение(Сервер, Порт, , , , Таймаут); КонецЕсли; Возврат Соединение; @@ -55,6 +62,7 @@ Соединение = ИнициализироватьСоединение(); Ресурс = ПутьНаСервере + ИмяРесурса; Запрос = Новый HTTPЗапрос(Ресурс); + ДобавитьЗаголовки(Запрос); Попытка @@ -132,4 +140,39 @@ КонецФункции +Процедура ДобавитьЗаголовки(Знач Запрос) + + Если ЗначениеЗаполнено(ДополнительныеЗаголовки) Тогда + Для Каждого мЗаголовок Из ДополнительныеЗаголовки Цикл + ДобавитьЗаголовокКЗапросу(Запрос, мЗаголовок.Ключ, мЗаголовок.Значение); + КонецЦикла; + КонецЕсли; + + Если ЗначениеЗаполнено(Авторизация) Тогда + ДобавитьЗаголовокКЗапросу(Запрос, "Authorization", Авторизация); + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьЗаголовокКЗапросу(Знач Запрос, Знач Заголовок, Знач Значение) + Запрос.Заголовки.Вставить(Заголовок, Значение); +КонецПроцедуры + +Функция НастройкаДляВыгрузки() Экспорт + + Результат = Новый Структура; + Результат.Вставить("Имя", Имя); + Результат.Вставить("Сервер", Сервер); + Результат.Вставить("ПутьНаСервере", ПутьНаСервере); + Результат.Вставить("РесурсПубликацииПакетов", РесурсПубликацииПакетов); + Результат.Вставить("Порт", Порт); + Результат.Вставить("Авторизация", Авторизация); + Результат.Вставить("Заголовки", ДополнительныеЗаголовки); + Результат.Вставить("Приоритет", Приоритет); + + Возврат Результат; + +КонецФункции // + Лог = Логирование.ПолучитьЛог("oscript.app.opm"); +ДополнительныеЗаголовки = Новый Соответствие; \ No newline at end of file diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270Opm.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270Opm.os" index 40f745c..da71e7c 100644 --- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270Opm.os" +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270Opm.os" @@ -85,31 +85,8 @@ КонецПроцедуры -Функция НастройкиСервераПакетов(Знач Имя, Знач Сервер, Знач ПутьНаСервере, Знач РесурсПубликацииПакетов, Знач Порт, Знач Приоритет) - - Результат = Новый Структура; - Результат.Вставить("Имя", Имя); - Результат.Вставить("Сервер", Сервер); - Результат.Вставить("ПутьНаСервере", ПутьНаСервере); - Результат.Вставить("РесурсПубликацииПакетов", РесурсПубликацииПакетов); - Результат.Вставить("Порт", Порт); - Результат.Вставить("Приоритет", Приоритет); - - Возврат Результат; - -КонецФункции // - -Процедура ДобавитьСерверПакетов(Знач Имя, - Знач Сервер, - Знач ПутьНаСервере = "", - Знач РесурсПубликацииПакетов = "", - Знач Порт = 80, - Знач Приоритет = Неопределено) Экспорт - - мНастройки.СервераПакетов.Добавить(НастройкиСервераПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет)); - Лог.Отладка("Добавлен сервер <%1>, Адрес <%2>, ПутьНаСервере <%3>, РесурсПубликацииПакетов <%4>, Порт <%5>, Приоритет <%6>", - Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет); - +Процедура ДобавитьСерверПакетов(Знач СерверПакетов) Экспорт + мНастройки.СервераПакетов.Добавить(СерверПакетов); КонецПроцедуры @@ -121,8 +98,8 @@ Процедура ИнициализацияСерверовПакетов() // Сервера пакетов по умолчанию - ДобавитьСерверПакетов("ОсновнойСерверПакетов", КонстантыOpm.СерверУдаленногоХранилища, КонстантыOpm.ПутьВХранилище, КонстантыOpm.РесурсПубликацииПакетов, 80, 0); - ДобавитьСерверПакетов("ЗапаснойСерверПакетов", КонстантыOpm.СерверЗапасногоХранилища, КонстантыOpm.ПутьВЗапасномХранилище, Неопределено, 80, 1); + ДобавитьСерверПакетов(СерверыПакетов.ОсновнойСервер()); + ДобавитьСерверПакетов(СерверыПакетов.ЗапаснойСервер()); КонецПроцедуры Процедура Инициализация() diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\262\320\265\321\200\321\213\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\262\320\265\321\200\321\213\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" new file mode 100644 index 0000000..45e93c9 --- /dev/null +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\262\320\265\321\200\321\213\320\237\320\260\320\272\320\265\321\202\320\276\320\262.os" @@ -0,0 +1,59 @@ + +Функция ИзНастроек(Знач ТекущийСерверПакетов, Знач Индекс) Экспорт + + Сервер = ПолучитьЗначение(ТекущийСерверПакетов, "Сервер", ""); + Порт = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Порт", 80)); + ПутьНаСервере = ПолучитьЗначение(ТекущийСерверПакетов, "ПутьНаСервере", "/"); + Имя = ПолучитьЗначение(ТекущийСерверПакетов, "Имя", СтрШаблон("ДопСервер_%1", Индекс)); + РесурсПубликацииПакетов = ПолучитьЗначение(ТекущийСерверПакетов, "РесурсПубликацииПакетов", "/"); + Приоритет = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Приоритет", 0)); + Авторизация = ПолучитьЗначение(ТекущийСерверПакетов, "Авторизация", ""); + ДополнительныеЗаголовки = ПолучитьЗначение(ТекущийСерверПакетов, "Заголовки", Новый Соответствие); + + Если ПустаяСтрока(Сервер) Тогда + ВызватьИсключение СтрШаблон("Для сервера <%1> не задан адрес", Индекс); + КонецЕсли; + + СерверПакетов = Новый СерверПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, + Порт, Приоритет, Авторизация, ДополнительныеЗаголовки + ); + + Возврат СерверПакетов; + +КонецФункции + +Функция ОсновнойСервер() Экспорт + Возврат Новый СерверПакетов("ОсновнойСерверПакетов", + КонстантыOpm.СерверУдаленногоХранилища, + КонстантыOpm.ПутьВХранилище, + КонстантыOpm.РесурсПубликацииПакетов, + 80, + 0 + ); +КонецФункции + +Функция ЗапаснойСервер() Экспорт + Возврат Новый СерверПакетов("ЗапаснойСерверПакетов", + КонстантыOpm.СерверЗапасногоХранилища, + КонстантыOpm.ПутьВЗапасномХранилище, + Неопределено, + 80, + 1 + ); +КонецФункции + +Функция ПолучитьЗначение(Знач ВходящаяСтруктура, Знач Ключ, Знач ЗначениеПоУмолчанию) + + Перем ЗначениеКлюча; + + Если Не ВходящаяСтруктура.Свойство(Ключ, ЗначениеКлюча) Тогда + Возврат ЗначениеПоУмолчанию; + КонецЕсли; + + Если ЗначениеКлюча = Неопределено Тогда + Возврат ЗначениеПоУмолчанию; + КонецЕсли; + + Возврат ЗначениеКлюча; + +КонецФункции