public IActionResult ResetPassword(Guid id, [FromServices] LorgusContext context) { ViewData["messageError"] = TempData["messageError"]; var requestParams = context.RequestChangePassword.FirstOrDefault(r => r.RequestChangePasswordId == id.ToString()); var hours = default(int); if (requestParams != null) { hours = (DateTime.Now - requestParams.Date).Value.Hours; } if (hours >= 24 || requestParams == null) { return(Json("Desculpe, este link já expirou !!!")); } var values = new ResetPasswordViewModel { RequestChangePasswordId = requestParams.RequestChangePasswordId, Date = requestParams.Date, UserId = requestParams.UserId }; return(View(values)); }
public IActionResult RecoverPassword(string email, [FromServices] LorgusContext context, [FromServices] IEmailSender emailSender) { var user = context.User.FirstOrDefault(u => u.Email.ToLower() == email.ToLower()); var emailTitle = "Recuperação de Senha"; if (user is null) { ViewData["messageError"] = "E-mail não encontrado!"; return(View()); } var request = new RequestChangePassword { Date = DateTime.Now, UserId = user.UserId, RequestChangePasswordId = Guid.NewGuid().ToString() }; var requestPassword = context.RequestChangePassword.Add(request); context.SaveChanges(); var attachments = new List <Attachment> { new Attachment($"{_env.WebRootPath}/images/logo.png") { ContentId = "Logo" } }; var replacements = new Dictionary <string, string> { { "{{name}}", user.FullName }, { "{{action_url}}", Url.Action("ResetPassword", "Account", new { id = request.RequestChangePasswordId }, Request.Scheme) }, { "{{logo}}", "Logo" }, { "{{date}}", DateTime.UtcNow.AddHours(-3).ToString("dd/MM/yyyy HH:mm:ss") }, }; var to = new MailAddress(user.Email, user.FullName); var body = System.IO.File.ReadAllText($"Templates/EmailRecoveryPasswordTemplate.html"); try { emailSender.Send(to, body, emailTitle, replacements, attachments); TempData["messageSuccess"] = "Recuperação enviada com sucesso!"; } catch (Exception) { TempData["messageError"] = "Não foi possível enviar a Recuperação!"; } return(RedirectToAction("Login")); }
public IActionResult Create([FromForm] User model, [FromServices] LorgusContext context, [FromServices] IEmailSender emailSender) { model.Phone = Regex.Replace(model.Phone, @"\D+", string.Empty); model.AccessLevelId = 2; context.User.Add(model); context.SaveChanges(); var request = new RequestChangePassword { Date = DateTime.Now, UserId = model.UserId, RequestChangePasswordId = Guid.NewGuid().ToString() }; var requestPassword = context.RequestChangePassword.Add(request); context.SaveChanges(); var attachments = new List <Attachment> { new Attachment($"{_env.WebRootPath}/images/logo.png") { ContentId = "Logo" } }; var replacements = new Dictionary <string, string> { { "{{name}}", model.FullName }, { "{{action_url}}", Url.Action("ResetPassword", "Account", new { id = request.RequestChangePasswordId }, Request.Scheme) }, { "{{logo}}", "Logo" }, { "{{date}}", DateTime.UtcNow.AddHours(-3).ToString("dd/MM/yyyy HH:mm:ss") }, }; var to = new MailAddress(model.Email, model.FullName); var body = System.IO.File.ReadAllText($"Templates/EmailNewUserTemplate.html"); try { emailSender.Send(to, body, "Bem vindo a Lorgus", replacements, attachments); } catch { } return(RedirectToAction(nameof(Index))); }
public IActionResult Login([Bind] LoginViewModel model, [FromServices] LorgusContext context) { if (ModelState.IsValid) { var user = context.User.Include(u => u.AccessLevel).FirstOrDefault(u => u.Email.ToLower() == model.Email.ToLower()); if (user is null) { ViewData["messageError"] = "Usuário não cadastrado!"; return(View(model)); } if (!VerifyPasswordHash(model.Password, user.PasswordHash, user.PasswordSalt)) { ViewData["messageError"] = "E-mail ou senha incorretos!"; return(View(model)); } var authProperties = new AuthenticationProperties { ExpiresUtc = DateTimeOffset.UtcNow.AddHours(4), RedirectUri = Url.Action("Index", "Admin") }; var claims = new List <Claim> { new Claim(ClaimTypes.Name, user.FullName), new Claim(ClaimTypes.Email, model.Email), new Claim(ClaimTypes.Role, user.AccessLevel.Description.ToLower()), }; var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties).Wait(); return(RedirectToAction("Index", "Admin")); } return(View(model)); }
public IActionResult Edit([FromForm] User model, [FromServices] LorgusContext context) { var user = context.User.FirstOrDefault(u => u.UserId == model.UserId); if (user is null) { return(BadRequest()); } user.FullName = model.FullName; user.Phone = model.Phone; user.Email = model.Email; context.SaveChanges(); return(RedirectToAction(nameof(Index))); }
public IActionResult SendAnswer(int budgetId, string message, [FromServices] LorgusContext context, [FromServices] IEmailSender emailSender) { var budget = context.Budget.FirstOrDefault(b => b.BudgetId == budgetId); if (budget is null) { return(BadRequest()); } var attachments = new List <Attachment> { new Attachment($"{_env.WebRootPath}/images/logo.png") { ContentId = "Logo" } }; var replacments = new Dictionary <string, string> { { "{{logo}}", "Logo" }, { "{{name}}", budget.FullName }, { "{{message}}", message }, { "{{date}}", DateTime.UtcNow.AddHours(-3).ToString("dd/MM/yyyy HH:mm:ss") }, }; var body = System.IO.File.ReadAllText("Templates/AnswerTemplate.html"); var to = new MailAddress(budget.Email); emailSender.Send(to, body, "Lorgus - resposta de solicitação", replacments, attachments); budget.Answered = true; context.SaveChanges(); return(RedirectToAction(nameof(Index))); }
public IActionResult ResetPassword(Guid id, [Bind] ResetPasswordViewModel model, [FromServices] LorgusContext context) { try { if (model.Password1 != model.Password2) { ViewData["messageError"] = "Senhas não conferem."; return(View(model)); } if (id == default) { return(NotFound()); } var password = model.Password1; var request = context.RequestChangePassword.Include(u => u.User).FirstOrDefault(r => r.RequestChangePasswordId == id.ToString()); var(hash, salt) = GenerateHMACSHA512Hash(model.Password1); request.User.PasswordHash = hash; request.User.PasswordSalt = salt; context.Update(request.User); context.Remove(request); context.SaveChanges(); return(RedirectToAction("Login", "Account")); } catch (Exception) { TempData["messageError"] = "Desculpe, ocorreu um erro ao alterar sua senha!"; return(RedirectToAction("ResetPassword", "Account", new { id })); } }
public IActionResult Index([FromServices] LorgusContext context) { return(View(context.User.Include(u => u.AccessLevel).ToList())); }
public IActionResult SendContactEmail(ContactModel model, [FromServices] IEmailSender emailSender, [FromServices] LorgusContext lorgusContext) { try { try { lorgusContext.Budget.Add(new Budget { FullName = model.FullName, Email = model.Email, Message = model.Message, Phone = model.Phone, Date = DateTime.UtcNow.AddHours(-3) }); lorgusContext.SaveChanges(); } catch { // ignore } var attachments = new List <Attachment> { new Attachment($"{_env.WebRootPath}/images/logo.png") { ContentId = "Logo" } }; var replacments = new Dictionary <string, string> { { "{{logo}}", "Logo" }, { "{{fullname}}", model.FullName }, { "{{phone}}", model.Phone }, { "{{email}}", model.Email }, { "{{message}}", model.Message }, { "{{date}}", DateTime.UtcNow.AddHours(-3).ToString("dd/MM/yyyy HH:mm:ss") }, }; var body = System.IO.File.ReadAllText("Templates/ContactTemplate.html"); var to = new MailAddress(_config.ContactEmail); emailSender.Send(to, body, "Nova solicitação de orçamento", replacments, attachments); return(Json(new { success = true, message = "E-mail enviado, por favor aguarde o nosso contato.", })); } catch (Exception ex) { return(Json(new { success = false, message = "Desculpe, ocorreu um erro, não foi possível enviar o e-mail.", ex = ex.Message })); } }
public IActionResult Index([FromServices] LorgusContext context) { return(View(context.Budget.OrderByDescending(b => b.Date).ToList())); }