##// END OF EJS Templates
Preliminary prep. for possible future tests: mini-script which...
Marcin Kasperski -
r244:fda0e685 default
parent child Browse files
Show More
@@ -0,0 +1,2 b''
1 [paths]
2 / = ../../../*
@@ -0,0 +1,58 b''
1 # Extended version of Mercurial WSGI wrapper, adding
2 # some minimal HTTP auth.
3
4 from base64 import b64decode
5 from wsgiref.simple_server import make_server
6 from mercurial import demandimport; demandimport.enable()
7 from mercurial.hgweb import hgweb
8
9 PORT = 8080
10 CONFIG_PATH = 'auth_hg_serve.cfg'
11
12
13 class TrivialAuth(object):
14 """Authorizes if user==password + user starts from abc"""
15
16 def __init__(self, application):
17 self.application = application
18
19 def __call__(self, environ, start_response):
20 if self.is_authenticated(environ.get('HTTP_AUTHORIZATION')):
21 return self.application(environ, start_response)
22 return self.password_prompt(environ, start_response)
23
24 def is_authenticated(self, header):
25 if not header:
26 return False
27 _, encoded = header.split(None, 1)
28 decoded = b64decode(encoded).decode('utf-8')
29 username, password = decoded.split(':', 1)
30 return username == password and username.startswith("abc")
31
32 def password_prompt(self, environ, start_response):
33 start_response(
34 '401 Authentication Required',
35 [
36 ('Content-Type', 'text/html'),
37 ('WWW-Authenticate', 'Basic realm="HGLogin"'),
38 ])
39 return [b'Please login']
40
41
42 def dummy_app(environ, start_response):
43 start_response('200 OK', [('Content-Type', 'text/html')])
44 return [b'Hello, world!']
45
46
47 if __name__ == '__main__':
48 # httpd = make_server('', PORT, TrivialAuth(dummy_app))
49
50 httpd = make_server('', PORT, TrivialAuth(hgweb(CONFIG_PATH)))
51 # application = hgweb(config_path)
52
53 # httpd = make_server('', 8080, TrivialAuth(application))
54 print('Serving on port 8080...')
55 try:
56 httpd.serve_forever()
57 except KeyboardInterrupt:
58 pass
General Comments 0
You need to be logged in to leave comments. Login now