/// <summary> /// Begin password reset /// </summary> /// <param name="email"></param> /// <param name="ipaddress"></param> /// <param name="resetBaseUrl"></param> /// <returns></returns> public async Task BeginResetAsync(String email, String ipaddress, String returnUrl) { if (String.IsNullOrEmpty(returnUrl)) { _log.Warn($"No return url specified in reset by {email}"); return; } if (!_resetReturnDomains.Any(o => returnUrl.StartsWith(o))) { _log.Warn($"Invalid returnUrl {returnUrl} in password reset request. Email: {email}, Ip: {ipaddress}"); return; } try { var admin = await _context.Admins.SingleOrDefaultAsync(o => o.Email == email && o.Status == 1); if (admin != null) { var reset = new AdminReset { Validto = DateTime.UtcNow.AddDays(2), Id = CryptoMethods.GetRandomString(64), IpaddressRequest = ipaddress }; admin.AdminReset.Add(reset); await _context.SaveChangesAsync(); // todo move this to servicebus... using (var message = new System.Net.Mail.MailMessage("*****@*****.**", email)) { message.Subject = "Flexinets Portal - Password reset"; message.Bcc.Add("*****@*****.**"); message.Body = "To reset your password please follow this link" + Environment.NewLine + Environment.NewLine + returnUrl + reset.Id + Environment.NewLine + Environment.NewLine + "If you did not start the reset process, you can ignore this message."; await _smtpClient.SendAsync(message); _log.Info($"Password reset started for email {email}"); } } else { _log.Warn($"Failed password reset for {email}"); } } catch (Exception ex) { _log.Error($"Failed password reset for {email}", ex); } }