Skip to content

Commit d3eb457

Browse files
authored
Merge pull request #217 from dmpas/feature/issue-216-oauth-token
Авторизация и прочие заголовки для зеркал
2 parents cbe99c1 + 2d0eee2 commit d3eb457

13 files changed

+282
-93
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ opm update -all
6161

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

64-
Настройка производится с помощью создания служебного файла [opm.cfg](./tests/fixtures/opm.cfg) данный файл настроек можно расположить по таким путям (список приведен в порядке убывания приоритета):
64+
Настройка производится с помощью создания служебного файла [opm.cfg](./tests/fixtures/opm-example.cfg) данный файл настроек можно расположить по таким путям (список приведен в порядке убывания приоритета):
6565
- ```./opm.cfg``` - текущий каталог запуска + /opm.cfg
6666
- каталог настроек пользователя
6767
- linux: ```~/.opm.cfg```, **внимание файла должен называться с точкой ```.opm.cfg```**

features/step_definitions/Настройки.os

+24-18
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,8 @@
3232
//я читаю настройки из файла "opm.cfg"
3333
Процедура ЯЧитаюНастройкиИзФайла(Знач ПутьФайла) Экспорт
3434
Файл = Новый Файл(ОбъединитьПути(ТекущийКаталог(), ПутьФайла));
35-
// Ожидаем.Что(Файл.Существует(), СтрШаблон("Ожидали, что файл <%1> существует, а это не так!", Файл.ПолноеИмя)).ЭтоИстина();
3635
НастройкиOpm.СброситьНастройки();
3736
НастроитьOpmИзФайла(Файл.ПолноеИмя);
38-
// НастройкиOpm.УстановитьФайлНастроек(Файл.ПолноеИмя);
3937

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

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

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

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

131129
Для каждого ТекущийСерверПакетов Из СервераПакетов Цикл
132-
133-
Сервер = ПолучитьЗначение(ТекущийСерверПакетов, "Сервер", "");
134-
Порт = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Порт", 80));
135-
ПутьНаСервере = ПолучитьЗначение(ТекущийСерверПакетов, "ПутьНаСервере", "/");
136-
РесурсПубликацииПакетов = ПолучитьЗначение(ТекущийСерверПакетов, "РесурсПубликацииПакетов", "/");
137-
Имя = ПолучитьЗначение(ТекущийСерверПакетов, "Имя", СтрШаблон("ДопСервер_%1",Индекс));
138-
Приоритет = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Приоритет", 0));
139-
140-
Если ПустаяСтрока(Сервер) Тогда
130+
131+
Попытка
132+
СерверПакетов = СерверыПакетов.ИзНастроек(НастройкиКакСтруктура(ТекущийСерверПакетов), Индекс);
133+
Исключение
141134
Продолжить;
142-
КонецЕсли;
143-
144-
НастройкиOpm.ДобавитьТекущийСерверПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет);
145-
Индекс = Индекс +1;
135+
КонецПопытки;
136+
137+
НастройкиOpm.ДобавитьСерверПакетов(СерверПакетов);
138+
Индекс = Индекс + 1;
146139

147140
КонецЦикла;
148141

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

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

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

161154
ЧтениеJSON = Новый ЧтениеJSON();
162155
ЧтениеJSON.УстановитьСтроку(Текст);
163-
Настройки = ПрочитатьJSON(ЧтениеJSON, Ложь);
156+
НастройкиКакСоответствие = ПрочитатьJSON(ЧтениеJSON, Истина);
164157
ЧтениеJSON.Закрыть();
158+
159+
Возврат НастройкиКакСтруктура(НастройкиКакСоответствие);
160+
161+
КонецФункции
162+
163+
Функция НастройкиКакСтруктура(Знач НастройкиКакСоответствие)
165164

165+
Перем Настройки;
166+
167+
Настройки = Новый Структура;
168+
Для Каждого мЭлемент Из НастройкиКакСоответствие Цикл
169+
Настройки.Вставить(мЭлемент.Ключ, мЭлемент.Значение);
170+
КонецЦикла;
171+
166172
Возврат Настройки;
167173

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

packagedef

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
Описание.Имя("opm")
2020
.Версия(ВерсияПродукта)
2121
.ВерсияСреды("1.8.3")
22+
.ЗависитОт("strings", "0.5.0")
2223
.ЗависитОт("fs", "1.2.0")
2324
.ЗависитОт("asserts", "1.3.0")
2425
.ЗависитОт("fluent", "0.4.0")

src/cmd/Классы/КомандаOpm_Push.os

+27-3
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,18 @@
145145
// Для настроек по умолчанию
146146
Сервер = КонстантыOpm.СерверУдаленногоХранилища;
147147
Ресурс = КонстантыOpm.РесурсПубликацииПакетов;
148+
Авторизация = Неопределено;
149+
ДополнительныеЗаголовки = Неопределено;
150+
Таймаут = 600;
148151

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

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

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

162168
Заголовки = Новый Соответствие();
163-
Заголовки.Вставить("OAUTH-TOKEN", ТокенАвторизации);
169+
Если ЗначениеЗаполнено(Авторизация) Тогда
170+
Заголовки.Вставить("Authorization", ОбщегоНазначенияOpm.ПрименитьПеременныеСреды(Авторизация));
171+
Иначе
172+
Заголовки.Вставить("OAUTH-TOKEN", ТокенАвторизации);
173+
КонецЕсли;
164174
Заголовки.Вставить("FILE-NAME", ФайлПакета.Имя);
165175
Заголовки.Вставить("CHANNEL", Канал);
176+
Если ЗначениеЗаполнено(ДополнительныеЗаголовки) Тогда
177+
Для Каждого мЗаголовок Из ДополнительныеЗаголовки Цикл
178+
Заголовки.Вставить(мЗаголовок.Ключ, ОбщегоНазначенияOpm.ПрименитьПеременныеСреды(мЗаголовок.Значение));
179+
КонецЦикла;
180+
КонецЕсли;
166181

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

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

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

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

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

197+
Функция КодУспешнойОтправки(Знач КодСостояния)
198+
199+
Возврат КодСостояния = 200 // OK
200+
Или КодСостояния = 201 // CREATED
201+
Или КодСостояния = 202 // ACCEPTED
202+
;
203+
204+
КонецФункции
205+
182206
Лог = Логирование.ПолучитьЛог("oscript.app.opm");
183207

184208
ДопустимыеИменаКаналов = Новый Структура;

src/cmd/Модули/ПараметрыПриложенияOpm.os

+29-19
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

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

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

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

5959
Для каждого ТекущийСерверПакетов Из СервераПакетов Цикл
60-
61-
Сервер = ПолучитьЗначение(ТекущийСерверПакетов, "Сервер", "");
62-
Порт = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Порт", 80));
63-
ПутьНаСервере = ПолучитьЗначение(ТекущийСерверПакетов, "ПутьНаСервере", "/");
64-
Имя = ПолучитьЗначение(ТекущийСерверПакетов, "Имя", СтрШаблон("ДопСервер_%1", Индекс));
65-
РесурсПубликацииПакетов = ПолучитьЗначение(ТекущийСерверПакетов, "РесурсПубликацииПакетов", "/");
66-
Приоритет = Число(ПолучитьЗначение(ТекущийСерверПакетов, "Приоритет", 0));
67-
68-
Если ПустаяСтрока(Сервер) Тогда
69-
Лог.Отладка("Для сервера <%1> не задан адрес", Индекс);
60+
61+
Попытка
62+
СерверПакетов = СерверыПакетов.ИзНастроек(НастройкиКакСтруктура(ТекущийСерверПакетов), Индекс);
63+
Исключение
64+
Лог.Отладка(ОписаниеОшибки());
7065
Продолжить;
71-
КонецЕсли;
72-
73-
НастройкиOpm.ДобавитьСерверПакетов(Имя, Сервер, ПутьНаСервере, РесурсПубликацииПакетов, Порт, Приоритет);
74-
Индекс = Индекс +1;
66+
КонецПопытки;
67+
68+
НастройкиOpm.ДобавитьСерверПакетов(СерверПакетов);
69+
Индекс = Индекс + 1;
7570

7671
КонецЦикла;
7772

@@ -176,7 +171,7 @@
176171

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

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

181176
КонецЦикла;
182177

@@ -222,11 +217,24 @@
222217

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

228-
Возврат Настройки;
223+
Возврат НастройкиКакСтруктура(НастройкиКакСоответствие);
224+
225+
КонецФункции
226+
227+
Функция НастройкиКакСтруктура(Знач НастройкиКакСоответствие)
228+
229+
Перем Настройки;
230+
231+
Настройки = Новый Структура;
232+
Для Каждого мЭлемент Из НастройкиКакСоответствие Цикл
233+
Настройки.Вставить(мЭлемент.Ключ, мЭлемент.Значение);
234+
КонецЦикла;
229235

236+
Возврат Настройки;
237+
230238
КонецФункции
231239

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

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

267+
НастройкиЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Unix, " ");
268+
259269
Json = Новый ЗаписьJSON();
260-
Json.УстановитьСтроку();
270+
Json.УстановитьСтроку(НастройкиЗаписи);
261271

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

src/core/Классы/МенеджерПолученияПакетов.os

+2-15
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,7 @@
200200

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

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

206205
КонецЦикла;
207206

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

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

230-
Функция СоздатьСерверПакетовПоНастройке(Знач НастройкаСервера)
231-
232-
Возврат Новый СерверПакетов(НастройкаСервера.Имя,
233-
НастройкаСервера.Сервер,
234-
НастройкаСервера.ПутьНаСервере,
235-
НастройкаСервера.РесурсПубликацииПакетов,
236-
НастройкаСервера.Порт,
237-
НастройкаСервера.Приоритет)
238-
239-
КонецФункции
240-
241229
Процедура ОбновитьИндексДоступныхПакетов()
242230

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

258246
Процедура ОбновитьИндексыКешейПакетов()
259247
Если Не ЗначениеЗаполнено(ИндексКешаПакетов)
260-
Или Не ЗначениеЗаполнено(ИндексДоступныхПакетов)Тогда
261-
248+
Или Не ЗначениеЗаполнено(ИндексДоступныхПакетов) Тогда
262249
ОбновитьИндексКешаПакетов();
263250
ОбновитьИндексДоступныхПакетов();
264251
КонецЕсли;

0 commit comments

Comments
 (0)