Skip to content

Commit

Permalink
#216 Настройка запросов к хабу.
Browse files Browse the repository at this point in the history
Добавлены параметры передачи заголовка авторизации и дополнительных заголовков при получении пакетов с сервера.
  • Loading branch information
dmpas committed Jun 4, 2024
1 parent 727880a commit 1c4d9e1
Show file tree
Hide file tree
Showing 6 changed files with 153 additions and 64 deletions.
11 changes: 10 additions & 1 deletion src/cmd/Классы/КомандаOpm_Push.os
Original file line number Diff line number Diff line change
Expand Up @@ -171,14 +171,23 @@
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();

Если Ответ.КодСостояния <> 200 Тогда
Если Не КодУспешнойОтправки(Ответ.КодСостояния) Тогда
ВызватьИсключение ТелоОтвета;
КонецЕсли;

Лог.Информация(ТелоОтвета);

КонецПроцедуры

Функция КодУспешнойОтправки(Знач КодСостояния)

Возврат КодСостояния = 200 // OK
Или КодСостояния = 201 // CREATED
Или КодСостояния = 202 // ACCEPTED
;

КонецФункции

Лог = Логирование.ПолучитьЛог("oscript.app.opm");

ДопустимыеИменаКаналов = Новый Структура;
Expand Down
45 changes: 26 additions & 19 deletions src/cmd/Модули/ПараметрыПриложенияOpm.os
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

Если Не НастройкиПроксиЕсть = Неопределено Тогда

НастройкиПрокси = НастройкиOpmИзФайлов.Прокси;
НастройкиПрокси = НастройкиКакСтруктура(НастройкиOpmИзФайлов.Прокси);

Сервер = ПолучитьЗначение(НастройкиПрокси, "Сервер", "");
Порт = Число(ПолучитьЗначение(НастройкиПрокси, "Порт", 80));
Expand Down Expand Up @@ -57,21 +57,16 @@
Индекс = 1;

Для каждого ТекущийСерверПакетов Из СервераПакетов Цикл

Сервер = ПолучитьЗначение(ТекущийСерверПакетов, "Сервер", "");
Порт = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Порт", 80));
ПутьНаСервере = ПолучитьЗначение(ТекущийСерверПакетов, "ПутьНаСервере", "/");
Имя = ПолучитьЗначение(ТекущийСерверПакетов, "Имя", СтрШаблон("ДопСервер_%1", Индекс));
РесурсПубликацииПакетов = ПолучитьЗначение(ТекущийСерверПакетов, "РесурсПубликацииПакетов", "/");
Приоритет = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Приоритет", 0));

Если ПустаяСтрока(Сервер) Тогда
Лог.Отладка("Для сервера <%1> не задан адрес", Индекс);

Попытка
СерверПакетов = СерверыПакетов.ИзНастроек(НастройкиКакСтруктура(ТекущийСерверПакетов), Индекс);
Исключение
Лог.Отладка(ОписаниеОшибки());
Продолжить;
КонецЕсли;

НастройкиOpm.ДобавитьСерверПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет);
Индекс = Индекс +1;
КонецПопытки;
НастройкиOpm.ДобавитьСерверПакетов(СерверПакетов);
Индекс = Индекс + 1;

КонецЦикла;

Expand Down Expand Up @@ -176,7 +171,7 @@

Для каждого НастройкаСервера Из ТекущиеНастройки.СервераПакетов Цикл

МассивСерверовПакетов.Добавить(НастройкаСервера);
МассивСерверовПакетов.Добавить(НастройкаСервера.НастройкаДляВыгрузки());

КонецЦикла;

Expand Down Expand Up @@ -222,13 +217,23 @@

ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(Текст);
Настройки = ПрочитатьJSON(ЧтениеJSON, Ложь);
НастройкиКакСоответствие = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();

Возврат Настройки;
Возврат НастройкиКакСтруктура(НастройкиКакСоответствие);

КонецФункции

Функция НастройкиКакСтруктура(Знач НастройкиКакСоответствие)

Настройки = Новый Структура;
Для Каждого мЭлемент Из НастройкиКакСоответствие Цикл
Настройки.Вставить(мЭлемент.Ключ, мЭлемент.Значение);
КонецЦикла;

Возврат Настройки;
КонецФункции

Функция ПрочитатьФайл(Знач Путь)

Чтение = Новый ЧтениеТекста(Путь);
Expand Down Expand Up @@ -256,8 +261,10 @@

Функция СформироватьТекстНастроек(Знач Настройки)

НастройкиЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Unix, " ");

Json = Новый ЗаписьJSON();
Json.УстановитьСтроку();
Json.УстановитьСтроку(НастройкиЗаписи);

ЗаписатьJSON(Json, Настройки);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -229,12 +229,7 @@

Функция СоздатьСерверПакетовПоНастройке(Знач НастройкаСервера)

Возврат Новый СерверПакетов(НастройкаСервера.Имя,
НастройкаСервера.Сервер,
НастройкаСервера.ПутьНаСервере,
НастройкаСервера.РесурсПубликацииПакетов,
НастройкаСервера.Порт,
НастройкаСервера.Приоритет)
Возврат НастройкаСервера;

