public virtual string GetSecret(string secretPath)
        {
            var encryptedSetting = ConfigRoot[secretPath];
            var secretSetting    = (SecretSetting)null;

            if (encryptedSetting == null)
            {
                return(null);
            }

            if (_secretsContainer.ContainsKey(secretPath) == false)
            {
                secretSetting = new SecretSetting();
                _secretsContainer.Add(secretPath, secretSetting);
            }

            secretSetting = _secretsContainer[secretPath];

            if (encryptedSetting.Equals(secretSetting.SecuredValue))
            {
                return(secretSetting.Value);
            }

            secretSetting.SecuredValue = encryptedSetting;

            var base64IV  = Environment.GetEnvironmentVariable("APP_SECRET_IV");
            var base64Key = Environment.GetEnvironmentVariable("APP_SECRET_KEY");

            using (var cypher = new AesManaged())
            {
                cypher.IV  = Convert.FromBase64String(base64IV);
                cypher.Key = Convert.FromBase64String(base64Key);

                using (var decryptor = cypher.CreateDecryptor())
                {
                    var bytesSecuredValue = Convert.FromBase64String(secretSetting.SecuredValue);
                    var bytesCleanValue   = decryptor.TransformFinalBlock(bytesSecuredValue, 0, bytesSecuredValue.Length);

                    secretSetting.Value = Encoding.UTF8.GetString(bytesCleanValue);
                    return(secretSetting.Value);
                }
            }
        }
Example #2
0
 public AdminController(IAdminService _adminService, IOptions <SecretSetting> _secretSetting)
 {
     adminService  = _adminService;
     secretSetting = _secretSetting.Value;
 }
Example #3
0
 public AdminService(ApplicationDbContext _applicationDb, IOptions <SecretSetting> _secretSetting)
 {
     applicationDb = _applicationDb;
     secretSetting = _secretSetting.Value;
 }