commit becd6744f6b628c819590ffdd49d9c19081351f3
parent 06c6b2562ad0dd631dd8b297bf2b20f7d63a9884
Author: nolash <dev@holbrook.no>
Date:   Mon,  6 Dec 2021 18:55:36 +0100
Add option to skip ssl validation on rpc
Diffstat:
6 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
@@ -1,4 +1,6 @@
-- 0.0.5-pending
+- 0.0.14
+	* Add option to skip ssl verification on rpc
+- 0.0.5
 	* Move eth code to separate package
 - 0.0.4-unreleased
 	* Add pack tx from already signed tx struct
diff --git a/chainlib/chain.py b/chainlib/chain.py
@@ -186,10 +186,17 @@ class ChainSpec:
         return r
 
 
-    def __str__(self):
+    def as_string(self, skip_optional=False):
         s = '{}:{}:{}'.format(self.o['arch'], self.o['fork'], self.o['network_id'])
+        if skip_optional:
+            return s
+
         if self.o.get('common_name'):
             s += ':' + self.o['common_name']
         if self.o.get('custom'):
             s += ':' + ':'.join(self.o['custom'])
         return s
+
+
+    def __str__(self):
+        return self.as_string()        
diff --git a/chainlib/cli/rpc.py b/chainlib/cli/rpc.py
@@ -61,7 +61,7 @@ class Rpc:
             self.id_generator = IntSequenceGenerator()
 
         self.chain_spec = config.get('CHAIN_SPEC')
-        self.conn = self.constructor(url=config.get('RPC_PROVIDER'), chain_spec=self.chain_spec, auth=auth)
+        self.conn = self.constructor(url=config.get('RPC_PROVIDER'), chain_spec=self.chain_spec, auth=auth, verify_identity=config.true('RPC_VERIFY'))
 
         return self.conn
 
diff --git a/chainlib/connection.py b/chainlib/connection.py
@@ -102,10 +102,13 @@ class RPCConnection:
         }
     __constructors_for_chains = {}
 
-    def __init__(self, url=None, chain_spec=None, auth=None):
+    def __init__(self, url=None, chain_spec=None, auth=None, verify_identity=True):
         self.chain_spec = chain_spec
         self.location = None
         self.basic = None
+        self.verify_identity = verify_identity
+        if not self.verify_identity:
+            logg.warning('RPC host identity verification is OFF. Beware, you will be easy to cheat')
         if url == None:
             return
         self.auth = auth
@@ -287,6 +290,11 @@ class JSONRPCHTTPConnection(HTTPConnection):
         :returns: Result value part of JSON RPC response
         :todo: Invalid response exception from invalid json response
         """
+        ssl_ctx = None
+        if not self.verify_identity:
+            import ssl
+            ssl_ctx = ssl.SSLContext()
+            ssl_ctx.verify_mode = ssl.CERT_NONE
         req = Request(
                 self.location,
                 method='POST',
@@ -313,7 +321,11 @@ class JSONRPCHTTPConnection(HTTPConnection):
             install_opener(ho)
 
         try: 
-            r = urlopen(req, data=data.encode('utf-8'))
+            r = urlopen(
+                req,
+                data=data.encode('utf-8'),
+                context=ssl_ctx,
+                )
         except URLError as e:
             raise RPCException(e)
 
diff --git a/chainlib/data/config/config.ini b/chainlib/data/config/config.ini
@@ -4,6 +4,7 @@ auth =
 credentials =
 dialect = default
 scheme = http
+verify = 1
 
 [chain]
 spec = 
diff --git a/setup.cfg b/setup.cfg
@@ -6,7 +6,7 @@ name=chainlib
 license=WTFPL2
 author_email=dev@holbrook.no
 description=Generic blockchain access library and tooling
-version=0.0.12
+version=0.0.14
 url=https://gitlab.com/chaintools/chainlib
 author=Louis Holbrook