КонецФункции

Expand All @@ -257,8 +252,7 @@

Процедура ОбновитьИндексыКешейПакетов()
Если Не ЗначениеЗаполнено(ИндексКешаПакетов)
Или Не ЗначениеЗаполнено(ИндексДоступныхПакетов)Тогда

Или Не ЗначениеЗаполнено(ИндексДоступныхПакетов) Тогда
ОбновитьИндексКешаПакетов();
ОбновитьИндексДоступныхПакетов();
КонецЕсли;
Expand Down
61 changes: 52 additions & 9 deletions src/core/Классы/СерверПакетов.os
Original file line number Diff line number Diff line change
@@ -1,23 +1,29 @@
Перем Лог;

Перем Имя;
Перем Сервер;
Перем ПутьНаСервере;
Перем Порт;
Перем Приоритет;
Перем Имя Экспорт;
Перем Сервер Экспорт;
Перем ПутьНаСервере Экспорт;
Перем Порт Экспорт;
Перем Приоритет Экспорт;
Перем Соединение;
Перем РесурсПубликацииПакетов;
Перем РесурсПубликацииПакетов Экспорт;
Перем Авторизация Экспорт;
Перем ДополнительныеЗаголовки Экспорт;

Перем ПакетыХаба;

Процедура ПриСозданииОбъекта(Знач ИмяСервера, Знач АдресСервер, Знач ВходящийПутьНаСервере = "", Знач ВходящийРесурсПубликацииПакетов = "", Знач ВходящийПорт = 80, Знач ВходящийПриоритет = 0)
Процедура ПриСозданииОбъекта(Знач ИмяСервера, Знач АдресСервер, Знач ВходящийПутьНаСервере = "",
Знач ВходящийРесурсПубликацииПакетов = "", Знач ВходящийПорт = 80, Знач ВходящийПриоритет = 0,
Знач ВходящаяАвторизация = Неопределено, Знач Заголовки = Неопределено)

Имя = ИмяСервера;
Сервер = АдресСервер;
ПутьНаСервере = ВходящийПутьНаСервере;
Порт = ВходящийПорт;
Приоритет = ВходящийПриоритет;
РесурсПубликацииПакетов = ВходящийРесурсПубликацииПакетов;
Авторизация = ВходящаяАвторизация;
ДополнительныеЗаголовки = Заголовки;

КонецПроцедуры

Expand All @@ -37,11 +43,12 @@

Порт = ?(Порт = Неопределено, 80, Порт);
Настройки = НастройкиOpm.ПолучитьНастройки();
Таймаут = 60;
Если Настройки.ИспользоватьПрокси Тогда
НастройкиПрокси = НастройкиOpm.ПолучитьИнтернетПрокси();
Соединение = Новый HTTPСоединение(Сервер, Порт, , , НастройкиПрокси);
Соединение = Новый HTTPСоединение(Сервер, Порт, , , НастройкиПрокси, Таймаут);
Иначе
Соединение = Новый HTTPСоединение(Сервер, Порт);
Соединение = Новый HTTPСоединение(Сервер, Порт, , , , Таймаут);
КонецЕсли;

Возврат Соединение;
Expand All @@ -55,6 +62,7 @@
Соединение = ИнициализироватьСоединение();
Ресурс = ПутьНаСервере + ИмяРесурса;
Запрос = Новый HTTPЗапрос(Ресурс);
ДобавитьЗаголовки(Запрос);

Попытка

Expand Down Expand Up @@ -132,4 +140,39 @@

КонецФункции

Процедура ДобавитьЗаголовки(Знач Запрос)

Если ЗначениеЗаполнено(ДополнительныеЗаголовки) Тогда
Для Каждого мЗаголовок Из ДополнительныеЗаголовки Цикл
ДобавитьЗаголовокКЗапросу(Запрос, мЗаголовок.Ключ, мЗаголовок.Значение);
КонецЦикла;
КонецЕсли;

Если ЗначениеЗаполнено(Авторизация) Тогда
ДобавитьЗаголовокКЗапросу(Запрос, "Authorization", Авторизация);
КонецЕсли;

КонецПроцедуры

Процедура ДобавитьЗаголовокКЗапросу(Знач Запрос, Знач Заголовок, Знач Значение)
Запрос.Заголовки.Вставить(Заголовок, Значение);
КонецПроцедуры

Функция НастройкаДляВыгрузки() Экспорт

Результат = Новый Структура;
Результат.Вставить("Имя", Имя);
Результат.Вставить("Сервер", Сервер);
Результат.Вставить("ПутьНаСервере", ПутьНаСервере);
Результат.Вставить("РесурсПубликацииПакетов", РесурсПубликацииПакетов);
Результат.Вставить("Порт", Порт);
Результат.Вставить("Авторизация", Авторизация);
Результат.Вставить("Заголовки", ДополнительныеЗаголовки);
Результат.Вставить("Приоритет", Приоритет);

Возврат Результат;

КонецФункции //

