feat(configmanager): add runtime config validation using Infrastructure validators
Enable ConfigManager to validate runtime configuration (SecureStore secrets, connection strings, LDAP) using the same validators as the Host application. Adds AddInfrastructureValidators() extension for shared validator registration.
This commit is contained in:
@@ -24,6 +24,7 @@ public class MainWindowViewModel : ViewModelBase
|
||||
private readonly IDialogService? _dialogService;
|
||||
private readonly ISecureStoreManager _secureStoreManager;
|
||||
private readonly IClipboardService _clipboardService;
|
||||
private readonly IRuntimeConfigValidationService _runtimeValidationService;
|
||||
private readonly ILogger<MainWindowViewModel>? _logger;
|
||||
|
||||
private string _configFolderPath = "No folder selected";
|
||||
@@ -193,6 +194,11 @@ public class MainWindowViewModel : ViewModelBase
|
||||
/// </summary>
|
||||
public ICommand DeletePipelineCommand { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the command for validating runtime configuration using Infrastructure validators.
|
||||
/// </summary>
|
||||
public ICommand ValidateRuntimeConfigCommand { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="MainWindowViewModel"/> class.
|
||||
/// </summary>
|
||||
@@ -204,6 +210,7 @@ public class MainWindowViewModel : ViewModelBase
|
||||
/// <param name="dialogService">Service for showing platform dialogs.</param>
|
||||
/// <param name="secureStoreManager">Service for managing encrypted secret stores.</param>
|
||||
/// <param name="clipboardService">Service for clipboard operations.</param>
|
||||
/// <param name="runtimeValidationService">Service for runtime configuration validation.</param>
|
||||
/// <param name="logger">Optional logger for recording view model activities.</param>
|
||||
public MainWindowViewModel(
|
||||
IFileSystem fileSystem,
|
||||
@@ -214,6 +221,7 @@ public class MainWindowViewModel : ViewModelBase
|
||||
IDialogService? dialogService,
|
||||
ISecureStoreManager secureStoreManager,
|
||||
IClipboardService clipboardService,
|
||||
IRuntimeConfigValidationService runtimeValidationService,
|
||||
ILogger<MainWindowViewModel>? logger)
|
||||
{
|
||||
_fileSystem = fileSystem;
|
||||
@@ -224,6 +232,7 @@ public class MainWindowViewModel : ViewModelBase
|
||||
_dialogService = dialogService;
|
||||
_secureStoreManager = secureStoreManager;
|
||||
_clipboardService = clipboardService;
|
||||
_runtimeValidationService = runtimeValidationService;
|
||||
_logger = logger;
|
||||
|
||||
OpenFolderCommand = new AsyncRelayCommand(OpenFolderAsync);
|
||||
@@ -249,6 +258,11 @@ public class MainWindowViewModel : ViewModelBase
|
||||
AddPipelineCommand = new AsyncRelayCommand(AddPipelineAsync, CanAddPipeline);
|
||||
DeletePipelineCommand = new AsyncRelayCommand(DeletePipelineAsync, CanDeletePipeline);
|
||||
|
||||
// Validation commands
|
||||
ValidateRuntimeConfigCommand = new AsyncRelayCommand(
|
||||
ValidateRuntimeConfigAsync,
|
||||
() => ConfigFolderPath != "No folder selected");
|
||||
|
||||
_ = InitializeAsync();
|
||||
}
|
||||
|
||||
@@ -264,6 +278,7 @@ public class MainWindowViewModel : ViewModelBase
|
||||
null,
|
||||
new SecureStoreManager(),
|
||||
new NullClipboardService(),
|
||||
new RuntimeConfigValidationService(new SecureStoreManager()),
|
||||
null)
|
||||
{
|
||||
}
|
||||
@@ -746,6 +761,31 @@ public class MainWindowViewModel : ViewModelBase
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validates runtime configuration using Infrastructure validators (SecureStore, Connection Strings, LDAP).
|
||||
/// </summary>
|
||||
private async Task ValidateRuntimeConfigAsync()
|
||||
{
|
||||
if (_dialogService == null || ConfigFolderPath == "No folder selected")
|
||||
return;
|
||||
|
||||
var results = _runtimeValidationService.ValidateRuntimeConfig(ConfigFolderPath);
|
||||
|
||||
// Convert to ValidationResult for dialog
|
||||
var appSettingsResult = new ValidationResult();
|
||||
var pipelinesResult = new ValidationResult(); // Will remain empty for runtime validation
|
||||
|
||||
foreach (var result in results)
|
||||
{
|
||||
foreach (var error in result.Errors)
|
||||
appSettingsResult.AddError($"[{result.ValidatorName}] {error}");
|
||||
foreach (var warning in result.Warnings)
|
||||
appSettingsResult.AddWarning($"[{result.ValidatorName}] {warning}");
|
||||
}
|
||||
|
||||
await _dialogService.ShowValidationResultsAsync(appSettingsResult, pipelinesResult);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests database connections defined in the configuration.
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user