Merge pull request #296 from mdaue/ssl

Add SSL context to server
This commit is contained in:
Raphael Deem 2017-01-19 11:29:07 -08:00 committed by GitHub
commit 4682d7b4b8
3 changed files with 26 additions and 5 deletions

View File

@ -49,6 +49,18 @@ if __name__ == "__main__":
## Installation ## Installation
* `python -m pip install sanic` * `python -m pip install sanic`
## Use SSL
* Optionally pass in an SSLContext:
```
import ssl
certificate = "/path/to/certificate"
keyfile = "/path/to/keyfile"
context = ssl.create_default_context(purpose=ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain(certificate, keyfile=keyfile)
app.run(host="0.0.0.0", port=8443, ssl=context)
```
## Documentation ## Documentation
* [Getting started](docs/getting_started.md) * [Getting started](docs/getting_started.md)
* [Request Data](docs/request_data.md) * [Request Data](docs/request_data.md)

View File

@ -241,9 +241,10 @@ class Sanic:
# -------------------------------------------------------------------- # # -------------------------------------------------------------------- #
def run(self, host="127.0.0.1", port=8000, debug=False, before_start=None, def run(self, host="127.0.0.1", port=8000, debug=False, before_start=None,
after_start=None, before_stop=None, after_stop=None, sock=None, after_start=None, before_stop=None, after_stop=None, ssl=None,
workers=1, loop=None, protocol=HttpProtocol, backlog=100, sock=None, workers=1, loop=None, protocol=HttpProtocol,
stop_event=None): backlog=100, stop_event=None):
""" """
Runs the HTTP Server and listens until keyboard interrupt or term Runs the HTTP Server and listens until keyboard interrupt or term
signal. On termination, drains connections before closing. signal. On termination, drains connections before closing.
@ -258,6 +259,7 @@ class Sanic:
received before it is respected received before it is respected
:param after_stop: Functions to be executed when all requests are :param after_stop: Functions to be executed when all requests are
complete complete
:param ssl: SSLContext for SSL encryption of worker(s)
:param sock: Socket for the server to accept connections from :param sock: Socket for the server to accept connections from
:param workers: Number of processes :param workers: Number of processes
received before it is respected received before it is respected
@ -278,6 +280,7 @@ class Sanic:
'host': host, 'host': host,
'port': port, 'port': port,
'sock': sock, 'sock': sock,
'ssl': ssl,
'debug': debug, 'debug': debug,
'request_handler': self.handle_request, 'request_handler': self.handle_request,
'error_handler': self.error_handler, 'error_handler': self.error_handler,
@ -315,7 +318,11 @@ class Sanic:
log.debug(self.config.LOGO) log.debug(self.config.LOGO)
# Serve # Serve
log.info('Goin\' Fast @ http://{}:{}'.format(host, port)) if ssl is None:
proto = "http"
else:
proto = "https"
log.info('Goin\' Fast @ {}://{}:{}'.format(proto, host, port))
try: try:
if workers == 1: if workers == 1:

View File

@ -247,7 +247,7 @@ def trigger_events(events, loop):
def serve(host, port, request_handler, error_handler, before_start=None, def serve(host, port, request_handler, error_handler, before_start=None,
after_start=None, before_stop=None, after_stop=None, debug=False, after_start=None, before_stop=None, after_stop=None, debug=False,
request_timeout=60, sock=None, request_max_size=None, request_timeout=60, ssl=None, sock=None, request_max_size=None,
reuse_port=False, loop=None, protocol=HttpProtocol, backlog=100): reuse_port=False, loop=None, protocol=HttpProtocol, backlog=100):
""" """
Starts asynchronous HTTP Server on an individual process. Starts asynchronous HTTP Server on an individual process.
@ -265,6 +265,7 @@ def serve(host, port, request_handler, error_handler, before_start=None,
received after it is respected. Takes single argumenet `loop` received after it is respected. Takes single argumenet `loop`
:param debug: Enables debug output (slows server) :param debug: Enables debug output (slows server)
:param request_timeout: time in seconds :param request_timeout: time in seconds
:param ssl: SSLContext
:param sock: Socket for the server to accept connections from :param sock: Socket for the server to accept connections from
:param request_max_size: size in bytes, `None` for no limit :param request_max_size: size in bytes, `None` for no limit
:param reuse_port: `True` for multiple workers :param reuse_port: `True` for multiple workers
@ -297,6 +298,7 @@ def serve(host, port, request_handler, error_handler, before_start=None,
server, server,
host, host,
port, port,
ssl=ssl,
reuse_port=reuse_port, reuse_port=reuse_port,
sock=sock, sock=sock,
backlog=backlog backlog=backlog