diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2012-03-09 09:02:09 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2012-03-09 09:02:09 (GMT) |
commit | 7d12d64605cb73b228af7dde83ec6e0f35dd2d17 (patch) | |
tree | a4ba1d4b847cc9d04a130f0828271364edf95536 | |
parent | 39b1be762bb99f4f6186001840761d1ef6d0bfa4 (diff) |
Authenticate all non-GET requests
-rw-r--r-- | restful_document/__init__.py | 4 | ||||
-rw-r--r-- | restful_document/env.py | 11 | ||||
-rw-r--r-- | restful_document/router.py | 2 |
3 files changed, 13 insertions, 4 deletions
diff --git a/restful_document/__init__.py b/restful_document/__init__.py index 7c40f2b..430170d 100644 --- a/restful_document/__init__.py +++ b/restful_document/__init__.py @@ -30,4 +30,6 @@ from restful_document.user import \ from restful_document.env import \ principal, request, responce, \ - HTTPError, BadRequest, Unauthorized, Forbidden, NotFound + HTTPError, BadRequest, Unauthorized, Forbidden, NotFound, \ + host, port, debug, foreground, logdir, rundir, trust_users, \ + keyfile, certfile, master diff --git a/restful_document/env.py b/restful_document/env.py index 55db466..306c218 100644 --- a/restful_document/env.py +++ b/restful_document/env.py @@ -175,10 +175,11 @@ class Request(threading.local): return result def __getitem__(self, key): + enforce(self.environ, KeyError) return self.environ.get('HTTP_%s' % key.upper()) def __contains__(self, key): - return ('HTTP_%s' % key.upper()) in self.environ + return self.environ and (('HTTP_%s' % key.upper()) in self.environ) class Responce(threading.local): @@ -217,8 +218,12 @@ class Principal(threading.local): @property def user(self): + self.authenticate() + return self._user + + def authenticate(self): if self._user is not None: - return self._user + return enforce('sugar_user' in request and 'sugar_user_signature' in request, Unauthorized, _('Sugar user credentials were not specified')) signature = request['sugar_user_signature'] @@ -227,7 +232,7 @@ class Principal(threading.local): from restful_document.user import User User.verify(request['sugar_user'], signature) user = self._cache[signature] = request['sugar_user'] - return user + self._user = user request = Request() diff --git a/restful_document/router.py b/restful_document/router.py index c143a9b..ab95f26 100644 --- a/restful_document/router.py +++ b/restful_document/router.py @@ -50,6 +50,8 @@ class Router(object): enforce(method is not None and \ method.method == env.request.method, env.BadRequest, _('No way to handle the request')) + if method.method != 'GET': + env.principal.authenticate() result = method() except Exception, error: |