Skip to content

Commit 57a1595

Browse files
authored
Merge pull request #42 from Golovanoff/master
Провайдер параметров Vault.
2 parents 4cc6f10 + 0a826bf commit 57a1595

11 files changed

+435
-4
lines changed

README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,24 @@
6262
6363
Сообщить(ПроксиСервер);
6464
65+
```
66+
* Чтение параметров из vault
67+
```bsl
68+
69+
НастройкиVault = Новый Структура;
70+
НастройкиVault.Вставить("Адрес", "https://vault.server.local");
71+
НастройкиVault.Вставить("Токен", ПолучитьПеременнуюСреды("VAULT_TOKEN"));
72+
НастройкиVault.Вставить("Запрос", "v1/my_secret_store/super_secret");
73+
74+
МенеджерПараметров = Новый МенеджерПараметров();
75+
МенеджерПараметров.ИспользоватьПровайдерVAULT();
76+
МенеджерПараметров.УстановитьНастройкиVault(НастройкиVault);
77+
МенеджерПараметров.Прочитать();
78+
79+
ПроксиСервер = МенеджерПараметров.Параметр("Настройки.Глобальные.НастройкиПрокси.Сервер")
80+
81+
Сообщить(ПроксиСервер);
82+
6583
```
6684

6785
* Чтения параметров через конструктор параметров

packagedef

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
//
55

66
Описание.Имя("configor")
7-
.Версия("0.9.1")
7+
.Версия("0.10.0")
88
.Автор("Khorev Aleksey")
99
.АдресАвтора("[email protected]")
1010
.Описание("Библиотека для работы с конфигурационными файлами в формате json, yaml")
@@ -18,10 +18,13 @@
1818
.ЗависитОт("fluent", "0.6.0")
1919
.ЗависитОт("notify", "0.2.0")
2020
.ЗависитОт("tempfiles")
21+
.ЗависитОт("1connector", "2.3.3")
2122
.ЗависитОт("reflector", "0.3.1")
2223
.РазработкаЗависитОт("coverage", "0.6.1")
2324
.РазработкаЗависитОт("1testrunner", "1.8.0")
2425
.РазработкаЗависитОт("1bdd", "1.14.0")
26+
.РазработкаЗависитОт("1commands", "1.5.0")
27+
.РазработкаЗависитОт("winow", "0.11.0")
2528
.ОпределяетКласс("МенеджерПараметров", "src/Классы/МенеджерПараметров.os")
2629
.ОпределяетКласс("КонструкторПараметров", "src/Классы/КонструкторПараметров.os")
2730
;
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
2+
Перем Адрес; // Строка
3+
Перем Токен; // Строка
4+
Перем Запрос; // Строка
5+
6+
#Область Публичное_API
7+
8+
// Устанавливает путь к корню API
9+
//
10+
// Параметры:
11+
// АдресАпи - Строка - URL сервера + корень API
12+
//
13+
// Возвращаемое значение:
14+
// Объект.НастройкиПровайдераVault - ссылка на текущий элемент класса <НастройкиПровайдераVault>
15+
//
16+
Функция УстановитьАдрес(Знач АдресАпи) Экспорт
17+
Адрес = АдресАпи;
18+
Возврат ЭтотОбъект;
19+
КонецФункции
20+
21+
// Устанавливает токен авторизации
22+
//
23+
// Параметры:
24+
// ТокенАвторизации - Строка - токен авторизации
25+
//
26+
// Возвращаемое значение:
27+
// Объект.НастройкиПровайдераVault - ссылка на текущий элемент класса <НастройкиПровайдераVault>
28+
//
29+
Функция УстановитьТокен(Знач ТокенАвторизации) Экспорт
30+
Токен = ТокенАвторизации;
31+
Возврат ЭтотОбъект;
32+
КонецФункции
33+
34+
// Устанавливает путь к корню API
35+
//
36+
// Параметры:
37+
// УРЛЗапроса - Строка - URL запроса данных vault
38+
//
39+
// Возвращаемое значение:
40+
// Объект.НастройкиПровайдераVault - ссылка на текущий элемент класса <НастройкиПровайдераVault>
41+
//
42+
Функция УстановитьЗапрос(Знач УРЛЗапроса) Экспорт
43+
Запрос = УРЛЗапроса;
44+
Возврат ЭтотОбъект;
45+
КонецФункции
46+
47+
// Возвращает структуру настроек провайдера
48+
//
49+
// Возвращаемое значение:
50+
// Структура - подготовленная структура настроек для файловых провайдеров
51+
// * Адрес - Строка - путь к API
52+
// * Токен - Строка - токен авторизации
53+
// * Запрос - Строка - путь к данным vault
54+
//
55+
Функция ПолучитьНастройки() Экспорт
56+
57+
Настройка = Новый Структура();
58+
Настройка.Вставить("Адрес", Адрес);
59+
Настройка.Вставить("Токен", Токен);
60+
Настройка.Вставить("Запрос", Запрос);
61+
62+
Возврат Настройка;
63+
КонецФункции
64+
65+
#КонецОбласти
66+
67+
#Область Вспомогательные_процедуры_и_функции
68+
69+
#КонецОбласти

src/Классы/internal/Классы/ПровайдерПараметров.os

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@
8383

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

86+
Функция ЭтоПровайдерVault() Экспорт
87+
Возврат ВРег(ТипПровайдера) = ВРег("vault");
88+
КонецФункции
89+
8690
Процедура ПриСозданииОбъекта(Знач ВходящийКлассПровайдера)
8791

8892
ИнтерфейсПровайдера = Новый ИнтерфейсОбъекта;
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
#Использовать asserts
2+
#Использовать logos
3+
#Использовать 1connector
4+
5+
Перем Лог;
6+
7+
#Область ПрограммныйИнтерфейс
8+
9+
// Возвращает приоритет провайдера
10+
//
11+
// Возвращаемое значение:
12+
// Число - текущий приоритет провайдера
13+
//
14+
Функция Приоритет() Экспорт
15+
Возврат 1;
16+
КонецФункции
17+
18+
// Возвращает идентификатор провайдера
19+
//
20+
// Возвращаемое значение:
21+
// Строка - текущий идентификатор провайдера
22+
//
23+
Функция Идентификатор() Экспорт
24+
Возврат "vault";
25+
КонецФункции
26+
27+
// Возвращает тип провайдера
28+
//
29+
// Возвращаемое значение:
30+
// Строка - текущий тип провайдера
31+
//
32+
Функция ТипПровайдера() Экспорт
33+
Возврат "vault";
34+
КонецФункции
35+
36+
// Выполняет чтение параметров для провайдера
37+
//
38+
// Параметры:
39+
// НастройкиПровайдера - Структура - структура настроек провайдера
40+
//
41+
// Возвращаемое значение:
42+
// Соответствие - результат чтения провайдера
43+
//
44+
Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт
45+
46+
ПрочитанныеПараметры = Новый Соответствие;
47+
48+
Адрес = НастройкиПровайдера.Адрес;
49+
Токен = НастройкиПровайдера.Токен;
50+
Запрос = НастройкиПровайдера.Запрос;
51+
52+
Если Не ЗначениеЗаполнено(Адрес) Тогда
53+
Лог.Отладка("Не указан адрес сервера. Чтение невозможно");
54+
Возврат ПрочитанныеПараметры;
55+
КонецЕсли;
56+
57+
Лог.Отладка("Выполняю чтение данных vault из <%1>/%2", Адрес, Запрос);
58+
ПрочитанныеПараметры = Прочитать(Адрес, Токен, Запрос);
59+
60+
Возврат ПрочитанныеПараметры;
61+
КонецФункции
62+
63+
#КонецОбласти
64+
65+
// Выполнить чтение настроек из vault
66+
//
67+
// Параметры:
68+
// Адрес - Cтрока - URL сервера vault
69+
// Токен - Cтрока - токен авторизации
70+
// Запрос - Cтрока - путь к данным vault
71+
// Возвращаемое значение:
72+
// Соответствие - итоговые параметры
73+
//
74+
Функция Прочитать(Знач Адрес, Знач Токен, Знач Запрос)
75+
76+
Настройки = Новый Соответствие;
77+
78+
URL = СтрШаблон("%1/%2", Адрес, Запрос);
79+
Заголовки = Новый Соответствие;
80+
81+
Если ЗначениеЗаполнено(Токен) Тогда
82+
Заголовки.Вставить("Authorization", СтрШаблон("Bearer %1", Токен));
83+
КонецЕсли;
84+
85+
ДопПараметры = Новый Структура("Заголовки", Заголовки);
86+
87+
Попытка
88+
89+
Ответ = КоннекторHTTP.Get(URL, , ДопПараметры);
90+
ВолтОтветил = ВолтОтветил(Ответ);
91+
Если Не ВолтОтветил Тогда
92+
Лог.Отладка("Ошибка получения данных из vault:
93+
|%1", КодыСостоянияHTTP.Представление(Ответ.КодСостояния));
94+
КонецЕсли;
95+
96+
ДесериализованныйОтвет = Ответ.Json();
97+
Ошибки = ДесериализованныйОтвет.Получить("errors");
98+
Если Не Ошибки = Неопределено Тогда
99+
Для Каждого Ошибка Из Ошибки Цикл
100+
Лог.Отладка(Ошибка["message"]);
101+
КонецЦикла;
102+
КонецЕсли;
103+
104+
Настройки = ?(ВолтОтветил, ДесериализованныйОтвет["data"], Новый Соответствие);
105+
106+
Лог.Отладка("Итоговые параметры:");
107+
ПоказатьПараметрыВРежимеОтладки(Настройки);
108+
109+
Исключение
110+
111+
Лог.Отладка("Ошибка чтения настроек vault из %1
112+
|%2", URL, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
113+
114+
ВызватьИсключение;
115+
116+
КонецПопытки;
117+
118+
Возврат Настройки;
119+
КонецФункции
120+
121+
Функция ВолтОтветил(Знач Ответ)
122+
123+
ХорошиеКоды = Новый Массив;
124+
ХорошиеКоды.Добавить(200);
125+
ХорошиеКоды.Добавить(204);
126+
127+
Возврат Не ХорошиеКоды.Найти(Ответ.КодСостояния) = Неопределено;
128+
КонецФункции
129+
130+
Процедура ПоказатьПараметрыВРежимеОтладки(ЗначенияПараметров)
131+
132+
ПроцессорВывода = Новый ВыводВРежимеОтладки(Лог);
133+
ПроцессорВывода.ПоказатьНастройкиВРежимеОтладки(ЗначенияПараметров);
134+
135+
КонецПроцедуры
136+
137+
Лог = Логирование.ПолучитьЛог("oscript.lib.configor.vault");

src/Классы/internal/Классы/ФайловыйПровайдерПараметров.os

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@
336336
ОбработатьПараметрыРекурсивно(Значение, ИмяФайлаПараметров);
337337

338338
Иначе
339-
Лог.Отладка("Ищю ключ чтения файла: <%1>", Ключ);
339+
Лог.Отладка("Ищу ключ чтения файла: <%1>", Ключ);
340340
Если СтрНачинаетсяС( ВРег(Ключ), ВРег(ПрефиксПараметрФайл)) Тогда
341341
КлючиКДополнительномуЧтению.Добавить(Ключ);
342342
КонецЕсли;

src/Классы/МенеджерПараметров.os

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
Перем ПровайдерыПараметров; // Соответствие
1616

1717
Перем НастройкаФайловогоПровайдера; // Класс НастройкиФайловогоПровайдера
18+
Перем НастройкаПровайдераVault; // Класс НастройкиПровайдераVault
1819

1920
Перем ИнтерфейсПриемника; // Класс ИнтерфейсОбъекта
2021

@@ -112,6 +113,20 @@
112113

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

116+
// Устанавливает настройки провайдера параметров
117+
//
118+
// Параметры:
119+
// Настройки - Структура - настройки провайдера
120+
//
121+
Процедура УстановитьНастройкиVault(Знач Настройки) Экспорт
122+
123+
НастройкаПровайдераVault = ПолучитьНастройкуПровайдераVault();
124+
125+
НастройкаПровайдераVault.УстановитьАдрес(Настройки.Адрес)
126+
.УстановитьТокен(Настройки.Токен)
127+
.УстановитьЗапрос(Настройки.Запрос);
128+
КонецПроцедуры
129+
115130
// Добавляет в таблицу провайдеров произвольный класс-провайдер
116131
//
117132
// Параметры:
@@ -180,6 +195,17 @@
180195

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

198+
// Добавляет и включает встроенный провайдер VAULT
199+
//
200+
// Параметры:
201+
// Приоритет - Число - Числовой приоритет выполнения провайдеры (по умолчанию 0)
202+
//
203+
Процедура ИспользоватьПровайдерVAULT(Знач Приоритет = 0) Экспорт
204+
205+
ДобавитьПровайдерПараметров(Новый ПровайдерПараметровVAULT, Приоритет);
206+
207+
КонецПроцедуры
208+
183209
// Производит автоматическую настройку провайдеров
184210
//
185211
// Параметры:
@@ -324,9 +350,12 @@
324350

325351
ИдентификаторПровайдера = КлассПровайдера.Идентификатор;
326352

327-
ПараметрыПровайдера = Новый Структура;
328353
Если КлассПровайдера.ЭтоФайловыйПровайдер() Тогда
329354
ПараметрыПровайдера = ПолучитьНастройкуФайловогоПровайдера().ПолучитьНастройки();
355+
ИначеЕсли КлассПровайдера.ЭтоПровайдерVault() Тогда
356+
ПараметрыПровайдера = ПолучитьНастройкуПровайдераVault().ПолучитьНастройки();
357+
Иначе
358+
ПараметрыПровайдера = Новый Структура;
330359
КонецЕсли;
331360

332361
Попытка
@@ -419,6 +448,16 @@
419448

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

451+
Функция ПолучитьНастройкуПровайдераVault()
452+
453+
Если НастройкаПровайдераVault = Неопределено Тогда
454+
НастройкаПровайдераVault = Новый НастройкиПровайдераVault;
455+
КонецЕсли;
456+
457+
Возврат НастройкаПровайдераVault;
458+
459+
КонецФункции
460+
422461
#КонецОбласти
423462

424463
#Область Инициализация
@@ -450,4 +489,4 @@
450489

451490
#КонецОбласти
452491

453-
Лог = Логирование.ПолучитьЛог("oscript.lib.configor");
492+
Лог = Логирование.ПолучитьЛог("oscript.lib.configor");

0 commit comments

Comments
 (0)