Instantly share code, notes, and snippets.

Embed
What would you like to do?
SimpleAuthServer: A SimpleHTTPServer with authentication
import BaseHTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
import sys
import base64
key = ""
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.getheader('Authorization') == None:
self.do_AUTHHEAD()
self.wfile.write('no auth header received')
pass
elif self.headers.getheader('Authorization') == 'Basic '+key:
SimpleHTTPRequestHandler.do_GET(self)
pass
else:
self.do_AUTHHEAD()
self.wfile.write(self.headers.getheader('Authorization'))
self.wfile.write('not authenticated')
pass
def test(HandlerClass = AuthHandler,
ServerClass = BaseHTTPServer.HTTPServer):
BaseHTTPServer.test(HandlerClass, ServerClass)
if __name__ == '__main__':
if len(sys.argv)<3:
print "usage SimpleAuthServer.py [port] [username:password]"
sys.exit()
key = base64.b64encode(sys.argv[2])
test()
@rubo77

This comment has been minimized.

Show comment
Hide comment
@rubo77

rubo77 Jan 29, 2016

This works perfect. Can you migrate this to github and add two more features?

  • a definable stylesheet to the options
  • UTF-8 support

rubo77 commented Jan 29, 2016

This works perfect. Can you migrate this to github and add two more features?

  • a definable stylesheet to the options
  • UTF-8 support
@voltagex

This comment has been minimized.

Show comment
Hide comment
@voltagex

voltagex Mar 31, 2016

@rubo77 I can, contact me for my hourly rates.

voltagex commented Mar 31, 2016

@rubo77 I can, contact me for my hourly rates.

@dawsonpaul

This comment has been minimized.

Show comment
Hide comment
@dawsonpaul

dawsonpaul May 13, 2016

Any chance you can wrap an https server socket around it?

import BaseHTTPServer, SimpleHTTPServer
import ssl

httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket (httpd.socket, certfile='path/to/localhost.pem', server_side=True)
httpd.serve_forever()

dawsonpaul commented May 13, 2016

Any chance you can wrap an https server socket around it?

import BaseHTTPServer, SimpleHTTPServer
import ssl

httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket (httpd.socket, certfile='path/to/localhost.pem', server_side=True)
httpd.serve_forever()

@goya191

This comment has been minimized.

Show comment
Hide comment
@goya191

goya191 Jul 29, 2016

I have extended the server to use SSL and imported it to github
https://github.com/goya191/SimpleAuthServerSSL.py

goya191 commented Jul 29, 2016

I have extended the server to use SSL and imported it to github
https://github.com/goya191/SimpleAuthServerSSL.py

@tamberg

This comment has been minimized.

Show comment
Hide comment
@tamberg

tamberg Oct 31, 2016

Hi Sun, would you mind to add a open source license to this example? Ideally something liberal like MIT or Apache 2.

tamberg commented Oct 31, 2016

Hi Sun, would you mind to add a open source license to this example? Ideally something liberal like MIT or Apache 2.

@tianhuil

This comment has been minimized.

Show comment
Hide comment
@tianhuil

tianhuil Jun 6, 2017

Here's a version that's pip installable https://github.com/tianhuil/SimpleHTTPAuthServer and freely licensable version or just run:

Installation

pip install git+git://github.com/tianhuil/SimpleHTTPAuthServer.git@master

Usage

python -m SimpleHTTPAuthServer -h

tianhuil commented Jun 6, 2017

Here's a version that's pip installable https://github.com/tianhuil/SimpleHTTPAuthServer and freely licensable version or just run:

Installation

pip install git+git://github.com/tianhuil/SimpleHTTPAuthServer.git@master

Usage

python -m SimpleHTTPAuthServer -h
@Cristy94

This comment has been minimized.

Show comment
Hide comment
@Cristy94

Cristy94 Nov 9, 2017

How do you stop it? :D

Cristy94 commented Nov 9, 2017

How do you stop it? :D

@tatethurston

This comment has been minimized.

Show comment
Hide comment
@tatethurston

tatethurston Mar 14, 2018

This is great, thank you!

tatethurston commented Mar 14, 2018

This is great, thank you!

@zukkie777

This comment has been minimized.

Show comment
Hide comment
@zukkie777

zukkie777 Sep 24, 2018

Please let me know the update schedule, from python2 to python3.

When will it be updated?

zukkie777 commented Sep 24, 2018

Please let me know the update schedule, from python2 to python3.

When will it be updated?

@zukkie777

This comment has been minimized.

Show comment
Hide comment
@zukkie777

zukkie777 Sep 24, 2018

I updated to python 3 but it is not handled properly,
(Updated using 2to3.)

Traceback (most recent call last):
   File "SimpleAuthServer.py", line 41, in
     key = base64.b64encode (sys.argv [2])
   File "/opt/rh/rh-python36/root/usr/lib64/python3.6/base64.py", line 58, in b64encode
     encoded = binascii.b2a_base64 (s, newline = False)
TypeError: a bytes-like object is required, not 'str'

zukkie777 commented Sep 24, 2018

I updated to python 3 but it is not handled properly,
(Updated using 2to3.)

Traceback (most recent call last):
   File "SimpleAuthServer.py", line 41, in
     key = base64.b64encode (sys.argv [2])
   File "/opt/rh/rh-python36/root/usr/lib64/python3.6/base64.py", line 58, in b64encode
     encoded = binascii.b2a_base64 (s, newline = False)
TypeError: a bytes-like object is required, not 'str'

@fmakawa

This comment has been minimized.

Show comment
Hide comment
@fmakawa

fmakawa Oct 1, 2018

Here's a version that's pip installable https://github.com/tianhuil/SimpleHTTPAuthServer and freely licensable version or just run:

Installation

pip install git+git://github.com/tianhuil/SimpleHTTPAuthServer.git@master

Usage

python -m SimpleHTTPAuthServer -h

how would this work with multiple user names and passwords?

fmakawa commented Oct 1, 2018

Here's a version that's pip installable https://github.com/tianhuil/SimpleHTTPAuthServer and freely licensable version or just run:

Installation

pip install git+git://github.com/tianhuil/SimpleHTTPAuthServer.git@master

Usage

python -m SimpleHTTPAuthServer -h

how would this work with multiple user names and passwords?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment