Example #1
0
        public User Authenticate(string email, string password)
        {
            // Caso o email ou a password sejam nulas ou campos vazios
            if (string.IsNullOrEmpty(email) || string.IsNullOrEmpty(password))
            {
                return(null);
            }

            UserDAO userDAO = new UserDAO(_connection);
            User    user    = userDAO.FindUserByEmail(email);

            // Caso o utilizador seja nulo ou não exista
            if (user == null)
            {
                return(null);
            }

            // Necessário verificar a hash da password do utilizador para que o mesmo se autentique. Caso não seja igual não faz login
            if (!PasswordEncrypt.VerifyHash(password, user.Password, user.PasswordSalt))
            {
                return(null);
            }

            return(user);
        }
Example #2
0
        /// <summary>
        /// Método que atualiza a password
        /// de um determindado utilizador
        /// </summary>
        /// <param name="newPass">Nova palavra-passe</param>
        /// <param name="id">Id do utilizador que pretende alterar
        /// a sua palavra-passe</param>
        /// <returns>
        /// True caso a password seja atualizada com sucesso
        /// False caso contrário
        /// </returns>
        public bool UpdatePassword(UserUpdatePassword newPass, int?id)
        {
            User user = FindById((int)id);

            if (user == null)
            {
                throw new Exception("O utilizador não existe!");
            }

            if (PasswordEncrypt.VerifyHash(newPass.ActualPassword, user.Password, user.PasswordSalt))
            {
                using (SqlCommand cmd = _connection.Fetch().CreateCommand())
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "UPDATE dbo.[User] " +
                                      "SET Password = @pass, PasswordSalt = @salt " +
                                      "WHERE Id = @id";

                    cmd.Parameters.Add("@id", SqlDbType.Int).Value = id;

                    var password = PasswordEncrypt.Encrypt(newPass.NewPassword);
                    cmd.Parameters.Add("@pass", SqlDbType.NVarChar).Value = password.Item2;
                    cmd.Parameters.Add("@salt", SqlDbType.NVarChar).Value = password.Item1;

                    if (cmd.ExecuteNonQuery() == 0)
                    {
                        return(false);
                    }
                }

                return(true);
            }
            else
            {
                throw new Exception("A password antiga é inválida!");
            }
        }