Created
February 10, 2017 15:06
-
-
Save ke4roh/3d11ada173c9bc13d0e56d0515b49f0e to your computer and use it in GitHub Desktop.
Circuits Framework SSL web with redirector
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
from circuits import Debugger, BaseComponent, handler | |
from circuits.web import Controller, Server | |
from circuits.web.errors import redirect | |
from urllib.parse import urlparse, urlunparse | |
class Root(Controller): | |
def index(self): | |
return "Hello World!" | |
class RedirectToSecure(BaseComponent): | |
def __init__(self, secure_port, **kwargs): | |
super().__init__(**kwargs) | |
self.secure_port = secure_port | |
@handler("request", priority=0.9) | |
def _on_request(self, event, request, response): | |
if request.uri._scheme == b'http': | |
parts = urlparse(request.uri.utf8()) | |
new_parts = parts._replace(scheme=b'https') | |
if b':' in parts.netloc: | |
(host, port) = parts.netloc.split(b':', 2) | |
else: | |
host = parts.netloc | |
port = None | |
if self.secure_port == 443: | |
port = None | |
else: | |
port = str(self.secure_port).encode('utf-8') | |
if port: | |
new_netloc = b'%s:%s' % (host, port) | |
else: | |
new_netloc = host | |
new_parts = new_parts._replace(netloc=new_netloc) | |
try: | |
return redirect(request, response, (urlunparse(new_parts),), 301) | |
finally: | |
event.stop() | |
app = Server(("0.0.0.0", 8443), secure=True, certfile="cert.pem") + \ | |
Debugger() + Root() + \ | |
Server(8080, channel="onlysecure") + RedirectToSecure(8443, channel="onlysecure") | |
app.run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment