diff options
| author | tom christie tom@tomchristie.com | 2011-01-24 18:59:23 +0000 |
|---|---|---|
| committer | tom christie tom@tomchristie.com | 2011-01-24 18:59:23 +0000 |
| commit | eff54c00d514e1edd74fbc789f9064d09db40b02 (patch) | |
| tree | 26b1b1fd260cdc9a30f542783a601785314f5b6e /flywheel/authenticators.py | |
| parent | e95198a1c0b206bd3b565bb62d167ada71595099 (diff) | |
| download | django-rest-framework-eff54c00d514e1edd74fbc789f9064d09db40b02.tar.bz2 | |
Added authenicators. Awesome.
Diffstat (limited to 'flywheel/authenticators.py')
| -rw-r--r-- | flywheel/authenticators.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/flywheel/authenticators.py b/flywheel/authenticators.py new file mode 100644 index 00000000..8de182de --- /dev/null +++ b/flywheel/authenticators.py @@ -0,0 +1,44 @@ +from django.contrib.auth import authenticate +import base64 + +class BaseAuthenticator(object): + """All authenticators should extend BaseAuthenticator.""" + + def __init__(self, resource): + """Initialise the authenticator with the Resource instance as state, + in case the authenticator needs to access any metadata on the Resource object.""" + self.resource = resource + + def authenticate(self, request): + """Authenticate the request and return the authentication context or None. + + The default permission checking on Resource will use the allowed_methods attribute + for permissions if the authentication context is not None, and use anon_allowed_methods otherwise. + + The authentication context is passed to the method calls eg Resource.get(request, auth) in order to + allow them to apply any more fine grained permission checking at the point the response is being generated. + + This function must be overridden to be implemented.""" + return None + + +class BasicAuthenticator(BaseAuthenticator): + """Use HTTP Basic authentication""" + def authenticate(self, request): + if 'HTTP_AUTHORIZATION' in request.META: + auth = request.META['HTTP_AUTHORIZATION'].split() + if len(auth) == 2 and auth[0].lower() == "basic": + uname, passwd = base64.b64decode(auth[1]).split(':') + user = authenticate(username=uname, password=passwd) + if user is not None and user.is_active: + return user + return None + + +class UserLoggedInAuthenticator(BaseAuthenticator): + """Use Djagno's built-in request session for authentication.""" + def authenticate(self, request): + if request.user and request.user.is_active: + return request.user + return None + |
