From 5fc99d73b0ff83e92790887cd14ab56dde92eb60 Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Sun, 6 Sep 2026 16:20:17 +0100 Subject: [PATCH 1/2] postit: harden oidc settings defaults on startup --- .../PostIt/ViewModels/Settings/Settings.cs | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/PostIt/PostIt/ViewModels/Settings/Settings.cs b/src/PostIt/PostIt/ViewModels/Settings/Settings.cs index b59ef9933..9547fb4f3 100644 --- a/src/PostIt/PostIt/ViewModels/Settings/Settings.cs +++ b/src/PostIt/PostIt/ViewModels/Settings/Settings.cs @@ -123,6 +123,8 @@ public partial class Settings : ViewModelBase // build options from a torn read. lock (_mutationGate) { + EnsureAuthenticationDefaultsLocked(); + var options = new OidcClientOptions { Authority = Authentication.Authority, @@ -151,6 +153,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 +355,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 From f316c4eb50d9d30fb9cbd530d4af685058295624 Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Sun, 6 Sep 2026 16:24:46 +0100 Subject: [PATCH 2/2] postit: ignore runtime status in settings json --- src/PostIt/PostIt/ViewModels/Settings/Settings.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/PostIt/PostIt/ViewModels/Settings/Settings.cs b/src/PostIt/PostIt/ViewModels/Settings/Settings.cs index 9547fb4f3..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)