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); } } }