diff --git a/backend/FwLite/FwLiteMaui/FwLiteMauiKernel.cs b/backend/FwLite/FwLiteMaui/FwLiteMauiKernel.cs
index f2568bef9c..5a8edae35b 100644
--- a/backend/FwLite/FwLiteMaui/FwLiteMauiKernel.cs
+++ b/backend/FwLite/FwLiteMaui/FwLiteMauiKernel.cs
@@ -19,6 +19,17 @@ namespace FwLiteMaui;
public static class FwLiteMauiKernel
{
+ ///
+ /// Lowest-precedence configuration, registered before environment variables in MauiProgram so each entry
+ /// can be overridden at runtime (e.g. Logging__LogLevel__FwLiteShared.Auth.LoggerAdapter=Information).
+ ///
+ public static readonly IReadOnlyDictionary DefaultConfiguration = new Dictionary
+ {
+ //MSAL is chatty at Information; Warning still surfaces listener and token failures
+ ["Logging:LogLevel:FwLiteShared.Auth.LoggerAdapter"] = "Warning",
+ ["Logging:LogLevel:Microsoft.EntityFrameworkCore.Database"] = "Warning",
+ };
+
public static void AddFwLiteMauiServices(this IServiceCollection services,
ConfigurationManager configuration,
ILoggingBuilder logging)
@@ -135,8 +146,9 @@ public static void AddFwLiteMauiServices(this IServiceCollection services,
services.AddOptions().BindConfiguration("FwLiteMaui");
var fwLiteMauiConfig = configuration.GetSection("FwLiteMaui").Get() ?? new();
var baseDataPath = fwLiteMauiConfig.BaseDataDir;
- logging.AddFilter("FwLiteShared.Auth.LoggerAdapter", LogLevel.Warning);
- logging.AddFilter("Microsoft.EntityFrameworkCore.Database", LogLevel.Warning);
+ //filters come from configuration (defaults in DefaultConfiguration) so a user can raise a category at
+ //runtime, e.g. Logging__LogLevel__FwLiteShared.Auth.LoggerAdapter=Information for MSAL sign in details
+ logging.AddConfiguration(configuration.GetSection("Logging"));
Directory.CreateDirectory(baseDataPath);
services.Configure(config =>
{
@@ -146,6 +158,7 @@ public static void AddFwLiteMauiServices(this IServiceCollection services,
{
config.CacheFileName = fwLiteMauiConfig.AuthCacheFilePath;
config.SystemWebViewLogin = true;
+ config.OpenSystemBrowser = uri => Launcher.Default.OpenAsync(uri);
});
services.Configure(config =>
{
diff --git a/backend/FwLite/FwLiteMaui/MauiProgram.cs b/backend/FwLite/FwLiteMaui/MauiProgram.cs
index faba947f20..3978644312 100644
--- a/backend/FwLite/FwLiteMaui/MauiProgram.cs
+++ b/backend/FwLite/FwLiteMaui/MauiProgram.cs
@@ -46,6 +46,7 @@ public static MauiApp CreateMauiApp()
var builder = MauiApp.CreateBuilder();
// MAUI doesn't load environment variables into configuration by default (unlike ASP.NET Core),
// so add them here. This lets config sections like "FwLiteMaui" be set via e.g. FwLiteMaui__BaseDataDir.
+ builder.Configuration.AddInMemoryCollection(FwLiteMauiKernel.DefaultConfiguration);
builder.Configuration.AddEnvironmentVariables();
builder
.UseMauiApp()
diff --git a/backend/FwLite/FwLiteShared/Auth/AuthConfig.cs b/backend/FwLite/FwLiteShared/Auth/AuthConfig.cs
index 0db7dea81e..7c5f0b79fc 100644
--- a/backend/FwLite/FwLiteShared/Auth/AuthConfig.cs
+++ b/backend/FwLite/FwLiteShared/Auth/AuthConfig.cs
@@ -22,6 +22,12 @@ public class AuthConfig
public Func