Add new API commands for managing black/white list #2275
91
src/api.py
91
src/api.py
|
@ -157,7 +157,8 @@ class ErrorCodes(type):
|
||||||
25: 'Specified address is not a chan address.'
|
25: 'Specified address is not a chan address.'
|
||||||
' Use deleteAddress API call instead.',
|
' Use deleteAddress API call instead.',
|
||||||
26: 'Malformed varint in address: ',
|
26: 'Malformed varint in address: ',
|
||||||
27: 'Message is too long.'
|
27: 'Message is too long.',
|
||||||
|
28: 'Invalid parameter'
|
||||||
}
|
}
|
||||||
|
|
||||||
def __new__(mcs, name, bases, namespace):
|
def __new__(mcs, name, bases, namespace):
|
||||||
|
@ -558,6 +559,39 @@ class BMRPCDispatcher(object):
|
||||||
'ackData': hexlify(ackdata)
|
'ackData': hexlify(ackdata)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _blackwhitelist_entries(kind='black'):
|
||||||
|
queryreturn = sqlQuery(
|
||||||
|
"SELECT label, address FROM %slist WHERE enabled = 1" % kind
|
||||||
|
)
|
||||||
|
data = [
|
||||||
|
{'label': base64.b64encode(
|
||||||
|
shared.fixPotentiallyInvalidUTF8Data(label)),
|
||||||
|
'address': address} for label, address in queryreturn
|
||||||
|
]
|
||||||
|
return {'addresses': data}
|
||||||
|
|
||||||
|
def _blackwhitelist_add(self, address, label, kind='black'):
|
||||||
|
label = self._decode(label, "base64")
|
||||||
|
address = addBMIfNotPresent(address)
|
||||||
|
self._verifyAddress(address)
|
||||||
|
queryreturn = sqlQuery(
|
||||||
|
"SELECT address FROM %slist WHERE address=?" % kind, address)
|
||||||
|
if queryreturn != []:
|
||||||
|
sqlExecute(
|
||||||
|
"UPDATE %slist SET label=?, enabled=1 WHERE address=?" % kind,
|
||||||
|
address)
|
||||||
|
else:
|
||||||
|
sqlExecute(
|
||||||
|
"INSERT INTO %slist VALUES (?,?,1)" % kind, label, address)
|
||||||
|
queues.UISignalQueue.put(('rerenderBlackWhiteList', ''))
|
||||||
|
|
||||||
|
def _blackwhitelist_del(self, address, kind='black'):
|
||||||
|
address = addBMIfNotPresent(address)
|
||||||
|
self._verifyAddress(address)
|
||||||
|
sqlExecute("DELETE FROM %slist WHERE address=?" % kind, address)
|
||||||
|
queues.UISignalQueue.put(('rerenderBlackWhiteList', ''))
|
||||||
|
|
||||||
# Request Handlers
|
# Request Handlers
|
||||||
|
|
||||||
@command('decodeAddress')
|
@command('decodeAddress')
|
||||||
|
@ -641,6 +675,61 @@ class BMRPCDispatcher(object):
|
||||||
queues.UISignalQueue.put(('rerenderAddressBook', ''))
|
queues.UISignalQueue.put(('rerenderAddressBook', ''))
|
||||||
return "Deleted address book entry for %s if it existed" % address
|
return "Deleted address book entry for %s if it existed" % address
|
||||||
|
|
||||||
|
@command('getBlackWhitelistKind')
|
||||||
|
def HandleGetBlackWhitelistKind(self):
|
||||||
|
"""Get the list kind set in config - black or white."""
|
||||||
|
return self.config.get('bitmessagesettings', 'blackwhitelist')
|
||||||
|
|
||||||
|
@command('setBlackWhitelistKind')
|
||||||
|
def HandleSetBlackWhitelistKind(self, kind):
|
||||||
|
"""Set the list kind used - black or white."""
|
||||||
|
blackwhitelist_kinds = ('black', 'white')
|
||||||
|
if kind not in blackwhitelist_kinds:
|
||||||
|
raise APIError(
|
||||||
|
28, 'Invalid kind, should be one of %s'
|
||||||
|
% (blackwhitelist_kinds,))
|
||||||
|
return self.config.set('bitmessagesettings', 'blackwhitelist', kind)
|
||||||
|
|
||||||
|
@command('listBlacklistEntries')
|
||||||
|
def HandleListBlacklistEntries(self):
|
||||||
|
"""
|
||||||
|
Returns dict with a list of all blacklist entries (address and label)
|
||||||
|
in the *addresses* key.
|
||||||
|
"""
|
||||||
|
return self._blackwhitelist_entries('black')
|
||||||
|
|
||||||
|
@command('listWhitelistEntries')
|
||||||
|
def HandleListWhitelistEntries(self):
|
||||||
|
"""
|
||||||
|
Returns dict with a list of all whitelist entries (address and label)
|
||||||
|
in the *addresses* key.
|
||||||
|
"""
|
||||||
|
return self._blackwhitelist_entries('white')
|
||||||
|
|
||||||
|
@command('addBlacklistEntry')
|
||||||
|
def HandleAddBlacklistEntry(self, address, label):
|
||||||
|
"""Add an entry to blacklist. label must be base64 encoded."""
|
||||||
|
self._blackwhitelist_add(address, label, 'black')
|
||||||
|
return "Added address %s to blacklist" % address
|
||||||
|
|
||||||
|
@command('addWhitelistEntry')
|
||||||
|
def HandleAddWhitelistEntry(self, address, label):
|
||||||
|
"""Add an entry to whitelist. label must be base64 encoded."""
|
||||||
|
self._blackwhitelist_add(address, label, 'white')
|
||||||
|
return "Added address %s to whitelist" % address
|
||||||
|
|
||||||
|
@command('deleteBlacklistEntry')
|
||||||
|
def HandleDeleteBlacklistEntry(self, address):
|
||||||
|
"""Delete an entry from blacklist."""
|
||||||
|
self._blackwhitelist_del(address, 'black')
|
||||||
|
return "Deleted blacklist entry for %s if it existed" % address
|
||||||
|
|
||||||
|
@command('deleteWhitelistEntry')
|
||||||
|
def HandleDeleteWhitelistEntry(self, address):
|
||||||
|
"""Delete an entry from whitelist."""
|
||||||
|
self._blackwhitelist_del(address, 'white')
|
||||||
|
return "Deleted whitelist entry for %s if it existed" % address
|
||||||
|
|
||||||
@command('createRandomAddress')
|
@command('createRandomAddress')
|
||||||
def HandleCreateRandomAddress(
|
def HandleCreateRandomAddress(
|
||||||
self, label, eighteenByteRipe=False, totalDifficulty=0,
|
self, label, eighteenByteRipe=False, totalDifficulty=0,
|
||||||
|
|
Reference in New Issue
Block a user