.net core config pre-processing
От: Jericho113 Украина  
Дата: 16.02.21 14:09
Оценка:
Всем привет,

Возник вот такой вопрос...

Есть хранилище секретов (кастомное)
Есть .net core api с своим набором appsettings{dev/qa/prod}.json конфигов...

В appsettings.json конфигурация хранится как то так

StorageSettings:{
  Login:"lorem_ipsum",
  Password: "/my/sectet/key/to/external/service"
}
BrokerSettings:{
  Host:"broker>host",
  Password: "broker>password"
}


Когда конфигурация подгружается и окончательно создается то руками в коде выполняется проход по всем ключам "/my/sectet/key/to/external/service"
и выполняется вызов внешнего сервиса а потом вместо таких ключей подставляются значения секретов из ответа сервиса...

Такой код сейчас разрастается по множеству реп и мне это очень не нравится т.к при дальнейшей поддержке будет вызывать большие неудобства..

Есть ли стандартный способ как то вклиниться в загрузку конфигурации в .net core и написать свой провайдер который бы делал это автоматически ?
Хотелось бы подключить просто этот провайдер и использовать его т.е. для разработчика это еще один провайдер вокруг AddJsonFile("appsettings.json")

Если есть какие то варианты — накидайте в сообщениях.
Заранее благодарен.
NetDigitally yours ....
Re: .net core config pre-processing
От: #John Европа https://github.com/ichensky
Дата: 16.02.21 14:50
Оценка: +1
Здравствуйте, Jericho113, Вы писали:

J>Хотелось бы подключить просто этот провайдер и использовать его т.е. для разработчика это еще один провайдер вокруг AddJsonFile("appsettings.json")

Можно вместо `AddJsonFile` написать свой "Custom Configuration Provider", которому будет передавать имя файла, провайдер будет парсить файл как json, и как-то его обрабатывать.
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
Re[2]: .net core config pre-processing
От: Jericho113 Украина  
Дата: 17.02.21 18:08
Оценка:
Здравствуйте, #John, Вы писали:

J>Здравствуйте, Jericho113, Вы писали:



J>Можно вместо `AddJsonFile` написать свой "Custom Configuration Provider", которому будет передавать имя файла, провайдер будет парсить файл как json, и как-то его обрабатывать.


Да я думал в этом направлении но это подразумевает вычитку и парсинг JSON конфигурации т.к. она может быть вот в таком виде

// appsettings.development.json

"MyStorageSettings":{
    "KeepAliveInerval":"30",
    "User":"/dev/storage/secret/name", // это надо распарсить и потом вызвать внешний сервис, получить результат и его подставить вместо значения
    "Password":"/dev/storage/secret/password", // это надо распарсить и потом вызвать внешний сервис, получить результат и его подставить вместо значения
    "IdentifyAs":"lorem ipsum"
}


Т.е. нужно что-либо поверх JsonConfigurationSource но прозрачно для вызывающего когда.
В идеале как то так
 var cfgBuiler = new ConfigurationBuilder();
 cfgBuilder.AddCustomSecretsFromSettingsFile("appsettings.development.json");
 var cfg = cfgBuilder.Build(); // вот здесь должна произойти "магия" с подменой значений
  
 cfg.GetValue<string>("MyStorageSettings:Password"); //здесь уже вычитать пароль как plain text
NetDigitally yours ....
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.