Update api.py
ListSubscriptions isn't as messed up as it was json-wise, and is more readable. ( HandleListAddresses still needs fixed with json as well. ) Two newlines inbetween each method, as opposed to one, for readability ( PEP8 ). base64 is imported and used in _decode because .decode() appends a newline character to each encoded string. _decode now doesn't use .decode() and instead uses hexlify(text) and base64.b64decode(text).
This commit is contained in:
parent
b304872b68
commit
6bfdd50179
112
src/api.py
112
src/api.py
|
@ -13,6 +13,7 @@ if __name__ == "__main__":
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler, SimpleXMLRPCServer
|
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler, SimpleXMLRPCServer
|
||||||
|
import base64
|
||||||
import json
|
import json
|
||||||
from binascii import hexlify
|
from binascii import hexlify
|
||||||
|
|
||||||
|
@ -62,7 +63,6 @@ class StoppableXMLRPCServer(SimpleXMLRPCServer):
|
||||||
# This class was written by Vaibhav Bhatia. Modified by Jonathan Warren (Atheros).
|
# This class was written by Vaibhav Bhatia. Modified by Jonathan Warren (Atheros).
|
||||||
# http://code.activestate.com/recipes/501148-xmlrpc-serverclient-which-does-cookie-handling-and/
|
# http://code.activestate.com/recipes/501148-xmlrpc-serverclient-which-does-cookie-handling-and/
|
||||||
class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
|
|
||||||
def do_POST(self):
|
def do_POST(self):
|
||||||
# Handles the HTTP POST request.
|
# Handles the HTTP POST request.
|
||||||
# Attempts to interpret all HTTP POST requests as XML-RPC calls,
|
# Attempts to interpret all HTTP POST requests as XML-RPC calls,
|
||||||
|
@ -121,6 +121,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
self.wfile.flush()
|
self.wfile.flush()
|
||||||
self.connection.shutdown(1)
|
self.connection.shutdown(1)
|
||||||
|
|
||||||
|
|
||||||
def APIAuthenticateClient(self):
|
def APIAuthenticateClient(self):
|
||||||
if 'Authorization' in self.headers:
|
if 'Authorization' in self.headers:
|
||||||
# handle Basic authentication
|
# handle Basic authentication
|
||||||
|
@ -137,12 +138,17 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def _decode(self, text, decode_type):
|
def _decode(self, text, decode_type):
|
||||||
try:
|
try:
|
||||||
return text.decode(decode_type)
|
if decode_type == 'hex':
|
||||||
|
return hexlify(text)
|
||||||
|
elif decode_type == 'base64':
|
||||||
|
return base64.b64decode(text)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise APIError(22, "Decode error - " + str(e) + ". Had trouble while decoding string: " + repr(text))
|
raise APIError(22, "Decode error - " + str(e) + ". Had trouble while decoding string: " + repr(text))
|
||||||
|
|
||||||
|
|
||||||
def _verifyAddress(self, address):
|
def _verifyAddress(self, address):
|
||||||
status, addressVersionNumber, streamNumber, ripe = decodeAddress(address)
|
status, addressVersionNumber, streamNumber, ripe = decodeAddress(address)
|
||||||
if status != 'success':
|
if status != 'success':
|
||||||
|
@ -166,28 +172,26 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
|
|
||||||
|
|
||||||
#Request Handlers
|
#Request Handlers
|
||||||
|
|
||||||
def HandleListAddresses(self, method):
|
def HandleListAddresses(self, method):
|
||||||
data = '{"addresses":['
|
data = '{"addresses":['
|
||||||
configSections = BMConfigParser().sections()
|
for addressInKeysFile in BMConfigParser().addresses():
|
||||||
for addressInKeysFile in configSections:
|
status, addressVersionNumber, streamNumber, hash01 = decodeAddress(
|
||||||
if addressInKeysFile != 'bitmessagesettings':
|
addressInKeysFile)
|
||||||
status, addressVersionNumber, streamNumber, hash01 = decodeAddress(
|
if len(data) > 20:
|
||||||
addressInKeysFile)
|
data += ','
|
||||||
if len(data) > 20:
|
if BMConfigParser().has_option(addressInKeysFile, 'chan'):
|
||||||
data += ','
|
chan = BMConfigParser().getboolean(addressInKeysFile, 'chan')
|
||||||
if BMConfigParser().has_option(addressInKeysFile, 'chan'):
|
else:
|
||||||
chan = BMConfigParser().getboolean(addressInKeysFile, 'chan')
|
chan = False
|
||||||
else:
|
label = BMConfigParser().get(addressInKeysFile, 'label')
|
||||||
chan = False
|
if method == 'listAddresses2':
|
||||||
label = BMConfigParser().get(addressInKeysFile, 'label')
|
label = label.encode('base64')
|
||||||
if method == 'listAddresses2':
|
data += json.dumps({'label': label, 'address': addressInKeysFile, 'stream':
|
||||||
label = label.encode('base64')
|
streamNumber, 'enabled': BMConfigParser().getboolean(addressInKeysFile, 'enabled'), 'chan': chan}, indent=4, separators=(',', ': '))
|
||||||
data += json.dumps({'label': label, 'address': addressInKeysFile, 'stream':
|
|
||||||
streamNumber, 'enabled': BMConfigParser().getboolean(addressInKeysFile, 'enabled'), 'chan': chan}, indent=4, separators=(',', ': '))
|
|
||||||
data += ']}'
|
data += ']}'
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def HandleListAddressBookEntries(self, params):
|
def HandleListAddressBookEntries(self, params):
|
||||||
if len(params) == 1:
|
if len(params) == 1:
|
||||||
label, = params
|
label, = params
|
||||||
|
@ -207,6 +211,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
data += ']}'
|
data += ']}'
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def HandleAddAddressBookEntry(self, params):
|
def HandleAddAddressBookEntry(self, params):
|
||||||
if len(params) != 2:
|
if len(params) != 2:
|
||||||
raise APIError(0, "I need label and address")
|
raise APIError(0, "I need label and address")
|
||||||
|
@ -224,6 +229,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
queues.UISignalQueue.put(('rerenderAddressBook',''))
|
queues.UISignalQueue.put(('rerenderAddressBook',''))
|
||||||
return "Added address %s to address book" % address
|
return "Added address %s to address book" % address
|
||||||
|
|
||||||
|
|
||||||
def HandleDeleteAddressBookEntry(self, params):
|
def HandleDeleteAddressBookEntry(self, params):
|
||||||
if len(params) != 1:
|
if len(params) != 1:
|
||||||
raise APIError(0, "I need an address")
|
raise APIError(0, "I need an address")
|
||||||
|
@ -236,6 +242,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
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
|
||||||
|
|
||||||
|
|
||||||
def HandleCreateRandomAddress(self, params):
|
def HandleCreateRandomAddress(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters!')
|
raise APIError(0, 'I need parameters!')
|
||||||
|
@ -277,6 +284,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
'createRandomAddress', 4, streamNumberForAddress, label, 1, "", eighteenByteRipe, nonceTrialsPerByte, payloadLengthExtraBytes))
|
'createRandomAddress', 4, streamNumberForAddress, label, 1, "", eighteenByteRipe, nonceTrialsPerByte, payloadLengthExtraBytes))
|
||||||
return queues.apiAddressGeneratorReturnQueue.get()
|
return queues.apiAddressGeneratorReturnQueue.get()
|
||||||
|
|
||||||
|
|
||||||
def HandleCreateDeterministicAddresses(self, params):
|
def HandleCreateDeterministicAddresses(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters!')
|
raise APIError(0, 'I need parameters!')
|
||||||
|
@ -365,6 +373,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
data += ']}'
|
data += ']}'
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def HandleGetDeterministicAddress(self, params):
|
def HandleGetDeterministicAddress(self, params):
|
||||||
if len(params) != 3:
|
if len(params) != 3:
|
||||||
raise APIError(0, 'I need exactly 3 parameters.')
|
raise APIError(0, 'I need exactly 3 parameters.')
|
||||||
|
@ -385,6 +394,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
streamNumber, 'unused API address', numberOfAddresses, passphrase, eighteenByteRipe))
|
streamNumber, 'unused API address', numberOfAddresses, passphrase, eighteenByteRipe))
|
||||||
return queues.apiAddressGeneratorReturnQueue.get()
|
return queues.apiAddressGeneratorReturnQueue.get()
|
||||||
|
|
||||||
|
|
||||||
def HandleCreateChan(self, params):
|
def HandleCreateChan(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters.')
|
raise APIError(0, 'I need parameters.')
|
||||||
|
@ -412,6 +422,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
address = queueReturn[0]
|
address = queueReturn[0]
|
||||||
return address
|
return address
|
||||||
|
|
||||||
|
|
||||||
def HandleJoinChan(self, params):
|
def HandleJoinChan(self, params):
|
||||||
if len(params) < 2:
|
if len(params) < 2:
|
||||||
raise APIError(0, 'I need two parameters.')
|
raise APIError(0, 'I need two parameters.')
|
||||||
|
@ -442,6 +453,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
createdAddress = addressGeneratorReturnValue[0] # in case we ever want it for anything.
|
createdAddress = addressGeneratorReturnValue[0] # in case we ever want it for anything.
|
||||||
return "success"
|
return "success"
|
||||||
|
|
||||||
|
|
||||||
def HandleLeaveChan(self, params):
|
def HandleLeaveChan(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters.')
|
raise APIError(0, 'I need parameters.')
|
||||||
|
@ -458,6 +470,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
BMConfigParser().write(configfile)
|
BMConfigParser().write(configfile)
|
||||||
return 'success'
|
return 'success'
|
||||||
|
|
||||||
|
|
||||||
def HandleDeleteAddress(self, params):
|
def HandleDeleteAddress(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters.')
|
raise APIError(0, 'I need parameters.')
|
||||||
|
@ -475,6 +488,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
shared.reloadMyAddressHashes()
|
shared.reloadMyAddressHashes()
|
||||||
return 'success'
|
return 'success'
|
||||||
|
|
||||||
|
|
||||||
def HandleGetAllInboxMessages(self, params):
|
def HandleGetAllInboxMessages(self, params):
|
||||||
queryreturn = sqlQuery(
|
queryreturn = sqlQuery(
|
||||||
'''SELECT msgid, toaddress, fromaddress, subject, received, message, encodingtype, read FROM inbox where folder='inbox' ORDER BY received''')
|
'''SELECT msgid, toaddress, fromaddress, subject, received, message, encodingtype, read FROM inbox where folder='inbox' ORDER BY received''')
|
||||||
|
@ -490,6 +504,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
data += ']}'
|
data += ']}'
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def HandleGetAllInboxMessageIds(self, params):
|
def HandleGetAllInboxMessageIds(self, params):
|
||||||
queryreturn = sqlQuery(
|
queryreturn = sqlQuery(
|
||||||
'''SELECT msgid FROM inbox where folder='inbox' ORDER BY received''')
|
'''SELECT msgid FROM inbox where folder='inbox' ORDER BY received''')
|
||||||
|
@ -502,6 +517,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
data += ']}'
|
data += ']}'
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def HandleGetInboxMessageById(self, params):
|
def HandleGetInboxMessageById(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters!')
|
raise APIError(0, 'I need parameters!')
|
||||||
|
@ -527,6 +543,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
data += ']}'
|
data += ']}'
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def HandleGetAllSentMessages(self, params):
|
def HandleGetAllSentMessages(self, params):
|
||||||
queryreturn = sqlQuery('''SELECT msgid, toaddress, fromaddress, subject, lastactiontime, message, encodingtype, status, ackdata FROM sent where folder='sent' ORDER BY lastactiontime''')
|
queryreturn = sqlQuery('''SELECT msgid, toaddress, fromaddress, subject, lastactiontime, message, encodingtype, status, ackdata FROM sent where folder='sent' ORDER BY lastactiontime''')
|
||||||
data = '{"sentMessages":['
|
data = '{"sentMessages":['
|
||||||
|
@ -540,6 +557,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
data += ']}'
|
data += ']}'
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def HandleGetAllSentMessageIds(self, params):
|
def HandleGetAllSentMessageIds(self, params):
|
||||||
queryreturn = sqlQuery('''SELECT msgid FROM sent where folder='sent' ORDER BY lastactiontime''')
|
queryreturn = sqlQuery('''SELECT msgid FROM sent where folder='sent' ORDER BY lastactiontime''')
|
||||||
data = '{"sentMessageIds":['
|
data = '{"sentMessageIds":['
|
||||||
|
@ -551,6 +569,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
data += ']}'
|
data += ']}'
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def HandleInboxMessagesByReceiver(self, params):
|
def HandleInboxMessagesByReceiver(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters!')
|
raise APIError(0, 'I need parameters!')
|
||||||
|
@ -567,6 +586,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
data += ']}'
|
data += ']}'
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def HandleGetSentMessageById(self, params):
|
def HandleGetSentMessageById(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters!')
|
raise APIError(0, 'I need parameters!')
|
||||||
|
@ -581,6 +601,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
data += ']}'
|
data += ']}'
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def HandleGetSentMessagesByAddress(self, params):
|
def HandleGetSentMessagesByAddress(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters!')
|
raise APIError(0, 'I need parameters!')
|
||||||
|
@ -598,6 +619,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
data += ']}'
|
data += ']}'
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def HandleGetSentMessagesByAckData(self, params):
|
def HandleGetSentMessagesByAckData(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters!')
|
raise APIError(0, 'I need parameters!')
|
||||||
|
@ -613,6 +635,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
data += ']}'
|
data += ']}'
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def HandleTrashMessage(self, params):
|
def HandleTrashMessage(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters!')
|
raise APIError(0, 'I need parameters!')
|
||||||
|
@ -624,6 +647,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
sqlExecute('''UPDATE sent SET folder='trash' WHERE msgid=?''', msgid)
|
sqlExecute('''UPDATE sent SET folder='trash' WHERE msgid=?''', msgid)
|
||||||
return 'Trashed message (assuming message existed).'
|
return 'Trashed message (assuming message existed).'
|
||||||
|
|
||||||
|
|
||||||
def HandleTrashInboxMessage(self, params):
|
def HandleTrashInboxMessage(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters!')
|
raise APIError(0, 'I need parameters!')
|
||||||
|
@ -631,6 +655,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
helper_inbox.trash(msgid)
|
helper_inbox.trash(msgid)
|
||||||
return 'Trashed inbox message (assuming message existed).'
|
return 'Trashed inbox message (assuming message existed).'
|
||||||
|
|
||||||
|
|
||||||
def HandleTrashSentMessage(self, params):
|
def HandleTrashSentMessage(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters!')
|
raise APIError(0, 'I need parameters!')
|
||||||
|
@ -638,6 +663,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
sqlExecute('''UPDATE sent SET folder='trash' WHERE msgid=?''', msgid)
|
sqlExecute('''UPDATE sent SET folder='trash' WHERE msgid=?''', msgid)
|
||||||
return 'Trashed sent message (assuming message existed).'
|
return 'Trashed sent message (assuming message existed).'
|
||||||
|
|
||||||
|
|
||||||
def HandleSendMessage(self, params):
|
def HandleSendMessage(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters!')
|
raise APIError(0, 'I need parameters!')
|
||||||
|
@ -650,8 +676,8 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
TTL = 4*24*60*60
|
TTL = 4*24*60*60
|
||||||
elif len(params) == 6:
|
elif len(params) == 6:
|
||||||
toAddress, fromAddress, subject, message, encodingType, TTL = params
|
toAddress, fromAddress, subject, message, encodingType, TTL = params
|
||||||
if encodingType != 2:
|
if encodingType not in [2, 3]:
|
||||||
raise APIError(6, 'The encoding type must be 2 because that is the only one this program currently supports.')
|
raise APIError(6, 'The encoding type must be 2 or 3.')
|
||||||
subject = self._decode(subject, "base64")
|
subject = self._decode(subject, "base64")
|
||||||
message = self._decode(message, "base64")
|
message = self._decode(message, "base64")
|
||||||
if len(subject + message) > (2 ** 18 - 500):
|
if len(subject + message) > (2 ** 18 - 500):
|
||||||
|
@ -704,6 +730,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
|
|
||||||
return hexlify(ackdata)
|
return hexlify(ackdata)
|
||||||
|
|
||||||
|
|
||||||
def HandleSendBroadcast(self, params):
|
def HandleSendBroadcast(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters!')
|
raise APIError(0, 'I need parameters!')
|
||||||
|
@ -716,8 +743,8 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
TTL = 4*24*60*60
|
TTL = 4*24*60*60
|
||||||
elif len(params) == 5:
|
elif len(params) == 5:
|
||||||
fromAddress, subject, message, encodingType, TTL = params
|
fromAddress, subject, message, encodingType, TTL = params
|
||||||
if encodingType != 2:
|
if encodingType not in [2, 3]:
|
||||||
raise APIError(6, 'The encoding type must be 2 because that is the only one this program currently supports.')
|
raise APIError(6, 'The encoding type must be 2 or 3.')
|
||||||
subject = self._decode(subject, "base64")
|
subject = self._decode(subject, "base64")
|
||||||
message = self._decode(message, "base64")
|
message = self._decode(message, "base64")
|
||||||
if len(subject + message) > (2 ** 18 - 500):
|
if len(subject + message) > (2 ** 18 - 500):
|
||||||
|
@ -761,6 +788,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
|
|
||||||
return hexlify(ackdata)
|
return hexlify(ackdata)
|
||||||
|
|
||||||
|
|
||||||
def HandleGetStatus(self, params):
|
def HandleGetStatus(self, params):
|
||||||
if len(params) != 1:
|
if len(params) != 1:
|
||||||
raise APIError(0, 'I need one parameter!')
|
raise APIError(0, 'I need one parameter!')
|
||||||
|
@ -777,6 +805,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
status, = row
|
status, = row
|
||||||
return status
|
return status
|
||||||
|
|
||||||
|
|
||||||
def HandleAddSubscription(self, params):
|
def HandleAddSubscription(self, params):
|
||||||
if len(params) == 0:
|
if len(params) == 0:
|
||||||
raise APIError(0, 'I need parameters!')
|
raise APIError(0, 'I need parameters!')
|
||||||
|
@ -805,6 +834,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
queues.UISignalQueue.put(('rerenderSubscriptions', ''))
|
queues.UISignalQueue.put(('rerenderSubscriptions', ''))
|
||||||
return 'Added subscription.'
|
return 'Added subscription.'
|
||||||
|
|
||||||
|
|
||||||
def HandleDeleteSubscription(self, params):
|
def HandleDeleteSubscription(self, params):
|
||||||
if len(params) != 1:
|
if len(params) != 1:
|
||||||
raise APIError(0, 'I need 1 parameter!')
|
raise APIError(0, 'I need 1 parameter!')
|
||||||
|
@ -816,17 +846,16 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
queues.UISignalQueue.put(('rerenderSubscriptions', ''))
|
queues.UISignalQueue.put(('rerenderSubscriptions', ''))
|
||||||
return 'Deleted subscription if it existed.'
|
return 'Deleted subscription if it existed.'
|
||||||
|
|
||||||
|
|
||||||
def ListSubscriptions(self, params):
|
def ListSubscriptions(self, params):
|
||||||
queryreturn = sqlQuery('''SELECT label, address, enabled FROM subscriptions''')
|
queryreturn = sqlQuery('''SELECT label, address, enabled FROM subscriptions''')
|
||||||
data = '{"subscriptions":['
|
data = {'subscriptions': []}
|
||||||
for row in queryreturn:
|
for row in queryreturn:
|
||||||
label, address, enabled = row
|
label, address, enabled = row
|
||||||
label = shared.fixPotentiallyInvalidUTF8Data(label)
|
label = shared.fixPotentiallyInvalidUTF8Data(label)
|
||||||
if len(data) > 20:
|
data['subscriptions'].append({'label':label.encode('base64'), 'address': address, 'enabled': enabled == 1})
|
||||||
data += ','
|
return json.dumps(data, indent=4, separators=(',',': '))
|
||||||
data += json.dumps({'label':label.encode('base64'), 'address': address, 'enabled': enabled == 1}, indent=4, separators=(',',': '))
|
|
||||||
data += ']}'
|
|
||||||
return data
|
|
||||||
|
|
||||||
def HandleDisseminatePreEncryptedMsg(self, params):
|
def HandleDisseminatePreEncryptedMsg(self, params):
|
||||||
# The device issuing this command to PyBitmessage supplies a msg object that has
|
# The device issuing this command to PyBitmessage supplies a msg object that has
|
||||||
|
@ -860,8 +889,12 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
objectType, toStreamNumber, encryptedPayload, int(time.time()) + TTL,'')
|
objectType, toStreamNumber, encryptedPayload, int(time.time()) + TTL,'')
|
||||||
with shared.printLock:
|
with shared.printLock:
|
||||||
print 'Broadcasting inv for msg(API disseminatePreEncryptedMsg command):', hexlify(inventoryHash)
|
print 'Broadcasting inv for msg(API disseminatePreEncryptedMsg command):', hexlify(inventoryHash)
|
||||||
protocol.broadcastToSendDataQueues((
|
if BMConfigParser().get("network", "asyncore"):
|
||||||
toStreamNumber, 'advertiseobject', inventoryHash))
|
queues.invQueue.put((toStreamNumber, inventoryHash))
|
||||||
|
else:
|
||||||
|
protocol.broadcastToSendDataQueues((
|
||||||
|
toStreamNumber, 'advertiseobject', inventoryHash))
|
||||||
|
|
||||||
|
|
||||||
def HandleTrashSentMessageByAckDAta(self, params):
|
def HandleTrashSentMessageByAckDAta(self, params):
|
||||||
# This API method should only be used when msgid is not available
|
# This API method should only be used when msgid is not available
|
||||||
|
@ -871,6 +904,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
sqlExecute('''UPDATE sent SET folder='trash' WHERE ackdata=?''', ackdata)
|
sqlExecute('''UPDATE sent SET folder='trash' WHERE ackdata=?''', ackdata)
|
||||||
return 'Trashed sent message (assuming message existed).'
|
return 'Trashed sent message (assuming message existed).'
|
||||||
|
|
||||||
|
|
||||||
def HandleDissimatePubKey(self, params):
|
def HandleDissimatePubKey(self, params):
|
||||||
# The device issuing this command to PyBitmessage supplies a pubkey object to be
|
# The device issuing this command to PyBitmessage supplies a pubkey object to be
|
||||||
# disseminated to the rest of the Bitmessage network. PyBitmessage accepts this
|
# disseminated to the rest of the Bitmessage network. PyBitmessage accepts this
|
||||||
|
@ -907,8 +941,12 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
objectType, pubkeyStreamNumber, payload, int(time.time()) + TTL,'')
|
objectType, pubkeyStreamNumber, payload, int(time.time()) + TTL,'')
|
||||||
with shared.printLock:
|
with shared.printLock:
|
||||||
print 'broadcasting inv within API command disseminatePubkey with hash:', hexlify(inventoryHash)
|
print 'broadcasting inv within API command disseminatePubkey with hash:', hexlify(inventoryHash)
|
||||||
protocol.broadcastToSendDataQueues((
|
if BMConfigParser().get("network", "asyncore"):
|
||||||
pubkeyStreamNumber, 'advertiseobject', inventoryHash))
|
queues.invQueue.put((pubkeyStreamNumber, inventoryHash))
|
||||||
|
else:
|
||||||
|
protocol.broadcastToSendDataQueues((
|
||||||
|
pubkeyStreamNumber, 'advertiseobject', inventoryHash))
|
||||||
|
|
||||||
|
|
||||||
def HandleGetMessageDataByDestinationHash(self, params):
|
def HandleGetMessageDataByDestinationHash(self, params):
|
||||||
# Method will eventually be used by a particular Android app to
|
# Method will eventually be used by a particular Android app to
|
||||||
|
@ -945,6 +983,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
data += ']}'
|
data += ']}'
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def HandleClientStatus(self, params):
|
def HandleClientStatus(self, params):
|
||||||
if len(shared.connectedHostsList) == 0:
|
if len(shared.connectedHostsList) == 0:
|
||||||
networkStatus = 'notConnected'
|
networkStatus = 'notConnected'
|
||||||
|
@ -954,6 +993,7 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
networkStatus = 'connectedAndReceivingIncomingConnections'
|
networkStatus = 'connectedAndReceivingIncomingConnections'
|
||||||
return json.dumps({'networkConnections':len(shared.connectedHostsList),'numberOfMessagesProcessed':shared.numberOfMessagesProcessed, 'numberOfBroadcastsProcessed':shared.numberOfBroadcastsProcessed, 'numberOfPubkeysProcessed':shared.numberOfPubkeysProcessed, 'networkStatus':networkStatus, 'softwareName':'PyBitmessage','softwareVersion':softwareVersion}, indent=4, separators=(',', ': '))
|
return json.dumps({'networkConnections':len(shared.connectedHostsList),'numberOfMessagesProcessed':shared.numberOfMessagesProcessed, 'numberOfBroadcastsProcessed':shared.numberOfBroadcastsProcessed, 'numberOfPubkeysProcessed':shared.numberOfPubkeysProcessed, 'networkStatus':networkStatus, 'softwareName':'PyBitmessage','softwareVersion':softwareVersion}, indent=4, separators=(',', ': '))
|
||||||
|
|
||||||
|
|
||||||
def HandleDecodeAddress(self, params):
|
def HandleDecodeAddress(self, params):
|
||||||
# Return a meaningful decoding of an address.
|
# Return a meaningful decoding of an address.
|
||||||
if len(params) != 1:
|
if len(params) != 1:
|
||||||
|
@ -964,18 +1004,22 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
'streamNumber':streamNumber, 'ripe':ripe.encode('base64')}, indent=4,
|
'streamNumber':streamNumber, 'ripe':ripe.encode('base64')}, indent=4,
|
||||||
separators=(',', ': '))
|
separators=(',', ': '))
|
||||||
|
|
||||||
|
|
||||||
def HandleHelloWorld(self, params):
|
def HandleHelloWorld(self, params):
|
||||||
(a, b) = params
|
(a, b) = params
|
||||||
return a + '-' + b
|
return a + '-' + b
|
||||||
|
|
||||||
|
|
||||||
def HandleAdd(self, params):
|
def HandleAdd(self, params):
|
||||||
(a, b) = params
|
(a, b) = params
|
||||||
return a + b
|
return a + b
|
||||||
|
|
||||||
|
|
||||||
def HandleStatusBar(self, params):
|
def HandleStatusBar(self, params):
|
||||||
message, = params
|
message, = params
|
||||||
queues.UISignalQueue.put(('updateStatusBar', message))
|
queues.UISignalQueue.put(('updateStatusBar', message))
|
||||||
|
|
||||||
|
|
||||||
def HandleDeleteAndVacuum(self, params):
|
def HandleDeleteAndVacuum(self, params):
|
||||||
sqlStoredProcedure('deleteandvacuume')
|
sqlStoredProcedure('deleteandvacuume')
|
||||||
return 'done'
|
return 'done'
|
||||||
|
@ -1031,12 +1075,14 @@ class MySimpleXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
|
||||||
handlers['decodeAddress'] = HandleDecodeAddress
|
handlers['decodeAddress'] = HandleDecodeAddress
|
||||||
handlers['deleteAndVacuum'] = HandleDeleteAndVacuum
|
handlers['deleteAndVacuum'] = HandleDeleteAndVacuum
|
||||||
|
|
||||||
|
|
||||||
def _handle_request(self, method, params):
|
def _handle_request(self, method, params):
|
||||||
if (self.handlers.has_key(method)):
|
if (self.handlers.has_key(method)):
|
||||||
return self.handlers[method](self ,params)
|
return self.handlers[method](self ,params)
|
||||||
else:
|
else:
|
||||||
raise APIError(20, 'Invalid method: %s' % method)
|
raise APIError(20, 'Invalid method: %s' % method)
|
||||||
|
|
||||||
|
|
||||||
def _dispatch(self, method, params):
|
def _dispatch(self, method, params):
|
||||||
self.cookies = []
|
self.cookies = []
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user