mirror of
https://github.com/SickGear/SickGear.git
synced 2024-12-03 18:03:37 +00:00
0d9fbc1ad7
This version of SickBeard uses both TVDB and TVRage to search and gather it's series data from allowing you to now have access to and download shows that you couldn't before because of being locked into only what TheTVDB had to offer. Also this edition is based off the code we used in our XEM editon so it does come with scene numbering support as well as all the other features our XEM edition has to offer. Please before using this with your existing database (sickbeard.db) please make a backup copy of it and delete any other database files such as cache.db and failed.db if present, we HIGHLY recommend starting out with no database files at all to make this a fresh start but the choice is at your own risk! Enjoy!
69 lines
2.5 KiB
Python
69 lines
2.5 KiB
Python
"""A library for integrating pyOpenSSL with CherryPy.
|
|
|
|
The ssl module must be importable for SSL functionality.
|
|
|
|
To use this module, set CherryPyWSGIServer.ssl_adapter to an instance of
|
|
BuiltinSSLAdapter.
|
|
|
|
ssl_adapter.certificate: the filename of the server SSL certificate.
|
|
ssl_adapter.private_key: the filename of the server's private key file.
|
|
"""
|
|
|
|
try:
|
|
import ssl
|
|
except ImportError:
|
|
ssl = None
|
|
|
|
from cherrypy import wsgiserver
|
|
|
|
|
|
class BuiltinSSLAdapter(wsgiserver.SSLAdapter):
|
|
"""A wrapper for integrating Python's builtin ssl module with CherryPy."""
|
|
|
|
def __init__(self, certificate, private_key, certificate_chain=None):
|
|
if ssl is None:
|
|
raise ImportError("You must install the ssl module to use HTTPS.")
|
|
self.certificate = certificate
|
|
self.private_key = private_key
|
|
self.certificate_chain = certificate_chain
|
|
|
|
def bind(self, sock):
|
|
"""Wrap and return the given socket."""
|
|
return sock
|
|
|
|
def wrap(self, sock):
|
|
"""Wrap and return the given socket, plus WSGI environ entries."""
|
|
try:
|
|
s = ssl.wrap_socket(sock, do_handshake_on_connect=True,
|
|
server_side=True, certfile=self.certificate,
|
|
keyfile=self.private_key, ssl_version=ssl.PROTOCOL_SSLv23)
|
|
except ssl.SSLError, e:
|
|
if e.errno == ssl.SSL_ERROR_EOF:
|
|
# This is almost certainly due to the cherrypy engine
|
|
# 'pinging' the socket to assert it's connectable;
|
|
# the 'ping' isn't SSL.
|
|
return None, {}
|
|
elif e.errno == ssl.SSL_ERROR_SSL:
|
|
if e.args[1].endswith('http request'):
|
|
# The client is speaking HTTP to an HTTPS server.
|
|
raise wsgiserver.NoSSLError
|
|
raise
|
|
return s, self.get_environ(s)
|
|
|
|
# TODO: fill this out more with mod ssl env
|
|
def get_environ(self, sock):
|
|
"""Create WSGI environ entries to be merged into each request."""
|
|
cipher = sock.cipher()
|
|
ssl_environ = {
|
|
"wsgi.url_scheme": "https",
|
|
"HTTPS": "on",
|
|
'SSL_PROTOCOL': cipher[1],
|
|
'SSL_CIPHER': cipher[0]
|
|
## SSL_VERSION_INTERFACE string The mod_ssl program version
|
|
## SSL_VERSION_LIBRARY string The OpenSSL program version
|
|
}
|
|
return ssl_environ
|
|
|
|
def makefile(self, sock, mode='r', bufsize= -1):
|
|
return wsgiserver.CP_fileobject(sock, mode, bufsize)
|
|
|