Add initial password setup functionality: implement email sending for new account password setup and update user interface to include password setup button

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
troogs
2026-04-26 11:00:43 +02:00
parent 870930914e
commit b0866754e0
3 changed files with 47 additions and 3 deletions

View File

@@ -212,6 +212,34 @@ namespace FoodsharingSiegen.Server.Auth
#region Password Recovery
public async Task InitiateInitialPasswordSetup(string email, string baseUri)
{
if (string.IsNullOrWhiteSpace(email)) return;
var user = await Context.Users!.FirstOrDefaultAsync(x => x.Mail.ToLower() == email.ToLower());
if (user == null) return; // Do not leak existence
var resetToken = Guid.NewGuid().ToString("N");
user.ResetToken = resetToken;
user.ResetTokenExpiry = DateTime.UtcNow.AddDays(7);
await Context.SaveChangesAsync();
var resetLink = $"{baseUri.TrimEnd('/')}/reset-password/{resetToken}";
var mailBody = $"""
Hallo {user.Name},<br>
<br>
für dich wurde ein neues Konto bei {_appSettings.Terms.Title} erstellt. <br>
<br>
Um dein Passwort festzulegen, klicke bitte auf den folgenden Link (dieser ist 7 Tage gültig):<br>
<a href='{resetLink}'>{resetLink}</a><br>
<br>
Viele Grüße<br>Dein Team {_appSettings.Terms.Title}
""";
await _mailService.SendEmailAsync(user.Mail, "Passwort festlegen", mailBody);
}
public async Task InitiatePasswordReset(string email, string baseUri)
{
if (string.IsNullOrWhiteSpace(email)) return;