From f918ae9b9c75b4f3b2d5ae17a3c476e4ce9e2ab3 Mon Sep 17 00:00:00 2001 From: Kevin Froman Date: Wed, 11 Jul 2018 02:35:22 -0500 Subject: [PATCH] started work on flow plugin --- onionr/communicator2.py | 1 + onionr/core.py | 8 +++- onionr/onionrutils.py | 7 +++ .../default-plugins/flow/info.json | 5 ++ .../static-data/default-plugins/flow/main.py | 47 +++++++++++++++++++ 5 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 onionr/static-data/default-plugins/flow/info.json create mode 100644 onionr/static-data/default-plugins/flow/main.py diff --git a/onionr/communicator2.py b/onionr/communicator2.py index 3e173646..e97cf242 100755 --- a/onionr/communicator2.py +++ b/onionr/communicator2.py @@ -177,6 +177,7 @@ class OnionrCommunicatorDaemon: logger.info('Block passed proof, saving.') self._core.setData(content) self._core.addToBlockDB(blockHash, dataSaved=True) + self._core.utils.processBlockMetadata(blockHash) # caches block metadata values to block database else: logger.warn('POW failed for block ' + blockHash) else: diff --git a/onionr/core.py b/onionr/core.py index 133a425c..40f844e4 100644 --- a/onionr/core.py +++ b/onionr/core.py @@ -239,6 +239,7 @@ class Core: dataSaved - if the data has been saved for the block sig - optional signature by the author (not optional if author is specified) author - multi-round partial sha3-256 hash of authors public key + dateClaimed - timestamp claimed inside the block, only as trustworthy as the block author is ''' if os.path.exists(self.blockDB): raise Exception("Block database already exists") @@ -252,7 +253,8 @@ class Core: dataFound int, dataSaved int, sig text, - author text + author text, + dateClaimed int ); ''') conn.commit() @@ -658,7 +660,7 @@ class Core: sets info associated with a block ''' - if key not in ('dateReceived', 'decrypted', 'dataType', 'dataFound', 'dataSaved', 'sig', 'author'): + if key not in ('dateReceived', 'decrypted', 'dataType', 'dataFound', 'dataSaved', 'sig', 'author', 'dateClaimed'): return False conn = sqlite3.connect(self.blockDB) @@ -742,6 +744,8 @@ class Core: self.addToBlockDB(retData, selfInsert=True, dataSaved=True) self.setBlockType(retData, meta['type']) + if retData != False: + events.event('insertBlock', onionr = None, threaded = False) return retData def introduceNode(self): diff --git a/onionr/onionrutils.py b/onionr/onionrutils.py index 7f3aa914..de44e925 100644 --- a/onionr/onionrutils.py +++ b/onionr/onionrutils.py @@ -245,6 +245,13 @@ class OnionrUtils: return False else: return True + + def processBlockMetadata(self, blockHash): + ''' + Read metadata from a block and cache it to the block database + ''' + myBlock = Block(myBlock, self._core) + def getBlockDBHash(self): ''' diff --git a/onionr/static-data/default-plugins/flow/info.json b/onionr/static-data/default-plugins/flow/info.json new file mode 100644 index 00000000..993339f1 --- /dev/null +++ b/onionr/static-data/default-plugins/flow/info.json @@ -0,0 +1,5 @@ +{ + "name" : "flow", + "version" : "1.0", + "author" : "onionr" +} diff --git a/onionr/static-data/default-plugins/flow/main.py b/onionr/static-data/default-plugins/flow/main.py new file mode 100644 index 00000000..707952d0 --- /dev/null +++ b/onionr/static-data/default-plugins/flow/main.py @@ -0,0 +1,47 @@ +''' + Onionr - P2P Microblogging Platform & Social network + + This default plugin handles "flow" messages (global chatroom style communication) +''' +''' + 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 . +''' + +# Imports some useful libraries +import logger, config +from onionrblockapi import Block + +plugin_name = 'flow' + +class OnionrFlow: + def __init__(self): + logger.info("HELLO") + return + + + +def on_init(api, data = None): + ''' + This event is called after Onionr is initialized, but before the command + inputted is executed. Could be called when daemon is starting or when + just the client is running. + ''' + + # Doing this makes it so that the other functions can access the api object + # by simply referencing the variable `pluginapi`. + global pluginapi + pluginapi = api + api.commands.register(['flow'], OnionrFlow) + api.commands.register_help('flow', 'Open the flow messaging interface') + return \ No newline at end of file