feat: Add Instance Details ViewModel and UI for managing instance credentials

- Introduced InstanceDetailsViewModel to handle loading and displaying instance-specific credentials.
- Created InstanceDetailsWindow and associated XAML for displaying admin, database, and OAuth2 credentials.
- Updated InstancesViewModel to include command for opening instance details.
- Enhanced SettingsViewModel to manage Bitwarden and Xibo Bootstrap configurations, including connection testing.
- Added UI components for Bitwarden Secrets Manager and Xibo Bootstrap OAuth2 settings in the SettingsView.
- Implemented password visibility toggles and clipboard copy functionality for sensitive information.
This commit is contained in:
Matt Batchelder
2026-02-25 08:05:44 -05:00
parent 28e79459ac
commit a1c987ff21
17 changed files with 1608 additions and 42 deletions

View File

@@ -32,6 +32,7 @@ public class InstanceService
private readonly IDockerSecretsService _secrets;
private readonly XiboApiService _xibo;
private readonly SettingsService _settings;
private readonly PostInstanceInitService _postInit;
private readonly DockerOptions _dockerOptions;
private readonly ILogger<InstanceService> _logger;
@@ -44,6 +45,7 @@ public class InstanceService
IDockerSecretsService secrets,
XiboApiService xibo,
SettingsService settings,
PostInstanceInitService postInit,
IOptions<DockerOptions> dockerOptions,
ILogger<InstanceService> logger)
{
@@ -55,6 +57,7 @@ public class InstanceService
_secrets = secrets;
_xibo = xibo;
_settings = settings;
_postInit = postInit;
_dockerOptions = dockerOptions.Value;
_logger = logger;
}
@@ -255,8 +258,13 @@ public class InstanceService
_logger.LogInformation("Instance created: {StackName} | duration={DurationMs}ms", stackName, sw.ElapsedMilliseconds);
// ── 8. Post-instance init (fire-and-forget background task) ──────
// Waits for Xibo to be ready then creates admin user, OAuth app, and sets theme.
var instanceUrl = $"https://{cmsServerName}";
_ = Task.Run(async () => await _postInit.RunAsync(abbrev, instanceUrl));
deployResult.ServiceCount = 4;
deployResult.Message = "Instance deployed successfully.";
deployResult.Message = "Instance deployed successfully. Post-install setup is running in background.";
return deployResult;
}
catch (Exception ex)