summaryrefslogtreecommitdiff
path: root/repoze/bfg/authentication.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-05-27 04:52:51 +0000
committerChris McDonough <chrism@agendaless.com>2009-05-27 04:52:51 +0000
commita1a9fb7128c935848b17c0ce6586991098a17f07 (patch)
tree5160f28be92202033c693caa335f8b9cda3c6379 /repoze/bfg/authentication.py
parent08ead74d05e25f58c83712f6f8651484ddc983d0 (diff)
downloadpyramid-a1a9fb7128c935848b17c0ce6586991098a17f07.tar.gz
pyramid-a1a9fb7128c935848b17c0ce6586991098a17f07.tar.bz2
pyramid-a1a9fb7128c935848b17c0ce6586991098a17f07.zip
Merge authchanges branch to trunk.
Diffstat (limited to 'repoze/bfg/authentication.py')
-rw-r--r--repoze/bfg/authentication.py86
1 files changed, 86 insertions, 0 deletions
diff --git a/repoze/bfg/authentication.py b/repoze/bfg/authentication.py
new file mode 100644
index 000000000..487a5e6a8
--- /dev/null
+++ b/repoze/bfg/authentication.py
@@ -0,0 +1,86 @@
+from zope.interface import implements
+from repoze.bfg.interfaces import IAuthenticationPolicy
+from repoze.bfg.security import Everyone
+from repoze.bfg.security import Authenticated
+
+class RepozeWho1AuthenticationPolicy(object):
+ """ A BFG authentication policy which obtains data from the
+ repoze.who 1.X WSGI API """
+ implements(IAuthenticationPolicy)
+ identifier_name = 'auth_tkt'
+
+ def _get_identity(self, request):
+ return request.environ.get('repoze.who.identity')
+
+ def _get_identifier(self, request):
+ plugins = request.environ.get('repoze.who.plugins')
+ if plugins is None:
+ return None
+ identifier = plugins[self.identifier_name]
+ return identifier
+
+ def authenticated_userid(self, context, request):
+ identity = self._get_identity(request)
+ if identity is None:
+ return None
+ return identity['repoze.who.userid']
+
+ def effective_principals(self, context, request):
+ effective_principals = [Everyone]
+ identity = self._get_identity(request)
+ if identity is None:
+ return effective_principals
+
+ effective_principals.append(Authenticated)
+ userid = identity['repoze.who.userid']
+ groups = identity.get('groups', [])
+ effective_principals.append(userid)
+ effective_principals.extend(groups)
+
+ return effective_principals
+
+ def remember(self, context, request, principal, **kw):
+ identifier = self._get_identifier(request)
+ if identifier is None:
+ return []
+ environ = request.environ
+ identity = {'repoze.who.userid':principal}
+ return identifier.remember(environ, identity)
+
+ def forget(self, context, request):
+ identifier = self._get_identifier(request)
+ if identifier is None:
+ return []
+ identity = self._get_identity(request)
+ return identifier.forget(request.environ, identity)
+
+class RemoteUserAuthenticationPolicy(object):
+ """ A BFG authentication policy which obtains data from the
+ REMOTE_USER WSGI envvar """
+ implements(IAuthenticationPolicy)
+
+ def _get_identity(self, request):
+ return request.environ.get('REMOTE_USER')
+
+ def authenticated_userid(self, context, request):
+ identity = self._get_identity(request)
+ if identity is None:
+ return None
+ return identity
+
+ def effective_principals(self, context, request):
+ effective_principals = [Everyone]
+ identity = self._get_identity(request)
+ if identity is None:
+ return effective_principals
+
+ effective_principals.append(Authenticated)
+ effective_principals.append(identity)
+
+ return effective_principals
+
+ def remember(self, context, request, principal, **kw):
+ return []
+
+ def forget(self, context, request):
+ return []