Exemple #1
0
        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));
        }
Exemple #2
0
        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)));
        }
Exemple #4
0
        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)));
        }
Exemple #7
0
        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()));
 }
Exemple #9
0
        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()));
 }