Лог = Логирование.ПолучитьЛог("oscript.app.opm");
ДополнительныеЗаголовки = Новый Соответствие;
31 changes: 4 additions & 27 deletions src/core/Модули/НастройкиOpm.os
Original file line number Diff line number Diff line change
Expand Up @@ -85,31 +85,8 @@

КонецПроцедуры

Функция НастройкиСервераПакетов(Знач Имя, Знач Сервер, Знач ПутьНаСервере, Знач РесурсПубликацииПакетов, Знач Порт, Знач Приоритет)

Результат = Новый Структура;
Результат.Вставить("Имя", Имя);
Результат.Вставить("Сервер", Сервер);
Результат.Вставить("ПутьНаСервере", ПутьНаСервере);
Результат.Вставить("РесурсПубликацииПакетов", РесурсПубликацииПакетов);
Результат.Вставить("Порт", Порт);
Результат.Вставить("Приоритет", Приоритет);

Возврат Результат;

КонецФункции //

Процедура ДобавитьСерверПакетов(Знач Имя,
Знач Сервер,
Знач ПутьНаСервере = "",
Знач РесурсПубликацииПакетов = "",
Знач Порт = 80,
Знач Приоритет = Неопределено) Экспорт

мНастройки.СервераПакетов.Добавить(НастройкиСервераПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет));
Лог.Отладка("Добавлен сервер <%1>, Адрес <%2>, ПутьНаСервере <%3>, РесурсПубликацииПакетов <%4>, Порт <%5>, Приоритет <%6>",
Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет);

Процедура ДобавитьСерверПакетов(Знач СерверПакетов) Экспорт
мНастройки.СервераПакетов.Добавить(СерверПакетов);
КонецПроцедуры


Expand All @@ -121,8 +98,8 @@

Процедура ИнициализацияСерверовПакетов()
// Сервера пакетов по умолчанию
ДобавитьСерверПакетов("ОсновнойСерверПакетов", КонстантыOpm.СерверУдаленногоХранилища, КонстантыOpm.ПутьВХранилище, КонстантыOpm.РесурсПубликацииПакетов, 80, 0);
ДобавитьСерверПакетов("ЗапаснойСерверПакетов", КонстантыOpm.СерверЗапасногоХранилища, КонстантыOpm.ПутьВЗапасномХранилище, Неопределено, 80, 1);
ДобавитьСерверПакетов(СерверыПакетов.ОсновнойСервер());
ДобавитьСерверПакетов(СерверыПакетов.ЗапаснойСервер());
КонецПроцедуры

Процедура Инициализация()
Expand Down
59 changes: 59 additions & 0 deletions src/core/Модули/СерверыПакетов.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@

Функция ИзНастроек(Знач ТекущийСерверПакетов, Знач Индекс) Экспорт

Сервер = ПолучитьЗначение(ТекущийСерверПакетов, "Сервер", "");
Порт = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Порт", 80));
ПутьНаСервере = ПолучитьЗначение(ТекущийСерверПакетов, "ПутьНаСервере", "/");
Имя = ПолучитьЗначение(ТекущийСерверПакетов, "Имя", СтрШаблон("ДопСервер_%1", Индекс));
РесурсПубликацииПакетов = ПолучитьЗначение(ТекущийСерверПакетов, "РесурсПубликацииПакетов", "/");
Приоритет = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Приоритет", 0));
Авторизация = ПолучитьЗначение(ТекущийСерверПакетов, "Авторизация", "");
ДополнительныеЗаголовки = ПолучитьЗначение(ТекущийСерверПакетов, "Заголовки", Новый Соответствие);

Если ПустаяСтрока(Сервер) Тогда
ВызватьИсключение СтрШаблон("Для сервера <%1> не задан адрес", Индекс);
КонецЕсли;

СерверПакетов = Новый СерверПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов,
Порт, Приоритет, Авторизация, ДополнительныеЗаголовки
);

Возврат СерверПакетов;

КонецФункции

Функция ОсновнойСервер() Экспорт
Возврат Новый СерверПакетов("ОсновнойСерверПакетов",
КонстантыOpm.СерверУдаленногоХранилища,
КонстантыOpm.ПутьВХранилище,
КонстантыOpm.РесурсПубликацииПакетов,
80,
0
);
КонецФункции

Функция ЗапаснойСервер() Экспорт
Возврат Новый СерверПакетов("ЗапаснойСерверПакетов",
КонстантыOpm.СерверЗапасногоХранилища,
КонстантыOpm.ПутьВЗапасномХранилище,
Неопределено,
80,
1
);
КонецФункции

Функция ПолучитьЗначение(Знач ВходящаяСтруктура, Знач Ключ, Знач ЗначениеПоУмолчанию)

Перем ЗначениеКлюча;

Если Не ВходящаяСтруктура.Свойство(Ключ, ЗначениеКлюча) Тогда
Возврат ЗначениеПоУмолчанию;
КонецЕсли;

Если ЗначениеКлюча = Неопределено Тогда
Возврат ЗначениеПоУмолчанию;
КонецЕсли;

Возврат ЗначениеКлюча;

КонецФункции

0 comments on commit 1c4d9e1

Please sign in to comment.