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); }
/// <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!"); } }