public IActionResult CambioDeContraseña(string correo, string contra, string confcontra)
        {
            correosusuariosContext Context = new correosusuariosContext();
            UsRepository           repos   = new UsRepository(Context);
            var us = repos.GetUsByCorreo(correo);

            try
            {
                if (contra == confcontra)
                {
                    us.Contrasena = HashinHelper.GetHash(contra);
                    if (us.Contrasena == contra)
                    {
                        ModelState.AddModelError("", "La nueva contraseña debe ser distinta a la actúal");
                        return(View(contra));
                    }
                    else
                    {
                        repos.Update(us);
                        return(RedirectToAction("SesionIniciada"));
                    }
                }
                else
                {
                    ModelState.AddModelError("", "Las contraseñas no coinciden.");
                    return(View());
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex.Message);
                return(View(contra, confcontra));
            }
        }
        public IActionResult Registro(Usuario us, string contra, string confcontra)
        {
            correosusuariosContext Context = new correosusuariosContext();
            Repository <Usuario>   repos   = new Repository <Usuario>(Context);

            try
            {
                if (Context.Usuario.Any(x => x.Correo == us.Correo))
                {
                    ModelState.AddModelError("", "Este correo se encuentra registrado");
                    return(View(us));
                }
                else
                {
                    if (contra == confcontra)
                    {
                        us.Contrasena = HashinHelper.GetHash(contra);
                        us.ClaveAct   = ClaveHelper.ClaveActivacion();
                        us.Activo     = 0;
                        repos.Insert(us);

                        MailMessage message = new MailMessage();
                        message.From = new MailAddress("*****@*****.**", "PelisPlus");
                        message.To.Add(us.Correo);
                        message.Subject = "Correo de activación envíado";

                        string mensaje = System.IO.File.ReadAllText(Environment.WebRootPath + "/Clave.html");
                        message.Body       = mensaje.Replace("##Clave##", us.ClaveAct.ToString());
                        message.IsBodyHtml = true;

                        SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
                        client.EnableSsl             = true;
                        client.UseDefaultCredentials = false;
                        client.Credentials           = new NetworkCredential("*****@*****.**", "sistemas7g");
                        client.Send(message);
                        return(RedirectToAction("ActivacionDeCuenta"));
                    }
                    else
                    {
                        ModelState.AddModelError("", "Las contraseñas no coinciden");
                        return(View(us));
                    }
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex.Message);
                return(View(us));
            }
        }
        public async Task <IActionResult> InicioDeSesion(Usuario us, bool recordar)
        {
            correosusuariosContext Context = new correosusuariosContext();
            UsRepository           repos   = new UsRepository(Context);
            var usuario = repos.GetUsByCorreo(us.Correo);

            if (usuario != null && HashinHelper.GetHash(us.Contrasena) == usuario.Contrasena)
            {
                if (usuario.Activo == 1)
                {
                    List <Claim> info = new List <Claim>();
                    info.Add(new Claim(ClaimTypes.Name, $"{usuario.Usuario1}"));
                    info.Add(new Claim(ClaimTypes.Role, "UsuarioActivo"));
                    info.Add(new Claim("Nombre", usuario.Usuario1));
                    info.Add(new Claim("Correo electronico", usuario.Correo));
                    var claimidentity  = new ClaimsIdentity(info, CookieAuthenticationDefaults.AuthenticationScheme);
                    var claimprincipal = new ClaimsPrincipal(claimidentity);
                    if (recordar == true)
                    {
                        await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimprincipal, new AuthenticationProperties
                                                      { IsPersistent = true });
                    }
                    else
                    {
                        await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimprincipal, new AuthenticationProperties
                                                      { IsPersistent = false });
                    }
                    return(RedirectToAction("SesionIniciada"));
                }
                else
                {
                    ModelState.AddModelError("", "Correo electronico y/o  contraseña erroneos");
                    return(View());
                }
            }
            else
            {
                ModelState.AddModelError("", "Usuario no registrado");
                return(View());
            }
        }
        public IActionResult RecuperarContraseña(string correo)
        {
            try
            {
                correosusuariosContext Context = new correosusuariosContext();
                UsRepository           repos   = new UsRepository(Context);
                var us = repos.GetUsByCorreo(correo);
                if (us != null)
                {
                    var         contra  = ClaveHelper.ClaveActivacion();
                    MailMessage message = new MailMessage();
                    message.From = new MailAddress("*****@*****.**", "PelisPlus");
                    message.To.Add(correo);
                    message.Subject = "Se ha enviado un correo con una contraseña temporal para iniciar sesión";
                    message.Body    = $"Esta contraseña solo sirve una única vez: {contra}";

                    SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
                    client.EnableSsl             = true;
                    client.UseDefaultCredentials = false;
                    client.Credentials           = new NetworkCredential("*****@*****.**", "sistemas7g");
                    client.Send(message);
                    us.Contrasena = HashinHelper.GetHash(contra.ToString());
                    repos.Update(us);
                    return(RedirectToAction("InicioDeSesion"));
                }
                else
                {
                    ModelState.AddModelError("", "Este correo no se encuentra registrado.");
                    return(View());
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex.Message);
                return(View((object)correo));
            }
        }