public IActionResult EliminarCuenta(string correo, string contra)
 {
     try
     {
         ctrlusersContext            context = new ctrlusersContext();
         UsuarioRepository <Usuario> repos   = new UsuarioRepository <Usuario>(context);
         var usuario = repos.GetUsuarioCorreo(correo);
         if (usuario != null)
         {
             if (HashHelper.GetHash(contra) == usuario.Contra)
             {
                 repos.Eliminar(usuario);
             }
             else
             {
                 ModelState.AddModelError("", "La contraseña es incorrecta");
                 return(View());
             }
         }
         return(RedirectToAction("IniciarSesion"));
     }
     catch (Exception)
     {
         ModelState.AddModelError("", "Error. Intente de nuevo");
         return(View());
     }
 }
        public IActionResult ActivarCuenta(int codigo)
        {
            ctrlusersContext            context = new ctrlusersContext();
            UsuarioRepository <Usuario> repos   = new UsuarioRepository <Usuario>(context);
            var usuario = context.Usuario.FirstOrDefault(x => x.Codigo == codigo);

            if (usuario != null && usuario.Activo == 0)
            {
                var userCode = usuario.Codigo;
                if (codigo == userCode)
                {
                    usuario.Activo = 1;
                    repos.Editar(usuario);
                    return(RedirectToAction("IniciarSesion"));
                }
                else
                {
                    ModelState.AddModelError("", "El código ingresado es incorrecto.");
                    return(View((object)codigo));
                }
            }
            else
            {
                ModelState.AddModelError("", "Este usuario no existe");
                return(View((object)codigo));
            }
        }
        public IActionResult Registrar(Usuario usuario, string contra1, string contra2)
        {
            ctrlusersContext            context = new ctrlusersContext();
            UsuarioRepository <Usuario> repos   = new UsuarioRepository <Usuario>(context);

            try
            {
                if (context.Usuario.Any(x => x.Correo == usuario.Correo))
                {
                    ModelState.AddModelError("", "Ya hay un usuario registrado con este correo");
                    return(View(usuario));
                }
                else
                {
                    if (contra1 == contra2)
                    {
                        usuario.Contra = HashHelper.GetHash(contra1);
                        usuario.Codigo = CodeHelper.GetCode();
                        usuario.Activo = 0;
                        repos.Agregar(usuario);
                        MailMessage mensaje = new MailMessage();
                        mensaje.From = new MailAddress("*****@*****.**", "VLIVE");
                        mensaje.To.Add(usuario.Correo);
                        mensaje.Subject = "Confirma tu cuenta de VLIVE";
                        string text = System.IO.File.ReadAllText(Environment.WebRootPath + "/ConfirmarCorreo.html");
                        mensaje.Body       = text.Replace("{##codigo##}", usuario.Codigo.ToString());
                        mensaje.IsBodyHtml = true;

                        SmtpClient cliente = new SmtpClient("smtp.gmail.com", 587);
                        cliente.EnableSsl             = true;
                        cliente.UseDefaultCredentials = false;
                        cliente.Credentials           = new NetworkCredential("*****@*****.**", "sistemas7g");
                        cliente.Send(mensaje);
                        return(RedirectToAction("ActivarCuenta"));
                    }
                    else
                    {
                        ModelState.AddModelError("", "Las contraseñas no coinciden");
                        return(View(usuario));
                    }
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex.Message);
                return(View(usuario));
            }
        }
        public async Task <IActionResult> IniciarSesion(Usuario usuario, bool recordar)
        {
            ctrlusersContext            context = new ctrlusersContext();
            UsuarioRepository <Usuario> repos   = new UsuarioRepository <Usuario>(context);
            var datos = repos.GetUsuarioCorreo(usuario.Correo);

            if (datos != null && HashHelper.GetHash(usuario.Contra) == datos.Contra)
            {
                if (datos.Activo == 1)
                {
                    List <Claim> info = new List <Claim>();
                    info.Add(new Claim(ClaimTypes.Name, datos.NomUsuario));
                    info.Add(new Claim(ClaimTypes.Role, "Seguidor"));
                    info.Add(new Claim("Correo", datos.Correo));
                    info.Add(new Claim("Nombre", datos.NomUsuario));

                    var claimsIdentity  = new ClaimsIdentity(info, CookieAuthenticationDefaults.AuthenticationScheme);
                    var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);

                    if (recordar == true)
                    {
                        await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimsPrincipal, new AuthenticationProperties { IsPersistent = true });
                    }
                    else
                    {
                        await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimsPrincipal, new AuthenticationProperties { IsPersistent = false });
                    }
                    return(RedirectToAction("Index"));
                }
                else
                {
                    ModelState.AddModelError("", "Tu cuenta no ha sido activada, dirígete al correo para activarla");
                    return(View(usuario));
                }
            }
            else
            {
                ModelState.AddModelError("", "El correo electrónico o la contraseña son incorrectos");
                return(View(usuario));
            }
        }
        public IActionResult RecuperarContra(string correo)
        {
            try
            {
                ctrlusersContext            context = new ctrlusersContext();
                UsuarioRepository <Usuario> repos   = new UsuarioRepository <Usuario>(context);
                var usuario = repos.GetUsuarioCorreo(correo);

                if (usuario != null)
                {
                    var         defaultPass = CodeHelper.GetCode();
                    MailMessage mensaje     = new MailMessage();
                    mensaje.From = new MailAddress("*****@*****.**", "VLIVE");
                    mensaje.To.Add(correo);
                    mensaje.Subject = "Recupera tu contraseña de VLIVE";
                    string text = System.IO.File.ReadAllText(Environment.WebRootPath + "/Recuperar.html");
                    mensaje.Body       = text.Replace("{##defaultPass##}", defaultPass.ToString());
                    mensaje.IsBodyHtml = true;

                    SmtpClient cliente = new SmtpClient("smtp.gmail.com", 587);
                    cliente.EnableSsl             = true;
                    cliente.UseDefaultCredentials = false;
                    cliente.Credentials           = new NetworkCredential("*****@*****.**", "sistemas7g");
                    cliente.Send(mensaje);
                    usuario.Contra = HashHelper.GetHash(defaultPass.ToString());
                    repos.Editar(usuario);
                    return(RedirectToAction("IniciarSesion"));
                }
                else
                {
                    ModelState.AddModelError("", "Este correo electrónico con está registrado");
                    return(View());
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex.Message);
                return(View((object)correo));
            }
        }
        public IActionResult CambiarContra(string correo, string contra, string newContra, string newConfirm)
        {
            ctrlusersContext            context = new ctrlusersContext();
            UsuarioRepository <Usuario> repos   = new UsuarioRepository <Usuario>(context);

            try
            {
                var usuario = repos.GetUsuarioCorreo(correo);
                if (usuario.Contra != HashHelper.GetHash(contra))
                {
                    ModelState.AddModelError("", "La constraseña es incorrecta");
                    return(View());
                }
                else
                {
                    if (newContra != newConfirm)
                    {
                        ModelState.AddModelError("", "Las contraseñas no coinciden");
                        return(View());
                    }
                    else if (usuario.Contra == HashHelper.GetHash(newContra))
                    {
                        ModelState.AddModelError("", "La contraseña actual no puede ser igual a la nueva");
                        return(View());
                    }
                    else
                    {
                        usuario.Contra = HashHelper.GetHash(newContra);
                        repos.Editar(usuario);
                        return(RedirectToAction("IniciarSesion"));
                    }
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex.Message);
                return(View());
            }
        }
 public UsuarioRepository(ctrlusersContext contexto)
 {
     Context = contexto;
 }