| Index: sitescripts/web.py |
| =================================================================== |
| --- a/sitescripts/web.py |
| +++ b/sitescripts/web.py |
| @@ -4,7 +4,11 @@ |
| # version 2.0 (the "License"). You can obtain a copy of the License at |
| # http://mozilla.org/MPL/2.0/. |
| +import base64 |
| +from sitescripts.utils import get_config |
| + |
| handlers = {} |
| +authenticated_users = {} |
| def url_handler(url): |
| def decorator(func): |
| @@ -17,8 +21,29 @@ |
| raise Exception('A handler for url %s is already registered' % url) |
| handlers[url] = func |
| +def basic_auth(f): |
|
Wladimir Palant
2012/09/27 07:34:17
This should accept an optional config_section para
Felix Dahlke
2012/09/27 09:26:24
Done. Somehow thought authenticate was used direct
|
| + return lambda environ, start_response: authenticate(f, environ, start_response) |
| + |
| +def authenticate(f, environ, start_response, config_section = "DEFAULT"): |
| + if "HTTP_AUTHORIZATION" in environ: |
| + auth = environ["HTTP_AUTHORIZATION"].split() |
| + if len(auth) == 2: |
| + if auth[0].lower() == "basic": |
| + username, password = base64.b64decode(auth[1]).split(":") |
| + config = get_config() |
| + expected_username = config.get(config_section, "basic_auth_username") |
| + expected_password = config.get(config_section, "basic_auth_password") |
| + if username == expected_username and password == expected_password: |
| + return f(environ, start_response) |
| + |
| + realm = get_config().get("DEFAULT", "basic_auth_realm") |
| + start_response("401 UNAUTHORIZED", |
| + [("WWW-Authenticate", 'Basic realm="%s"' % realm)]) |
| + return "" |
| + |
| import openid.web.server |
| import subscriptions.web.fallback |
| +import crashes.web.submitCrash |
| import reports.web.submitReport |
| import reports.web.updateReport |
| import reports.web.showDigest |