[Python-modules-commits] [python-social-auth] 283/322: Support SSL protocol override, default Amazon to TLSv1. Fixes #603
Wolfgang Borgert
debacle at moszumanska.debian.org
Sat Dec 24 15:13:20 UTC 2016
This is an automated email from the git hooks/post-receive script.
debacle pushed a commit to tag v0.2.10
in repository python-social-auth.
commit 7ff533bce988a2753227c1aa04c31a04d9570bc7
Author: Matías Aguirre <matiasaguirre at gmail.com>
Date: Fri May 1 01:08:48 2015 -0300
Support SSL protocol override, default Amazon to TLSv1. Fixes #603
---
social/backends/amazon.py | 3 +++
social/backends/base.py | 10 +++++++---
social/utils.py | 27 +++++++++++++++++++++++++++
3 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/social/backends/amazon.py b/social/backends/amazon.py
index c97b8a0..2475744 100644
--- a/social/backends/amazon.py
+++ b/social/backends/amazon.py
@@ -2,6 +2,8 @@
Amazon OAuth2 backend, docs at:
http://psa.matiasaguirre.net/docs/backends/amazon.html
"""
+import ssl
+
from social.backends.oauth import BaseOAuth2
@@ -13,6 +15,7 @@ class AmazonOAuth2(BaseOAuth2):
DEFAULT_SCOPE = ['profile']
REDIRECT_STATE = False
ACCESS_TOKEN_METHOD = 'POST'
+ SSL_PROTOCOL = ssl.PROTOCOL_TLSv1
EXTRA_DATA = [
('refresh_token', 'refresh_token', True),
('user_id', 'user_id'),
diff --git a/social/backends/base.py b/social/backends/base.py
index fcb9108..f55e8e3 100644
--- a/social/backends/base.py
+++ b/social/backends/base.py
@@ -1,6 +1,6 @@
from requests import request, ConnectionError
-from social.utils import module_member, parse_qs, user_agent
+from social.utils import SSLHttpAdapter, module_member, parse_qs, user_agent
from social.exceptions import AuthFailed
@@ -13,6 +13,7 @@ class BaseAuth(object):
EXTRA_DATA = None
REQUIRES_EMAIL_VALIDATION = False
SEND_USER_AGENT = False
+ SSL_PROTOCOL = None
def __init__(self, strategy=None, redirect_uri=None):
self.strategy = strategy
@@ -210,12 +211,15 @@ class BaseAuth(object):
kwargs.setdefault('verify', self.setting('VERIFY_SSL'))
kwargs.setdefault('timeout', self.setting('REQUESTS_TIMEOUT') or
self.setting('URLOPEN_TIMEOUT'))
-
if self.SEND_USER_AGENT and 'User-Agent' not in kwargs['headers']:
kwargs['headers']['User-Agent'] = user_agent()
try:
- response = request(method, url, *args, **kwargs)
+ if self.SSL_PROTOCOL:
+ session = SSLHttpAdapter.ssl_adapter_session(self.SSL_PROTOCOL)
+ response = session.request(method, url, *args, **kwargs)
+ else:
+ response = request(method, url, *args, **kwargs)
except ConnectionError as err:
raise AuthFailed(self, str(err))
response.raise_for_status()
diff --git a/social/utils.py b/social/utils.py
index 27982a9..2cd41df 100644
--- a/social/utils.py
+++ b/social/utils.py
@@ -9,6 +9,9 @@ import six
import requests
import social
+from requests.adapters import HTTPAdapter
+from requests.packages.urllib3.poolmanager import PoolManager
+
from social.exceptions import AuthCanceled, AuthUnreachableProvider
from social.p3 import urlparse, urlunparse, urlencode, \
parse_qs as battery_parse_qs
@@ -19,6 +22,30 @@ SETTING_PREFIX = 'SOCIAL_AUTH'
social_logger = logging.Logger('social')
+class SSLHttpAdapter(HTTPAdapter):
+ """"
+ Transport adapter that allows to use any SSL protocol. Based on:
+ http://requests.rtfd.org/latest/user/advanced/#example-specific-ssl-version
+ """
+ def __init__(self, ssl_protocol):
+ self.ssl_protocol = ssl_protocol
+ super(SSLHttpAdapter, self).__init__()
+
+ def init_poolmanager(self, connections, maxsize, block=False):
+ self.poolmanager = PoolManager(
+ num_pools=connections,
+ maxsize=maxsize,
+ block=block,
+ ssl_version=self.ssl_protocol
+ )
+
+ @classmethod
+ def ssl_adapter_session(cls, ssl_protocol):
+ session = requests.Session()
+ session.mount('https://', SSLHttpAdapter(ssl_protocol))
+ return session
+
+
def import_module(name):
__import__(name)
return sys.modules[name]
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-social-auth.git
More information about the Python-modules-commits
mailing list