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
-
+