56 lines
1.7 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|