public ActionResult CambiarPass(int id, CambioClaveView cambio)
        {
            Usuario  usuario  = null;
            Empleado empleado = null;

            try
            {
                empleado = repositorioEmpleado.ObtenerPorId(id);
                usuario  = repositorioUsuario.ObtenerPorEmail(empleado.Email);

                if (User.IsInRole("Empleado"))
                {
                    // verificar clave antigüa
                    var pass = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                                                          password: cambio.ClaveVieja ?? "",
                                                          salt: System.Text.Encoding.ASCII.GetBytes("Salt"),
                                                          prf: KeyDerivationPrf.HMACSHA1,
                                                          iterationCount: 1000,
                                                          numBytesRequested: 256 / 8));
                    if (usuario.Clave != pass)
                    {
                        TempData["Error"] = "Clave incorrecta";
                        //se rederige porque no hay vista de cambio de pass, está compartida con Edit
                        return(RedirectToAction("Edit", new { id = id }));
                    }
                }

                if (ModelState.IsValid)
                {
                    usuario.Clave = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                                                               password: cambio.ClaveNueva,
                                                               salt: System.Text.Encoding.ASCII.GetBytes("Salt"),
                                                               prf: KeyDerivationPrf.HMACSHA1,
                                                               iterationCount: 1000,
                                                               numBytesRequested: 256 / 8));

                    repositorioUsuario.Modificacion(usuario);
                    TempData["Mensaje"] = "Contraseña actualizada correctamente. Ingresar nuevamente por favor";
                    return(RedirectToAction("Logout", "Usuario"));
                }
                else
                {
                    foreach (ModelStateEntry modelState in ViewData.ModelState.Values)
                    {
                        foreach (ModelError error in modelState.Errors)
                        {
                            TempData["Error"] += error.ErrorMessage + "\n";
                        }
                    }
                    return(RedirectToAction("Edit", new { id = id }));
                }
            }
            catch (Exception ex)
            {
                TempData["Error"]      = ex.Message;
                TempData["StackTrace"] = ex.StackTrace;
                return(RedirectToAction("Edit", new { id = id }));
            }
        }
        public ActionResult CambiarPass(int id, CambioClaveView cambio)
        {
            Propietario propietario = null;

            try
            {
                // recuperar propietario original
                propietario = repositorio.ObtenerPorId(id);
                // verificar clave antigüa
                var pass = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                                                      password: cambio.ClaveVieja ?? "",
                                                      salt: System.Text.Encoding.ASCII.GetBytes(config["Salt"]),
                                                      prf: KeyDerivationPrf.HMACSHA1,
                                                      iterationCount: 1000,
                                                      numBytesRequested: 256 / 8));
                if (propietario.Clave != pass)
                {
                    TempData["Error"] = "Clave incorrecta";
                    // se rederige porque no hay vista de cambio de pass, está compartida con Edit
                    return(RedirectToAction("Edit", new { id = id }));
                }
                if (ModelState.IsValid)
                {
                    propietario.Clave = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                                                                   password: cambio.ClaveNueva,
                                                                   salt: System.Text.Encoding.ASCII.GetBytes(config["Salt"]),
                                                                   prf: KeyDerivationPrf.HMACSHA1,
                                                                   iterationCount: 1000,
                                                                   numBytesRequested: 256 / 8));
                    repositorio.Modificacion(propietario);
                    TempData["Mensaje"] = "Contraseña actualizada correctamente";
                    return(RedirectToAction(nameof(Index)));
                }
                else//estado inválido
                {//pasaje de los errores del modelstate a un string en tempData
                    foreach (ModelStateEntry modelState in ViewData.ModelState.Values)
                    {
                        foreach (ModelError error in modelState.Errors)
                        {
                            TempData["Error"] += error.ErrorMessage + "\n";
                        }
                    }
                    return(RedirectToAction("Edit", new { id = id }));
                }
            }
            catch (Exception ex)
            {
                TempData["Error"]      = ex.Message;
                TempData["StackTrace"] = ex.StackTrace;
                return(RedirectToAction("Edit", new { id = id }));
            }
        }
Ejemplo n.º 3
0
        public ActionResult CambiarPass(int id, CambioClaveView cambio)
        {
            Usuario usuario = null;

            try
            {
                usuario = repositorioUsuario.ObtenerPorId(id);

                if (ModelState.IsValid)
                {
                    usuario.Clave = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                                                               password: cambio.ClaveNueva,
                                                               salt: System.Text.Encoding.ASCII.GetBytes("Salt"),
                                                               prf: KeyDerivationPrf.HMACSHA1,
                                                               iterationCount: 1000,
                                                               numBytesRequested: 256 / 8));

                    repositorioUsuario.Modificacion(usuario);
                    TempData["Mensaje"] = "Contraseña actualizada correctamente. Ingresar nuevamente por favor";
                    return(RedirectToAction("Logout"));
                }
                else
                {
                    foreach (ModelStateEntry modelState in ViewData.ModelState.Values)
                    {
                        foreach (ModelError error in modelState.Errors)
                        {
                            TempData["Error"] += error.ErrorMessage + "\n";
                        }
                    }
                    return(RedirectToAction("Edit", new { id = id }));
                }
            }
            catch (Exception ex)
            {
                TempData["Error"]      = ex.Message;
                TempData["StackTrace"] = ex.StackTrace;
                return(RedirectToAction("Edit", new { id = id }));
            }
        }