- removed gui for now
* work on new pm plugin
This commit is contained in:
		
							parent
							
								
									40255538da
								
							
						
					
					
						commit
						f42d308b2b
					
				
					 5 changed files with 1 additions and 233 deletions
				
			
		|  | @ -50,7 +50,6 @@ class Onionr: | ||||||
|             Main Onionr class. This is for the CLI program, and does not handle much of the logic. |             Main Onionr class. This is for the CLI program, and does not handle much of the logic. | ||||||
|             In general, external programs and plugins should not use this class. |             In general, external programs and plugins should not use this class. | ||||||
|         ''' |         ''' | ||||||
| 
 |  | ||||||
|         try: |         try: | ||||||
|             os.chdir(sys.path[0]) |             os.chdir(sys.path[0]) | ||||||
|         except FileNotFoundError: |         except FileNotFoundError: | ||||||
|  | @ -181,15 +180,6 @@ class Onionr: | ||||||
|             'listkeys': self.listKeys, |             'listkeys': self.listKeys, | ||||||
|             'list-keys': self.listKeys, |             'list-keys': self.listKeys, | ||||||
| 
 | 
 | ||||||
|             'addmsg': self.addMessage, |  | ||||||
|             'addmessage': self.addMessage, |  | ||||||
|             'add-msg': self.addMessage, |  | ||||||
|             'add-message': self.addMessage, |  | ||||||
|             'pm': self.sendEncrypt, |  | ||||||
| 
 |  | ||||||
|             'getpms': self.getPMs, |  | ||||||
|             'get-pms': self.getPMs, |  | ||||||
| 
 |  | ||||||
|             'addpeer': self.addPeer, |             'addpeer': self.addPeer, | ||||||
|             'add-peer': self.addPeer, |             'add-peer': self.addPeer, | ||||||
|             'add-address': self.addAddress, |             'add-address': self.addAddress, | ||||||
|  | @ -226,9 +216,6 @@ class Onionr: | ||||||
|             'create-plugin': 'Creates directory structure for a plugin', |             'create-plugin': 'Creates directory structure for a plugin', | ||||||
|             'add-peer': 'Adds a peer to database', |             'add-peer': 'Adds a peer to database', | ||||||
|             'list-peers': 'Displays a list of peers', |             'list-peers': 'Displays a list of peers', | ||||||
|             'add-msg': 'Broadcasts a message to the Onionr network', |  | ||||||
|             'pm': 'Adds a private message to block', |  | ||||||
|             'get-pms': 'Shows private messages sent to you', |  | ||||||
|             'add-file': 'Create an Onionr block from a file', |             'add-file': 'Create an Onionr block from a file', | ||||||
|             'import-blocks': 'import blocks from the disk (Onionr is transport-agnostic!)', |             'import-blocks': 'import blocks from the disk (Onionr is transport-agnostic!)', | ||||||
|             'listconn': 'list connected peers', |             'listconn': 'list connected peers', | ||||||
|  | @ -341,32 +328,6 @@ class Onionr: | ||||||
|         logger.info('Sending kex to command queue...') |         logger.info('Sending kex to command queue...') | ||||||
|         self.onionrCore.daemonQueueAdd('kex') |         self.onionrCore.daemonQueueAdd('kex') | ||||||
| 
 | 
 | ||||||
|     def sendEncrypt(self): |  | ||||||
|         ''' |  | ||||||
|             Create a private message and send it |  | ||||||
|         ''' |  | ||||||
| 
 |  | ||||||
|         invalidID = True |  | ||||||
|         while invalidID: |  | ||||||
|             try: |  | ||||||
|                 peer = logger.readline('Peer to send to: ') |  | ||||||
|             except KeyboardInterrupt: |  | ||||||
|                 break |  | ||||||
|             else: |  | ||||||
|                 if self.onionrUtils.validatePubKey(peer): |  | ||||||
|                     invalidID = False |  | ||||||
|                 else: |  | ||||||
|                     logger.error('Invalid peer ID') |  | ||||||
|         else: |  | ||||||
|             try: |  | ||||||
|                 message = logger.readline("Enter a message: ") |  | ||||||
|             except KeyboardInterrupt: |  | ||||||
|                 pass |  | ||||||
|             else: |  | ||||||
|                 logger.info("Sending message to: " + logger.colors.underline + peer) |  | ||||||
|                 self.onionrUtils.sendPM(peer, message) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     def listKeys(self): |     def listKeys(self): | ||||||
|         ''' |         ''' | ||||||
|             Displays a list of keys (used to be called peers) (?) |             Displays a list of keys (used to be called peers) (?) | ||||||
|  | @ -447,13 +408,6 @@ class Onionr: | ||||||
|             logger.error('Failed to insert block.', timestamp = False) |             logger.error('Failed to insert block.', timestamp = False) | ||||||
|         return |         return | ||||||
| 
 | 
 | ||||||
|     def getPMs(self): |  | ||||||
|         ''' |  | ||||||
|             display PMs sent to us |  | ||||||
|         ''' |  | ||||||
| 
 |  | ||||||
|         self.onionrUtils.loadPMs() |  | ||||||
| 
 |  | ||||||
|     def enablePlugin(self): |     def enablePlugin(self): | ||||||
|         ''' |         ''' | ||||||
|             Enables and starts the given plugin |             Enables and starts the given plugin | ||||||
|  |  | ||||||
|  | @ -431,52 +431,6 @@ class OnionrUtils: | ||||||
|         except: |         except: | ||||||
|             return False |             return False | ||||||
| 
 | 
 | ||||||
|     def loadPMs(self): |  | ||||||
|         ''' |  | ||||||
|             Find, decrypt, and return array of PMs (array of dictionary, {from, text}) |  | ||||||
|         ''' |  | ||||||
|         blocks = Block.getBlocks(type = 'pm', core = self._core) |  | ||||||
|         message = '' |  | ||||||
|         sender = '' |  | ||||||
|         for i in blocks: |  | ||||||
|             try: |  | ||||||
|                 blockContent = i.getContent() |  | ||||||
| 
 |  | ||||||
|                 try: |  | ||||||
|                     message = self._core._crypto.pubKeyDecrypt(blockContent, encodedData=True, anonymous=True) |  | ||||||
|                 except nacl.exceptions.CryptoError as e: |  | ||||||
|                     pass |  | ||||||
|                 else: |  | ||||||
|                     try: |  | ||||||
|                         message = message.decode() |  | ||||||
|                     except AttributeError: |  | ||||||
|                         pass |  | ||||||
| 
 |  | ||||||
|                     try: |  | ||||||
|                         message = json.loads(message) |  | ||||||
|                     except json.decoder.JSONDecodeError: |  | ||||||
|                         pass |  | ||||||
|                     else: |  | ||||||
|                         logger.debug('Decrypted %s:' % i.getHash()) |  | ||||||
|                         logger.info(message["msg"]) |  | ||||||
| 
 |  | ||||||
|                         signer = message["id"] |  | ||||||
|                         sig = message["sig"] |  | ||||||
| 
 |  | ||||||
|                         if self.validatePubKey(signer): |  | ||||||
|                             if self._core._crypto.edVerify(message["msg"], signer, sig, encodedData=True): |  | ||||||
|                                 logger.info("Good signature by %s" % signer) |  | ||||||
|                             else: |  | ||||||
|                                 logger.warn("Bad signature by %s" % signer) |  | ||||||
|                         else: |  | ||||||
|                             logger.warn('Bad sender id: %s' % signer) |  | ||||||
| 
 |  | ||||||
|             except FileNotFoundError: |  | ||||||
|                 pass |  | ||||||
|             except Exception as error: |  | ||||||
|                 logger.error('Failed to open block %s.' % i, error=error) |  | ||||||
|         return |  | ||||||
| 
 |  | ||||||
