Skip to content
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

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

Merged
Merged
Show file tree
Hide file tree
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
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
nixel2007 marked this conversation as resolved.
Show resolved Hide resolved
Или КодСостояния = 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