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 ActivacionDeCuenta(int clave)
        {
            correosusuariosContext Context = new correosusuariosContext();
            UsRepository           repos   = new UsRepository(Context);
            var usuario = Context.Usuario.FirstOrDefault(x => x.ClaveAct == clave);

            if (usuario != null && usuario.Activo == 0)
            {
                var cla = usuario.ClaveAct;
                if (clave == cla)
                {
                    usuario.Activo = 1;
                    repos.Update(usuario);
                    return(RedirectToAction("InicioDeSesion"));
                }
                else
                {
                    ModelState.AddModelError("", "No ha introducido la clave correcta.");
                    return(View());
                }
            }
            else
            {
                ModelState.AddModelError("", "Usuario no encontrado.");
                return(View());
            }
        }
        public IActionResult Eliminar(string correo)
        {
            correosusuariosContext Context = new correosusuariosContext();
            UsRepository           repos   = new UsRepository(Context);
            var us = repos.GetUsByCorreo(correo);

            if (us != null)
            {
                HttpContext.SignOutAsync();
                repos.Delete(us);
                return(RedirectToAction("Index"));
            }
            else
            {
                ModelState.AddModelError("", "El usuario no se ha podido eliminar.");
                return(RedirectToAction("SesionIniciada"));
            }
        }
        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));
            }
        }