Skip to content

Авторизация и прочие заголовки для зеркал #217

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -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```**
42 changes: 24 additions & 18 deletions features/step_definitions/Настройки.os
Original file line number Diff line number Diff line change
@@ -32,10 +32,8 @@
//я читаю настройки из файла "opm.cfg"
Процедура ЯЧитаюНастройкиИзФайла(Знач ПутьФайла) Экспорт
Файл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла));
// Ожидаем.Что(Файл.Существует(), СтрШаблон("Ожидали, что файл <%1> существует, а это не так!", Файл.ПолноеИмя)).ЭтоИстина();
НастройкиOpm.СброситьНастройки();
НастроитьOpmИзФайла(Файл.ПолноеИмя);
// НастройкиOpm.УстановитьФайлНастроек(Файл.ПолноеИмя);

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

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

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

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

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

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

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

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

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

КонецЦикла;

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

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

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

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

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

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

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

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

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

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

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

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

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

@@ -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");

ДопустимыеИменаКаналов = Новый Структура;
48 changes: 29 additions & 19 deletions src/cmd/Модули/ПараметрыПриложенияOpm.os
Original file line number Diff line number Diff line change
@@ -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,11 +217,24 @@

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

КонецЦикла;

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

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

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

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

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

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

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

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

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