Skip to content

Instantly share code, notes, and snippets.

@shawa
Created November 21, 2018 09:39
Show Gist options
  • Save shawa/6701985979b4ab1377a77ae3deb27b9a to your computer and use it in GitHub Desktop.
Save shawa/6701985979b4ab1377a77ae3deb27b9a to your computer and use it in GitHub Desktop.
#!/usr/bin/env python2
import BaseHTTPServer
import SimpleHTTPServer
import SocketServer
import socket
import ssl
import threading
import time
from os.path import expanduser
HOSTNAME = socket.gethostname()
SERVER_DOMAIN = '0.0.0.0'
HTTPS_PORT = 443
HTTP_PORT = 80
SSL_WORK_DIR = expanduser('~') + '/.local/var/ssl'
class ThreadingHTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):
pass
class RedirectHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_HEAD(self):
self.send_response(301)
self.send_header('Location', 'https://' + HOSTNAME)
self.end_headers()
def do_GET(self):
self.do_HEAD()
def listen_http():
server = ThreadingHTTPServer((SERVER_DOMAIN, HTTP_PORT),
RedirectHandler)
server.serve_forever()
def listen_https():
server = ThreadingHTTPServer((SERVER_DOMAIN, HTTPS_PORT),
SimpleHTTPServer.SimpleHTTPRequestHandler)
server.socket = ssl.wrap_socket(server.socket,
certfile=SSL_WORK_DIR + '/cert.pem',
keyfile=SSL_WORK_DIR + '/key.pem',
server_side=True)
server.serve_forever()
def main():
for target in (listen_http, listen_https):
thread = threading.Thread(target=target)
thread.daemon = True
thread.start()
while True:
time.sleep(5)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment