diff options
Diffstat (limited to 'redis/connection.py')
-rwxr-xr-x[-rw-r--r--] | redis/connection.py | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/redis/connection.py b/redis/connection.py index 2272133..09a40b5 100644..100755 --- a/redis/connection.py +++ b/redis/connection.py @@ -8,6 +8,14 @@ import sys import threading import warnings +try: + import ssl + ssl_available = True + ssl_cert_reqs = ssl.CERT_NONE +except ImportError: + ssl_available = False + ssl_cert_reqs = 0 + from redis._compat import (b, xrange, imap, byte_to_chr, unicode, bytes, long, BytesIO, nativestr, basestring, iteritems, LifoQueue, Empty, Full, urlparse, parse_qs) @@ -427,7 +435,7 @@ class Connection(object): return "Error connecting to %s:%s. %s." % \ (self.host, self.port, exception.args[0]) else: - return "Error %s connecting %s:%s. %s." % \ + return "Error %s connecting to %s:%s. %s." % \ (exception.args[0], self.host, self.port, exception.args[1]) def on_connect(self): @@ -550,6 +558,30 @@ class Connection(object): return output +class SSLConnection(Connection): + description_format = "SSLConnection<host=%(host)s,port=%(port)s,db=%(db)s>" + + def __init__(self, keyfile=None, certfile=None, cert_reqs=ssl_cert_reqs, + ca_certs=None, **kwargs): + if not ssl_available: + raise RedisError("") + super(SSLConnection, self).__init__(**kwargs) + self.keyfile = keyfile + self.certfile = certfile + self.cert_reqs = cert_reqs + self.ca_certs = ca_certs + + def _connect(self): + "Wrap the socket with SSL support" + sock = super(SSLConnection, self)._connect() + sock = ssl.wrap_socket(sock, + cert_reqs=self.cert_reqs, + keyfile=self.keyfile, + certfile=self.certfile, + ca_certs=self.ca_certs) + return sock + + class UnixDomainSocketConnection(Connection): description_format = "UnixDomainSocketConnection<path=%(path)s,db=%(db)s>" |