commit 1cfac928f9c6f0dec327c261afef26486e226c20
parent 9b0773cf2bf139eafe4a828c8964461d34ea9e23
Author: SomberNight <somber.night@protonmail.com>
Date: Mon, 25 Mar 2019 23:36:52 +0100
trustedcoin: longer timeout for server signing
fixes #5221
Diffstat:
4 files changed, 27 insertions(+), 13 deletions(-)
diff --git a/electrum/network.py b/electrum/network.py
@@ -1159,7 +1159,9 @@ class Network(PrintError):
await asyncio.sleep(0.1)
@classmethod
- async def _send_http_on_proxy(cls, method: str, url: str, params: str = None, body: bytes = None, json: dict = None, headers=None, on_finish=None):
+ async def _send_http_on_proxy(cls, method: str, url: str, params: str = None,
+ body: bytes = None, json: dict = None, headers=None,
+ on_finish=None, timeout=None):
async def default_on_finish(resp: ClientResponse):
resp.raise_for_status()
return await resp.text()
@@ -1169,7 +1171,7 @@ class Network(PrintError):
on_finish = default_on_finish
network = cls.get_instance()
proxy = network.proxy if network else None
- async with make_aiohttp_session(proxy) as session:
+ async with make_aiohttp_session(proxy, timeout=timeout) as session:
if method == 'get':
async with session.get(url, params=params, headers=headers) as resp:
return await on_finish(resp)
@@ -1193,7 +1195,8 @@ class Network(PrintError):
else:
loop = asyncio.get_event_loop()
coro = asyncio.run_coroutine_threadsafe(cls._send_http_on_proxy(method, url, **kwargs), loop)
- return coro.result(5)
+ # note: _send_http_on_proxy has its own timeout, so no timeout here:
+ return coro.result()
# methods used in scripts
async def get_peers(self):
diff --git a/electrum/plugins/trustedcoin/qt.py b/electrum/plugins/trustedcoin/qt.py
@@ -67,12 +67,12 @@ class HandlerTwoFactor(QObject, PrintError):
return
window = self.window.top_level_window()
auth_code = self.plugin.auth_dialog(window)
- try:
- wallet.on_otp(tx, auth_code)
- except:
- on_failure(sys.exc_info())
- return
- on_success(tx)
+ WaitingDialog(parent=window,
+ message=_('Waiting for TrustedCoin server to sign transaction...'),
+ task=lambda: wallet.on_otp(tx, auth_code),
+ on_success=lambda *args: on_success(tx),
+ on_error=on_failure)
+
class Plugin(TrustedCoinPlugin):
diff --git a/electrum/plugins/trustedcoin/trustedcoin.py b/electrum/plugins/trustedcoin/trustedcoin.py
@@ -136,7 +136,7 @@ class TrustedCoinCosignerClient(PrintError):
except:
return await resp.text()
- def send_request(self, method, relative_url, data=None):
+ def send_request(self, method, relative_url, data=None, *, timeout=None):
network = Network.get_instance()
if not network:
raise ErrorConnectingServer('You are offline.')
@@ -148,9 +148,17 @@ class TrustedCoinCosignerClient(PrintError):
headers['user-agent'] = self.user_agent
try:
if method == 'get':
- response = Network.send_http_on_proxy(method, url, params=data, headers=headers, on_finish=self.handle_response)
+ response = Network.send_http_on_proxy(method, url,
+ params=data,
+ headers=headers,
+ on_finish=self.handle_response,
+ timeout=timeout)
elif method == 'post':
- response = Network.send_http_on_proxy(method, url, json=data, headers=headers, on_finish=self.handle_response)
+ response = Network.send_http_on_proxy(method, url,
+ json=data,
+ headers=headers,
+ on_finish=self.handle_response,
+ timeout=timeout)
else:
assert False
except TrustedCoinException:
@@ -219,7 +227,8 @@ class TrustedCoinCosignerClient(PrintError):
'otp': otp,
'transaction': transaction
}
- return self.send_request('post', 'cosigner/%s/sign' % quote(id), payload)
+ return self.send_request('post', 'cosigner/%s/sign' % quote(id), payload,
+ timeout=60)
def transfer_credit(self, id, recipient, otp, signature_callback):
"""
diff --git a/electrum/util.py b/electrum/util.py
@@ -953,6 +953,8 @@ def make_aiohttp_session(proxy: Optional[dict], headers=None, timeout=None):
headers = {'User-Agent': 'Electrum'}
if timeout is None:
timeout = aiohttp.ClientTimeout(total=10)
+ elif isinstance(timeout, (int, float)):
+ timeout = aiohttp.ClientTimeout(total=timeout)
ssl_context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, cafile=ca_path)
if proxy: