Skip to content

Instantly share code, notes, and snippets.

@d-schmidt
Forked from fxsjy/SimpleAuthServer.py
Last active May 3, 2019 19:36
Show Gist options
  • Save d-schmidt/116dae8879fd5d4a36c51f0422972b20 to your computer and use it in GitHub Desktop.
Save d-schmidt/116dae8879fd5d4a36c51f0422972b20 to your computer and use it in GitHub Desktop.
SimpleAuthServer: A IPv6 Python 3 SimpleHTTPServer with authentication
import base64
from http.server import HTTPServer
from http.server import SimpleHTTPRequestHandler
import socket
key = base64.b64encode(b"user:password")
class HTTPServerV6(HTTPServer):
address_family = socket.AF_INET6
class AuthHandler(SimpleHTTPRequestHandler):
''' Main class to present webpages and authentication. '''
def do_HEAD(self):
print("send header")
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_AUTHHEAD(self):
print("send header")
self.send_response(401)
self.send_header('WWW-Authenticate', 'Basic realm=\"Test\"')
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self):
global key
''' Present frontpage with user authentication. '''
if self.headers.get('Authorization') == None:
self.do_AUTHHEAD()
self.wfile.write('no auth header received')
elif self.headers.get('Authorization') == 'Basic '+key.decode():
super().do_GET()
else:
self.do_AUTHHEAD()
self.wfile.write(self.headers.get('Authorization'))
self.wfile.write('not authenticated')
server = HTTPServerV6(('::', 8080), AuthHandler)
server.serve_forever()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment