Setup-SMTPGraphRelay.ps1 aktualisiert

This commit is contained in:
manuel.maier committed 2026-10-13 13:01:25 +02:00
1 parent 832fc63f6b
commit f14efa5ef7
1 file changed
+70 -50
+70 -50
View File
@@ -978,81 +978,101 @@ function Manage-FailedQueue {
} }
function Manage-SmtpAuth { function Manage-SmtpAuth {
$config = Get-RelayConfig -TargetPath ($InstallPath) $config = Get-RelayConfig -TargetPath ($InstallPath);
if (-not $config) { Write-Fail "config.json nicht gefunden."; return } if (-not $config) { Write-Fail "config.json nicht gefunden."; return; }
$config = Ensure-SmtpAuthConfig -Config ($config) $config = Ensure-SmtpAuthConfig -Config ($config);
while ($true) { while ($true) {
Clear-Host Clear-Host;
Write-Title "SMTPGraphRelay - SMTP-AUTH" Write-Title "SMTPGraphRelay - SMTP-AUTH";
Write-Host " [1] SMTP-AUTH erforderlich EIN/AUS" $users = @($config.Smtp.AuthUsers);
Write-Host " [2] Benutzer hinzufuegen" $authState = if ([bool]$config.Smtp.RequireAuth) { "ERFORDERLICH" } else { "optional / nicht erforderlich" };
Write-Host " [3] Benutzer anzeigen"
Write-Host " [4] Passwort aendern"
Write-Host " [5] Benutzer loeschen"
Write-Host " [6] Netze ohne Auth verwalten"
Write-Host " [7] Max. Fehlversuche aendern"
Write-Host " [0] Zurueck`n"
$choice = Read-Host "Auswahl" Write-Host "Status: $authState";
Write-Host "Benutzer: $($users.Count)";
Write-Host "Max. Fehlversuche: $($config.Smtp.AuthMaxFailures)";
Write-Host "Ohne Auth erlaubte Netze: $(@($config.Smtp.AllowUnauthenticatedNetworks) -join ', ')";
Write-Host "";
Write-Host " [1] SMTP-AUTH erforderlich EIN/AUS";
Write-Host " [2] Benutzer hinzufuegen";
Write-Host " [3] Benutzer anzeigen";
Write-Host " [4] Passwort aendern";
Write-Host " [5] Benutzer loeschen";
Write-Host " [6] Netze ohne Auth verwalten";
Write-Host " [7] Max. Fehlversuche aendern";
Write-Host " [0] Zurueck`n";
$choice = Read-Host "Auswahl";
switch ($choice) { switch ($choice) {
"1" { "1" {
$config.Smtp.RequireAuth = -not [bool]$config.Smtp.RequireAuth $config.Smtp.RequireAuth = -not [bool]$config.Smtp.RequireAuth;
Save-SmtpAuthConfigAndRestart -Config ($config) if ($config.Smtp.RequireAuth -and @($config.Smtp.AuthUsers).Count -eq 0) {
Write-Ok "Status geaendert."; Read-Host "Enter" Write-Warn "AUTH wurde aktiviert, aber es existiert noch kein SMTP-Benutzer.";
}
Save-SmtpAuthConfigAndRestart -Config ($config);
Write-Ok "Status geaendert."; Read-Host "Enter";
} }
"2" { "2" {
$username = Read-Host "Benutzername" $username = Read-Host "Benutzername";
$existing = @($config.Smtp.AuthUsers) | Where-Object { ([string]$_.Username).Equals($username, [StringComparison]::OrdinalIgnoreCase) } | Select-Object -First 1 if ([string]::IsNullOrWhiteSpace($username) -or $username -notmatch '^[A-Za-z0-9._@-]{1,128}$') { Write-Fail "Ungueltiger Benutzername."; Read-Host "Enter"; continue; }
if ($existing) { Write-Fail "Benutzer existiert bereits."; Read-Host "Enter"; continue } $existing = @($config.Smtp.AuthUsers) | Where-Object { ([string]$_.Username).Equals($username, [StringComparison]::OrdinalIgnoreCase) } | Select-Object -First 1;
if ($existing) { Write-Fail "Benutzer existiert bereits."; Read-Host "Enter"; continue; }
$plain1 = Read-Host "Passwort" $plain1 = Read-Host "Passwort";
$plain2 = Read-Host "Passwort wiederholen" $plain2 = Read-Host "Passwort wiederholen";
if ($plain1.Length -lt 8 -or $plain1 -cne$plain2) { Write-Fail "Passwort ungueltig."; Read-Host "Enter"; continue } if ($plain1.Length -lt 8 -or $plain1 -cne $plain2) { Write-Fail "Passwort ungueltig (mind. 8 Zeichen oder stimmen nicht ueberein)."; Read-Host "Enter"; continue; }
$record = New-SmtpPasswordRecord -Password ($plain1) $record = New-SmtpPasswordRecord -Password ($plain1);
$newUser = [pscustomobject]@{ Username =$username; Salt = $record.Salt; PasswordHash =$record.PasswordHash; Iterations = $record.Iterations }$config.Smtp.AuthUsers = @($config.Smtp.AuthUsers) + @($newUser) $newUser = [pscustomobject]@{ Username = $username; Salt = $record.Salt; PasswordHash = $record.PasswordHash; Iterations = $record.Iterations };
Save-SmtpAuthConfigAndRestart -Config ($config) $config.Smtp.AuthUsers = @($config.Smtp.AuthUsers) + @($newUser);
Write-Ok "Angelegt."; Read-Host "Enter" Save-SmtpAuthConfigAndRestart -Config ($config);
Write-Ok "Angelegt."; Read-Host "Enter";
}
"3" {
if (@($config.Smtp.AuthUsers).Count -eq 0) { Write-Warn "Keine SMTP-Benutzer vorhanden."; } else { @($config.Smtp.AuthUsers) | Format-Table Username,Iterations -AutoSize; }
Read-Host "Enter";
} }
"3" { @($config.Smtp.AuthUsers) | Format-Table Username,Iterations -AutoSize; Read-Host "Enter" }
"4" { "4" {
$username = Read-Host "Benutzername" $username = Read-Host "Benutzername";
$user = @($config.Smtp.AuthUsers) | Where-Object { ([string]$_.Username).Equals($username, [StringComparison]::OrdinalIgnoreCase) } | Select-Object -First 1 $user = @($config.Smtp.AuthUsers) | Where-Object { ([string]$_.Username).Equals($username, [StringComparison]::OrdinalIgnoreCase) } | Select-Object -First 1;
if (-not $user) { Write-Fail "Benutzer nicht gefunden."; Read-Host "Enter"; continue } if (-not $user) { Write-Fail "Benutzer nicht gefunden."; Read-Host "Enter"; continue; }
$plain1 = Read-Host "Neues Passwort" $plain1 = Read-Host "Neues Passwort";
$plain2 = Read-Host "Passwort wiederholen" $plain2 = Read-Host "Passwort wiederholen";
if ($plain1.Length -lt 8 -or $plain1 -cne$plain2) { Write-Fail "Passwort ungueltig."; Read-Host "Enter"; continue } if ($plain1.Length -lt 8 -or $plain1 -cne $plain2) { Write-Fail "Passwort ungueltig (mind. 8 Zeichen oder stimmen nicht ueberein)."; Read-Host "Enter"; continue; }
$record = New-SmtpPasswordRecord -Password ($plain1) $record = New-SmtpPasswordRecord -Password ($plain1);
$user.Salt =$record.Salt; $user.PasswordHash =$record.PasswordHash; $user.Iterations =$record.Iterations $user.Salt = $record.Salt; $user.PasswordHash = $record.PasswordHash; $user.Iterations = $record.Iterations;
Save-SmtpAuthConfigAndRestart -Config ($config) Save-SmtpAuthConfigAndRestart -Config ($config);
Write-Ok "Geaendert."; Read-Host "Enter" Write-Ok "Geaendert."; Read-Host "Enter";
} }
"5" { "5" {
$username = Read-Host "Benutzername" $username = Read-Host "Benutzername";
$found = @($config.Smtp.AuthUsers) | Where-Object { ([string]$_.Username).Equals($username, [StringComparison]::OrdinalIgnoreCase) };
if (-not $found) { Write-Fail "Benutzer nicht gefunden."; Read-Host "Enter"; continue; }
if (Confirm-Yes "Loeschen?") { if (Confirm-Yes "Loeschen?") {
$config.Smtp.AuthUsers = @($config.Smtp.AuthUsers | Where-Object { -not ([string]$_.Username).Equals($username, [StringComparison]::OrdinalIgnoreCase) }) $config.Smtp.AuthUsers = @($config.Smtp.AuthUsers | Where-Object { -not ([string]$_.Username).Equals($username, [StringComparison]::OrdinalIgnoreCase) });
Save-SmtpAuthConfigAndRestart -Config ($config) Save-SmtpAuthConfigAndRestart -Config ($config);
Write-Ok "Geloescht.";
} }
Read-Host "Enter";
} }
"6" { "6" {
$current = @($config.Smtp.AllowUnauthenticatedNetworks) -join "," $current = @($config.Smtp.AllowUnauthenticatedNetworks) -join ",";
$input = Read-Default "Netze/IPs ohne AUTH" $(if ($current) {$current } else { "-" }) $input = Read-Default "Netze/IPs ohne AUTH" $(if ($current) {$current } else { "-" });
if ($input -eq "-") { $config.Smtp.AllowUnauthenticatedNetworks = @() } else { $config.Smtp.AllowUnauthenticatedNetworks = @($input -split "," | ForEach-Object { $_.Trim() } \vert{} Where-Object {$_ }) } if ($input -eq "-") { $config.Smtp.AllowUnauthenticatedNetworks = @(); } else { $config.Smtp.AllowUnauthenticatedNetworks = @($input -split "," | ForEach-Object { $_.Trim() } | Where-Object { $_ }); }
Save-SmtpAuthConfigAndRestart -Config ($config) Save-SmtpAuthConfigAndRestart -Config ($config);
} }
"7" { "7" {
$value = Read-Host "Max. Fehlversuche" $value = Read-Host "Max. Fehlversuche";
if ($value -match '^\d+$') {$config.Smtp.AuthMaxFailures = [int]$value; Save-SmtpAuthConfigAndRestart -Config ($config) } if ($value -match '^\d+$') { $config.Smtp.AuthMaxFailures = [int]$value; Save-SmtpAuthConfigAndRestart -Config ($config); }
} }
"0" { return } "0" { return; }
} }
$config = Get-RelayConfig -TargetPath ($InstallPath) $config = Get-RelayConfig -TargetPath ($InstallPath);
$config = Ensure-SmtpAuthConfig -Config ($config) $config = Ensure-SmtpAuthConfig -Config ($config);
} }
} }