Skip to content

Commit

Permalink
Merge pull request #217 from dmpas/feature/issue-216-oauth-token
Browse files Browse the repository at this point in the history
Авторизация и прочие заголовки для зеркал
  • Loading branch information
EvilBeaver authored Jun 16, 2024
2 parents cbe99c1 + 2d0eee2 commit d3eb457
Show file tree
Hide file tree
Showing 13 changed files with 282 additions and 93 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ opm update -all

## Настройка прокси-сервера для скачивания пакетов

Настройка производится с помощью создания служебного файла [opm.cfg](./tests/fixtures/opm.cfg) данный файл настроек можно расположить по таким путям (список приведен в порядке убывания приоритета):
Настройка производится с помощью создания служебного файла [opm.cfg](./tests/fixtures/opm-example.cfg) данный файл настроек можно расположить по таким путям (список приведен в порядке убывания приоритета):
- ```./opm.cfg``` - текущий каталог запуска + /opm.cfg
- каталог настроек пользователя
- linux: ```~/.opm.cfg```, **внимание файла должен называться с точкой ```.opm.cfg```**
Expand Down
42 changes: 24 additions & 18 deletions features/step_definitions/Настройки.os
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,8 @@
//я читаю настройки из файла "opm.cfg"
Процедура ЯЧитаюНастройкиИзФайла(Знач ПутьФайла) Экспорт
Файл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла));
// Ожидаем.Что(Файл.Существует(), СтрШаблон("Ожидали, что файл <%1> существует, а это не так!", Файл.ПолноеИмя)).ЭтоИстина();
НастройкиOpm.СброситьНастройки();
НастроитьOpmИзФайла(Файл.ПолноеИмя);
// НастройкиOpm.УстановитьФайлНастроек(Файл.ПолноеИмя);

Настройки = НастройкиOpm.ПолучитьНастройки();
БДД.СохранитьВКонтекст(КлючКонтекста(), Настройки);
Expand Down Expand Up @@ -88,7 +86,7 @@

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

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

Сервер = ПолучитьЗначение(НастройкиПрокси, "Сервер", "");
Порт = Число(ПолучитьЗначение(НастройкиПрокси, "Порт", 0));
Expand Down Expand Up @@ -129,20 +127,15 @@
Индекс = 1;

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

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

Если ПустаяСтрока(Сервер) Тогда

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

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

КонецЦикла;

Expand All @@ -153,16 +146,29 @@
Функция ПрочитатьФайлНастроек(Знач ПутьФайлаНастроек)

Если НЕ Новый Файл(ПутьФайлаНастроек).Существует() Тогда
Возврат НОвый Соответствие;
Возврат Новый Структура;
КонецЕсли;

Текст = ПрочитатьФайл(ПутьФайлаНастроек);

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

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

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

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

Перем Настройки;

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

Возврат Настройки;

КонецФункции
Expand Down
1 change: 1 addition & 0 deletions packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
Описание.Имя("opm")
.Версия(ВерсияПродукта)
.ВерсияСреды("1.8.3")
.ЗависитОт("strings", "0.5.0")
.ЗависитОт("fs", "1.2.0")
.ЗависитОт("asserts", "1.3.0")
.ЗависитОт("fluent", "0.4.0")
Expand Down
30 changes: 27 additions & 3 deletions src/cmd/Классы/КомандаOpm_Push.os
Original file line number Diff line number Diff line change
Expand Up @@ -145,12 +145,18 @@
// Для настроек по умолчанию
Сервер = КонстантыOpm.СерверУдаленногоХранилища;
Ресурс = КонстантыOpm.РесурсПубликацииПакетов;
Авторизация = Неопределено;
ДополнительныеЗаголовки = Неопределено;
Таймаут = 600;

Для Каждого НастройкаСервера Из ДоступныеСервераПакетов Цикл

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

Expand All @@ -160,25 +166,43 @@
Лог.Отладка("Ресурс = %1", Ресурс);

Заголовки = Новый Соответствие();
Заголовки.Вставить("OAUTH-TOKEN", ТокенАвторизации);
Если ЗначениеЗаполнено(Авторизация) Тогда
Заголовки.Вставить("Authorization", ОбщегоНазначенияOpm.ПрименитьПеременныеСреды(Авторизация));
Иначе
Заголовки.Вставить("OAUTH-TOKEN", ТокенАвторизации);
КонецЕсли;
Заголовки.Вставить("FILE-NAME", ФайлПакета.Имя);
Заголовки.Вставить("CHANNEL", Канал);
Если ЗначениеЗаполнено(ДополнительныеЗаголовки) Тогда
Для Каждого мЗаголовок Из ДополнительныеЗаголовки Цикл
Заголовки.Вставить(мЗаголовок.Ключ, ОбщегоНазначенияOpm.ПрименитьПеременныеСреды(мЗаголовок.Значение));
КонецЦикла;
КонецЕсли;

Соединение = Новый HTTPСоединение(Сервер);
Соединение = Новый HTTPСоединение(Сервер,,,,, Таймаут);
Запрос = Новый HTTPЗапрос(Ресурс, Заголовки);
Запрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеФайла);

Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();

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

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

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

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

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

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

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

ДопустимыеИменаКаналов = Новый Структура;
Expand Down
48 changes: 29 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,11 +217,24 @@

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

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

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

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

Перем Настройки;

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

Возврат Настройки;

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

Функция ПрочитатьФайл(Знач Путь)
Expand Down Expand Up @@ -256,8 +264,10 @@

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

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

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

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,8 +200,7 @@

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

ТекущийСерверПакетов = СоздатьСерверПакетовПоНастройке(НастройкаСервера);
ИндексСерверовПакетов.Вставить(НастройкаСервера.Имя, ТекущийСерверПакетов);
ИндексСерверовПакетов.Вставить(НастройкаСервера.Имя, НастройкаСервера);

КонецЦикла;

Expand All @@ -227,17 +226,6 @@

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

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

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

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

Процедура ОбновитьИндексДоступныхПакетов()

// Учесть версии пакетов
Expand All @@ -257,8 +245,7 @@

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

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

0 comments on commit d3eb457

Please sign in to comment.