From 95cbec78665fea9689482e7ae95d13f5fcb9c0a6 Mon Sep 17 00:00:00 2001 From: Marius Kriegerowski Date: Fri, 12 Jan 2018 12:15:30 +0100 Subject: [PATCH] Basic authentication for HttpAdapter --- docs/adapters.rst | 7 +++++++ iota/adapter/__init__.py | 8 ++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/adapters.rst b/docs/adapters.rst index 7551d729..d960665e 100644 --- a/docs/adapters.rst +++ b/docs/adapters.rst @@ -44,6 +44,13 @@ HttpAdapter api = Iota('https://service.iotasupport.com:14265') api = Iota(HttpAdapter('https://service.iotasupport.com:14265')) + # Use HTTP with basic authentication and custom timeout: + api = Iota(HttpAdapter( + url='http://localhost:14265', + authentication=('username', 'longandsecureIRIpassword'), + timeout=60.)) + + ``HttpAdapter`` uses the HTTP protocol to send requests to the node. To configure an ``Iota`` instance to use ``HttpAdapter``, specify an diff --git a/iota/adapter/__init__.py b/iota/adapter/__init__.py index 0559e1b2..c84203ca 100644 --- a/iota/adapter/__init__.py +++ b/iota/adapter/__init__.py @@ -10,7 +10,7 @@ from socket import getdefaulttimeout as get_default_timeout from typing import Container, Dict, List, Optional, Text, Tuple, Union -from requests import Response, codes, request +from requests import Response, codes, request, auth from six import PY2, binary_type, iteritems, moves as compat, text_type, \ with_metaclass @@ -223,11 +223,12 @@ class HttpAdapter(BaseAdapter): in the ``headers`` kwarg. """ - def __init__(self, uri, timeout=None): + def __init__(self, uri, timeout=None, authentication=None): # type: (Union[Text, SplitResult], Optional[int]) -> None super(HttpAdapter, self).__init__() self.timeout = timeout + self.authentication = authentication if isinstance(uri, text_type): uri = compat.urllib_parse.urlsplit(uri) # type: SplitResult @@ -314,6 +315,9 @@ def _send_http_request(self, url, payload, method='post', **kwargs): default_timeout = self.timeout if self.timeout else get_default_timeout() kwargs.setdefault('timeout', default_timeout) + if self.authentication: + kwargs.setdefault('auth', auth.HTTPBasicAuth(*self.authentication)) + self._log( level = DEBUG,