1.1 --- a/WebStack/Adapters/BaseHTTPRequestHandler.py Sun Feb 29 00:04:53 2004 +0000
1.2 +++ b/WebStack/Adapters/BaseHTTPRequestHandler.py Sun Feb 29 00:05:02 2004 +0000
1.3 @@ -11,28 +11,36 @@
1.4
1.5 "A factory class creating WebStack dispatcher objects."
1.6
1.7 - def __init__(self, resource):
1.8 + def __init__(self, resource, authenticator=None):
1.9
1.10 - "Initialise the root application-specific 'resource'."
1.11 + """
1.12 + Initialise the root application-specific 'resource' and optional
1.13 + 'authenticator'.
1.14 + """
1.15
1.16 self.webstack_resource = resource
1.17 + self.webstack_authenticator = authenticator
1.18
1.19 def __call__(self, request, client_address, server):
1.20
1.21 "Act as a factory for the server objects."
1.22
1.23 - handler = Handler(request, client_address, server, self.webstack_resource)
1.24 + handler = Handler(request, client_address, server, self.webstack_resource,
1.25 + self.webstack_authenticator)
1.26 return handler
1.27
1.28 class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
1.29
1.30 "A class dispatching requests to WebStack resources."
1.31
1.32 - def __init__(self, request, client_address, server, resource):
1.33 + def __init__(self, request, client_address, server, resource, authenticator):
1.34
1.35 - "Initialise the root application-specific 'resource'."
1.36 + """
1.37 + Initialise the root application-specific 'resource' and 'authenticator'.
1.38 + """
1.39
1.40 self.webstack_resource = resource
1.41 + self.webstack_authenticator = authenticator
1.42 BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, request, client_address, server)
1.43
1.44 def handle(self):
1.45 @@ -46,7 +54,13 @@
1.46 return
1.47
1.48 trans = WebStack.BaseHTTPRequestHandler.Transaction(self)
1.49 - self.webstack_resource.respond(trans)
1.50 + if self.webstack_authenticator is None or self.webstack_authenticator.authenticate(trans):
1.51 + self.webstack_resource.respond(trans)
1.52 + else:
1.53 + trans.set_response_code(401) # Unauthorized
1.54 + trans.set_header_value("WWW-Authenticate", '%s realm="%s"' % (
1.55 + self.webstack_authenticator.get_auth_type(), self.webstack_authenticator.get_realm()))
1.56 +
1.57 trans.commit()
1.58
1.59 # vim: tabstop=4 expandtab shiftwidth=4