From afb21ca307de81b580dd5699e9a8f4c26d2c729b Mon Sep 17 00:00:00 2001 From: Stephen Whitmore Date: Sat, 22 Nov 2014 13:13:35 -0800 Subject: [PATCH 1/2] Adds API commands for blacklist manipulation. --- src/api.py | 49 ++++++++++++++++++++++++++++++++++++ src/bitmessageqt/__init__.py | 24 ++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/src/api.py b/src/api.py index cd3a8962..4b1a1a96 100644 --- a/src/api.py +++ b/src/api.py @@ -735,6 +735,55 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): shared.UISignalQueue.put(('rerenderSubscriptions', '')) return 'Added subscription.' + elif method == 'addAddressToBlackWhiteList': + if len(params) == 0: + raise APIError(0, 'I need parameters!') + if len(params) == 1: + address, = params + label = '' + if len(params) == 2: + address, label = params + label = self._decode(label, "base64") + try: + unicode(label, 'utf-8') + except: + raise APIError(17, 'Label is not valid UTF-8 data.') + if len(params) > 2: + raise APIError(0, 'I need either 1 or 2 parameters!') + address = addBMIfNotPresent(address) + self._verifyAddress(address) + + table = '' + if shared.config.get('bitmessagesettings', 'blackwhitelist') == 'black': + table = 'blacklist' + else: + table = 'whitelist' + + # First we must check to see if the address is already in the + # black-/white-list. + queryreturn = sqlQuery('''select * from '''+table+''' where address=?''', address) + if queryreturn != []: + raise APIError(16, 'You have already black-/white-listed that address.') + sqlExecute('''INSERT INTO '''+table+''' VALUES (?,?,?)''',label, address, True) + shared.UISignalQueue.put(('rerenderBlacklist', '')) + return 'Added black-/white-list entry.' + + elif method == 'removeAddressFromBlackWhiteList': + if len(params) != 1: + raise APIError(0, 'I need 1 parameter!') + address, = params + address = addBMIfNotPresent(address) + + table = '' + if shared.config.get('bitmessagesettings', 'blackwhitelist') == 'black': + table = 'blacklist' + else: + table = 'whitelist' + + sqlExecute('''DELETE FROM blacklist WHERE address=?''', address) + shared.UISignalQueue.put(('rerenderBlacklist', '')) + return 'Deleted black-/white-list entry if it existed.' + elif method == 'deleteSubscription': if len(params) != 1: raise APIError(0, 'I need 1 parameter!') diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 9952caf8..97013d58 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -557,6 +557,7 @@ class MyForm(QtGui.QMainWindow): self.ui.tabWidget.setTabText(6, 'Whitelist') self.ui.radioButtonWhitelist.click() self.loadBlackWhiteList() + self.rerenderBlacklist() QtCore.QObject.connect(self.ui.tableWidgetYourIdentities, QtCore.SIGNAL( "itemChanged(QTableWidgetItem *)"), self.tableWidgetYourIdentitiesItemChanged) @@ -621,6 +622,8 @@ class MyForm(QtGui.QMainWindow): "rerenderAddressBook()"), self.rerenderAddressBook) QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL( "rerenderSubscriptions()"), self.rerenderSubscriptions) + QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL( + "rerenderBlacklist()"), self.rerenderBlacklist) QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL( "removeInboxRowByMsgid(PyQt_PyObject)"), self.removeInboxRowByMsgid) QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL( @@ -1832,6 +1835,24 @@ class MyForm(QtGui.QMainWindow): newItem.setTextColor(QtGui.QColor(128, 128, 128)) self.ui.tableWidgetSubscriptions.setItem(0, 1, newItem) + def rerenderBlacklist(self): + self.ui.tableWidgetBlacklist.setRowCount(0) + queryreturn = sqlQuery('SELECT label, address, enabled FROM blacklist') + for row in queryreturn: + label, address, enabled = row + self.ui.tableWidgetBlacklist.insertRow(0) + newItem = QtGui.QTableWidgetItem(unicode(label, 'utf-8')) + if not enabled: + newItem.setTextColor(QtGui.QColor(128, 128, 128)) + newItem.setIcon(avatarize(address)) + self.ui.tableWidgetBlacklist.setItem(0, 0, newItem) + newItem = QtGui.QTableWidgetItem(address) + newItem.setFlags( + QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + if not enabled: + newItem.setTextColor(QtGui.QColor(128, 128, 128)) + self.ui.tableWidgetBlacklist.setItem(0, 1, newItem) + def click_pushButtonSend(self): self.statusBar().showMessage('') toAddresses = str(self.ui.lineEditTo.text()) @@ -3183,6 +3204,7 @@ class MyForm(QtGui.QMainWindow): self.rerenderInboxToLabels() self.rerenderSentFromLabels() self.rerenderSentToLabels() + self.rerenderBlacklist() def on_context_menuYourIdentities(self, point): self.popMenu.exec_( @@ -3838,6 +3860,8 @@ class UISignaler(QThread): self.emit(SIGNAL("rerenderAddressBook()")) elif command == 'rerenderSubscriptions': self.emit(SIGNAL("rerenderSubscriptions()")) + elif command == 'rerenderBlacklist': + self.emit(SIGNAL("rerenderBlacklist()")) elif command == 'removeInboxRowByMsgid': self.emit(SIGNAL("removeInboxRowByMsgid(PyQt_PyObject)"), data) elif command == 'alert': From e93d23d2e0fc8c3d7f729cfa859ffd96b108f539 Mon Sep 17 00:00:00 2001 From: Stephen Whitmore Date: Sat, 22 Nov 2014 13:56:41 -0800 Subject: [PATCH 2/2] Adds new API error codes for black-/white-list manipulation. Refactors loadBlackWhiteList into more generic rerenderBlackWhiteList --- src/api.py | 14 ++++++++--- src/bitmessageqt/__init__.py | 49 +++++++++++------------------------- 2 files changed, 24 insertions(+), 39 deletions(-) diff --git a/src/api.py b/src/api.py index 4b1a1a96..5189b290 100644 --- a/src/api.py +++ b/src/api.py @@ -763,9 +763,9 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): # black-/white-list. queryreturn = sqlQuery('''select * from '''+table+''' where address=?''', address) if queryreturn != []: - raise APIError(16, 'You have already black-/white-listed that address.') + raise APIError(28, 'You have already black-/white-listed that address.') sqlExecute('''INSERT INTO '''+table+''' VALUES (?,?,?)''',label, address, True) - shared.UISignalQueue.put(('rerenderBlacklist', '')) + shared.UISignalQueue.put(('rerenderBlackWhiteList', '')) return 'Added black-/white-list entry.' elif method == 'removeAddressFromBlackWhiteList': @@ -780,8 +780,14 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): else: table = 'whitelist' - sqlExecute('''DELETE FROM blacklist WHERE address=?''', address) - shared.UISignalQueue.put(('rerenderBlacklist', '')) + # First we must check to see if the address is already in the + # black-/white-list. + queryreturn = sqlQuery('''select * from '''+table+''' where address=?''', address) + if queryreturn == []: + raise APIError(29, 'That entry does not exist in the black-/white-list.') + + sqlExecute('''DELETE FROM '''+table+''' WHERE address=?''', address) + shared.UISignalQueue.put(('rerenderBlackWhiteList', '')) return 'Deleted black-/white-list entry if it existed.' elif method == 'deleteSubscription': diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 97013d58..050a2805 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -551,13 +551,10 @@ class MyForm(QtGui.QMainWindow): "returnPressed()"), self.sentSearchLineEditPressed) # Initialize the Blacklist or Whitelist - if shared.config.get('bitmessagesettings', 'blackwhitelist') == 'black': - self.loadBlackWhiteList() - else: + if shared.config.get('bitmessagesettings', 'blackwhitelist') == 'white': self.ui.tabWidget.setTabText(6, 'Whitelist') self.ui.radioButtonWhitelist.click() - self.loadBlackWhiteList() - self.rerenderBlacklist() + self.rerenderBlackWhiteList() QtCore.QObject.connect(self.ui.tableWidgetYourIdentities, QtCore.SIGNAL( "itemChanged(QTableWidgetItem *)"), self.tableWidgetYourIdentitiesItemChanged) @@ -623,7 +620,7 @@ class MyForm(QtGui.QMainWindow): QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL( "rerenderSubscriptions()"), self.rerenderSubscriptions) QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL( - "rerenderBlacklist()"), self.rerenderBlacklist) + "rerenderBlackWhiteList()"), self.rerenderBlackWhiteList) QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL( "removeInboxRowByMsgid(PyQt_PyObject)"), self.removeInboxRowByMsgid) QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL( @@ -1835,9 +1832,13 @@ class MyForm(QtGui.QMainWindow): newItem.setTextColor(QtGui.QColor(128, 128, 128)) self.ui.tableWidgetSubscriptions.setItem(0, 1, newItem) - def rerenderBlacklist(self): + def rerenderBlackWhiteList(self): self.ui.tableWidgetBlacklist.setRowCount(0) - queryreturn = sqlQuery('SELECT label, address, enabled FROM blacklist') + listType = shared.config.get('bitmessagesettings', 'blackwhitelist') + if listType == 'black': + queryreturn = sqlQuery('''SELECT label, address, enabled FROM blacklist''') + else: + queryreturn = sqlQuery('''SELECT label, address, enabled FROM whitelist''') for row in queryreturn: label, address, enabled = row self.ui.tableWidgetBlacklist.insertRow(0) @@ -2251,28 +2252,6 @@ class MyForm(QtGui.QMainWindow): shared.objectProcessorQueueSize += len(payload) shared.objectProcessorQueue.put((objectType,payload)) - def loadBlackWhiteList(self): - # Initialize the Blacklist or Whitelist table - listType = shared.config.get('bitmessagesettings', 'blackwhitelist') - if listType == 'black': - queryreturn = sqlQuery('''SELECT label, address, enabled FROM blacklist''') - else: - queryreturn = sqlQuery('''SELECT label, address, enabled FROM whitelist''') - for row in queryreturn: - label, address, enabled = row - self.ui.tableWidgetBlacklist.insertRow(0) - newItem = QtGui.QTableWidgetItem(unicode(label, 'utf-8')) - if not enabled: - newItem.setTextColor(QtGui.QColor(128, 128, 128)) - newItem.setIcon(avatarize(address)) - self.ui.tableWidgetBlacklist.setItem(0, 0, newItem) - newItem = QtGui.QTableWidgetItem(address) - newItem.setFlags( - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - if not enabled: - newItem.setTextColor(QtGui.QColor(128, 128, 128)) - self.ui.tableWidgetBlacklist.setItem(0, 1, newItem) - def click_pushButtonStatusIcon(self): print 'click_pushButtonStatusIcon' self.iconGlossaryInstance = iconGlossaryDialog(self) @@ -2505,7 +2484,7 @@ class MyForm(QtGui.QMainWindow): shared.config.write(configfile) # self.ui.tableWidgetBlacklist.clearContents() self.ui.tableWidgetBlacklist.setRowCount(0) - self.loadBlackWhiteList() + self.rerenderBlackWhiteList() self.ui.tabWidget.setTabText(6, 'Blacklist') def click_radioButtonWhitelist(self): @@ -2515,7 +2494,7 @@ class MyForm(QtGui.QMainWindow): shared.config.write(configfile) # self.ui.tableWidgetBlacklist.clearContents() self.ui.tableWidgetBlacklist.setRowCount(0) - self.loadBlackWhiteList() + self.rerenderBlackWhiteList() self.ui.tabWidget.setTabText(6, 'Whitelist') def click_pushButtonAddBlacklist(self): @@ -3204,7 +3183,7 @@ class MyForm(QtGui.QMainWindow): self.rerenderInboxToLabels() self.rerenderSentFromLabels() self.rerenderSentToLabels() - self.rerenderBlacklist() + self.rerenderBlackWhiteList() def on_context_menuYourIdentities(self, point): self.popMenu.exec_( @@ -3860,8 +3839,8 @@ class UISignaler(QThread): self.emit(SIGNAL("rerenderAddressBook()")) elif command == 'rerenderSubscriptions': self.emit(SIGNAL("rerenderSubscriptions()")) - elif command == 'rerenderBlacklist': - self.emit(SIGNAL("rerenderBlacklist()")) + elif command == 'rerenderBlackWhiteList': + self.emit(SIGNAL("rerenderBlackWhiteList()")) elif command == 'removeInboxRowByMsgid': self.emit(SIGNAL("removeInboxRowByMsgid(PyQt_PyObject)"), data) elif command == 'alert':