Exemplo n.º 1
0
        public void UpdatePassword(Usuario usuario, bool expired = false)
        {
            try
            {
                var userDb = _crudUsuario.RetrieveAuth <Usuario>(usuario);
                if (userDb == null)
                {
                    throw new BusinessException(204);
                }

                var mngConfig = new ConfiguracionManager();
                var config    = mngConfig.RetrieveConfiguracion();

                // Validate password length
                if (usuario.Password.Length < config.CantCaracteresContrasena)
                {
                    throw new BusinessException(206);
                }

                usuario.PasswordSalt    = userDb.PasswordSalt;
                usuario.PasswordHash    = GenerateHash(usuario.Password, usuario.PasswordSalt);
                usuario.PasswordLastSet = DateTime.Now;

                // Validate password has not been used before.
                var newPassword = new HistorialContrasena
                {
                    Fecha        = usuario.PasswordLastSet,
                    Email        = usuario.Email,
                    PasswordHash = usuario.PasswordHash,
                    Count        = config.CantContrasenasAnteriores
                };

                var historial = _crudContrasena.Retrieve <HistorialContrasena>(newPassword);

                if (historial != null)
                {
                    throw new BusinessException(205);
                }

                _crudUsuario.UpdatePassword(usuario);

                // Record password has in history
                _crudContrasena.Create(newPassword);

                //Clean up password history
                _crudContrasena.Delete(newPassword);
            }
            catch (Exception e)
            {
                ExceptionManager.GetInstance().Process(e);
            }
        }
Exemplo n.º 2
0
        public Usuario ValidateUser(Usuario usuario)
        {
            Usuario usuarioDb = null;

            try
            {
                usuarioDb = _crudUsuario.RetrieveAuth <Usuario>(usuario);

                if (usuarioDb == null) // Does not exist
                {
                    throw new BusinessException(208);
                }

                if (!usuarioDb.Estado.Equals("Activo")) // Not Active
                {
                    throw new BusinessException(211);
                }

                var mngConfig = new ConfiguracionManager();
                var config    = mngConfig.RetrieveConfiguracion();

                if (usuarioDb.PasswordLastSet.AddDays(config.DiasExpiracionContrasena) < DateTime.Today)
                {
                    throw new BusinessException(209); //Expired password
                }
                usuario.PasswordHash = GenerateHash(usuario.Password, usuarioDb.PasswordSalt);

                if (!usuario.PasswordHash.Equals(usuarioDb.PasswordHash)) // Wrong password
                {
                    throw new BusinessException(208);
                }

                // clean the object
                usuarioDb.PasswordHash = null;
                usuarioDb.PasswordSalt = null;
                usuarioDb.ResetToken   = null;
            }
            catch (Exception e)
            {
                ExceptionManager.GetInstance().Process(e);
            }

            return(usuarioDb); // Ok
        }
Exemplo n.º 3
0
        public Usuario Retrieve(Usuario usuario)
        {
            Usuario usuarioDb = null;

            try
            {
                usuarioDb = _crudUsuario.Retrieve <Usuario>(usuario);

                if (usuarioDb == null)
                {
                    throw new BusinessException(204);
                }

                var mngConfig = new ConfiguracionManager();
                var config    = mngConfig.RetrieveConfiguracion();
                usuarioDb.PasswordExpiration = usuarioDb.PasswordLastSet.AddDays(config.DiasExpiracionContrasena);
            }
            catch (Exception e)
            {
                ExceptionManager.GetInstance().Process(e);
            }

            return(usuarioDb);
        }