more mail ui work

master
Kevin Froman 2019-02-10 12:43:45 -06:00
parent 898085887c
commit 30604fa23c
7 changed files with 49 additions and 20 deletions

View File

@ -458,11 +458,35 @@ class API:
@app.route('/insertblock', methods=['POST']) @app.route('/insertblock', methods=['POST'])
def insertBlock(): def insertBlock():
encrypt = False
bData = request.get_json(force=True) bData = request.get_json(force=True)
message = bData['message'] message = bData['message']
to = bData['to']
subject = 'temp' subject = 'temp'
return Response(self._core.insertBlock(message, header='pm', encryptType='asym', sign=True, asymPeer=to, meta={'subject': subject})) encryptType = ''
sign = True
meta = {}
to = ''
try:
if bData['encrypt']:
to = bData['to']
encrypt = True
encryptType = 'asym'
except KeyError:
pass
try:
if not bData['sign']:
sign = False
except KeyError:
pass
try:
bType = bData['type']
except KeyError:
bType = 'bin'
try:
meta = json.loads(bData['meta'])
except KeyError:
pass
return Response(self._core.insertBlock(message, header=bType, encryptType=encryptType, sign=sign, asymPeer=to, meta=meta))
@app.route('/apipoints/<path:subpath>', methods=['POST', 'GET']) @app.route('/apipoints/<path:subpath>', methods=['POST', 'GET'])
def pluginEndpoints(subpath=''): def pluginEndpoints(subpath=''):

View File

@ -603,7 +603,7 @@ class OnionrCommunicatorDaemon:
def detectAPICrash(self): def detectAPICrash(self):
'''exit if the api server crashes/stops''' '''exit if the api server crashes/stops'''
if self._core._utils.localCommand('ping', silent=False) not in ('pong', 'pong!'): if self._core._utils.localCommand('ping', silent=False) not in ('pong', 'pong!'):
for i in range(5): for i in range(8):
if self._core._utils.localCommand('ping') in ('pong', 'pong!'): if self._core._utils.localCommand('ping') in ('pong', 'pong!'):
break # break for loop break # break for loop
time.sleep(1) time.sleep(1)

View File

@ -731,6 +731,7 @@ class Core:
logger.error(allocationReachedMessage) logger.error(allocationReachedMessage)
return False return False
retData = False retData = False
# check nonce # check nonce
dataNonce = self._utils.bytesToStr(self._crypto.sha3Hash(data)) dataNonce = self._utils.bytesToStr(self._crypto.sha3Hash(data))
try: try:
@ -746,6 +747,11 @@ class Core:
if type(data) is bytes: if type(data) is bytes:
data = data.decode() data = data.decode()
data = str(data) data = str(data)
plaintext = data
# Convert asym peer human readable key to base32 if set
if ' ' in asymPeer.strip():
asymPeer = self._utils.convertHumanReadableID(asymPeer)
retData = '' retData = ''
signature = '' signature = ''
@ -839,7 +845,7 @@ class Core:
self.daemonQueueAdd('uploadBlock', retData) self.daemonQueueAdd('uploadBlock', retData)
if retData != False: if retData != False:
events.event('insertBlock', onionr = None, threaded = False) events.event('insertblock', {'content': plaintext, 'meta': jsonMeta, 'hash': retData, 'peer': self._utils.bytesToStr(asymPeer)}, onionr = self.onionrInst, threaded = False)
return retData return retData
def introduceNode(self): def introduceNode(self):

View File

@ -259,7 +259,7 @@ _words = [
["wayside", "Wilmington"], ["wayside", "Wilmington"],
["willow", "Wyoming"], ["willow", "Wyoming"],
["woodlark", "yesteryear"], ["woodlark", "yesteryear"],
["Zulu", "Yucatán"]] ["Zulu", "Yucatan"]]
hexre = re.compile("[a-fA-F0-9]+") hexre = re.compile("[a-fA-F0-9]+")

View File

@ -192,7 +192,7 @@ class DataPOW:
if not self.hashing: if not self.hashing:
break break
else: else:
time.sleep(2) time.sleep(1)
except KeyboardInterrupt: except KeyboardInterrupt:
self.shutdown() self.shutdown()
logger.warn('Got keyboard interrupt while waiting for POW result, stopping') logger.warn('Got keyboard interrupt while waiting for POW result, stopping')
@ -299,7 +299,7 @@ class POW:
if not self.hashing: if not self.hashing:
break break
else: else:
time.sleep(2) time.sleep(1)
except KeyboardInterrupt: except KeyboardInterrupt:
self.shutdown() self.shutdown()
logger.warn('Got keyboard interrupt while waiting for POW result, stopping') logger.warn('Got keyboard interrupt while waiting for POW result, stopping')

View File

@ -163,7 +163,7 @@ class OnionrUtils:
retData += '%s:%s' % (hostname, config.get('client.client.port')) retData += '%s:%s' % (hostname, config.get('client.client.port'))
return retData return retData
def localCommand(self, command, data='', silent = True, post=False, postData = {}, maxWait=10): def localCommand(self, command, data='', silent = True, post=False, postData = {}, maxWait=20):
''' '''
Send a command to the local http API server, securely. Intended for local clients, DO NOT USE for remote peers. Send a command to the local http API server, securely. Intended for local clients, DO NOT USE for remote peers.
''' '''
@ -185,9 +185,9 @@ class OnionrUtils:
payload = 'http://%s/%s%s' % (hostname, command, data) payload = 'http://%s/%s%s' % (hostname, command, data)
try: try:
if post: if post:
retData = requests.post(payload, data=postData, headers={'token': config.get('client.webpassword'), 'Connection':'close'}, timeout=(maxWait, 30)).text retData = requests.post(payload, data=postData, headers={'token': config.get('client.webpassword'), 'Connection':'close'}, timeout=(maxWait, maxWait)).text
else: else:
retData = requests.get(payload, headers={'token': config.get('client.webpassword'), 'Connection':'close'}, timeout=(maxWait, 30)).text retData = requests.get(payload, headers={'token': config.get('client.webpassword'), 'Connection':'close'}, timeout=(maxWait, maxWait)).text
except Exception as error: except Exception as error:
if not silent: if not silent:
logger.error('Failed to make local request (command: %s):%s' % (command, error)) logger.error('Failed to make local request (command: %s):%s' % (command, error))
@ -225,7 +225,7 @@ class OnionrUtils:
def convertHumanReadableID(self, pub): def convertHumanReadableID(self, pub):
'''Convert a human readable pubkey id to base32''' '''Convert a human readable pubkey id to base32'''
return base64.b32encode(binascii.unhexlify(pgpwords.hexify(pub))) return self.bytesToStr(base64.b32encode(binascii.unhexlify(pgpwords.hexify(pub.strip()))))
def getBlockMetadataFromData(self, blockData): def getBlockMetadataFromData(self, blockData):
''' '''

View File

@ -194,7 +194,7 @@ class OnionrMail:
self.sentMessages = {} self.sentMessages = {}
for i in self.sentboxTools.listSent(): for i in self.sentboxTools.listSent():
self.sentboxList.append(i['hash']) self.sentboxList.append(i['hash'])
self.sentMessages[i['hash']] = (i['message'], i['peer']) self.sentMessages[i['hash']] = (self.myCore._utils.bytesToStr(i['message']), i['peer'])
if display: if display:
logger.info('%s. %s - %s - %s' % (count, i['hash'], i['peer'][:12], i['date'])) logger.info('%s. %s - %s - %s' % (count, i['hash'], i['peer'][:12], i['date']))
count += 1 count += 1
@ -289,6 +289,13 @@ class OnionrMail:
logger.warn('Invalid choice.') logger.warn('Invalid choice.')
return return
def on_insertblock(api, data={}):
print(data)
sentboxTools = sentboxdb.SentBox(api.get_core())
meta = json.dumps(data['meta'])
print('on_insertblock', data)
sentboxTools.addToSent(data['hash'], data['peer'], data['content'])
def on_pluginrequest(api, data=None): def on_pluginrequest(api, data=None):
resp = '' resp = ''
subject = '' subject = ''
@ -302,14 +309,6 @@ def on_pluginrequest(api, data=None):
cmd = path.split('/')[1] cmd = path.split('/')[1]
if cmd == 'sentbox': if cmd == 'sentbox':
resp = OnionrMail(api).get_sent_list(display=False) resp = OnionrMail(api).get_sent_list(display=False)
elif cmd == 'send':
print(data['postData'])
postData = json.loads(data['postData'])
message = postData['message']
recip = postData['to']
subject = 'temp'
blockID = api.get_core().insertBlock(message, header='pm', encryptType='asym', sign=True, asymPeer=recip, meta={'subject': subject})
sentboxTools.addToSent(blockID, recip, message)
if resp != '': if resp != '':
api.get_onionr().clientAPIInst.pluginResponses[data['pluginResponse']] = resp api.get_onionr().clientAPIInst.pluginResponses[data['pluginResponse']] = resp