Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2012-03-09 09:02:09 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2012-03-09 09:02:09 (GMT)
commit7d12d64605cb73b228af7dde83ec6e0f35dd2d17 (patch)
treea4ba1d4b847cc9d04a130f0828271364edf95536
parent39b1be762bb99f4f6186001840761d1ef6d0bfa4 (diff)
Authenticate all non-GET requests
-rw-r--r--restful_document/__init__.py4
-rw-r--r--restful_document/env.py11
-rw-r--r--restful_document/router.py2
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: