Fixing bug on password not being cleared

This commit is contained in:
rockstardev 2025-03-05 22:14:27 -06:00
parent 1da2cedffd
commit 70c2fc0a9e
No known key found for this signature in database
GPG key ID: 4F224698945A6EE7
2 changed files with 19 additions and 5 deletions

View file

@ -4104,6 +4104,9 @@ namespace BTCPayServer.Tests
var admin = tester.NewAccount(); var admin = tester.NewAccount();
await admin.GrantAccessAsync(true); await admin.GrantAccessAsync(true);
var adminClient = await admin.CreateClient(Policies.Unrestricted); var adminClient = await admin.CreateClient(Policies.Unrestricted);
// validate that clear email settings will not throw an error
await adminClient.UpdateServerEmailSettings(new ServerEmailSettingsData());
var data = new ServerEmailSettingsData var data = new ServerEmailSettingsData
{ {
From = "admin@admin.com", From = "admin@admin.com",
@ -4130,6 +4133,11 @@ namespace BTCPayServer.Tests
From = "invalid" From = "invalid"
})); }));
// check that clear server email settings works
await adminClient.UpdateServerEmailSettings(new ServerEmailSettingsData());
var clearedSettings = await adminClient.GetServerEmailSettings();
Assert.Equal(JsonConvert.SerializeObject(new EmailSettingsData { PasswordSet = false }), JsonConvert.SerializeObject(clearedSettings));
// NOTE: This email test fails silently in EmailSender.cs#31, can't test, but leaving for the future as reminder // NOTE: This email test fails silently in EmailSender.cs#31, can't test, but leaving for the future as reminder
//await adminClient.SendEmail(admin.StoreId, //await adminClient.SendEmail(admin.StoreId,
// new SendEmailRequest { Body = "lol", Subject = "subj", Email = "to@example.org" }); // new SendEmailRequest { Body = "lol", Subject = "subj", Email = "to@example.org" });
@ -4144,8 +4152,8 @@ namespace BTCPayServer.Tests
var admin = tester.NewAccount(); var admin = tester.NewAccount();
await admin.GrantAccessAsync(true); await admin.GrantAccessAsync(true);
var adminClient = await admin.CreateClient(Policies.Unrestricted); var adminClient = await admin.CreateClient(Policies.Unrestricted);
await adminClient.UpdateStoreEmailSettings(admin.StoreId, // validate that clear email settings will not throw an error
new EmailSettingsData()); await adminClient.UpdateStoreEmailSettings(admin.StoreId, new EmailSettingsData());
var data = new EmailSettingsData var data = new EmailSettingsData
{ {
@ -4165,6 +4173,11 @@ namespace BTCPayServer.Tests
async () => await adminClient.UpdateStoreEmailSettings(admin.StoreId, async () => await adminClient.UpdateStoreEmailSettings(admin.StoreId,
new EmailSettingsData { From = "invalid" })); new EmailSettingsData { From = "invalid" }));
// clear store email settings
await adminClient.UpdateStoreEmailSettings(admin.StoreId, new EmailSettingsData());
var clearedSettings = await adminClient.GetStoreEmailSettings(admin.StoreId);
Assert.Equal(JsonConvert.SerializeObject(new EmailSettingsData { PasswordSet = false }), JsonConvert.SerializeObject(clearedSettings));
await adminClient.SendEmail(admin.StoreId, await adminClient.SendEmail(admin.StoreId,
new SendEmailRequest { Body = "lol", Subject = "subj", Email = "to@example.org" }); new SendEmailRequest { Body = "lol", Subject = "subj", Email = "to@example.org" });
} }

View file

@ -36,8 +36,9 @@ namespace BTCPayServer.Services.Mails
Server = data.Server, Server = data.Server,
Port = data.Port, Port = data.Port,
Login = data.Login, Login = data.Login,
// Retaining the password if it exists and was not provided in request // If login was provided but password was not, use the existing password from database
Password = string.IsNullOrEmpty(data.Password) ? existingPassword : data.Password, Password = !string.IsNullOrEmpty(data.Login) && string.IsNullOrEmpty(data.Password) ?
existingPassword : data.Password,
From = data.From, From = data.From,
DisableCertificateCheck = data.DisableCertificateCheck DisableCertificateCheck = data.DisableCertificateCheck
}; };