32 lines
1.1 KiB
C#
32 lines
1.1 KiB
C#
using MediatR;
|
|||
|
|
using Mws.Application.Auth;
|
||
|
|
using Mws.Application.Common;
|
||
|
|
using Mws.Application.Permissions;
|
||
|
|
|
||
|
|
namespace Mws.Application.Accounts;
|
||
|
|
|
||
|
|
public record ResetPasswordCommand(Guid ActorUserId, Guid Id, ResetPasswordRequest Request) : IRequest;
|
||
|
|
|
||
|
|
public class ResetPasswordHandler(IUnitOfWork uow, IPasswordHasher passwordHasher, IPermissionService permissions)
|
||
|
|
: IRequestHandler<ResetPasswordCommand>
|
||
|
|
{
|
||
|
|
private const string Screen = "accounts";
|
||
|
|
|
||
|
|
public async Task Handle(ResetPasswordCommand command, CancellationToken ct)
|
||
|
|
{
|
||
|
|
await permissions.EnsureAsync(command.ActorUserId, Screen, PermissionAction.Edit, ct);
|
||
|
|
|
||
|
|
if (string.IsNullOrWhiteSpace(command.Request.NewPassword))
|
||
|
|
{
|
||
|
|
throw new BadRequestException("New password is required");
|
||
|
|
}
|
||
|
|
|
||
|
|
var user = await uow.Users.GetByIdAsync(command.Id, ct)
|
||
|
|
?? throw new NotFoundException("Account not found");
|
||
|
|
|
||
|
|
user.PasswordHash = passwordHasher.Hash(command.Request.NewPassword);
|
||
|
|
user.UpdatedAt = DateTime.UtcNow;
|
||
|
|
await uow.SaveChangesAsync(ct);
|
||
|
|
}
|
||
|
|
}
|