|     def getPeerByHashId(self, hash): |     def getPeerByHashId(self, hash): | ||||||
|         ''' |         ''' | ||||||
|             Return the pubkey of the user if known from the hash |             Return the pubkey of the user if known from the hash | ||||||
|  |  | ||||||
|  | @ -21,4 +21,4 @@ | ||||||
| class OnionrValues: | class OnionrValues: | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         self.passwordLength = 20 |         self.passwordLength = 20 | ||||||
|         self.blockMetadataLengths = {'meta': 1000, 'sig': 88, 'signer': 64, 'time': 10, 'powRandomToken': 1000, 'encryptType': 4} |         self.blockMetadataLengths = {'meta': 1000, 'sig': 200, 'signer': 200, 'time': 10, 'powRandomToken': 1000, 'encryptType': 4} #TODO properly refine values to minimum needed | ||||||
|  | @ -1,5 +0,0 @@ | ||||||
| { |  | ||||||
|     "name" : "gui", |  | ||||||
|     "version" : "1.0", |  | ||||||
|     "author" : "onionr" |  | ||||||
| } |  | ||||||
|  | @ -1,135 +0,0 @@ | ||||||
| #!/usr/bin/python |  | ||||||
| ''' |  | ||||||
|     Onionr - P2P Microblogging Platform & Social network |  | ||||||
|     This program is free software: you can redistribute it and/or modify |  | ||||||
|     it under the terms of the GNU General Public License as published by |  | ||||||
|     the Free Software Foundation, either version 3 of the License, or |  | ||||||
|     (at your option) any later version. |  | ||||||
| 
 |  | ||||||
|     This program is distributed in the hope that it will be useful, |  | ||||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|     GNU General Public License for more details. |  | ||||||
| 
 |  | ||||||
|     You should have received a copy of the GNU General Public License |  | ||||||
|     along with this program.  If not, see <https://www.gnu.org/licenses/>. |  | ||||||
| ''' |  | ||||||
| 
 |  | ||||||
| # Imports some useful libraries |  | ||||||
| import logger, config, core |  | ||||||
| import os, sqlite3, threading |  | ||||||
| from onionrblockapi import Block |  | ||||||
| 
 |  | ||||||
| plugin_name = 'gui' |  | ||||||
| 
 |  | ||||||
| def send(): |  | ||||||
|     global message |  | ||||||
|     block = Block() |  | ||||||
|     block.setType('txt') |  | ||||||
|     block.setContent(message) |  | ||||||
|     logger.debug('Sent message in block %s.' % block.save(sign = True)) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def sendMessage(): |  | ||||||
|     global sendEntry |  | ||||||
| 
 |  | ||||||
|     global message |  | ||||||
|     message = sendEntry.get() |  | ||||||
| 
 |  | ||||||
|     t = threading.Thread(target = send) |  | ||||||
|     t.start() |  | ||||||
| 
 |  | ||||||
|     sendEntry.delete(0, len(message)) |  | ||||||
| 
 |  | ||||||
| def update(): |  | ||||||
|     global listedBlocks, listbox, runningCheckDelayCount, runningCheckDelay, root, daemonStatus |  | ||||||
| 
 |  | ||||||
|     for i in Block.getBlocks(type = 'txt'): |  | ||||||
|         if i.getContent().strip() == '' or i.getHash() in listedBlocks: |  | ||||||
|             continue |  | ||||||
|         listbox.insert(99999, str(i.getContent())) |  | ||||||
|         listedBlocks.append(i.getHash()) |  | ||||||
|         listbox.see(99999) |  | ||||||
| 
 |  | ||||||
|     runningCheckDelayCount += 1 |  | ||||||
| 
 |  | ||||||
|     if runningCheckDelayCount == runningCheckDelay: |  | ||||||
|         resp = pluginapi.daemon.local_command('ping') |  | ||||||
|         if resp == 'pong': |  | ||||||
|             daemonStatus.config(text = "Onionr Daemon Status: Running") |  | ||||||
|         else: |  | ||||||
|             daemonStatus.config(text = "Onionr Daemon Status: Not Running") |  | ||||||
|         runningCheckDelayCount = 0 |  | ||||||
|     root.after(10000, update) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def reallyOpenGUI(): |  | ||||||
|     import tkinter |  | ||||||
|     global root, runningCheckDelay, runningCheckDelayCount, scrollbar, listedBlocks, nodeInfo, keyInfo, idText, idEntry, pubKeyEntry, listbox, daemonStatus, sendEntry |  | ||||||
| 
 |  | ||||||
