Skip to content

Commit

Permalink
Resolve read config bug on linux
Browse files Browse the repository at this point in the history
  • Loading branch information
Revsgaard committed May 22, 2024
1 parent f785c16 commit a430e13
Show file tree
Hide file tree
Showing 12 changed files with 59 additions and 37 deletions.
10 changes: 5 additions & 5 deletions azuredeploy.json
Original file line number Diff line number Diff line change
Expand Up @@ -528,7 +528,7 @@
"[resourceId('Microsoft.Web/sites/config', variables('foxidsDefaultName'), 'appsettings')]"
],
"properties": {
"appSettingNames": [ "WEBSITES_ENABLE_APP_SERVICE_STORAGE", "DOCKER_REGISTRY_SERVER_URL", "WEBSITES_PORT", "Settings__UseHttp", "Settings__TrustProxyHeaders", "Settings__TrustProxySchemeHeader", "ApplicationInsights__ConnectionString", "Settings__FoxIDsEndpoint", "Settings__Options__Log", "Settings__Options__DataStorage", "Settings__Options__KeyStorage", "Settings__Options__Cache", "Settings__Options__DataCache", "Settings__CosmosDb__EndpointUri", "Settings__KeyVault__EndpointUri", "Settings__Sendgrid__FromEmail" ]
"appSettingNames": [ "WEBSITES_ENABLE_APP_SERVICE_STORAGE", "DOCKER_REGISTRY_SERVER_URL", "WEBSITES_PORT", "ASPNETCORE_URLS", "Settings__UseHttp", "Settings__TrustProxyHeaders", "Settings__TrustProxySchemeHeader", "ApplicationInsights__ConnectionString", "Settings__FoxIDsEndpoint", "Settings__Options__Log", "Settings__Options__DataStorage", "Settings__Options__KeyStorage", "Settings__Options__Cache", "Settings__Options__DataCache", "Settings__CosmosDb__EndpointUri", "Settings__KeyVault__EndpointUri", "Settings__Sendgrid__FromEmail" ]
}
},
{
Expand All @@ -540,13 +540,13 @@
"[resourceId('Microsoft.Web/sites/config', variables('foxidsControlSiteName'), 'appsettings')]"
],
"properties": {
"appSettingNames": [ "WEBSITES_ENABLE_APP_SERVICE_STORAGE", "DOCKER_REGISTRY_SERVER_URL", "WEBSITES_PORT", "Settings__UseHttp", "ApplicationInsights__ConnectionString", "Settings__FoxIDsEndpoint", "Settings__FoxIDsControlEndpoint", "Settings__Options__Log", "Settings__Options__DataStorage", "Settings__Options__KeyStorage", "Settings__Options__Cache", "Settings__Options__DataCache", "MasterSeedEnabled", "Settings__CosmosDb__EndpointUri", "Settings__KeyVault__EndpointUri", "Settings__ApplicationInsights__WorkspaceId", "Settings__MasterSeedEnabled" ]
"appSettingNames": [ "WEBSITES_ENABLE_APP_SERVICE_STORAGE", "DOCKER_REGISTRY_SERVER_URL", "WEBSITES_PORT", "ASPNETCORE_URLS", "Settings__UseHttp", "ApplicationInsights__ConnectionString", "Settings__FoxIDsEndpoint", "Settings__FoxIDsControlEndpoint", "Settings__Options__Log", "Settings__Options__DataStorage", "Settings__Options__KeyStorage", "Settings__Options__Cache", "Settings__Options__DataCache", "MasterSeedEnabled", "Settings__CosmosDb__EndpointUri", "Settings__KeyVault__EndpointUri", "Settings__ApplicationInsights__WorkspaceId", "Settings__MasterSeedEnabled" ]
}
},
{
"type": "Microsoft.KeyVault/vaults/secrets",
"apiVersion": "2016-10-01",
"name": "[concat(variables('foxidsDefaultName'), '/Settings--RedisCache--ConnectionString')]",
"name": "[concat(variables('foxidsDefaultName'), '/Settings__RedisCache__ConnectionString')]",
"dependsOn": [
"[concat('Microsoft.KeyVault/vaults/', variables('foxidsDefaultName'))]",
"[concat('Microsoft.Cache/Redis/', variables('foxidsDefaultName'))]"
Expand All @@ -558,7 +558,7 @@
{
"type": "Microsoft.KeyVault/vaults/secrets",
"apiVersion": "2016-10-01",
"name": "[concat(variables('foxidsDefaultName'), '/Settings--CosmosDb--PrimaryKey')]",
"name": "[concat(variables('foxidsDefaultName'), '/Settings__CosmosDb__PrimaryKey')]",
"dependsOn": [
"[concat('Microsoft.KeyVault/vaults/', variables('foxidsDefaultName'))]",
"[concat('Microsoft.DocumentDB/databaseAccounts/', variables('foxidsDefaultName'))]"
Expand All @@ -570,7 +570,7 @@
{
"type": "Microsoft.KeyVault/vaults/secrets",
"apiVersion": "2016-10-01",
"name": "[concat(variables('foxidsDefaultName'), '/Settings--Sendgrid--ApiKey')]",
"name": "[concat(variables('foxidsDefaultName'), '/Settings__Sendgrid__ApiKey')]",
"dependsOn": [
"[concat('Microsoft.KeyVault/vaults/', variables('foxidsDefaultName'))]"
],
Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs.Control/FoxIDs.Control.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>1.4.6</Version>
<Version>1.4.8</Version>
<RootNamespace>FoxIDs</RootNamespace>
<Authors>Anders Revsgaard</Authors>
<Company>ITfoxtec</Company>
Expand Down
20 changes: 8 additions & 12 deletions src/FoxIDs.Control/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace FoxIDs
Expand All @@ -21,13 +22,12 @@ public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
.ConfigureKestrel(options => options.AddServerHeader = false)
.ConfigureAppConfiguration((context, config) =>
{
var builtConfig = config.Build();
if (!context.HostingEnvironment.IsDevelopment())
{
var keyStorageOption = builtConfig["Settings:Options:KeyStorage"];
if (string.IsNullOrWhiteSpace(keyStorageOption) || keyStorageOption.Equals(KeyStorageOptions.KeyVault.ToString(), StringComparison.Ordinal))
var settings = config.Build().BindConfig<Settings>(nameof(Settings));
if (settings.Options.KeyStorage == KeyStorageOptions.KeyVault)
{
config.AddAzureKeyVault(new Uri(builtConfig["Settings:KeyVault:EndpointUri"]), new DefaultAzureCredential());
config.AddAzureKeyVault(new Uri(settings.KeyVault.EndpointUri), new DefaultAzureCredential());
}
}
})
Expand All @@ -37,15 +37,11 @@ public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
// Remove all loggers like console, debug, event source etc.
logging.ClearProviders();

var logOption = context.Configuration["Settings:Options:Log"];
if (string.IsNullOrWhiteSpace(logOption) || logOption.Equals(LogOptions.ApplicationInsights.ToString(), StringComparison.Ordinal))
var settings = context.Configuration.BindConfig<Settings>(nameof(Settings));
if (settings.Options.Log == LogOptions.ApplicationInsights)
{
var connectionString = context.Configuration.GetSection("ApplicationInsights:ConnectionString")?.Value;
if (!string.IsNullOrWhiteSpace(connectionString))
{
logging.AddApplicationInsights(configuration => configuration.ConnectionString = connectionString, options => { });
return;
}
logging.AddApplicationInsights(configuration => configuration.ConnectionString = settings.ApplicationInsights.ConnectionString, options => { });
return;
}
});
}
Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs.ControlClient/FoxIDs.ControlClient.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>1.4.6</Version>
<Version>1.4.8</Version>
<RootNamespace>FoxIDs.Client</RootNamespace>
<Authors>Anders Revsgaard</Authors>
<Company>ITfoxtec</Company>
Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs.ControlShared/FoxIDs.ControlShared.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>1.4.6</Version>
<Version>1.4.8</Version>
<RootNamespace>FoxIDs</RootNamespace>
<Authors>Anders Revsgaard</Authors>
<Company>ITfoxtec</Company>
Expand Down
10 changes: 8 additions & 2 deletions src/FoxIDs.Shared/Extensions/ServiceCollectionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ namespace Microsoft.Extensions.DependencyInjection
public static class ServiceCollectionExtensions
{
public static T BindConfig<T>(this IServiceCollection services, IConfiguration configuration, string key) where T : class, new()
{
var settings = configuration.BindConfig<T>(key);
services.AddSingleton(settings);
return settings;
}

public static T BindConfig<T>(this IConfiguration configuration, string key) where T : class, new()
{
var settings = new T();
configuration.Bind(key, settings);
Expand All @@ -18,10 +25,9 @@ public static class ServiceCollectionExtensions
}
catch (Exception ex)
{
throw new InvalidConfigException(typeof(T).Name, ex);
throw new InvalidConfigException(typeof(T).Name, ex);
}

services.AddSingleton(settings);
return settings;
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs.Shared/FoxIDs.Shared.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>1.4.6</Version>
<Version>1.4.8</Version>
<RootNamespace>FoxIDs</RootNamespace>
<Authors>Anders Revsgaard</Authors>
<Company>ITfoxtec</Company>
Expand Down
10 changes: 10 additions & 0 deletions src/FoxIDs.Shared/Models/Config/ApplicationInsightsSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using System.ComponentModel.DataAnnotations;

namespace FoxIDs.Models.Config
{
public class ApplicationInsightsSettings
{
[Required]
public string ConnectionString { get; set; }
}
}
14 changes: 14 additions & 0 deletions src/FoxIDs.Shared/Models/Config/Settings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ public class Settings : IValidatableObject
/// </summary>
public string FoxIDsControlEndpoint { get; set; }

/// <summary>
/// Application insights settings
/// </summary>
[ValidateComplexType]
public ApplicationInsightsSettings ApplicationInsights { get; set; }

/// <summary>
/// Optionally accept to use HTTP.
/// </summary>
Expand Down Expand Up @@ -127,6 +133,14 @@ public virtual IEnumerable<ValidationResult> Validate(ValidationContext validati
}
}

if (Options.Log == LogOptions.ApplicationInsights)
{
if (ApplicationInsights == null)
{
results.Add(new ValidationResult($"The field {nameof(ApplicationInsights)} is required if {nameof(Options.Log)} is {Options.Log}.", new[] { nameof(ApplicationInsights) }));
}
}

return results;
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs.SharedBase/FoxIDs.SharedBase.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>1.4.6</Version>
<Version>1.4.8</Version>
<RootNamespace>FoxIDs</RootNamespace>
<Authors>Anders Revsgaard</Authors>
<Company>ITfoxtec</Company>
Expand Down
2 changes: 1 addition & 1 deletion src/FoxIDs/FoxIDs.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>1.4.6</Version>
<Version>1.4.8</Version>
<RootNamespace>FoxIDs</RootNamespace>
<Authors>Anders Revsgaard</Authors>
<Company>ITfoxtec</Company>
Expand Down
20 changes: 8 additions & 12 deletions src/FoxIDs/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace FoxIDs
Expand All @@ -21,13 +22,12 @@ public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
.ConfigureKestrel(options => options.AddServerHeader = false)
.ConfigureAppConfiguration((context, config) =>
{
var builtConfig = config.Build();
if (!context.HostingEnvironment.IsDevelopment())
{
var keyStorageOption = builtConfig["Settings:Options:KeyStorage"];
if (string.IsNullOrWhiteSpace(keyStorageOption) || keyStorageOption.Equals(KeyStorageOptions.KeyVault.ToString(), StringComparison.Ordinal))
var settings = config.Build().BindConfig<Settings>(nameof(Settings));
if (settings.Options.KeyStorage == KeyStorageOptions.KeyVault)
{
config.AddAzureKeyVault(new Uri(builtConfig["Settings:KeyVault:EndpointUri"]), new DefaultAzureCredential());
config.AddAzureKeyVault(new Uri(settings.KeyVault.EndpointUri), new DefaultAzureCredential());
}
}
})
Expand All @@ -37,15 +37,11 @@ public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
// Remove all loggers like console, debug, event source etc.
logging.ClearProviders();

var logOption = context.Configuration["Settings:Options:Log"];
if (string.IsNullOrWhiteSpace(logOption) || logOption.Equals(LogOptions.ApplicationInsights.ToString(), StringComparison.Ordinal))
var settings = context.Configuration.BindConfig<Settings>(nameof(Settings));
if (settings.Options.Log == LogOptions.ApplicationInsights)
{
var connectionString = context.Configuration.GetSection("ApplicationInsights:ConnectionString")?.Value;
if (!string.IsNullOrWhiteSpace(connectionString))
{
logging.AddApplicationInsights(configuration => configuration.ConnectionString = connectionString, options => { });
return;
}
logging.AddApplicationInsights(configuration => configuration.ConnectionString = settings.ApplicationInsights.ConnectionString, options => { });
return;
}
});
}
Expand Down

0 comments on commit a430e13

Please sign in to comment.