From b2ebc56419a2a3c32577587f99ceedcb676738fc Mon Sep 17 00:00:00 2001 From: Kevin F Date: Thu, 11 Aug 2022 14:25:07 -0500 Subject: [PATCH] Added RPC plugin scaffolding --- src/onionrplugins/__init__.py | 1 + src/onionrplugins/pluginapis.py | 1 + src/utils/identifyhome.py | 5 ++-- static-data/default-plugins/rpc/main.py | 16 ++++++------ static-data/default-plugins/rpc/rpc/blocks.py | 25 +++++++++++++++++++ 5 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 src/onionrplugins/pluginapis.py create mode 100644 static-data/default-plugins/rpc/rpc/blocks.py diff --git a/src/onionrplugins/__init__.py b/src/onionrplugins/__init__.py index 4849f39d..d5d9e233 100755 --- a/src/onionrplugins/__init__.py +++ b/src/onionrplugins/__init__.py @@ -21,6 +21,7 @@ import os, re, importlib import traceback from . import onionrevents as events +from .pluginapis import plugin_apis import config, logger from utils import identifyhome diff --git a/src/onionrplugins/pluginapis.py b/src/onionrplugins/pluginapis.py new file mode 100644 index 00000000..c85de443 --- /dev/null +++ b/src/onionrplugins/pluginapis.py @@ -0,0 +1 @@ +plugin_apis = {} \ No newline at end of file diff --git a/src/utils/identifyhome.py b/src/utils/identifyhome.py index 18ef86ef..950a8aac 100644 --- a/src/utils/identifyhome.py +++ b/src/utils/identifyhome.py @@ -28,11 +28,12 @@ def identify_home() -> str: """ path = os.environ.get('ONIONR_HOME', None) - if path is None: system = platform.system() if system == 'Linux': - path = os.path.expanduser('~') + '/.local/share/onionr/' + path = os.environ.get( + 'XDG_DATA_HOME', + os.path.expanduser('~') + '/.local/share/onionr/') elif system == 'Darwin': path = os.path.expanduser('~' + '/Library/Application Support/onionr/') diff --git a/static-data/default-plugins/rpc/main.py b/static-data/default-plugins/rpc/main.py index be42ce61..8d14a07c 100644 --- a/static-data/default-plugins/rpc/main.py +++ b/static-data/default-plugins/rpc/main.py @@ -6,6 +6,7 @@ import sys import os import locale from threading import Thread +from time import sleep import cherrypy @@ -37,11 +38,13 @@ PLUGIN_VERSION = '0.0.0' socket_file_path = identifyhome.identify_home() + 'rpc.sock' from jsonrpc import JSONRPCResponseManager, dispatcher +import jsonrpc +import ujson +jsonrpc.manager.json = ujson +# RPC modules map Onionr APIs to the RPC dispacher +from rpc import blocks -@dispatcher.add_method -def foobar(**kwargs): - return kwargs["foo"] + kwargs["bar"] class OnionrRPC(object): @cherrypy.expose @@ -50,16 +53,14 @@ class OnionrRPC(object): # Dispatcher is dictionary {: callable} data = cherrypy.request.body.read().decode('utf-8') - dispatcher["echo"] = lambda s: s - dispatcher["add"] = lambda a, b: a + b - response = JSONRPCResponseManager.handle(data, dispatcher) return response.json def on_init(api, data=None): config = { - 'server.socket_file': socket_file_path, + #'server.socket_file': socket_file_path, + 'server.socket_port': 0, 'engine.autoreload.on': False } cherrypy.config.update(config) @@ -67,3 +68,4 @@ def on_init(api, data=None): add_onionr_thread( cherrypy.quickstart, 5, 'OnionrRPCServer', OnionrRPC(), initial_sleep=0) + \ No newline at end of file diff --git a/static-data/default-plugins/rpc/rpc/blocks.py b/static-data/default-plugins/rpc/rpc/blocks.py new file mode 100644 index 00000000..9d0960a9 --- /dev/null +++ b/static-data/default-plugins/rpc/rpc/blocks.py @@ -0,0 +1,25 @@ +from secrets import randbits + +from onionrblocks import Block +from jsonrpc import dispatcher +import ujson +from base64 import b85decode + +from gossip.blockqueues import gossip_block_queues +from blockdb import get_blocks_after_timestamp + + +@dispatcher.add_method +def get_blocks(timestamp): + return [block.raw for block in get_blocks_after_timestamp(timestamp)] + + +queue_to_use = randbits(1) +@dispatcher.add_method +def insert_block(block): + block = Block( + block['id'], b85decode(block['raw']), auto_verify=False) + gossip_block_queues[queue_to_use].put_nowait(block) + return "ok" + +#dispatcher['get_blocks_after_timestamp'] = get_blocks_after_timestamp