feat(configmanager): integrate SecureStore for credential management

Add SecureStore integration to ConfigManager for secure handling of connection
strings and sensitive configuration values. Includes store/secret management
UI, encrypted .store file support, and comprehensive test coverage.
This commit is contained in:
Joseph Doherty
2026-01-20 02:51:16 -05:00
parent d49330e697
commit 94d5a864e0
44 changed files with 6220 additions and 4 deletions
@@ -36,6 +36,15 @@
<DataTemplate DataType="{x:Type forms:PipelineFormViewModel}">
<views:PipelineFormView/>
</DataTemplate>
<DataTemplate DataType="{x:Type forms:SecureStoreLockedFormViewModel}">
<views:SecureStoreLockedFormView/>
</DataTemplate>
<DataTemplate DataType="{x:Type forms:SecureStoreUnlockedFormViewModel}">
<views:SecureStoreUnlockedFormView/>
</DataTemplate>
<DataTemplate DataType="{x:Type forms:SecretFormViewModel}">
<views:SecretFormView/>
</DataTemplate>
</Window.DataTemplates>
<DockPanel>
@@ -57,6 +66,35 @@
<Separator/>
<MenuItem Header="View _Backups..."/>
</MenuItem>
<MenuItem Header="_Secure Stores">
<MenuItem Header="_New Store..." Command="{Binding NewStoreCommand}" InputGesture="Ctrl+Shift+N">
<MenuItem.Icon>
<TextBlock Text="+" FontSize="14" FontWeight="Bold"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="_Add Existing Store..." Command="{Binding AddExistingStoreCommand}" InputGesture="Ctrl+Shift+O">
<MenuItem.Icon>
<TextBlock Text="..." FontSize="14"/>
</MenuItem.Icon>
</MenuItem>
<Separator/>
<MenuItem Header="_Save Store" Command="{Binding SaveStoreCommand}" InputGesture="Ctrl+Shift+S">
<MenuItem.Icon>
<TextBlock Text="S" FontSize="12" FontWeight="Bold"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="_Lock All Stores" Command="{Binding LockAllStoresCommand}">
<MenuItem.Icon>
<TextBlock Text="L" FontSize="12" FontWeight="Bold"/>
</MenuItem.Icon>
</MenuItem>
<Separator/>
<MenuItem Header="_Generate Key File..." Command="{Binding GenerateKeyFileCommand}">
<MenuItem.Icon>
<TextBlock Text="K" FontSize="12" FontWeight="Bold"/>
</MenuItem.Icon>
</MenuItem>
</MenuItem>
<MenuItem Header="_Help">
<MenuItem Header="_About ConfigManager"/>
</MenuItem>
@@ -74,6 +112,9 @@
<Border Width="1" Height="20" Background="#2D3540" Margin="4,0"/>
<Button Content="Test" Command="{Binding TestConnectionCommand}" Classes="toolbar"/>
<Button Content="Validate" Command="{Binding ValidateCommand}" Classes="toolbar"/>
<Border Width="1" Height="20" Background="#2D3540" Margin="4,0"/>
<Button Content="Unlock" Command="{Binding UnlockStoreCommand}" ToolTip.Tip="Unlock/Lock Store" Classes="toolbar"/>
<Button Content="+ Secret" Command="{Binding AddSecretCommand}" ToolTip.Tip="Add Secret" Classes="toolbar"/>
</StackPanel>
</Border>
@@ -123,6 +164,17 @@
SelectedItem="{Binding SelectedNode}"
Background="Transparent"
Margin="8">
<TreeView.ContextMenu>
<ContextMenu>
<MenuItem Header="Unlock Store..." Command="{Binding UnlockStoreCommand}"/>
<MenuItem Header="Lock Store" Command="{Binding LockStoreCommand}"/>
<Separator/>
<MenuItem Header="Add Secret..." Command="{Binding AddSecretCommand}"/>
<MenuItem Header="Delete Secret" Command="{Binding DeleteSecretCommand}"/>
<Separator/>
<MenuItem Header="Save Store" Command="{Binding SaveStoreCommand}"/>
</ContextMenu>
</TreeView.ContextMenu>
<TreeView.ItemTemplate>
<TreeDataTemplate ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal" Spacing="8">