diff --git a/docs/changelog.html b/docs/changelog.html index 0ced1bc68..20c21b929 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -95,6 +95,10 @@

Fixed

Re-enable deleted currencies for an account when importing transactions in #810 +
  • + Populate existing authentication configuration in desktop app in + #811 +
  • diff --git a/source/Gnomeshade.Avalonia.Core/Configuration/ApplicationSettingsViewModel.cs b/source/Gnomeshade.Avalonia.Core/Configuration/ApplicationSettingsViewModel.cs index 59c00c3de..f8d77fdce 100644 --- a/source/Gnomeshade.Avalonia.Core/Configuration/ApplicationSettingsViewModel.cs +++ b/source/Gnomeshade.Avalonia.Core/Configuration/ApplicationSettingsViewModel.cs @@ -3,6 +3,8 @@ // See LICENSE.txt file in the project root for full license information. using System; +using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.Options; @@ -19,6 +21,7 @@ public sealed partial class ApplicationSettingsViewModel : ViewModelBase /// Gets or sets a value indicating whether authentication configuration is needed. [Notify] + [AlsoNotify(nameof(IsValid))] private bool _enableAuthentication; /// Initializes a new instance of the class. @@ -78,17 +81,24 @@ public async Task UpdateConfiguration() private async Task IsValidAsync() { - var valid = await Gnomeshade.IsValid; - if (!valid) + var tasks = new List> { - return false; - } + Gnomeshade.IsValid, + Task.Run(async () => !EnableAuthentication || await Authentication.IsValid), + }; - if (!EnableAuthentication) + do { - return true; + var finished = await Task.WhenAny(tasks); + if (finished.Result is false) + { + return false; + } + + tasks.Remove(finished); } + while (tasks.Any()); - return await Authentication.IsValid; + return true; } } diff --git a/source/Gnomeshade.Avalonia.Core/Configuration/AuthenticationConfigurationViewModel.cs b/source/Gnomeshade.Avalonia.Core/Configuration/AuthenticationConfigurationViewModel.cs index 792f05ce1..2dc0e6898 100644 --- a/source/Gnomeshade.Avalonia.Core/Configuration/AuthenticationConfigurationViewModel.cs +++ b/source/Gnomeshade.Avalonia.Core/Configuration/AuthenticationConfigurationViewModel.cs @@ -56,6 +56,10 @@ public AuthenticationConfigurationViewModel( { _logger = logger; _httpClient = httpClient; + + _authority = optionsMonitor.CurrentValue.Oidc?.Authority?.ToString(); + _clientId = optionsMonitor.CurrentValue.Oidc?.ClientId; + _clientSecret = optionsMonitor.CurrentValue.Oidc?.ClientSecret; } /// diff --git a/source/Gnomeshade.Avalonia.Core/Configuration/OidcOptions.cs b/source/Gnomeshade.Avalonia.Core/Configuration/OidcOptions.cs index 0f0bf1a56..e880d36a5 100644 --- a/source/Gnomeshade.Avalonia.Core/Configuration/OidcOptions.cs +++ b/source/Gnomeshade.Avalonia.Core/Configuration/OidcOptions.cs @@ -14,7 +14,7 @@ public sealed class OidcOptions { /// [Required] - public Uri Authority { get; set; } = null!; + public Uri? Authority { get; set; } /// [Required] diff --git a/source/Gnomeshade.Avalonia.Core/Configuration/OidcOptionsExtensions.cs b/source/Gnomeshade.Avalonia.Core/Configuration/OidcOptionsExtensions.cs index b45b58e5d..d19b2a60e 100644 --- a/source/Gnomeshade.Avalonia.Core/Configuration/OidcOptionsExtensions.cs +++ b/source/Gnomeshade.Avalonia.Core/Configuration/OidcOptionsExtensions.cs @@ -14,7 +14,7 @@ public static class OidcOptionsExtensions /// An instance of with the respective properties from . public static OidcClientOptions ToOidcClientOptions(this OidcOptions options) => new() { - Authority = options.Authority.ToString(), + Authority = options.Authority?.ToString(), ClientId = options.ClientId, ClientSecret = options.ClientSecret, Scope = options.Scope, diff --git a/source/Gnomeshade.Desktop/Views/Configuration/ApplicationSettingsView.axaml b/source/Gnomeshade.Desktop/Views/Configuration/ApplicationSettingsView.axaml index 45b37e807..a173aa75e 100644 --- a/source/Gnomeshade.Desktop/Views/Configuration/ApplicationSettingsView.axaml +++ b/source/Gnomeshade.Desktop/Views/Configuration/ApplicationSettingsView.axaml @@ -14,7 +14,7 @@ Enable OIDC provider - +