fix(sync): normalize username to lowercase for Mattermost and Gitea password sync
All checks were successful
Build and Deploy / deploy (push) Successful in 42s

Mattermost and Gitea store usernames as lowercase but SilverDESK passes
the original case (e.g. "Merlin" instead of "merlin"), causing 404/400
errors on case-sensitive API lookups.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-25 22:32:11 +00:00
parent 4a087a4f24
commit af971b7b83

View File

@@ -193,26 +193,29 @@ public class ProvisioningService
public async Task<(bool Success, string Message)> SyncPasswordAsync(string username, string newPassword) public async Task<(bool Success, string Message)> SyncPasswordAsync(string username, string newPassword)
{ {
// Normalize username to lowercase - Mattermost and Gitea store usernames as lowercase
// and their API lookups are case-sensitive
var normalizedUsername = username.ToLowerInvariant();
var results = new List<string>(); var results = new List<string>();
var allSuccess = true; var allSuccess = true;
// 1. Mattermost - need to look up user ID first // 1. Mattermost - need to look up user ID first
var (mmOk, mmMsg) = await UpdateMattermostPasswordAsync(username, newPassword); var (mmOk, mmMsg) = await UpdateMattermostPasswordAsync(normalizedUsername, newPassword);
results.Add($"Mattermost: {mmMsg}"); results.Add($"Mattermost: {mmMsg}");
if (!mmOk) allSuccess = false; if (!mmOk) allSuccess = false;
// 2. Mailcow // 2. Mailcow
var (mailOk, mailMsg) = await UpdateMailcowPasswordAsync(username, newPassword); var (mailOk, mailMsg) = await UpdateMailcowPasswordAsync(normalizedUsername, newPassword);
results.Add($"Mailcow: {mailMsg}"); results.Add($"Mailcow: {mailMsg}");
if (!mailOk) allSuccess = false; if (!mailOk) allSuccess = false;
// 3. Gitea // 3. Gitea
var (giteaOk, giteaMsg) = await UpdateGiteaPasswordAsync(username, newPassword); var (giteaOk, giteaMsg) = await UpdateGiteaPasswordAsync(normalizedUsername, newPassword);
results.Add($"Gitea: {giteaMsg}"); results.Add($"Gitea: {giteaMsg}");
if (!giteaOk) allSuccess = false; if (!giteaOk) allSuccess = false;
var summary = string.Join("; ", results); var summary = string.Join("; ", results);
_logger.LogInformation("Password sync for {Username}: {Summary}", username, summary); _logger.LogInformation("Password sync for {Username} (normalized: {NormalizedUsername}): {Summary}", username, normalizedUsername, summary);
return (allSuccess, summary); return (allSuccess, summary);
} }