|     root = tkinter.Tk() |  | ||||||
| 
 |  | ||||||
|     root.title("Onionr GUI") |  | ||||||
| 
 |  | ||||||
|     runningCheckDelay = 5 |  | ||||||
|     runningCheckDelayCount = 4 |  | ||||||
| 
 |  | ||||||
|     scrollbar = tkinter.Scrollbar(root) |  | ||||||
|     scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y) |  | ||||||
| 
 |  | ||||||
|     listedBlocks = [] |  | ||||||
| 
 |  | ||||||
|     nodeInfo = tkinter.Frame(root) |  | ||||||
|     keyInfo = tkinter.Frame(root) |  | ||||||
| 
 |  | ||||||
|     hostname = pluginapi.get_onionr().get_hostname() |  | ||||||
|     logger.debug('Onionr Hostname: %s' % hostname) |  | ||||||
|     idText = hostname |  | ||||||
| 
 |  | ||||||
|     idEntry = tkinter.Entry(nodeInfo) |  | ||||||
|     tkinter.Label(nodeInfo, text = "Node Address: ").pack(side=tkinter.LEFT) |  | ||||||
|     idEntry.pack() |  | ||||||
|     idEntry.insert(0, idText.strip()) |  | ||||||
|     idEntry.configure(state="readonly") |  | ||||||
| 
 |  | ||||||
|     nodeInfo.pack() |  | ||||||
| 
 |  | ||||||
|     pubKeyEntry = tkinter.Entry(keyInfo) |  | ||||||
| 
 |  | ||||||
|     tkinter.Label(keyInfo, text="Public key: ").pack(side=tkinter.LEFT) |  | ||||||
| 
 |  | ||||||
|     pubKeyEntry.pack() |  | ||||||
|     pubKeyEntry.insert(0, pluginapi.get_core()._crypto.pubKey) |  | ||||||
|     pubKeyEntry.configure(state="readonly") |  | ||||||
| 
 |  | ||||||
|     keyInfo.pack() |  | ||||||
| 
 |  | ||||||
|     sendEntry = tkinter.Entry(root) |  | ||||||
|     sendBtn = tkinter.Button(root, text='Send Message', command=sendMessage) |  | ||||||
|     sendEntry.pack(side=tkinter.TOP, pady=5) |  | ||||||
|     sendBtn.pack(side=tkinter.TOP) |  | ||||||
| 
 |  | ||||||
|     listbox = tkinter.Listbox(root, yscrollcommand=tkinter.Scrollbar.set, height=15) |  | ||||||
| 
 |  | ||||||
|     listbox.pack(fill=tkinter.BOTH, pady=25) |  | ||||||
| 
 |  | ||||||
|     daemonStatus = tkinter.Label(root, text="Onionr Daemon Status: unknown") |  | ||||||
|     daemonStatus.pack() |  | ||||||
| 
 |  | ||||||
|     scrollbar.config(command=tkinter.Listbox.yview) |  | ||||||
|     root.after(2000, update) |  | ||||||
|     root.mainloop() |  | ||||||
| 
 |  | ||||||
| def openGUI(): |  | ||||||
|     t = threading.Thread(target = reallyOpenGUI) |  | ||||||
|     t.daemon = False |  | ||||||
|     t.start() |  | ||||||
| 
 |  | ||||||
| def on_init(api, data = None): |  | ||||||
|     global pluginapi |  | ||||||
|     pluginapi = api |  | ||||||
| 
 |  | ||||||
|     api.commands.register(['gui', 'launch-gui', 'open-gui'], openGUI) |  | ||||||
|     api.commands.register_help('gui', 'Opens a graphical interface for Onionr') |  | ||||||
| 
 |  | ||||||
|     return |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue