ofbapi/OFBButte.Application/Users/SendResetPasswordEmail.cs

56 lines
1.7 KiB
C#

using Microsoft.EntityFrameworkCore;
using OFBButte.Application.Codes;
using OFBButte.Application.Database;
using OFBButte.Application.Email;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OFBButte.Application.Users
{
public class SendResetPasswordEmail
{
private readonly IOFBContext context;
private readonly IEmailSender emailSender;
private readonly ICodeGenerator codes;
public SendResetPasswordEmail(IOFBContext context, IEmailSender emailSender, ICodeGenerator codes)
{
this.context = context;
this.emailSender = emailSender;
this.codes = codes;
}
public async Task Handle(string email, string lastName)
{
// Get the user
var user = context.Users.Include(u => u.PassswordResetCode).FirstOrDefault(u => u.Email == email && u.Profile.LastName == lastName);
if (user == null)
return;
if (user.PassswordResetCode != null)
{
context.PasswordResetCodes.Remove(user.PassswordResetCode);
}
user.PassswordResetCode = new Entities.PasswordResetCode()
{
CreatedDate = DateTime.Now,
Code = codes.Generate()
};
context.SaveChanges();
var message = new PasswordResetEmailMessage()
{
To = user.Email,
Url = $"http://ofbbutte.com/user/resetpassword?c={user.PassswordResetCode.Id}&code={user.PassswordResetCode.Code}"
};
await emailSender.Send(message);
}
}
}