diff --git a/src/PostIt/PostIt/ViewModels/Settings/Settings.cs b/src/PostIt/PostIt/ViewModels/Settings/Settings.cs index b59ef9933..0864c1416 100644 --- a/src/PostIt/PostIt/ViewModels/Settings/Settings.cs +++ b/src/PostIt/PostIt/ViewModels/Settings/Settings.cs @@ -7,6 +7,7 @@ using System.Collections.Generic; using System.IO; using System.Net.Http; using System.Text.Json; +using System.Text.Json.Serialization; [assembly: InternalsVisibleTo("PostIt.Tests")] @@ -32,6 +33,7 @@ public partial class Settings : ViewModelBase public partial string SearchText { get; set; } = string.Empty; [ObservableProperty] + [JsonIgnore] public partial StatusNotice ActionStatus { get; set; } = StatusNotice.Info("Pret."); public void SetActionStatus(string message, StatusSeverity severity = StatusSeverity.Info) @@ -123,6 +125,8 @@ public partial class Settings : ViewModelBase // build options from a torn read. lock (_mutationGate) { + EnsureAuthenticationDefaultsLocked(); + var options = new OidcClientOptions { Authority = Authentication.Authority, @@ -151,6 +155,25 @@ public partial class Settings : ViewModelBase } } + private void EnsureAuthenticationDefaultsLocked() + { + Authentication ??= new AuthenticationSettings(); + + if (string.IsNullOrWhiteSpace(Authentication.Authority)) + Authentication.Authority = AuthenticationSettings.DefaultAuthority; + + if (string.IsNullOrWhiteSpace(Authentication.ClientId)) + Authentication.ClientId = AuthenticationSettings.DefaultClientId; + + if (string.IsNullOrWhiteSpace(Authentication.RedirectUri)) + Authentication.RedirectUri = AuthenticationSettings.DesktopRedirectUri; + + if (Authentication.Scopes is null || Authentication.Scopes.Length == 0) + Authentication.Scopes = AuthenticationSettings.DefaultScopes; + + Authentication.RefreshScopeListText(); + } + /// /// Scopes the PostIt client always requires from the OIDC provider, /// regardless of what the user has in their settings file. @@ -334,11 +357,13 @@ public partial class Settings : ViewModelBase AuthenticationSettings.DesktopRedirectUri : settings.Authentication.RedirectUri; if (settings.Authentication.Scopes is null || settings.Authentication.Scopes.Length == 0) { - settings.Authentication.Scopes = AuthenticationSettings.DefaultScopes; + this.Authentication.Scopes = AuthenticationSettings.DefaultScopes; } else this.Authentication.Scopes = settings.Authentication.Scopes; } + + EnsureAuthenticationDefaultsLocked(); } // A disk load (or an embedded-resource fallback) is the // baseline, not a user edit. Clear the dirty flag last