Persist replication credentials

This commit is contained in:
2026-01-29 12:24:18 +13:00
parent aab4919494
commit 39982249db

View File

@@ -130,6 +130,33 @@ function Save-Defaults {
Set-Content -Path $path -Value $json -Encoding ascii
}
function Get-ReplicationCredentialPath {
$dir = Join-Path $env:ProgramData "Certy"
return Join-Path $dir "replication-cred.xml"
}
function Load-ReplicationCredential {
$path = Get-ReplicationCredentialPath
if (-not (Test-Path -Path $path -PathType Leaf)) { return $null }
try {
$cred = Import-Clixml -Path $path
if ($cred -is [pscredential]) { return $cred }
} catch {
# Ignore load errors and treat as missing.
}
return $null
}
function Save-ReplicationCredential {
param([pscredential]$Credential)
$path = Get-ReplicationCredentialPath
$dir = Split-Path -Path $path -Parent
if (-not (Test-Path -Path $dir -PathType Container)) {
New-Item -Path $dir -ItemType Directory -Force | Out-Null
}
$Credential | Export-Clixml -Path $path
}
function Get-DefaultValue {
param(
[object]$Defaults,
@@ -658,6 +685,14 @@ $replicationRemoteBox = Add-CheckBox "Run repadmin remotely (PowerShell)" $xInpu
$replicationRemoteBox.Checked = $true
$y += $rowHeight + $gap
$replicationCredBtn = New-Object System.Windows.Forms.Button
$replicationCredBtn.Text = "Set Replication Credentials"
$replicationCredBtn.Location = [System.Drawing.Point]::new($xInput, $y)
$replicationCredBtn.Size = [System.Drawing.Size]::new(220, 26)
$panel.Controls.Add($replicationCredBtn)
Style-ButtonSecondary $replicationCredBtn
$y += $rowHeight + $gap
$y += $gap
Add-SectionHeader "ACME / Output"
@@ -768,6 +803,7 @@ function Update-ReplicationUI {
$replicationCmdBox.Enabled = $enabled
$replicationDelayBox.Enabled = $enabled
$replicationRemoteBox.Enabled = $enabled
$replicationCredBtn.Enabled = $enabled
$dnsListBox.Enabled = $enabled
}
@@ -898,6 +934,7 @@ function Apply-Layout {
$replicationCmdBox.Width = $inputWidthCalc
$replicationDelayBox.Width = $inputWidthCalc
$replicationRemoteBox.Width = $inputWidthCalc
$replicationCredBtn.Width = [Math]::Min($inputWidthCalc, 260)
$wacsPathBox.Width = $inputWidthCalc
$outputTypeBox.Width = $inputWidthCalc
$outputPathBox.Width = $inputWidthCalc
@@ -1035,6 +1072,16 @@ $outputTypeBox.Add_SelectedIndexChanged({
Update-OutputTypeUI
})
$replicationCredBtn.Add_Click({
$cred = Get-Credential -Message "Enter credentials for replication sessions."
if (-not $cred) {
& $logAction "Replication credentials not set."
return
}
Save-ReplicationCredential -Credential $cred
& $logAction "Replication credentials saved for this user."
})
$hostsBox.Add_TextChanged({
Update-ZoneFromHostInput
})
@@ -1139,10 +1186,15 @@ $runBtn.Add_Click({
}
$replicationCredential = $null
if ($replicationRemoteBox.Checked) {
$replicationCredential = Get-Credential -Message "Enter credentials for replication targets."
$replicationCredential = Load-ReplicationCredential
if (-not $replicationCredential) {
& $logAction "Replication canceled: credentials not provided."
return
$replicationCredential = Get-Credential -Message "Enter credentials for replication targets."
if (-not $replicationCredential) {
& $logAction "Replication canceled: credentials not provided."
return
}
Save-ReplicationCredential -Credential $replicationCredential
& $logAction "Replication credentials saved for this user."
}
}
Invoke-Replication -Servers $replicationTargets -Command $replicationCmdBox.Text -UseRemote $replicationRemoteBox.Checked -Credential $replicationCredential -Log $logAction