public static async Task <bool> CreateOrUpdateAppSettingAsync(string key, string value, AppSettings config = null) { try { if (config == null) { config = SecretsProvider.GetSecrets(); } var token = AzureAccessTokenProvider.GetToken(config); using (var client = new HttpClient()) { var name = key .Replace(":", "--") .Replace(".", "---"); name = $"{config.SecretName}--AppSettings--{name}"; var secret = string.Format(API.Secret, config.KeyVaultUrl, name); client.DefaultRequestHeaders.Add("Authorization", token.ToString()); var keyVaultSecret = new KeyVaultSecret { Id = secret, Value = value }; var json = JsonConvert.SerializeObject(keyVaultSecret); var response = await client.PutAsync(secret, new StringContent(json, Encoding.UTF8, "application/json")); if (response.IsSuccessStatusCode) { AppSettings[key] = value; return(true); } else if (response.ReasonPhrase == "FORBIDDEN") { throw new ForbiddenKeyMasterException(); } } } catch (Exception ex) { var logger = LoggerSource.Instance.GetLogger("KeyMaster"); logger.Error(ex.Message, ex); throw new KeyMasterException("Unable to delete secret", ex); } return(false); }
public static string GetConnectionString(AppSettings appsettings = null) { try { if (appsettings == null) { appsettings = SecretsProvider.GetSecrets(); } var token = AzureAccessTokenProvider.GetToken(appsettings); using (var client = new HttpClient()) { var secretVersions = string.Format(API.Secret, appsettings.KeyVaultUrl, appsettings.SecretName); client.DefaultRequestHeaders.Add("Authorization", token.ToString()); var response = client.GetAsync(secretVersions).Result; if (response.IsSuccessStatusCode) { var json = response.Content.ReadAsStringAsync().Result; var secret = JsonConvert.DeserializeObject <KeyVaultSecret>(json); if (secret != null) { return(secret.Value); } } throw new AzureSecretsKeyMasterException(); } } catch (FileNotFoundException ex) { throw new KeyMasterException("Unable to find Key Master Secrets file, check logs for more details", ex); } catch (AzureSecretsKeyMasterException ex) { throw new KeyMasterException("Unable to verify Key Master secrets with Azure, check logs for more details", ex); } catch (AzureKeyMasterException ex) { var logger = LoggerSource.Instance.GetLogger("KeyMaster"); logger.Error(JsonConvert.SerializeObject(ex.TokenError), ex); throw new KeyMasterException("Unable to verify Key Master secrets with Azure, check logs for more details", ex); } catch (Exception ex) { throw new KeyMasterException("Internal Key Master Error Occurred. Check the logs for more details", ex); } }
private static NameValueCollection GetAppSettings(AppSettings config = null) { try { if (config == null) { config = SecretsProvider.GetSecrets(); } var token = AzureAccessTokenProvider.GetToken(config); using (var client = new HttpClient()) { var secrets = string.Format(API.GetAllSecrets, config.KeyVaultUrl); client.DefaultRequestHeaders.Add("Authorization", token.ToString()); var response = client.GetAsync(secrets).Result; if (response.IsSuccessStatusCode) { var json = response.Content.ReadAsStringAsync().Result; var items = JsonConvert.DeserializeObject <KeyVaultSecretListResponse>(json); if (items != null) { var appsettings = new NameValueCollection(); foreach (var secretListItem in items.Secrets .Where(x => x.Id.Split('/').LastOrDefault().StartsWith($"{config.SecretName}--AppSettings--"))) { var current = GetSecret(secretListItem, token, config); appsettings.Add(current.Key, current.Value); } return(appsettings); } } } } catch (Exception ex) { throw new KeyMasterException("Unable to retrieve App Settings", ex); } throw new KeyMasterException("Azure Key Vault App Settings are empty"); }
public static async Task <bool> DeleteSecretAsync(string key, AppSettings config = null) { try { if (config == null) { config = SecretsProvider.GetSecrets(); } var token = AzureAccessTokenProvider.GetToken(config); using (var client = new HttpClient()) { var name = key .Replace(":", "--") .Replace(".", "---"); name = $"{config.SecretName}--AppSettings--{name}"; var secret = string.Format(API.Secret, config.KeyVaultUrl, name); client.DefaultRequestHeaders.Add("Authorization", token.ToString()); var response = await client.DeleteAsync(secret); if (response.IsSuccessStatusCode) { AppSettings.Remove(key); return(true); } else if (response.ReasonPhrase == "FORBIDDEN") { throw new ForbiddenKeyMasterException(); } } } catch (Exception ex) { var logger = LoggerSource.Instance.GetLogger("KeyMaster"); logger.Error(ex.Message, ex); throw new KeyMasterException("Unable to delete secret", ex); } return(false); }
private static KeyValuePair <string, string> GetSecret(KeyVaultSecretListItem item, AccessTokenResponse token = null, AppSettings config = null) { if (config == null) { config = SecretsProvider.GetSecrets(); } if (token == null) { token = AzureAccessTokenProvider.GetToken(config); } try { using (var client = new HttpClient()) { client.DefaultRequestHeaders.Add("Authorization", token.ToString()); var secretResponse = client.GetAsync($"{item.Id}?{API.ApiVersion}").Result; if (secretResponse.IsSuccessStatusCode) { var secretJson = secretResponse.Content.ReadAsStringAsync().Result; var secret = JsonConvert.DeserializeObject <KeyVaultSecret>(secretJson); var name = item.Id .Split('/').LastOrDefault() .Replace($"{config.SecretName}--AppSettings--", string.Empty) .Replace("---", ".") .Replace("--", ":"); return(new KeyValuePair <string, string>(name, secret.Value)); } } } catch (Exception ex) { throw new AzureSecretsKeyMasterException(); } throw new AzureSecretsKeyMasterException(item.Id.Split('/').LastOrDefault()); }