Files
fs-onboarding/FoodsharingSiegen.Server/Pages/ResetPassword.razor.cs
troogs ad6f28023e
All checks were successful
Build And Push Dev Docker Image / docker (push) Successful in 1m28s
Implement password recovery feature with reset token and email notifications
2026-04-18 13:36:21 +02:00

77 lines
2.6 KiB
C#

using Blazorise;
using FoodsharingSiegen.Server.BaseClasses;
using FoodsharingSiegen.Server.Auth;
using FoodsharingSiegen.Shared.Helper;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
using System.Threading.Tasks;
namespace FoodsharingSiegen.Server.Pages
{
public partial class ResetPassword : FsBase
{
[Parameter]
public string Token { get; set; } = string.Empty;
public string NewPassword { get; set; } = string.Empty;
public string ConfirmPassword { get; set; } = string.Empty;
public ValidationStatus IsValidPassword { get; set; } = ValidationStatus.None;
public ValidationStatus IsValidPasswordConfirmation { get; set; } = ValidationStatus.None;
public string ErrorMessage { get; set; } = string.Empty;
public bool IsSuccess { get; set; }
public bool IsLoading { get; set; }
public bool IsInitializing { get; set; } = true;
public bool IsTokenValid { get; set; }
protected override async Task OnInitializedAsync()
{
IsTokenValid = await AuthService.IsResetTokenValid(Token);
IsInitializing = false;
}
public void ValidatePasswordConfirmation(ValidatorEventArgs args)
{
var confirmPassword = System.Convert.ToString(args.Value);
if (string.IsNullOrWhiteSpace(confirmPassword))
{
args.Status = ValidationStatus.None;
return;
}
args.Status = confirmPassword == NewPassword ? ValidationStatus.Success : ValidationStatus.Error;
}
public async Task SubmitReset()
{
if (IsValidPassword != ValidationStatus.Success || IsValidPasswordConfirmation != ValidationStatus.Success) return;
IsLoading = true;
ErrorMessage = string.Empty;
await InvokeAsync(StateHasChanged);
var result = await AuthService.ResetPassword(Token, NewPassword);
if (result.Success)
{
IsSuccess = true;
}
else
{
ErrorMessage = result.Exception?.Message ?? "Ein Fehler ist aufgetreten.";
}
IsLoading = false;
await InvokeAsync(StateHasChanged);
}
public async Task TextEdit_KeyUp(KeyboardEventArgs e)
{
if (e.Key == "Enter" && IsValidPassword == ValidationStatus.Success && IsValidPasswordConfirmation == ValidationStatus.Success)
{
await SubmitReset();
}
}
}
}