From 2c34777ff13a24859a4d291cc75d9cf480384bea Mon Sep 17 00:00:00 2001 From: nolash Date: Sat, 17 Oct 2020 14:47:01 +0200 Subject: [PATCH] No middleware if no ipc, add prefix env var --- CHANGELOG | 3 +++ config/config.ini | 1 - crypto_dev_signer/eth/web3ext/__init__.py | 7 ++++--- crypto_dev_signer/eth/web3ext/middleware.py | 5 +++-- crypto_dev_signer/keystore/postgres.py | 1 + scripts/crypto-dev-daemon | 19 ++++++++++++------- setup.py | 2 +- 7 files changed, 24 insertions(+), 14 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 8227512..3d52d7a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +* 0.2.5 + - Add default env override + - Do not create middleware if ipc no set * 0.2.4 - Remove hardcoded ipc path in middleware * 0.2.3 diff --git a/config/config.ini b/config/config.ini index e69c237..e81e470 100644 --- a/config/config.ini +++ b/config/config.ini @@ -1,4 +1,3 @@ [signer] secret = deadbeef -database = crypto-dev-signer socket_path = /tmp/crypto-dev-signer/jsonrpc.ipc diff --git a/crypto_dev_signer/eth/web3ext/__init__.py b/crypto_dev_signer/eth/web3ext/__init__.py index f8f3a96..83b0ec7 100644 --- a/crypto_dev_signer/eth/web3ext/__init__.py +++ b/crypto_dev_signer/eth/web3ext/__init__.py @@ -8,14 +8,13 @@ re_websocket = re.compile('^wss?://') re_http = re.compile('^https?://') -#def create_middleware(ipcaddr='/var/run/cic-platform/cic.ipc'): def create_middleware(ipcpath): PlatformMiddleware.ipcaddr = ipcpath return PlatformMiddleware # overrides the original Web3 constructor -def Web3(blockchain_provider='ws://localhost:8546', ipcpath='/run/crypto-dev-signer/jsonrpc.ipc'): +def Web3(blockchain_provider='ws://localhost:8546', ipcpath=None): provider = None if re.match(re_websocket, blockchain_provider) != None: provider = WebsocketProvider(blockchain_provider) @@ -24,6 +23,8 @@ def Web3(blockchain_provider='ws://localhost:8546', ipcpath='/run/crypto-dev-sig w3 = Web3super(provider) - w3.middleware_onion.add(create_middleware(ipcpath)) + if ipcpath != None: + w3.middleware_onion.add(create_middleware(ipcpath)) + w3.eth.personal = w3.geth.personal return w3 diff --git a/crypto_dev_signer/eth/web3ext/middleware.py b/crypto_dev_signer/eth/web3ext/middleware.py index aa47423..d5657c1 100644 --- a/crypto_dev_signer/eth/web3ext/middleware.py +++ b/crypto_dev_signer/eth/web3ext/middleware.py @@ -23,12 +23,13 @@ class PlatformMiddleware: # hack workaround id_seq = -1 re_personal = re.compile('^personal_.*') - ipcaddr = '/tmp/foo.ipc' + ipcaddr = None def __init__(self, make_request, w3): self.w3 = w3 self.make_request = make_request + raise AttributeError('ipcaddr not set') # TODO: understand what format input params come in @@ -51,7 +52,7 @@ class PlatformMiddleware: def __call__(self, method, suspect_params): self.id_seq += 1 - logg.debug('in middleware method {} params {}'.format(method, suspect_params)) + logg.debug('in middleware method {} params {} ipcpath {}'.format(method, suspect_params, self.ipcaddr)) if self.re_personal.match(method) != None: params = PlatformMiddleware._translate_params(suspect_params) diff --git a/crypto_dev_signer/keystore/postgres.py b/crypto_dev_signer/keystore/postgres.py index add6cf6..669d66d 100644 --- a/crypto_dev_signer/keystore/postgres.py +++ b/crypto_dev_signer/keystore/postgres.py @@ -39,6 +39,7 @@ class ReferenceKeystore(Keystore): logg.debug('dsn {}'.format(dsn)) self.conn = psycopg2.connect(make_dsn(dsn)) self.cur = self.conn.cursor() + self.cur.execute(self.schema[0]) self.symmetric_key = kwargs.get('symmetric_key') diff --git a/scripts/crypto-dev-daemon b/scripts/crypto-dev-daemon index c855c39..692b47e 100755 --- a/scripts/crypto-dev-daemon +++ b/scripts/crypto-dev-daemon @@ -28,29 +28,32 @@ socket_path = '/run/crypto-dev-signer/jsonrpc.ipc' argparser = argparse.ArgumentParser() argparser.add_argument('-c', type=str, default=config_dir, help='config file') -argparser.add_argument('--env-prefix', dest='env_prefix', type=str, help='environment prefix for variables to overwrite configuration') +argparser.add_argument('--env-prefix', default=os.environ.get('CONFINI_ENV_PREFIX'), dest='env_prefix', type=str, help='environment prefix for variables to overwrite configuration') argparser.add_argument('-i', type=int, help='default chain id for EIP155') argparser.add_argument('-s', type=str, help='socket path') argparser.add_argument('-v', action='store_true', help='be verbose') argparser.add_argument('-vv', action='store_true', help='be more verbose') args = argparser.parse_args() -config = confini.Config(args.c, args.env_prefix) -config.process() - if args.vv: logging.getLogger().setLevel(logging.DEBUG) elif args.v: logging.getLogger().setLevel(logging.INFO) +config = confini.Config(args.c, args.env_prefix) +config.process() +config.censor('PASSWORD', 'DATABASE') +config.censor('SECRET', 'SIGNER') +logg.debug('config loaded from {}:\n{}'.format(config_dir, config)) + if args.i: chainId = args.i - if args.s: socket_path = args.s elif config.get('SIGNER_SOCKET_PATH'): socket_path = config.get('SIGNER_SOCKET_PATH') + # connect to database dsn = 'postgresql://{}:{}@{}:{}/{}'.format( config.get('DATABASE_USER'), @@ -60,6 +63,10 @@ dsn = 'postgresql://{}:{}@{}:{}/{}'.format( config.get('DATABASE_NAME'), ) +logg.info('using dsn {}'.format(dsn)) +logg.info('using socket {}'.format(socket_path)) + + class MissingSecretError(BaseException): def __init__(self, message): @@ -201,8 +208,6 @@ def init(): kw = { 'symmetric_key': secret, } - #db = ReferenceKeystore(os.environ.get('SIGNER_DATABASE', 'cic_signer'), **kw) - #db = ReferenceKeystore(config.get('SIGNER_DATABASE'), **kw) db = ReferenceKeystore(dsn, **kw) signer = ReferenceSigner(db) diff --git a/setup.py b/setup.py index d695d26..5d64a75 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup setup( name="crypto-dev-signer", - version="0.2.4", + version="0.2.5", description="A signer and keystore daemon and library for cryptocurrency software development", author="Louis Holbrook", author_email="dev@holbrook.no",