Merge wot
This commit is contained in:
parent
1939dd4427
commit
ca70b275f6
29 changed files with 571 additions and 273 deletions
|
@ -33,7 +33,8 @@ class OnionrCLIUI:
|
|||
|
||||
def subCommand(self, command):
|
||||
try:
|
||||
subprocess.run(["./onionr.py", command])
|
||||
#subprocess.run(["./onionr.py", command])
|
||||
subprocess.Popen(['./onionr.py', command], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
|
||||
|
|
|
@ -29,13 +29,19 @@ class OnionrFlow:
|
|||
self.myCore = pluginapi.get_core()
|
||||
self.alreadyOutputed = []
|
||||
self.flowRunning = False
|
||||
self.channel = None
|
||||
return
|
||||
|
||||
def start(self):
|
||||
logger.warn("Please note: everything said here is public, even if a random channel name is used.")
|
||||
message = ""
|
||||
self.flowRunning = True
|
||||
newThread = threading.Thread(target=self.showOutput)
|
||||
newThread.start()
|
||||
try:
|
||||
self.channel = logger.readline("Enter a channel name or none for default:")
|
||||
except (KeyboardInterrupt, EOFError) as e:
|
||||
self.flowRunning = False
|
||||
while self.flowRunning:
|
||||
try:
|
||||
message = logger.readline('\nInsert message into flow:').strip().replace('\n', '\\n').replace('\r', '\\r')
|
||||
|
@ -43,33 +49,39 @@ class OnionrFlow:
|
|||
pass
|
||||
except KeyboardInterrupt:
|
||||
self.flowRunning = False
|
||||
if message == "q":
|
||||
self.flowRunning = False
|
||||
expireTime = self.myCore._utils.getEpoch() + 43200
|
||||
if len(message) > 0:
|
||||
Block(content = message, type = 'txt', expire=expireTime, core = self.myCore).save()
|
||||
else:
|
||||
if message == "q":
|
||||
self.flowRunning = False
|
||||
expireTime = self.myCore._utils.getEpoch() + 43200
|
||||
if len(message) > 0:
|
||||
insertBL = Block(content = message, type = 'txt', expire=expireTime, core = self.myCore)
|
||||
insertBL.setMetadata('ch', self.channel)
|
||||
insertBL.save()
|
||||
|
||||
logger.info("Flow is exiting, goodbye")
|
||||
return
|
||||
|
||||
def showOutput(self):
|
||||
while self.flowRunning:
|
||||
for block in Block.getBlocks(type = 'txt', core = self.myCore):
|
||||
if block.getHash() in self.alreadyOutputed:
|
||||
continue
|
||||
if not self.flowRunning:
|
||||
break
|
||||
logger.info('\n------------------------', prompt = False)
|
||||
content = block.getContent()
|
||||
# Escape new lines, remove trailing whitespace, and escape ansi sequences
|
||||
content = self.myCore._utils.escapeAnsi(content.replace('\n', '\\n').replace('\r', '\\r').strip())
|
||||
logger.info(block.getDate().strftime("%m/%d %H:%M") + ' - ' + logger.colors.reset + content, prompt = False)
|
||||
self.alreadyOutputed.append(block.getHash())
|
||||
try:
|
||||
time.sleep(5)
|
||||
except KeyboardInterrupt:
|
||||
self.flowRunning = False
|
||||
pass
|
||||
while type(self.channel) is type(None) and self.flowRunning:
|
||||
time.sleep(1)
|
||||
try:
|
||||
while self.flowRunning:
|
||||
for block in Block.getBlocks(type = 'txt', core = self.myCore):
|
||||
if block.getMetadata('ch') != self.channel:
|
||||
continue
|
||||
if block.getHash() in self.alreadyOutputed:
|
||||
continue
|
||||
if not self.flowRunning:
|
||||
break
|
||||
logger.info('\n------------------------', prompt = False)
|
||||
content = block.getContent()
|
||||
# Escape new lines, remove trailing whitespace, and escape ansi sequences
|
||||
content = self.myCore._utils.escapeAnsi(content.replace('\n', '\\n').replace('\r', '\\r').strip())
|
||||
logger.info(block.getDate().strftime("%m/%d %H:%M") + ' - ' + logger.colors.reset + content, prompt = False)
|
||||
self.alreadyOutputed.append(block.getHash())
|
||||
time.sleep(5)
|
||||
except KeyboardInterrupt:
|
||||
self.flowRunning = False
|
||||
|
||||
def on_init(api, data = None):
|
||||
'''
|
||||
|
|
|
@ -42,8 +42,9 @@ def _processUserInfo(api, newBlock):
|
|||
except onionrexceptions.InvalidMetadata:
|
||||
pass
|
||||
else:
|
||||
api.get_core().setPeerInfo(signer, 'name', peerName)
|
||||
logger.info('%s is now using the name %s.' % (signer, api.get_utils().escapeAnsi(peerName)))
|
||||
if signer in self.api.get_core().listPeers():
|
||||
api.get_core().setPeerInfo(signer, 'name', peerName)
|
||||
logger.info('%s is now using the name %s.' % (signer, api.get_utils().escapeAnsi(peerName)))
|
||||
|
||||
def _processForwardKey(api, myBlock):
|
||||
'''
|
||||
|
|
|
@ -151,7 +151,7 @@ def check():
|
|||
# plugin management
|
||||
|
||||
def sanitize(name):
|
||||
return re.sub('[^0-9a-zA-Z]+', '', str(name).lower())[:255]
|
||||
return re.sub('[^0-9a-zA-Z_]+', '', str(name).lower())[:255]
|
||||
|
||||
def blockToPlugin(block):
|
||||
try:
|
||||
|
|
|
@ -79,28 +79,26 @@ class OnionrMail:
|
|||
for blockHash in self.myCore.getBlocksByType('pm'):
|
||||
pmBlocks[blockHash] = Block(blockHash, core=self.myCore)
|
||||
pmBlocks[blockHash].decrypt()
|
||||
|
||||
while choice not in ('-q', 'q', 'quit'):
|
||||
blockCount = 0
|
||||
for blockHash in pmBlocks:
|
||||
if not pmBlocks[blockHash].decrypted:
|
||||
continue
|
||||
blockCount += 1
|
||||
pmBlockMap[blockCount] = blockHash
|
||||
for blockHash in pmBlocks:
|
||||
if not pmBlocks[blockHash].decrypted:
|
||||
continue
|
||||
blockCount += 1
|
||||
pmBlockMap[blockCount] = blockHash
|
||||
|
||||
block = pmBlocks[blockHash]
|
||||
senderKey = block.signer
|
||||
try:
|
||||
senderKey = senderKey.decode()
|
||||
except AttributeError:
|
||||
pass
|
||||
senderDisplay = onionrusers.OnionrUser(self.myCore, senderKey).getName()
|
||||
if senderDisplay == 'anonymous':
|
||||
senderDisplay = senderKey
|
||||
block = pmBlocks[blockHash]
|
||||
senderKey = block.signer
|
||||
try:
|
||||
senderKey = senderKey.decode()
|
||||
except AttributeError:
|
||||
pass
|
||||
senderDisplay = onionrusers.OnionrUser(self.myCore, senderKey).getName()
|
||||
if senderDisplay == 'anonymous':
|
||||
senderDisplay = senderKey
|
||||
|
||||
blockDate = pmBlocks[blockHash].getDate().strftime("%m/%d %H:%M")
|
||||
displayList.append('%s. %s - %s: %s' % (blockCount, blockDate, senderDisplay[:12], blockHash))
|
||||
#displayList.reverse()
|
||||
blockDate = pmBlocks[blockHash].getDate().strftime("%m/%d %H:%M")
|
||||
displayList.append('%s. %s - %s: %s' % (blockCount, blockDate, senderDisplay[:12], blockHash))
|
||||
while choice not in ('-q', 'q', 'quit'):
|
||||
for i in displayList:
|
||||
logger.info(i)
|
||||
try:
|
||||
|
@ -138,7 +136,9 @@ class OnionrMail:
|
|||
cancel = logger.readline('Press enter to continue to message, or -q to not open the message (recommended).')
|
||||
if cancel != '-q':
|
||||
print(draw_border(self.myCore._utils.escapeAnsi(readBlock.bcontent.decode().strip())))
|
||||
logger.readline("Press enter to continue")
|
||||
reply = logger.readline("Press enter to continue, or enter %s to reply" % ("-r",))
|
||||
if reply == "-r":
|
||||
self.draftMessage(self.myCore._utils.bytesToStr(readBlock.signer,))
|
||||
return
|
||||
|
||||
def sentbox(self):
|
||||
|
@ -148,29 +148,36 @@ class OnionrMail:
|
|||
entering = True
|
||||
while entering:
|
||||
self.getSentList()
|
||||
logger.info('Enter block number or -q to return')
|
||||
logger.info('Enter a block number or -q to return')
|
||||
try:
|
||||
choice = input('>')
|
||||
except (EOFError, KeyboardInterrupt) as e:
|
||||
entering = False
|
||||
else:
|
||||
if choice == '-q':
|
||||
entering = False
|
||||
try:
|
||||
choice = int(choice) - 1
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
try:
|
||||
self.sentboxList[int(choice) - 1]
|
||||
except IndexError:
|
||||
self.sentboxList[int(choice)]
|
||||
except (IndexError, ValueError) as e:
|
||||
logger.warn('Invalid block.')
|
||||
else:
|
||||
logger.info('Sent to: ' + self.sentMessages[self.sentboxList[int(choice) - 1]][1])
|
||||
logger.info('Sent to: ' + self.sentMessages[self.sentboxList[int(choice)]][1])
|
||||
# Print ansi escaped sent message
|
||||
logger.info(self.myCore._utils.escapeAnsi(self.sentMessages[self.sentboxList[int(choice) - 1]][0]))
|
||||
logger.info(self.myCore._utils.escapeAnsi(self.sentMessages[self.sentboxList[int(choice)]][0]))
|
||||
input('Press enter to continue...')
|
||||
finally:
|
||||
if choice == '-q':
|
||||
entering = False
|
||||
|
||||
return
|
||||
|
||||
def getSentList(self):
|
||||
count = 1
|
||||
self.sentboxList = []
|
||||
self.sentMessages = {}
|
||||
for i in self.sentboxTools.listSent():
|
||||
self.sentboxList.append(i['hash'])
|
||||
self.sentMessages[i['hash']] = (i['message'], i['peer'])
|
||||
|
@ -178,28 +185,28 @@ class OnionrMail:
|
|||
logger.info('%s. %s - %s - %s' % (count, i['hash'], i['peer'][:12], i['date']))
|
||||
count += 1
|
||||
|
||||
def draftMessage(self):
|
||||
def draftMessage(self, recip=''):
|
||||
message = ''
|
||||
newLine = ''
|
||||
recip = ''
|
||||
entering = True
|
||||
|
||||
while entering:
|
||||
try:
|
||||
recip = logger.readline('Enter peer address, or q to stop:').strip()
|
||||
if recip in ('-q', 'q'):
|
||||
raise EOFError
|
||||
if not self.myCore._utils.validatePubKey(recip):
|
||||
raise onionrexceptions.InvalidPubkey('Must be a valid ed25519 base32 encoded public key')
|
||||
except onionrexceptions.InvalidPubkey:
|
||||
logger.warn('Invalid public key')
|
||||
except (KeyboardInterrupt, EOFError):
|
||||
entering = False
|
||||
entering = False
|
||||
if len(recip) == 0:
|
||||
entering = True
|
||||
while entering:
|
||||
try:
|
||||
recip = logger.readline('Enter peer address, or -q to stop:').strip()
|
||||
if recip in ('-q', 'q'):
|
||||
raise EOFError
|
||||
if not self.myCore._utils.validatePubKey(recip):
|
||||
raise onionrexceptions.InvalidPubkey('Must be a valid ed25519 base32 encoded public key')
|
||||
except onionrexceptions.InvalidPubkey:
|
||||
logger.warn('Invalid public key')
|
||||
except (KeyboardInterrupt, EOFError):
|
||||
entering = False
|
||||
else:
|
||||
break
|
||||
else:
|
||||
break
|
||||
else:
|
||||
# if -q or ctrl-c/d, exit function here, otherwise we successfully got the public key
|
||||
return
|
||||
# if -q or ctrl-c/d, exit function here, otherwise we successfully got the public key
|
||||
return
|
||||
|
||||
logger.info('Enter your message, stop by entering -q on a new line.')
|
||||
while newLine != '-q':
|
||||
|
|
|
@ -29,7 +29,7 @@ class SentBox:
|
|||
self.cursor = self.conn.cursor()
|
||||
self.core = mycore
|
||||
return
|
||||
|
||||
|
||||
def createDB(self):
|
||||
conn = sqlite3.connect(self.dbLocation)
|
||||
cursor = conn.cursor()
|
||||
|
@ -48,15 +48,15 @@ class SentBox:
|
|||
for entry in self.cursor.execute('SELECT * FROM sent;'):
|
||||
retData.append({'hash': entry[0], 'peer': entry[1], 'message': entry[2], 'date': entry[3]})
|
||||
return retData
|
||||
|
||||
|
||||
def addToSent(self, blockID, peer, message):
|
||||
args = (blockID, peer, message, self.core._utils.getEpoch())
|
||||
self.cursor.execute('INSERT INTO sent VALUES(?, ?, ?, ?)', args)
|
||||
self.conn.commit()
|
||||
return
|
||||
|
||||
|
||||
def removeSent(self, blockID):
|
||||
args = (blockID,)
|
||||
self.cursor.execute('DELETE FROM sent where hash=?', args)
|
||||
self.conn.commit()
|
||||
return
|
||||
return
|
||||
|
|
|
@ -4,14 +4,9 @@
|
|||
"display_header" : true,
|
||||
"minimum_block_pow": 5,
|
||||
"minimum_send_pow": 5,
|
||||
|
||||
"minimum_block_pow": 5,
|
||||
"minimum_send_pow": 5,
|
||||
|
||||
"direct_connect" : {
|
||||
"respond" : true,
|
||||
"execute_callbacks" : true
|
||||
}
|
||||
"socket_servers": false,
|
||||
"security_level": 0,
|
||||
"public_key": ""
|
||||
},
|
||||
|
||||
"www" : {
|
||||
|
@ -52,7 +47,7 @@
|
|||
"verbosity" : "default",
|
||||
|
||||
"file": {
|
||||
"output": false,
|
||||
"output": true,
|
||||
"path": "data/output.log"
|
||||
},
|
||||
|
||||
|
@ -63,7 +58,7 @@
|
|||
},
|
||||
|
||||
"tor" : {
|
||||
"v3onions" : false
|
||||
"v3onions" : true
|
||||
},
|
||||
|
||||
"i2p" : {
|
||||
|
@ -86,7 +81,7 @@
|
|||
},
|
||||
|
||||
"timers" : {
|
||||
"lookup_blocks" : 25,
|
||||
"get_blocks" : 30
|
||||
"lookupBlocks" : 25,
|
||||
"getBlocks" : 30
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue